8

我正在尝试在 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

4 回答 4

2

目前似乎没有任何方法可以通过 RealityKit API 以编程方式执行此操作。

你能改变你的模型定义,使它不做背面剔除吗?例如,在我正在导入的 USDZ 文件中,它将网格的一部分定义为:

def Mesh "Plane_1"
  {
    uniform bool doubleSided = 1

您可以先使用 usdzconvert ( https://developer.apple.com/download/more/?=USDPython ) 将您的 obj 文件转换为使用过的文件,然后手动编辑该文件,然后将其导入您的场景。

也可能取决于模型的设置方式,您可以将多个材料传递给应用于模型不同部分的材料数组,您可以看到模型需要多少材料:

entity.model?.mesh.expectedMaterialCount
于 2019-10-17T23:54:36.813 回答
2

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

在此处输入图像描述

于 2021-01-10T09:06:07.863 回答
1

我不认为有办法做到这一点。RealityKit 仍处于早期阶段。RealityKit 中的材质支持目前非常有限。我认为有计划在 iOS 14 或更高版本中改变这一点。文档中有描述尚不存在的功能的注释,例如材质协议说“描述定义网格部件外观的材质(颜色、着色器、纹理等)。” 目前没有办法定义自定义着色器。如果您查看 RealityKit 框架包,就会发现尚未在公共 API 中公开的着色器图形定义和新材质特性。我怀疑会有一个着色器图形编辑器,支持自定义着色器和双面材质。

于 2020-03-24T13:09:20.763 回答
0

你所描述的叫做剔除。例如,检查MTLCullMode。从那里您可以跳转到可以设置剔除模式的各个点(您对不剔除感兴趣)。

于 2019-10-17T23:16:19.437 回答