如何在SceneKit中添加灯光?

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

我有一个名为

navigation.scn
的文件,其中有 3 个模型
spaceship.usdz
earth.usdz
moon.usdz
。我目前用我的代码看不到任何一个。 3.我还在我想看到的地方放置了一个相机。也许我需要照亮那里?

代码:

struct SCNViewWrapper: UIViewRepresentable {
    func makeUIView(context: Context) -> SCNView {
        let sceneView = SCNView()
        

        if let scene = SCNScene(named: "navigation.scn") {
            sceneView.scene = scene
        
            let lightNode = SCNNode()
            lightNode.light = SCNLight()
            lightNode.light!.type = .omni
            lightNode.position = SCNVector3(x: 0, y: 10, z: 10)

            scene.rootNode.addChildNode(lightNode)
        }
        sceneView.allowsCameraControl = true
        
        return sceneView
    }
    
    func updateUIView(_ uiView: SCNView, context: Context) {
        // Update code if needed
    }
}

struct ContentView: View {
    var body: some View {
        VStack {
            SCNViewWrapper()
        }
    }
}

simulator display navigation.scn 截图

swiftui scenekit
1个回答
0
投票

SceneKit场景中的光照

由于您使用

omni
光源作为场景中的主光源,因此它需要比定向光源高得多的强度值。除此之外,
omni
directional
光的计算成本更高,因为它是由 6 个多向聚光灯组成的照明装置。请记住,
directional
灯的位置并不重要。只有它的方向很重要。

lightNode.light = SCNLight()
lightNode.light?.type = .omni
lightNode.light?.intensity = 50_000     // 50 times more powerful

SceneKit 中所有光源的默认值为 1000 流明。此外,作为场景的辅助照明,使用强度值非常低的“环境”光是有意义的。除此之外,您应该检查场景的比例:在我看来,光源放置在模型内部(从 3D 创作应用程序导入模型时,厘米会转换为米,因此模型的比例变为 100倍大)。 scene.rootNode.scale = SCNVector3(0.01, 0.01, 0.01)

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