2017-05-14 54 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'的dyanmic陰影,不確定蘋果正在做什麼。我能夠將'UIView'放置在我的SceneKit視圖上 – jfisk

回答

4

好了,看看這個例子項目在Github上:

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

該鏈接是執行陰影貼圖測試的着色器。基本上,它將渲染片段的Z位置歸一化,並將其與陰影貼圖的Z緩衝區進行比較。如果它小於陰影Z,則像素會完全亮起(第67行),否則會稍微着色(第69行)。

你想要做的是爲69行寫入(0,0,0,shadow_opacity),爲67行寫入(0,0,0,0)。這應該會發出透明像素。將shadow_opacity設置爲從[0.0..1.0]開始的統一。

其餘設置顯示在example中。如果在場景中不需要它(線路279),請將飛機/攝像機傾斜至所需設置,跳過繪製立方體/花瓶/ main pass中的任何內容。 (但是,請注意shadow pass並保持在那裏)。