由于RealityKit仍然没有SceneKit中可以找到的isDoubleSided实例属性,因此我提供了两种解决方法来绕过这个限制。
Autodesk Maya –> 解决方案1
在Autodesk Maya中,创建两个多边形立方体,然后稍微缩小其中一个,选择它并从“建模”主菜单集应用
网格显示 >
反转命令。此命令将面的法线反转180度。导出两个模型(第一个具有默认法线方向,第二个具有反转的法线)。以下是Maya
Script Editor
的Python代码:
import maya.cmds as cmds
cmds.polyCube(n='InnerCube', w=2.99, h=2.99, d=2.99)
cmds.polyNormal(nm=0)
cmds.polyCube(n='OuterCube', w=3, h=3, d=3)
cmds.select(clear=True)
接下来,将两个模型都导入到RealityKit中。
RealityKit -> 解决方案2
在RealityKit中以编程方式完成此操作,需要将原始模型及其副本加载到场景中,然后对于内部模型,使用
faceCulling =
.front
来裁剪正面多边形。稍微缩小内部模型。
此外,您还可以使用裁剪来实现
轮廓边框等效果。
import UIKit
import RealityKit
class ViewController: UIViewController {
@IBOutlet var arView: ARView!
override func viewDidLoad() {
super.viewDidLoad()
let boxScene = try! Experience.loadBox()
var innerMaterial = PhysicallyBasedMaterial()
innerMaterial.faceCulling = .front
innerMaterial.baseColor.tint = .green
let box = boxScene.steelBox?.children[0] as! ModelEntity
box.scale = [1,1,1] * 12
box.model?.materials[0] = innerMaterial
box.name = "Inner_Green"
arView.scene.anchors.append(boxScene)
var outerMaterial = SimpleMaterial()
let outerBox = box.clone(recursive: false)
outerBox.model?.materials[0] = outerMaterial
outerBox.scale = [1,1,1] * 12.001
outerBox.name = "Outer_White"
print(boxScene)
}
}