Unity光照与渲染设置学习笔记
学习了一下unity中有关光照和渲染的一些设置,现在才明白之前遇到的一些问题只是没有正确设置而已。
unity不同版本的光照设置会有一些差异,而且可以调节的参数非常多,这里只记录一些重要的参数和使用方法,具体使用时再查阅文档即可。
调节这些参数的主要目的就是在性能和画面效果上达到平衡,所以具体怎么调还是看游戏需求。
作为一个还不懂图形学的萌新,只是从效果出发学习这些设置,并不了解原理,如果写的不好,请见谅。
unity版本:2018.3.2f1
1.色彩空间
打开项目首先要设置的就是色彩空间,unity中有Linear和Gamma两种色彩空间可供选择,这两种色彩空间的效果如下图所示,很明显Gamma空间在表现上不如Linear空间自然、真实,很容易曝光过度,所以如果想要更好的画面效果,建议选择Linear空间,如果追求性能,比如移动平台游戏可以考虑选择Gamma空间。

unity2018.3.2f1中可以在Edit->Project Settings->Player->Other Settings下选择色彩空间。

2.天空盒
天空盒的本质其实是一个材质,要自定义天空盒,只需创建一个材质,将shader选择为Skybox下的一种,赋予对应的图片,然后将材质拖入场景,就能使用自己的天空盒了!


3.环境光
接下来就是最重要的Lighting面板的设置了,unity2018.3.2可以在Window->Rendering->Light Settings打开,这个面板包含了大量与光照和渲染相关的设置,直接影响到游戏的画面效果。
咱们一点一点来,先从Environment选项开始,这里包含了一些与环境光照相关的设置。

Skybox Material用于指定天空盒,跟直接把天空盒材质拖进场景没有区别。
Sun Source不需要设置,unity会默认把场景中最强的平行光作为太阳,这样当你旋转平行光时,天空盒上的太阳也随之移动,并且场景会有白天黑夜的变化。
Environment Lighting用于设置环境光源,选择skybox则环境光来自天空盒,如果将Source设置成color就可以自定义环境光的颜色。
下图为使用天空盒作为环境光和自定义环境光为红色的效果,很多游戏为了营造气氛,都会使用自定义的环境光。



Environment Reflections决定环境反射,如果你的场景中有镜子或其他带有反射性的物体,这个选项决定它们反射什么对象,你可以使用天空盒,或者自定义的CubeMap,值得注意的是,如果你发现反射的内容很模糊,可以调节Resolution参数, 提高反射的分辨率。
4.灯光参数
简单说一说unity里的灯光,unity有四种灯光类型,分别是聚光灯、平行光、点光源、区域光,每种光源有一些特殊的参数可以调节。

光源模式可以选择Realtime(实时)、Mixed(混合)、Baked(烘焙)三种,实时灯光对性能消耗最大,烘焙模式可以将预先将灯光烘焙成光照贴图所以性能最优,而Mixed介于两者之间。

Shadow Type决定了光源对阴影的影响,可以选择无阴影、硬阴影或软阴影,还可以调节阴影的强度、分辨率、偏移等,软阴影最耗性能,硬阴影其次。

5.全局光照(Global illumination)
接下来是两个全局光照选项,分别是实时全局光照和烘焙全局光照,通常这两个只要开一个就行,取决于你的游戏使用实时光照还是烘焙光照。

Mixed Lighting下可以选择Lighting Mode,有Baked Indirect,Subtractive,Shadowmask三种

其中Subtractive效果最差,性能最好,Baked Indirect效果最好,性能最差,Shadowmask居中。
6.烘焙光照参数
下面来看看烘焙光照相关的参数,这决定了你烘焙出的光照贴图是什么样的。

这里只说一些重要的参数。
LightMapper可以选择烘焙方案,一般默认就行。
Lightmap Resolution光照贴图分辨率,这直接影响烘焙的时间长短。
Lightmap Size决定光照贴图大小。
Compress Lightmaps决定是否压缩光照贴图,如果追求更好的画面请取消压缩。
Ambient Occlusion决定是否开启环境光遮蔽,想要更真实的效果请开启。
Indirect Intensity决定间接光的强度,可以调整场景的整体亮度。

设置好这些参数之后记得将场景中的静态物体设置为Lightmap Static,这样才会受到烘焙光照的影响,然后点击Lighting面板最下方的Generate Lighting,即可开始烘焙光照贴图。
烘焙完之后相当于把光照贴到了物体身上,即使把场景中的灯光删除,光照也依然存在,不过此时移动灯光或物体,物体的阴影并不会改变,所以只有不移动的物体才适合烘焙光照。
7.后处理
最后简单说说屏幕后处理,这是一种快速提升游戏画面效果的“黑科技”,在unity asset store上可以免费下载unity官方的后处理插件Post Processing Stack。
使用方法如下:
在project面板中右键Create->Post-Processing Profile创建一个后处理配置文件

