在 SceneKit 中,您可以覆盖节点的渲染顺序,因此无论它们在空间中的位置如何,某些事物总是会绘制在其他事物之上。但我在 realKit 中找不到任何方法来做到这一点。有没有办法通过后期渲染效果来做到这一点,还是必须将整个东西转换为 Metal 并构建自己的引擎?
为了控制 VisionOS、iOS 和 macOS 应用程序中 3D 模型的渲染顺序,您需要创建一个
ModelSortGroup
对象并将其传递给 ModelSortGroupComponent
,以 Int32 类型指定渲染顺序。 ModelSortGroup 中的 .prePass
和 .postPass
值指示渲染器仅在 before 或 after 绘制组中的颜色时绘制模型的深度。
import SwiftUI
import RealityKit
struct ContentView : View {
let ball = ModelEntity(mesh: .generateSphere(radius: 0.125))
let cube = ModelEntity(mesh: .generateBox(size: 0.15))
let group = ModelSortGroup(depthPass: .postPass)
var body: some View {
RealityView { rvc in
// BALL
ball.model?.materials = [UnlitMaterial(color: .black)]
ball.position = [0.0, 2.0,-1.0]
let ballComponent = ModelSortGroupComponent(group: group, order: 0)
ball.components.set(ballComponent)
rvc.add(ball)
// CUBE
cube.model?.materials = [UnlitMaterial(color: .cyan)]
cube.position = [0.0, 2.0,-1.3]
let cubeComponent = ModelSortGroupComponent(group: group, order: 1)
cube.components.set(cubeComponent)
rvc.add(cube)
}
}
}
P。 S.
请注意,RealityKit 的默认紫色条纹材质不适用于 ModelSortGroup。