2017-05-14 7 views
5

私はどのように見えない飛行機に影を描くことができるかを調べるために、sceneViewの背景が表示されます。シーンキットの透明な床/平面に影を表示する

THREE.jsは正確にこれを行うShadowMaterialを持っています - 影だけがレンダリングされます。

現在考えているのは、簡単に見えるカスタムのメタルシェイダーを作ることですが、私はシャドウから離れてすべてを表示するために床をノックアウトする方法についてはわかりません。

は、ここでシャドウキャッチャーの例です:https://knowledge.autodesk.com/search-result/caas/sfdcarticles/sfdcarticles/Maya-2015-Shadow-Catching-with-Use-Background-material.html

+0

どのような影を使用していますか?シャドーマッピング、シャドーボリューム?また、あなたは現在、 'sceneView'の3Dオブジェクトを描画できますか? –

+0

周囲光とスポットライト「SNNodes」を使用してダイナミックな影をつけて、リンゴがフードの下で何をしているのかは不明です。私は 'UIView'を私のSceneKitビューに置くことができます – jfisk

答えて

4

オクラホマので、GitHubの上で、この例のプロジェクトをチェックアウト:

https://github.com/carolight/Metal-Shadow-Map/blob/master/Shadows/Shader.metal#L67

そのリンクは、シャドウマップのテストを行い、シェーダにあります。基本的には、レンダリングされるフラグメントのZ位置を正規化し、それをシャドウマップのZバッファと比較します。それがシャドー-Zよりも小さい場合、ピクセルは完全に点灯(ライン67)され、それ以外の場合はわずかに着色される(ライン69)。

代わりにやりたいことは、行69ではwrite(0,0,0、shadow_opacity)、行67では(0,0,0,0)です。これは透過ピクセルを放出するはずです。 [0.0..1.0]からuniformとしてshadow_opacityを設定します。

残りの設定はexampleに示されています。平面/カメラを望む設定に傾け、シーン内に実際に置かない場合は、main passのキューブ/花瓶/何でも描画をスキップしてください(ライン279)。 (ただし、shadow passに注意しておいてください)。

関連する問題