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 ...
随机推荐
- mybatis 中的<![CDATA[ ]]>
在使用mybatis 时我们sql是写在xml 映射文件中,如果写的sql中有一些特殊的字符的话,在解析xml文件的时候会被转义,但我们不希望他被转义,所以我们要使用<![CDATA[ ]]&g ...
- OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)(转)
http://www.cnblogs.com/tornadomeet/archive/2012/08/23/2653305.html 在这一节中主要简单介绍下怎样给平面几何着色,以及怎样让绘制出来的几 ...
- C#中单问号(?)和双问号(??)的用法整理
1.单问号(?) 1.1 表示Nullable类型 C#2.0里面实现了Nullable数据类型 //A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者 ...
- Alpha 任务状态总览(持续更新)
Alpha 任务状态总览(持续更新) Part 0 · 简 要 目 录 Part 1 · 流 程 Part 2 · 总 任 务 量 安 排 Part 3 · 爬 虫 任 务 Part 4 · 接 口 ...
- MPT树详解
目录 MPT树定义 MPT树的作用是什么? 前缀树与默克尔树 前缀树 默克尔树 三种节点类型 MPT中的Merkle HP编码 官方表示形式 相关MPT树 参考目录 @ MPT树定义 一种经过改良的. ...
- linux 删除指定日期之前的文件
两种方法: 1. 在一个目录中保留最近三个月的文件,三个月前的文件自动删除. find /email/v2_bak -mtime +92 -type f -name *.mail[12] -exec ...
- jQ判断一个元素是否为空
// 方法一 if (!$('#jb51').html()) { //http://www.jb51.net 什么都没有找到; } // 方法二 if ($('#jb51').is(":em ...
- Codeforces Round #503 Div. 2
时间相对来说还是比较合适的,正好放假就可以打一打啦. A. New Building for SIS:http://codeforces.com/contest/1020/problem/A 题意概述 ...
- C#启动另一个应用程序并传参数
第一个程序: try { ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.FileName = "Windows ...
- shiro实战系列(九)之Web
一.Configuration(配置) 将 Shiro 集成到任何 Web 应用程序的最简单的方法是在 web.xml 中配置 ContextListener 和 Filter,理解如何读取 Shir ...