关于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 * , 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中的光照(七)的更多相关文章
- 关于Unity中的光照(六)
反射探头 1:镜子金属等具有光滑表面的物体都会反射,而游戏中计算实时反射非常消耗CPU的资源, unity5.0新增了一个反射探头的技术,通过采样点,生成反射Cubemap,然后通过特定的着色器从Cu ...
- 关于Unity中的光照(五)
Mobile Diffuse Unity自带的一种shader,用的比较多,性能还可以.我们默认创建的unit shader基本和它一致,但是没有参与光照计算,看起来和Mobile Diffuse有区 ...
- 关于Unity中的光照(四)
渲染路径和颜色空间 1:Unity光影效果可以通过设置 渲染路径和颜色空间;2: 渲染路径: 光照到物体表面,物体着色的时候,算上光的颜色的时候有这么几种光照的着色方式,计算着色的方式 forward ...
- 关于Unity中的光照(三)
法线贴图 次时代游戏用的比较多 1:法线贴图是凹凸贴图技术上 的一种应用,有时也称为Dot3(仿立体)凹凸纹理贴图;2: 法线贴图是不增加多边形的情况下,增强模型的细节;3: 法线贴图是高精度模型导出 ...
- 关于Unity中的光照(二)
光源 1: 光照的本质:就是光的颜色和物体纹理的颜色的混合;2: 光源类型: 点光源,定向光源,聚光灯, 区域光源; 区域光的范围会在场景中用黄色的光显示出来; z轴是光的方向; 光的强度会随距离衰减 ...
- 关于Unity中的光照(一)
一.光源定义 光源,是一个普通节点加一个Light组件,创建的时候可以直接创建光源节点,也可以先创建一个空节点,再添加Light组件实例. 二.颜色形成 看到的物体颜色受两个很重要的因素的影响,一个是 ...
- 浅析Unity中的Enlighten与混合光照
0x00 前言 在Unity的5.6版本之前的5.x中,主要使用了Geomerics公司的Enlighten[1]来提供实时全局照明以及烘焙全局照明,在5.6之后Unity引入了新的Lightmapp ...
- 【Unity Shader】(七) ------ 复杂的光照(下)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- Unity Shader入门精要学习笔记 - 第6章 开始 Unity 中的基础光照
转自冯乐乐的<Unity Shader入门精要> 通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象. 首先,光线从光源中被发射出来. 然后,光线和场景中的一些物体相交 ...
随机推荐
- [svc]mount命令及解决因/etc/fstab错误导致系统不能启动故障
mount命令-手动挂载设备 格式: mount [options] [-t fstype] [-o option] 设备 挂载点 mount -n -o remount,rw / - Mount t ...
- 未能为数据库 '*'中得对象'*'分配空间,因文件组'PRIMARY'已满
服务器使用mssqlserver2005,最近经常出现无法新增信息错误,查看日志,发现严重错误提示,内容大致为: 无法为数据库 'weixin_main' 中的对象 'dbo.wx_logs'.'PK ...
- (原创)c++11改进我们的模式之改进表驱动模式
所谓表驱动法(Table-Driven Approach),简单讲是指用查表的方法获取值.表驱动是将一些通过较为复杂逻辑语句来得到数据信息的方式,通过查询表的方式来实现,将数据信息存放在表里.对于消除 ...
- Tornado使用-简介
1.什么是Tornado Tornado是一个python web框架,和一个异步网络通信库. 因为它的非阻塞网络IO,可同时支撑万级别的连接请求. 适用于长轮询,全双工websocket通信. 2. ...
- 说说Python程序的执行过程
1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...
- Linux环境变量相关总结
Linux下环境变量分为全局和局部变量两种. Linux 下通常提供三种工具可以可以查看环境变量:printenv.env.set.前两个可以查看全局环境变量,最后一个会打印包含全局和局部环境变量. ...
- 关于一点pthread_cond_t条件锁的思考以及实验
转:http://blog.csdn.net/aniao/article/details/5802015 APUE上,关于条件锁.其中有这么几条总结: 1.使用条件锁前必须先锁住对应的互斥锁. 2.条 ...
- python中如何使用requests模块下载文件并获取进度提示?
Reference: https://www.zhihu.com/question/41132103 #!/usr/bin/env python3 import requests from conte ...
- 基于jQuery实现滚动新闻代码下载
分享一款基于jQuery实现滚动新闻代码下载.这是一款基于bootstrup 3实现的响应式jQuery滚动新闻插件.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div ...
- iis下php 500错误
很不想用iis,然而客户不想增加机器,只好按客户的意思了.可是没想到发送短信以在本地 机器上是好的,在iis下直接500. 一开始以为是防火墙问题,后来检查了一下没有,再后来换了一个短信接口, ...