3D模板陰影原理

2021-06-08 01:50:06 字數 2007 閱讀 5974

1:先從3dsmax中匯出乙個簡單的場景,乙個園環,球,平面。

2:園環直接面向光源,園環對球體來說是乙個光線的阻擋物,園環在它上面形成陰影,同時,園環和球體對平面來說是光線的阻擋物,所以,同時在其上面形成陰影。

3: 要產生模板陰影,先要找出在園環和球體上面面向光線的面,去除背向光線的面,通過測試光線同園環和球體上面每乙個所組成的小角形的法線的夾角是否小於90度,即光線向量同法線向量的點積要大於零。

4:在餘下的所有面向光線的麵中,把每個面的每條邊可以儲存到乙個vector中,不過在儲存之前,先把該條邊同已儲存在vector中的每條邊先進行逐一比較,如果,找到的這條邊同它的兩個頂點相同,但順序相反,則取走在vector中的這條邊。

如找不到,則把該條邊加入到vector中,最後將得到一條(或兩條)輪廓線(見圖紅色線)。

5: 把輪廓線上的每個點延著光線方向延長一定的長度(見黃線),黃線所構成的面(所謂的陰影體)同場景去作比較,即模板測試(stencil)

最後畫出陰影部分和非陰影部分,這就是基本的原理。

以下摘自《pro ogre 3d programing 》

模板陰影

模板陰影的概念很簡單,影子的形狀是根據物件的輪廓和給定的燈光位置計算產生。圖11-3中很清晰地展示了相應的原理。在這裡需要注意一下,ogre為陰影提供了乙個除錯模式,當開啟這個功能的時候我們可以看到陰影的空間體積。

圖11-3:在demo_shadows演示程式中使用調製模板陰影並且啟用陰影除錯模式

陰影體積

陰影體積是物體輪廓邊緣所圍成的空間,其中的一端以模型作為封口,另一端的封口通過以下規則得到:

·如果可程式設計圖形硬體管線可用,頂點程式將使用無窮遠來產生空間包圍體積。

·當頂點程式無法使用的時候,陰影體積的另外一端通過對燈光衰弱(點光和聚光)的計算來得到,也可以直接通過scenemanager::setshadowdirectionallightextrusiondistance()方法來構造。

警告:如果在使用的環境中無法開啟對頂點程式的使用,ogre將不得不使用有限的陰影體積。在這時候需要避免物體太靠近光源,否則就會面臨廣闊的陰影體積無法在內部產生物體陰影的風險。

陰影體積會在場景空間中形成乙個所謂的模板(stencil)。所有在這個模板內部物體的畫素都會被繪製上陰影,而外面的畫素則不會。當陰影體積與某乙個物體(例如在圖11-4中的地面)相交的時候,模板快取會被更新(在gpu中的一種快取,類似深度快取),這個更新將會讓相應的畫素被渲染成為在「陰影內部」或者「陰影外部」。

圖11-4:demo_shadows演示程式中啟用陰影除錯,表現了陰影體積與地面物體的相交

在圖11-4中,通過地板和陰影體積相交而產生的模板,在其中的畫素被渲染成暗色調,而外部的其他部分仍然進行普通的渲染。

因為模板陰影技術天生的性質,導致了模板陰影技術實現的影子邊緣銳利的結果,在影子內部和外部之間形成了乙個明顯的邊緣。這種型別陰影的好處是即使拉得很長也不會失真(例如黃昏或者黎明時候所產生的物體陰影),但同時意味著陰影的邊緣會顯得過分明顯(特別是當影子被拉長的時候)。ogre沒有提供「讓我的陰影變得軟化」的開關,而事實上,對於模型板陰影技術來說也不可能有「軟」的實現方式。在演示程式demo_shadows中使用了這一章節的相應陰影技術。

3D電視與3D眼鏡的工作原理

1 先說3d成像原理 在 3d 裡面的 d 是英文單詞dimension 線度 維 的首字母,3d指的就是三維空間。與普通2d畫面顯示相比,3d技術可以使畫面變得立體逼真,影象不再侷限於螢幕的平面上,彷彿能夠走出螢幕外面,讓觀眾有身臨其境的感覺。儘管3d顯示技術分類繁多,不過最基本的原理是相似的,就...

前端十五課 3D動畫 陰影,濾鏡

3d動畫原理 在平面內建立乙個三維座標系,水平向右x正軸,垂直向下y正軸,由平面指向使用者的軸稱為z軸 3d動畫必備 1.perspective 1000px 通過給座標系新增perspective樣式即可增加z軸 2.z軸的位置可以用perspective樣式來設定 預設位置perspective...

3D動畫和盒陰影及濾鏡

3d 開闢異次元空間 transform style preserve 3d 視距,透視 perspective npx 盒陰影 必須要有的 h shadow 水平陰影 v shadow 垂直陰影 可以選擇的 blur 模糊距離 spread 陰影尺寸 color 陰影顏色 inset 內陰影 文字...