Simplygon 使用笔记2

embedded/2024/10/10 13:36:59/

本文主收集一些实质开发中的一些问题, 大部分时候只能通过文档, 从个别的描述中找到问题的解决方法, 而这里希望能提供一些关键字, 方便具体的问题的分析

1. 怎么从spMaterial 材质中找到对应贴图的名字

  • 这个可能通过获取该GetShadingNetwork的方式获取
  • 但问题是network可能是很多节点组成,可以通过遍历所有的节点方式获取
  • 代码示例:
static string GetTextureName(Simplygon.spMaterial material){var rootNode = material.GetShadingNetwork("Diffuse");if (rootNode == null)return null;var nodeStack = new System.Collections.Generic.Stack<Simplygon.spShadingNode>();nodeStack.Push(rootNode);while (nodeStack.Count > 0){var curNode = nodeStack.Pop();if (curNode.GetName() == "ShadingTextureNode"){var texNode = Simplygon.spShadingTextureNode.SafeCast(curNode);if (texNode != null){return texNode.GetTextureName();}}else if (curNode.GetName() == "ShadingMultiplyNode"){var multiNode = Simplygon.spShadingMultiplyNode.SafeCast(curNode);if (multiNode != null){nodeStack.Push(multiNode.GetInput(0));nodeStack.Push(multiNode.GetInput(1));}}}return null;}

2. 报告错误: “vkDestroySampler: Invalid device [VUID-vkDestroySampler-device-parameter]”

  • 输入的贴图是vulkan不支持的格式
  • 输入的贴图的路径找不到

3. 生成的法线不正确

  • 需要从原始的空间再转到减面的空间
  • Simpygon提供了生成目标的sg_DestinationTangent, sg_DestinationBitangent, sg_DestinationNormal等,可以利用这些值进行转换
  • 这里使用Computer Caster进行转化, 例如
float4 NRMToDestinySpace(float4 nrm, float3 tangent, float3 bitangent, float3 normal,float3 sg_DestinationTangent, float3 sg_DestinationBitangent, float3 sg_DestinationNormal
)
{float  rough;float  metal;float3 n_ts;unpackNRM(nrm, 1.0, rough, metal, n_ts);float3 objSpaceNormal =n_ts.x * normalize(tangent) +n_ts.y * normalize(bitangent) +n_ts.z * normalize(normal);n_ts.x = dot(objSpaceNormal, normalize(sg_DestinationTangent));n_ts.y = dot(objSpaceNormal, normalize(sg_DestinationBitangent));n_ts.z = dot(objSpaceNormal, normalize(sg_DestinationNormal));n_ts = normalize(n_ts);return packNRM(n_ts, rough, metal);}

4. 报错误 pico::render::Image::CreateVkImage()

  • 具体报错内容 pico::render::Image::CreateVkImage(): Call: vmaCreateImage( vulkanDevice->GetMemoryAllocator(), &vkCreateImageInfo, &allocationCreateInfo, &vkImage, &vmaAllocation, nullptr ) failed, returned status_code: vulkan_initialization_failed (“Vulkan error code VkResult::VK_ERROR_INITIALIZATION_FAILED”)
  • 这大概率使用了较低分辨率的贴图,8像素以上貌似没有问题

5. SceneNode设置的位置总是不对?

  • 这个问题主要是因为导出格式的单位与Simplygon使用不一样, 例如Unity导出的FBX单位是米,但Simplygon里用了厘米
  • 另外, 也坐标系不一样的问题, 例如Unity使用的是左手,但simplygon中使用的右手
  • 下面举例如何设置位置
public static void TransSceneNodePos(Simplygon.ISimplygon sg, Simplygon.spSceneNode sceneNode, float[] pos){if (sceneNode == null)return;var spTrans = sg.CreateTransform3();spTrans.PreMultiply();// 乘以100,让米变厘米, x 取负,使用坐标系变成右手spTrans.AddTranslation(-pos[0] *100.0f, pos[1]*100.0f, pos[2]*100.f);sceneNode.GetRelativeTransform().DeepCopy(spTrans.GetMatrix());}

http://www.ppmy.cn/embedded/124628.html

相关文章

AtCoder Beginner Contest 373(ABCDEF 题)视频讲解

A - September Problem Statement There are 12 12 12 strings S 1 , S 2 , … , S 12 S_1, S_2, \ldots, S_{12} S1​,S2​,…,S12​ consisting of lowercase English letters. Find how many integers i i i ( 1 ≤ i ≤ 12 ) (1 \leq i \leq 12) (1≤i≤12) satisfy …

达梦数据库索引内容介绍

1、索引概念 索引是为了快速检索和定位数据行而创建的一种数据结构。索引是由表中索引列数据进行排序后的集合和指向这些值的物理标识&#xff08;例如&#xff1a;ROWID 等聚集索引键&#xff09;共同组成。在 DM 中&#xff0c;除了位图索引、位图连接索引、全文索引和空间索…

Redis:string类型

Redis&#xff1a;string类型 string命令设置与读取SETGETMSETMGET 数字操作INCRINCRBYDECRDECRBYINCRBYFLOAT 字符串操作APPENDSTRLENGETRANGESETRANGE 内部编码intembstrraw 在Redis中&#xff0c;字符串string存储的是二进制&#xff0c;以byte为单位&#xff0c;输入的二进…

基于SpringBoot图书馆预约与占座小程序【附源码】

效果如下&#xff1a; 首页界面 用户登录界面 查看座位界面 管理员登录界面 管理员主界面 座位分布信息界面 预约信息界面 研究背景 随着互联网技术的不断进步和智能手机的广泛普及&#xff0c;图书馆作为知识获取和学习的重要场所&#xff0c;其管理方式也在逐步向信息化和智…

PostgreSQL的扩展Citus介绍

PostgreSQL的扩展Citus介绍 Citus 是一个 PostgreSQL 的扩展&#xff0c;用于将 PostgreSQL 转变成一个分布式数据库集群。它使得用户可以利用多台机器来处理更大的数据集和更高的查询吞吐量&#xff0c;从而提升数据库的扩展性和性能。Citus 主要解决的是大规模数据处理和高并…

使用iTextPDF库时,设置文字为中文格式

在使用iTextPDF库时&#xff0c;设置文字为中文格式主要涉及选择合适的中文字体&#xff0c;并确保该字体能够正确渲染中文字符。由于iTextPDF的内置字体通常不支持中文&#xff0c;因此你需要加载一个支持中文的字体文件&#xff08;如TrueType字体&#xff0c;.ttf文件&#…

【AI知识点】残差网络(ResNet,Residual Networks)

残差网络&#xff08;ResNet&#xff0c;Residual Networks&#xff09; 是由微软研究院的何凯明等人在 2015 年提出的一种深度神经网络架构&#xff0c;在深度学习领域取得了巨大的成功。它通过引入残差连接&#xff08;Residual Connection&#xff09; 解决了深层神经网络中…

【国庆要来了】基于Leaflet的旅游路线WebGIS可视化实践

前言 转眼2024年的国庆节马上就要来临了&#xff0c;估计很多小伙伴都计划好了旅游路线。金秋十月&#xff0c;不管是选择出门去看看风景&#xff0c;还是选择在家里看人。从自己生活惯了的城市去别人生活惯了的城市&#xff0c;去感受城市烟火、去感受人文风景&#xff0c;为2…