2017-03-29 8 views
0

SceneKitではCinema4Dのように、シーンの中心にXYZ軸を描くための線で作られたノードを構築しています。SceneKitは特定のノードで照明を避けます

cinema4D

私はグローバル照明に参加しないことをこれらの3つのノードが好きで、光が強すぎる/ inexistent /暗い場合でも閲覧可能になります。下の画像では、Z軸が非常に明るく見えないことがわかります。

my software

物理学のカテゴリのマスクと同じように、シーンのライティングに参加するノードを停止する方法はありますか?

この場合、ノードがどのように表示されるためには、どのように軽くなりますか?

答えて

4

SCNLightは、categoryBitMask特性を有する。これにより、ライトの影響を受けるノードを選択できます(ただし、アンビエントライトでは無視されます)。 2つの光源カテゴリを持つことができます.1つはメインシーン用で、もう1つはラインにのみ影響します。

はここで2つのノードを持つ単純な例であり、異なる色の光で照らさそれぞれ:

struct LightType { 
    static let light1:Int = 0x1 << 1 
    static let light2:Int = 0x1 << 2 
} 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let scene = SCNScene(named: "art.scnassets/scene.scn")! 

     let lightNode1 = SCNNode() 
     lightNode1.light = SCNLight() 
     lightNode1.light!.type = .omni 
     lightNode1.light!.color = UIColor.yellow 
     lightNode1.position = SCNVector3(x: 0, y: 10, z: 10) 
     lightNode1.light!.categoryBitMask = LightType.light1 
     scene.rootNode.addChildNode(lightNode1) 

     let lightNode2 = SCNNode() 
     lightNode2.light = SCNLight() 
     lightNode2.light!.type = .omni 
     lightNode2.light!.color = UIColor.red 
     lightNode2.position = SCNVector3(x: 0, y: 10, z: 10) 
     lightNode2.light!.categoryBitMask = LightType.light2 
     scene.rootNode.addChildNode(lightNode2) 

     let sphere1 = scene.rootNode.childNode(withName: "sphere1", recursively: true)! 
     sphere1.categoryBitMask = LightType.light1 
     let sphere2 = scene.rootNode.childNode(withName: "sphere2", recursively: true)! 
     sphere2.categoryBitMask = LightType.light2 

     let scnView = self.view as! SCNView 
     scnView.scene = scene 
    } 
} 

enter image description here

+0

おかげで、私は今それに掘りますよ!コードがありますか? :-) –

+0

@BenoîtLahoz私は簡単な例を追加しました。 –

+0

ありがとう!それはまさに私が探していたものです! –

関連する問題