RealityKit 和 Vision OS 中实体的渲染顺序

问题描述 投票:0回答:1

在 SceneKit 中,您可以覆盖节点的渲染顺序,因此无论它们在空间中的位置如何,某些事物总是会绘制在其他事物之上。但我在 realKit 中找不到任何方法来做到这一点。有没有办法通过后期渲染效果来做到这一点,还是必须将整个东西转换为 Metal 并构建自己的引擎?

swiftui realitykit visionos
1个回答
0
投票

RealityKit 4.0 中模型的渲染顺序

为了控制 VisionOS、iOS 和 macOS 应用程序中 3D 模型的渲染顺序,您需要创建一个

ModelSortGroup
对象并将其传递给
ModelSortGroupComponent
,以 Int32 类型指定渲染顺序。 ModelSortGroup 中的
.prePass
.postPass
值指示渲染器仅在 beforeafter 绘制组中的颜色时绘制模型的深度。

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。

© www.soinside.com 2019 - 2024. All rights reserved.