我正在尝试在RealityKit(在ARView实例中设置)中加载模型和纹理,但似乎无法弄清楚如何指定材料应为双面。
我将模型加载为ModelEntity
,将纹理加载为TextureResource
。模型和纹理正在加载,但仅在一侧倾斜。由于模型是开放的(即可以看到背面),因此模型的呈现方式存在差距。
到目前为止,我有
let entity: ModelEntity = try .loadModel(named: "model.obj")
var material = SimpleMaterial()
material.baseColor = try .texture(.load(named: "texture.png"))
entity.model?.materials = [material]
我希望找到一个诸如
的属性material.twoSided = true
但是到目前为止,我还没有在RealityKit中找到类似的东西。
任何人都知道如何在RealityKit中设置双面材料吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
目前似乎没有任何方法可以通过RealityKit API进行编程。
您可以更改模型定义,使其不进行背面剔除吗?例如,在我导入的USDZ文件中,它将网格的一部分定义为:
def Mesh "Plane_1"
{
uniform bool doubleSided = 1
您也许可以先使用usdzconvert(https://developer.apple.com/download/more/?=USDPython)将obj文件转换为使用过的文件,然后手动编辑该文件,然后将其导入到场景中。
还可能取决于模型的设置方式,您可以将不止一种材料传递到应用于模型不同部分的材料阵列中,您可以看到模型需要多少种材料:
entity.model?.mesh.expectedMaterialCount
答案 2 :(得分:1)
我认为没有办法做到这一点。 RealityKit仍处于早期阶段。目前,RealityKit中的材料支持非常有限。我认为有计划在iOS 14或更高版本中对此进行更改。文档中有一些注释描述了尚不存在的功能,例如Material协议说:“描述定义网格零件外观的材料(颜色,着色器,纹理等)。”当前无法定义自定义着色器。如果查看RealityKit框架捆绑包,则有一些着色器图形定义和尚未在公共API中公开的新材质功能。我怀疑会有着色器图形编辑器,对自定义着色器的支持以及双面材料的出现。
答案 3 :(得分:-1)
您所描述的称为剔除。例如,检查MTLCullMode。从那里可以跳到可以设置剔除模式的各个点(您对不剔除感兴趣)。