后处理配置文件中有很多效果选项,点击前面的勾即可启用,每个选项有各种参数可以调节,感兴趣可以自己尝试,我个人认为Bloom真的非常好用,它能使画面亮部产生光晕效果,让你的游戏瞬间变得如梦似幻,还有Color Grading,可以改变画面的色调、饱和度、对比度等等,非常实用,可以帮助你快速营造出特定的场景氛围。

设置好配置文件之后之后,在摄像机上挂载Post Processing Behaviour这个脚本,并把我们刚配置的文件拖上去,然后就大功告成了!

下面是不使用后处理和使用后处理的对比,我没有对物体和灯光做任何改变,只随手调了一些后处理参数,可见后处理的强大。


关于光照和渲染,其实还有太多的知识,但普通的开发者使用这些设置已经能达到不错的效果了。
最近其实还是挺迷茫的,写博客的时候反而能静下心来,倒也是意料之外的收获。
接下来的规划准备学习一些编程模式和算法,时间充裕的话想把游戏美术搞起来,加油!
Unity光照与渲染设置学习笔记的更多相关文章
- PBR(基于物理的渲染)学习笔记2
相关资料 https://www.cnblogs.com/dojo-lzz/p/13237686.html 文档:PBR学习笔记.note 链接:http://note.youdao.com/note ...
- PBR(基于物理的渲染)学习笔记
PBR基本介绍 PBR代表基于物理的渲染,本质上还是 gl_FragColor = Emssive + Ambient + Diffuse + Specular 可能高级一些在考虑下AO也就是环境光遮 ...
- UINavigationController的创建和相关设置---学习笔记四
导航控制器 一.设置字体大小,背景等. 二.自定义返回按钮. 三.设置手势. 一.导航中也有个appearance属性,通过它可以设置所有导航的颜色. 二.自定义返回按钮. 1.首先需要知道的是,要把 ...
- secureCRT简单设置(学习笔记二)
菜鸟记录. 一.更改终端类型 选项-全局选项-默认会话-编辑默认设置-终端-仿真-右侧选择类型,下方设置缓冲区大小 二.设置字体和外观 上方窗口外观-右侧设置-字体设置字体类型大小,下面光标可以设置光 ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- Stealth视频教程学习笔记(第一章)
Stealth视频教程学习笔记(第一章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
随机推荐
- 详解Oracle DELETE和TRUNCATE 的区别
原文地址:http://www.cnblogs.com/simplefrog/archive/2012/07/30/2615169.html 语法delete from aa truncate tab ...
- 实现CTreeCtrl父子节点的联动选择
本文实现了下面的功能: 当选中父节点时, 其所有子节点全部选中. 当取消选中父节点时, 其所以子节点全部取消选中. 点击子节点时, 根据子节点与其兄弟节点的选中状态, 自动设置父节点的选中状态. 通过 ...
- 使用Python+opencv2时的文件命名及路径问题
最近在做一个数字图像的小项目,在最后的界面与程序结合阶段总是出现单个程序可以运行,但是使用界面传递的参数就运行不了的情况.在网上查了很多相关错误,最终确定是文件命名问题. 错误如下: cv2.erro ...
- 【项目 · Wonderland】预则立 && 他山之石
[软 工 实 践 · 团 队 作 业] 预则立&&他山之石 标签:WonderLand Part 0 · 简要目录 Part 1 · 团队计划 Part 2 · 团队访谈 Part 3 ...
- BZOJ2815:[ZJOI2012]灾难(拓扑排序,LCA)
Description 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学过 ...
- ELK (Elasticsearch+Logstash+Kibana)部署
部署机器: 服务端:dev-server X.X.X.X ( logstash-1.5.4,elasticsearch-1.7.1,kibana-4.1.1 ) 客户端:dev-cli ...
- docker镜像的创建方法docker commit方式
Docker 提供了两种构建镜像的方法: docker commit 命令(交互式修改创建) Dockerfile 构建文件 (文本命令定义) Docker commit方法: 1.运行一个现有容器 ...
- 真实的物理机安装Centos7系统后网卡只有lo没有eno1的解决办法:实际上是物理机未安装网驱动卡
问题症状: 我真实的物理机安装Centos7系统后,在/etc/sysconfig/目录下查看,发现网卡只有lo没有eno1,出现该问题的实际原因是物理机未安装网驱动卡. 解决办法: 不多说了,让我们 ...
- 在Node.js中操作文件系统(一)
在Node.js中操作文件系统 在Node.js中,使用fs模块来实现所有有关文件及目录的创建,写入及删除操作.在fs模块中,所有对文件及目录的操作都可以使用同步与异步这两种方法.比如在执行读文件操作 ...
- Python2.7-struct模块
struct模块 处理二进制数据,与C语言交互,可以较为方便的对C语言的struct类型和python中的数据进行转换 主要是用于将int,char之类的C语言中基础数据pack至一个二进制流的字符串 ...