关于Unity中的光照

Posted 杭者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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模式,把物体都配置成static,烘焙出整个的光照贴图

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

         两个问题:1.动态物体进到场景中怎么办---->光探头,动态物体收集光探头信息,最后把光探头信息作用在动态物体上面,所以动态物体就能很好地融合到静态烘焙好的光照场景里面

              2.没有反射,想做倒影怎么办---->反射探头,在场景中布置一个反射探头的点,布置好了以后,会把周围的物体的投影反射到动态材质上面,某个物体(plane)再贴上这个动态材质显示出来,这样就能显示出倒影

技术:自发光材质,希望模型更精细又不增加模型顶点---->法线贴图(Normal map),光的遮罩(Occulsion),二级纹理贴图Secondary Maps。

自带的shader模式:Mobile Diffuse,Standard,Lagacy Shaders---->Bumped Diffuse(既能带基础的漫反射贴图又能加法线贴图)

以上是关于关于Unity中的光照的主要内容,如果未能解决你的问题,请参考以下文章

关于Unity中的光照

关于Unity中的光照

Unity5中的软阴影烘焙

第五章 Unity中的基础光照

Unity关闭shader中的光照模型以及如何自定义光照模型

Unity 5 中的全局光照技术详解 (转载)