关于Unity中的光照(六)
反射探頭
1:鏡子金屬等具有光滑表面的物體都會反射,而游戲中計算實時反射非常消耗CPU的資源,
unity5.0新增了一個反射探頭的技術,通過采樣點,生成反射Cubemap,然后通過特定的著色器從Cubemap中采樣,就能顯示反射效果了;
2: 反射探頭的參數:
type: 設置反射探頭的類型(baked, custom, realtime)三種類型;custom也是烘焙的,但是可以自定義
a:Baked烘培模式: 類似于光照烘培,把反射探頭設置好后,將反射信息烘培到CubeMap中,當游戲運行的時候直接使用烘培好的CubeMap;
b:Custom(自定義模式): 與Baked模式的探頭的用法相同,需要手動烘培才能看到效果。Custom提供了更多的參數可以設置,如Dynamic Object,將非靜態的物體烘培到發射圖中,但是不會隨著物體的移動而改變;CubeMap選項可以制定烘培出來的Cubemap;
用Custom的baked烘焙的,可以不勾選cube的static,依然有反射紋理。步驟是先取消自動烘焙,再選擇Relfection Probe組件的模式為custom,勾選Dynamic Object,拖進烘焙好的紋理ReflectionProbe-0.exr,點擊baked。
c:Realtime模式: 可以實時的更新反射圖,在這種類型的反射頭不需要將被反射的物體勾選為Static, 能實時, 但是性能要求高;
Dynamic Object: 將場景中的沒有標識為Static的對象烘培到發射紋理中;
Cubemap: 烘培出來的立方體紋理圖;
Refresh Mode 刷新模式: OnAwake只在喚醒時刷新,EveryFrame 每幀刷新, Via Scripts 有腳本控制;
Time slicing: 反射畫面刷新頻率: All face at once: 9幀完成一次刷新(中等) Individual Faces: 14幀完成刷新(性能消耗低) no time slicing: 每幀刷新(性能消耗最大);
Importance: 權重,根據權重來混合不同Probe的反射情況;
Intensity: 反射紋理的顏色亮度;
Box Projection: 若是勾選此項, Probe的Size和Origin會影響反射貼圖的映射方式;
Size:該探頭的區域大小,在該區域內所有的物體都會應用反射(需要Standard著色器);
Probe Origin: 反射探頭原點,會影響到捕捉到的Cubemap;
HDR 生成Cubemap中是否使用高動態范圍圖像(High Dymainc Range)這也會影響探頭的數據存儲位置;
Shadown Distance: 在反射圖中的陰影距離,超過該距離陰影不會被反射;
ClearFlags: 設置反射圖中的背景是天空盒或者是單一的顏色;
Background: 設置背景的顏色;
Culling Mask: 反射剔除,決定哪些層的物體是否進行反射;
Using Occlustion Culling: 烘培時,是否啟動遮擋剔除;
Clipping Plances: 反射的裁剪平面,有near, far兩個個參數
?
?
位置大小
1:反射探頭是由物體掛載 Relfection Probe來決定的,位置設置完畢后需要設置大小;
(1)根據需要反射物體的大小對探針進行擺放,場景的中心,墻壁的角落, 若有一些物體比較小又有強烈的視覺效果(比如篝火), 就需要探頭距離它很近能得到很好的反射效果;
(2)放好探頭后要設置探頭的大小,探頭的形狀似一個軸對稱的立方體,如果在立方體內有對應的著色器,其反射效果就會根據其所在的反射探頭的區域進行顯示。若有多個探頭,根據權重進行混合;
(3)默認情況下探頭的原點是幾何中心,可以通過Probe Origin參數進行偏移,一個大的物體來反射一個從邊緣接近他的點。
?
?
循環反射
1:循環反射: 兩個物體可以都反射,那么就會形成循環反射 --- interReflection;
2: Unity不能無限循環下去,可以設置循環次數: window-->Lighting-->Environment Lighting Reflection Bounes來控制反射的次數, 最大反射次數為5次;
?
?
反射探頭實例
1.創建Unity工程和文件目錄
2.把天空盒資源文件夾拖到res下,在res下創建一個Materials文件,在里面創建一個天空盒材質叫Skybox
3.設置材質球Skybox的Shader---->Skybox---->6sided,把天空盒的6張紋理關聯到Skybox材質
4.創建一個平面plane,調大這個plane的大小scaleX=100,scaleZ=100
5.創建一個空節點Ref_object,添加反射探頭的組件Relfection Probe,設置Clear Flag為Skybox,有一個黃色的框框,在這個框框內的物體都會參與反射
6.為了看見反射的材質,創建一個材質球ref在Materials文件夾下,勾選允許反射Reflections,調一下Metallic到一半,Smoothness到最高
7.把ref材質關聯到plane的材質屬性上,整個平面像一個鏡子。
8.創建一個cube,設置為Lightmap Static,Ref_object設置type為baked,把cube移動到Ref_object的黃色框框的范圍里面,這時候就可以看見plane有一個cube的反射和一個cube的陰影,如果去掉cube的static,就看不見反射,因為是烘焙出來的,對象必須是static。
9.如果沒有節點Ref_object,是不會反射cube到plane的,因為plane的材質是原本設定好的反射,是勾選Reflections造成的,不是動態的,這個節點的作用就是在它的黃色框框的范圍內如果有物體,會把這個物體在plane上的反射紋理添加到plane材質上,可以看到plane材質球有變化。
轉載于:https://www.cnblogs.com/HangZhe/p/7257172.html
總結
以上是生活随笔為你收集整理的关于Unity中的光照(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java集合系列四】HashSet和L
- 下一篇: Quartz Properties 文件