swift 如何在BodyEntity中以编程方式访问剔除模式和双面?

1l5u6lss  于 2023-03-17  发布在  Swift
关注(0)|答案(2)|浏览(103)

我直接在Scene图形的usdz文件中设置3d模型的剔除模式和双面属性。但是,一旦真实的渲染,这些属性会自动重置为默认值。有没有办法通过BodyEntity以编程方式访问这些属性,以确保在渲染角色时设置这些属性?

uubf1zoe

uubf1zoe1#

RealityKit 2.0 for iOS 15中有一个新的枚举,称为FaceCulling

enum MaterialParameterTypes.FaceCulling

frontbacknone三种情况。您可以在PhysicallyBasedMaterial或SimpleMaterial中使用它。
RealityKit中仍然没有doubleSided属性,像SceneKit中流行的属性。

sg3maiej

sg3maiej2#

Xcode 13.4.1.的工作解决方案,Swift 5.6.1.

if var material = particleME.model?.materials.first as? PhysicallyBasedMaterial {
    material.faceCulling = .none
    // Set transparency (if needed):
    // material.blending = .transparent(opacity: .init(floatLiteral:0.5))
    particleME.model?.materials = [material]
}
  • 改变结构体上的任何属性只会改变它的值,因为它是被复制的(通过值),这就是为什么我必须重新分配它。
  • 无法通过场景曲线图编辑器通过设置-〉可见性-〉“Cull _”设置faceCulling,因为没有“none”选项。
  • 你的.usdz很可能是Entity(而不是ModelEntity)。不要在if中进行类型转换,因为大多数情况下它会失败。

注意:我已经通过场景曲线图编辑器设置了transparency,并使用上面的代码将其重置为1.0。如果你已经通过SGE编辑了你的.usdz,那么修改材质数组(像我做的那样)可能会重置你之前的设置。我必须将混合设置为透明才能恢复透明度。
我的建议是,当使用RealityKit时,将尽可能多的.usdz或3D文件更改卸载到3D内容创建者,因为除了不起作用的东西外,API还有很多需要改进的地方。
其他有用链接:

相关问题