全局光照 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 * , 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(既能带基础的漫反射贴图又能加法线贴图)

关于Unity中的光照(七)的更多相关文章

  1. 关于Unity中的光照(六)

    反射探头 1:镜子金属等具有光滑表面的物体都会反射,而游戏中计算实时反射非常消耗CPU的资源, unity5.0新增了一个反射探头的技术,通过采样点,生成反射Cubemap,然后通过特定的着色器从Cu ...

  2. 关于Unity中的光照(五)

    Mobile Diffuse Unity自带的一种shader,用的比较多,性能还可以.我们默认创建的unit shader基本和它一致,但是没有参与光照计算,看起来和Mobile Diffuse有区 ...

  3. 关于Unity中的光照(四)

    渲染路径和颜色空间 1:Unity光影效果可以通过设置 渲染路径和颜色空间;2: 渲染路径: 光照到物体表面,物体着色的时候,算上光的颜色的时候有这么几种光照的着色方式,计算着色的方式 forward ...

  4. 关于Unity中的光照(三)

    法线贴图 次时代游戏用的比较多 1:法线贴图是凹凸贴图技术上 的一种应用,有时也称为Dot3(仿立体)凹凸纹理贴图;2: 法线贴图是不增加多边形的情况下,增强模型的细节;3: 法线贴图是高精度模型导出 ...

  5. 关于Unity中的光照(二)

    光源 1: 光照的本质:就是光的颜色和物体纹理的颜色的混合;2: 光源类型: 点光源,定向光源,聚光灯, 区域光源; 区域光的范围会在场景中用黄色的光显示出来; z轴是光的方向; 光的强度会随距离衰减 ...

  6. 关于Unity中的光照(一)

    一.光源定义 光源,是一个普通节点加一个Light组件,创建的时候可以直接创建光源节点,也可以先创建一个空节点,再添加Light组件实例. 二.颜色形成 看到的物体颜色受两个很重要的因素的影响,一个是 ...

  7. 浅析Unity中的Enlighten与混合光照

    0x00 前言 在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten[1]来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapp ...

  8. 【Unity Shader】(七) ------ 复杂的光照(下)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  9. Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照

    转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...

随机推荐

  1. 【Unity】11.4 车轮碰撞体(Wheel Collider)

    分类:Unity.C#.VS2015 创建日期:2016-05-02 一.简介 车轮碰撞体 (Wheel Collider)专门用于创建汽车或其他移动交通工具. 车轮碰撞体是一种针对地面车辆的特殊碰撞 ...

  2. extern C的作用具体解释

    转载于:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html 1.引言 C++语言的创建初衷是"a better ...

  3. Java中创建String的两种方式差异

    我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd"; String str2 = new String("abcd&qu ...

  4. 每日英语:The best time for coffee is 10:30 a.m.

    For many of us, it is the rocket fuel that gets us going first thing in the morning. But one expert ...

  5. Airlaunch 快捷设置代码分享

    Airlaunch 快捷设置代码分享设置:prefs:root=SETTING蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_IDWIFI:prefs:root=WIFI定位 ...

  6. Python3求m以内的素数、求m个数中最小的n个数

    [本文出自天外归云的博客园] 题1:求m以内的素数(m>2) def find_all_primes_in(m): def prime(num): for i in range(2, num): ...

  7. html页面去掉滚动条

    有时候特别需要,个别网页要去掉横向滚动条和竖向滚动条,那该怎么去掉呢,很简单,看代码: 让竖条没有: <body style=`overflow:-Scroll;overflow-y:hidde ...

  8. laravel iis搭建

    1.urlrewrite https://www.iis.net/downloads/microsoft/url-rewrite 2.安装phpmanager 3.目录定位到public 赋给iuse ...

  9. java基础篇---Servlet监听器

    在写此篇前,看了一下园友写的,感觉其基础知识归纳的十分全面,我在此就不累赘的写了,链接地址(http://www.cnblogs.com/sherryueda/p/4273169.html), 我就写 ...

  10. Android 避免APP启动闪黑屏(Theme和Style)

    前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解决,最后找到了下面的方法.闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和on ...