關於Unity中的光照(七)


全局光照 GI

這里所說的反射就是,一個紅色的物體,當太陽照射它的時候,它周圍的物體也會變得有點紅。

1:Realtime每幀都會計算光照,實時光照是不會反射的,所以它的光影顯得單調;
2:Baked GI:通過烘培光照貼圖的方式獲得很好的光照效果,無法實時的改變光照;
3: 預先計算全局光照: Precumputed Realtime GI
 實時光照不能很好的顯示間接光照的效果, 比如實時光照到一個紅色的物體上。
 紅色物體發生反射,本來如果是實時不會有反射,如果使用預先光照,那么會預先計算好靜態物體的反射, 讓物體顯示出間接光效果;
4: 環境光

 

 

預先全局光照思路

先把物體標記為靜態,預先把光的反射計算出來,實時光照+光的反射=既有實時光照又有反射,性能也不錯。

1: 使用實時光照,編寫場景;
2: 開啟預先光照選項 Window --->Lighting-->Scene面板-->Precomputed Realtime GI;
 Realtime resolution代表間接光照分辨率,值越高間接光照效果越明顯,間接光就是太陽照在物體上,物體反射出的太陽光就是間接光。
3: 運行場景,看到光源角度變化后,場景中的光影效果也是實時的;
4: 通過預先光照,有效的降低了原本要在游戲中實時計算的全局光照運算數量,若用戶需要在游戲中頻繁的對光源修改顏色,光源方向,光源強度,一般使用預先光照;
5: 預先光照也是針對靜態物體而言;對於動態物體時不會計算預先光照的;
6: 實時光照 + 預先光照 對靜態物體生成反射效果;

 

 

全局光照GI實例

1.創建Unity工程和文件目錄

2.去掉環境光Window---->Lighting---->Skybox設置為none

3.創建一個平面plane和一個立方體cube搭建靜態場景,創建Materials文件夾,里面再創建一個紅色的材質球

4.使立方體cube關聯紅色材質球,這時候光線照下來,發現地板plane上只有恨生硬的陰影。

5.創建一個腳本來控制太陽光源繞着世界坐標的y軸旋轉,使得光照不斷變化,腳本叫rotate_lighgt,掛載在Directional Light節點下

打開rotate_lighgt:

using UnityEngine;
using System.Collections;

public class rotate_light : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        this.transform.Rotate(Vector3.up, Time.deltaTime * 50, Space.World);//繞世界的y軸旋轉,1秒鍾轉50度,Space.World是讓它繞世界坐標系的y軸旋轉,沒寫的話會繞它自己坐標系的y軸旋轉
                                                                            //顯然,Time.deltaTime是按照每秒來統計的。 Update()的刷新是按照每幀來顯示的,但是Time.deltaTime是按照秒來統計的。
    }                                                                       //我的理解是我們這里只設置它1秒鍾,也就是1個Time.deltaTime轉多少度,系統會幫我們計算每一幀該轉多少度(除於60),然后每次update的時候都轉這個它自己計算好的角度
}

6.把cube和plane都標記為static,打開預先光照Window---->Lighting---->Scene---->Precomputed Realtime GI,出現反射光,比之前的逼真

 

 

 

光照總結

分類:

1.實時光照:模擬現實生活中的光照打在物體上,分為點光源,聚光燈,太陽光

          這些光有一些特性如:Draw Halo光暈,Flare耀斑(光源對着攝像頭才能看見)

       特點:不能參與反射,就直接光照加陰影,性能開銷大

 

2.baked光照貼圖:把光源都配置成baked或者mixed模式,把物體都配置成static,烘焙出整個的光照貼圖,區域光源只有在這個模式下才能使用

         特點:效果和性能都很好,但是再也不能改變

         兩個問題:1.動態物體進到場景中怎么辦---->光探頭Light Probes,動態物體收集光探頭信息,最后把光探頭信息作用在動態物體上面,所以動態物體就能很好地融合到靜態烘焙好的光照場景里面

              2.沒有反射,想做倒影怎么辦---->反射探頭Reflection Probes,在場景中布置一個反射探頭的點,布置好了以后,

                 會把周圍的物體的投影反射到動態材質上面,某個物體(plane)再貼上這個動態材質顯示出來,這樣就能顯示出倒影。

                 反射探頭模式:1.realtime  2.baked  3.custom(和baked模式唯一不同的是手動關聯反射貼圖,勾選Dynamic Object,可以不勾選cube的static)

 

3.預先光照:由於光源不參與反射,當光打到紅色物體上,明明應該有紅色的光反射出來,但是只有黑黑的陰影,效果不好,這時候就要使用預先光照。先把物體標記為靜態,預先把光的反射計算出來,實時光照+光的反射=既有實時光照又有反射,性能也不錯。

 

技術:

1.天空盒SkyBox,用在兩個地方,一個是只對攝像機有用的,一個是全局Window---->LIghting---->Scene---->Environment Lighting下面的

2.自發光材質Emission

3.法線貼圖(Normal map),希望模型更精細又不增加模型頂點

4.環境遮罩貼圖(Occulsion),更加逼真的模型貼圖,黑色(不透光)白色(透光)紋理圖

5.光照過濾cookies(窗戶投影),黑色(不透光)白色(透光)紋理圖

6.二級紋理貼圖Secondary Maps

7.環境光的設置Environment Lighting

 

自帶的shader模式:

1.Mobile Diffuse

2.Standard

3.Lagacy Shaders---->Bumped Diffuse(既能帶基礎的漫反射貼圖又能加法線貼圖)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM