2017-09-01 11 views
1

共有するコードがないので、私の目標を明確にする...カメラと別のSCNNodeの間にあるSCNNodeがあるとします。最初のSCNNodeはSCNBoxですが、テクスチャがないため、2番目のSCNNodeがその背後に表示されます。私は最初のノードに透明な素材を与えたいが、あたかもそれが不透明であるかのように、その背後にあるすべてのノードを隠すようにしたい。通常のシーンでは、これはおそらくシーンの背景色を見ることができるという意味ですが、私はARKitでこれを行うことを計画しています。透明なSCNNodeを持つことは可能ですか?その背後にあるオブジェクトはすべて遮蔽されますか?

+0

テストだけではなく、アイデアを、前のボックスが最初に(0)レンダリングされ、次に他のノード(1またはそれ以上の値)がレンダリングされるように、 –

答えて

1

あなたは明確な色の材料を使用することができます: `材料を透明にする前の箱のため、その後、すべてのノードを設定し、` true`に `writesToDepthBuffer`を残す:

extension SCNMaterial { 
    convenience init(color: UIColor) { 
     self.init() 
     diffuse.contents = color 
    } 
    convenience init(image: UIImage) { 
     self.init() 
     diffuse.contents = image 
    } 
} 

let clearMaterial = SCNMaterial(color: .clear) 
boxNode.materials = [clearMaterial] 
-1

コメントから私のアイデアをテストしましたが、それはうまくいくようですが、完全ではありませんが、この点については後ほど詳しく説明します。

レンダリングプロセスをサポートするためにSceneKitはデプスバッファを使用し、そのバッファに保存されているものの前にある場合にのみポイントをレンダリングするため、まずシースルーキューブをレンダリングしてから、あなたのキューブノードrenderingOrderのプロパティを0(デフォルト値)のままにし、他のすべてのノードrenderingOrderを高い値に設定します。つまり、110 ...通常、透明オブジェクトの場合、深度バッファに書きたくない背後のオブジェクトを見ることができますが、そうでない場合は、writeToDepthBufferプロパティをtrue(デフォルト値)のままにしておきます。行うには最後のものは、デフォルトの材料を使用し、この方法は完全ではなく、それが回避策の多くを感じて前に私が言ったように

cube.geometry?.firstMaterial?.transparency = 0.00000001 

を追加することができ、あなたのキューブを透明にすることです...しかし、それ働く透明度を正確に0に設定しないのは、キューブがそこにいなくても完全に透明なピクセルがデプスバッファに保存されないということです。

関連する問題