关于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(既能带基础的漫反射贴图又能加法线贴图)

原文地址:https://www.cnblogs.com/HangZhe/p/7257520.html