【问题标题】:How to specify two-sided material for RealityKit / ARView?如何为 RealityKit / ARView 指定双面材质?
【发布时间】:2020-02-14 21:50:57
【问题描述】:

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

【问题讨论】:

  • 所以将 .OBJ 加载到 RealityKit 工作可靠吗?我以为,它只接受 .USDZ。
  • @HelloTimo 是的,OBJ 文件似乎可以通过上述方法正常加载。我认为它的工作原理是 OBJ 是用于在 USD 场景描述中存储几何图形的常见模型类型之一。
  • 感谢@smithco,它确实有效。至少与本地资产同步,这是我刚刚尝试过的。很酷——我认为这在 RealityKit 中没有记录。

标签: ios swift arkit realitykit


【解决方案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

【讨论】:

  • 不幸的是,这些是程序生成的网格,因此将其烘焙到 USDZ 文件进行加载相当不方便。不过,作为备份计划,对生成的文件进行后处理可能是一种选择。
【解决方案2】:

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

【讨论】:

  • 这对我有用。我在 Reality Composer 中创建了一个球体,导出为 USDZ 并选中了该框。球体足够大,我可以看到里面。相当有趣的体验。我确实尝试过播放视频,但效果不错,但有点变形 ?。
【解决方案3】:

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

【讨论】:

  • 感谢您的回答!如果您能为您的陈述提供链接或来源,我认为这将有助于这个答案和问题。
【解决方案4】:

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

【讨论】:

  • 如果您有任何关于如何在 RealityKit 实体中为网格设置剔除选项的细节,这将非常有帮助。在阅读文档时,我没有找到任何此类选项。我假设这将是一个材质选项而不是一个剔除选项,因为这是 Apple 在 SceneKit API 中设置它的方式,但我可能是错的。
猜你喜欢
  • 2020-09-20
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2021-08-28
  • 1970-01-01
  • 2020-10-23
相关资源
最近更新 更多