簡體   English   中英

為什么沒有陰影出現?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM