当前位置: 首页 > news >正文

Simplygon 使用笔记2

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

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());}

相关文章:

  • 华为OD机试 - 超级玛丽通过吊桥的走法 - 动态规划(Python/JS/C/C++ 2024 E卷 200分)
  • 025.Oracle_DBMS_job定时任务
  • python运维自动化Paramiko
  • 【信创,国产化】信息化系统信创改造,国产化改造方案,云建设
  • 鸿蒙NEXT开发-ArkUI(基于最新api12稳定版)
  • Vue Element UI 打包上线后icon偶发性乱码问题
  • 鸿蒙NEXT入门到实战(基于最新api12稳定版)
  • C语言常用标准库 -- 5.<time.h>
  • 使用fastapi搭建ChatGPT对话后台
  • 前端规范工程-5:Git提交信息规范(commitlint + czg)
  • 企业数据安全从0到1建设方法
  • sql server每天定时执行sql语句
  • RabbitMQ 界面管理说明
  • 【Orange Pi 5嵌入式应用编程】-用户空间GPIO控制
  • Lenovo SR850服务器亮黄灯维修和升级CPU扩展模块
  • [译]如何构建服务器端web组件,为何要构建?
  • 【笔记】你不知道的JS读书笔记——Promise
  • 08.Android之View事件问题
  • 10个确保微服务与容器安全的最佳实践
  • 2019年如何成为全栈工程师?
  • Asm.js的简单介绍
  • gitlab-ci配置详解(一)
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • javascript 哈希表
  • Java的Interrupt与线程中断
  • React中的“虫洞”——Context
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用Swoole加速Laravel(正式环境中)
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # Kafka_深入探秘者(2):kafka 生产者
  • #{}和${}的区别是什么 -- java面试
  • #AngularJS#$sce.trustAsResourceUrl
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (二)WCF的Binding模型
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (四)Android布局类型(线性布局LinearLayout)
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)程序员技术练级攻略
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .net 简单实现MD5
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET分布式缓存Memcached从入门到实战
  • /boot 内存空间不够
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Import注解详解
  • [100天算法】-不同路径 III(day 73)
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [20140403]查询是否产生日志