[英]Why aren't shadows showing up?
我在Three.js中有一個非常標准的場景。 有一些物體,一個地平面和一些定向光,其中一個投射陰影。 我的大多數對象都可以毫無問題地投射陰影。 一些,出於某種原因,沒有。 所有的Mesh
對象都嵌入在Object3D
對象的層次結構中,其中大多數深度為2或3層。 沒有投射陰影的對象位於更復雜的層次結構中,其中某些“ Mesh
對象的深度超過20層。 該層次結構可以模擬在我嘗試移植的仿真程序中找到的復雜層次結構。
這是問題的屏幕截圖:
這里僅啟用了陰影投射光:
黃色襯衫的家伙和背景中的橙色機器人都有此問題。 它們都具有復雜的層次結構。 沒有一個靜止物體有這個問題。 它們具有更簡單的3級層次結構。 如您所見,該家伙被放置在正確投射陰影的多個對象之間,因此他絕對位於燈光的陰影視錐內部。
我已經按照標准清單調試陰影,但是沒有運氣:
.castShadow
設置為true
Mesh
場景中的對象有.castShadow
和.receiveShadow
設置為true
.receiveShadow
設置為true 較深的層次結構是否會.castShadow
設置? 這是我能想到的唯一解釋。
編輯:這是來自定向光的深度緩沖數據。 請注意,沒有任何東西看起來像我們的家伙或我們的機器人:
順便說一句,我正在運行Three.js r70。
由於您的層次是20層深,你需要遍歷您的網格,以設置.castShadow
和.receiveShadow
的各個層面。
object.travese( function( child )
{
if( child instanceof THREE.Object3D )
{
child.castShadow = true;
child.receiveShadow = true;
}
} );
弄清楚了。
在超深度層次結構的某個位置,我不小心將占位符Object3D
對象之一的.visible
屬性設置為undefined
。 這表明WebGLRenderer和ShadowMapPlugin對可見性的處理方式有所不同,因為它們顯示在常規渲染中,而不是在光照的陰影攝影機渲染器中顯示。 可以認為這是一個錯誤嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.