SceneKit 或 ARKit 的动态纹理 API
Dynamic texturing API for SceneKit or ARKit
是否可以使用 ARKit/SceneKit 以编程方式即时对 DAE/SCN 模型进行纹理处理?
用例是:我将有 1 个模型,我想 "skin" 可能有数千个相似但不同的纹理。我可以:
- 提前对模型进行纹理处理,并强制我的应用程序或我的后端托管数千个庞大的纹理模型文件(它们都使用相同的较重的 3D model/mesh 文件,并且每个文件都与不同的较轻的 2D 文件相结合纹理文件);或
- 允许我的 app/backend 附带 1 个 heavy/bulky 3D mesh/model 文件和数千个较轻的 2D 纹理文件,然后使用一些 SceneKit/ARKit API 即时将正确的纹理应用到内存中的模型
这种动态纹理功能是否可行?如果是这样,如何?如果不是,那么为什么(好奇!)?
是的,您当然可以通过编程更改模型的纹理。只需将纹理图像分配给分配给几何体的 SCNMaterial 的 .diffuse.contents 属性。 IE。 yourModel.firstMaterial.diffuse.contents = someImage
此外,“相似但不同”的纹理听起来像是着色器的工作。使用 scenekit shaderModifiers,您可以使用 GPU 的处理能力实时修改纹理图像,具有无限的可能性。
是的,在运行时更改 3D 对象的纹理图像是几乎所有高级 3D 引擎(包括 SceneKit)的基本功能。
总之,找到你要改变的material,将它的diffuse
.contents
设置为你要使用的贴图
为了更透彻地理解,请阅读 SceneKit documentation, or go back to the WWDC videos from 2013 and 2014 中介绍 SceneKit 基础知识的 material。
是否可以使用 ARKit/SceneKit 以编程方式即时对 DAE/SCN 模型进行纹理处理?
用例是:我将有 1 个模型,我想 "skin" 可能有数千个相似但不同的纹理。我可以:
- 提前对模型进行纹理处理,并强制我的应用程序或我的后端托管数千个庞大的纹理模型文件(它们都使用相同的较重的 3D model/mesh 文件,并且每个文件都与不同的较轻的 2D 文件相结合纹理文件);或
- 允许我的 app/backend 附带 1 个 heavy/bulky 3D mesh/model 文件和数千个较轻的 2D 纹理文件,然后使用一些 SceneKit/ARKit API 即时将正确的纹理应用到内存中的模型
这种动态纹理功能是否可行?如果是这样,如何?如果不是,那么为什么(好奇!)?
是的,您当然可以通过编程更改模型的纹理。只需将纹理图像分配给分配给几何体的 SCNMaterial 的 .diffuse.contents 属性。 IE。 yourModel.firstMaterial.diffuse.contents = someImage
此外,“相似但不同”的纹理听起来像是着色器的工作。使用 scenekit shaderModifiers,您可以使用 GPU 的处理能力实时修改纹理图像,具有无限的可能性。
是的,在运行时更改 3D 对象的纹理图像是几乎所有高级 3D 引擎(包括 SceneKit)的基本功能。
总之,找到你要改变的material,将它的diffuse
.contents
设置为你要使用的贴图
为了更透彻地理解,请阅读 SceneKit documentation, or go back to the WWDC videos from 2013 and 2014 中介绍 SceneKit 基础知识的 material。