如何为RealityKit / ARView指定双面材料?

时间:2019-10-17 22:52:56

标签: ios swift arkit realitykit

我正在尝试在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中设置双面材料吗?

4 个答案:

答案 0 :(得分:2)

正如其他人已经回答的那样,您无法以编程方式进行。 但是,您可以通过检查面板为每个模型手动执行此操作。 见下图。在底部附近,您有“双面”复选框。

enter image description here

答案 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。从那里可以跳到可以设置剔除模式的各个点(您对不剔除感兴趣)。