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

  • 相关阅读:
    Java
    Leetcode 计划
    Java虚拟机
    浅谈 MVP in Android
    【PAT】B1074 宇宙无敌加法器(20 分)
    【PAT】B1076 Wifi密码(15 分)
    【PAT】B1075 链表元素分类(25 分)
    【PAT】B1077 互评成绩计算(20 分)
    【PAT】B1078 字符串压缩与解压(20 分)
    【PAT】B1079 延迟的回文数(20 分)
  • 原文地址:https://www.cnblogs.com/HangZhe/p/7257520.html
Copyright © 2020-2023  润新知