以下均为来自中国大学mooc 游戏引擎原理及应用时的学习笔记,不含商用,仅供学习交流使用,如果侵权请联系作者删除。
3.1渲染路径
最初的3D引擎也被称为渲染引擎,渲染就是通过计算机的运算,将三维场景最终转换成游戏画面的过程。
渲染过程可能的实现方法:渲染路径
讲这之前先来讲讲渲染流程:
左边是正向渲染路径,每个物体对于每个光照都是独立进行的。
右边的延迟渲染,把光照计算延迟到了最后一步。
相当于做了一次基于屏幕像素的计算。
接下来使用unity实际演示两种渲染路径的区别。
普通情况下光源数量是有限制的
我们可以在这里修改设置
这里可以修改光源数量
上面这些都是forward渲染的情况下
如果我们换成另外一种情况 延迟渲染:
将图形一栏中所有渲染路径换成延迟渲染
那接下来我们会看到 即使物体数量增加 SetPassCall数量也不会增加
这就是forward和延迟渲染的区别
3.2 颜色空间
渲染路径的选择和游戏的复杂度还有平台的选择有关系
渲染的最终目的是为了将屏幕像素填充特定的颜色
如何计算像素的颜色显得很重要
在游戏引擎中有两种颜色控制方式,也就是颜色空间
伽马颜色空间是
线性空间的着色运算需要做伽马矫正
在所有计算机颜色的管理当中 默认情况下都是伽马空间
进行线性空间运算需要做特殊处理
从上面这图也可以看出来 在计算过程也就是着色过程中才保持是线性空间
保存跟显示仍然是在颜色的伽马空间
这是伽马空间下的渲染情况
线性空间是这样的:
这是线性空间下的渲染结果
我们打开一个纹理
可以看到有一个sRGB的选项,这是在做一个伽马矫正。
这是因为一般的图片编辑软件走的都是一个伽马的流水线
一般情况下都需要点选,除非你选用的这个空间是线性颜色空间。 但是一般图片编辑软件都是伽马颜色空间,所以有必要点选。
总结:在现在越来越需要物理正确的渲染结果的情况下,线性空间变得越来越流行了。
3.3 摄像机
(提醒 这个选项可以选择是否让相机最大化
)
这里还可以选择多个视角来观察
右边这种情况下适用于判断物体真实大小的情况,比如说工程制图。
左边为透视,右边为正交
unity对于摄像机的支持非常细致
摄像机的一些属性:
清楚标志指的是将没渲染的地方用什么来替代
接下来我们看看深度的影响:
并且将主相机的深度设置为0
这样两个相机就深度不同
由于副相机只渲染深度
(Depth越大的摄像机 越靠近观众 就会覆盖掉深度小的摄像机的画面
由于两个摄像机的深度有所区别 然后深度小的摄像机的只渲染了深度 (于是只有盒子)
于是从另外一个摄像机看来前面就有两个摄像机
接下来讲下投影的视角:
透视视角:
近大远小
正交的效果:没有正大远小的区别
这个大小可以说是视野 也就是广角和窄角的那种区别
剪裁平面:
所有物体能够被渲染出来都是处于近裁剪面和远裁剪面中间的
离摄像机过近 超过近裁剪面 会被裁剪掉从而看不到
离摄像机过远 超过远裁剪面 也会被裁剪掉然后看不到
只有在裁剪面以内的东西才能看到 裁剪面以外的东西会被裁剪掉 是这样一个意思
摄像机下的渲染路径:
可以让针对性的让某个摄像机使用某个渲染
旧版的是被舍弃掉的不再用的除非针对某个特定的平台
后面这几个都是默认使用的情况
3.4 灯光
在unity里看看光照的属性
上面几个属性都比较简单 类型在后续的课程中会讲
这个光照中间接乘数是指影响到间接光照明 全局光照明系统的真实感
将cookies中的纹理效果移到光的剪影(Cookies)下可以使得这个光照可以产生投射的状态
important是逐像素渲染
not important则是快速渲染
让光源都某些物体层起影响
有几个灯光效果
3.5实时阴影
虽然画面是3D的 但是我们是用2D的设备显示的
有时候我们无法看来小球的位置关系是什么样的
在光照下这里可以实现阴影
还有阴影半径可以选择
在物体的属性一栏还可以选择是否接收阴影
3.6 材质
如果想让玩家看到的这个场景更加符合设计者的意图,还需要游戏场景的物体的表面和环境发生特定的交互,从而表现出你想要的特定的外观颜色来。
着色器+纹理=材质
车身和轮胎都使用了材质,使用了分别不同的材质,这些材质都由特定的材质和纹理构成。
虽然这两个材质不同,但使用的是同一个着色器和对应的车辆的纹理。
不同的地方在于这两个地方当中,着色器的参数调整不一样。
所以表现出来两个材质的颜色不一样。
这个就是形象的看一下材质和着色器纹理的关系。
我们在unity中进行演示
首先创造出一个材质
着色器:默认情况下是standard
还有渲染模式
平滑度会影响到物体表面的镜面反射的大小
法线贴图:影响物体表面法线分布,这个法线会影响到很多东西
包括下面的高度贴图
高度贴图:影响物体表面的这些顶点的高度的变化的
影响物体表面高度变化的大小
顶点的高度向哪个方向变化呢?就是法线方向变化
Emission:材质自发光
Tilling 平铺密度 越大的话发现越密集
当材质的y密度很大的时候如图所示
Offset 纹理坐标的偏移 可以调整偏移(对于球体来说就是纹理转圈的效果)
cutout的渲染模式:镂空的渲染模式
可以通过这个方法来调整透明度
当物体表面的不透明度小于这个阈值的时候 它就会被镂空掉
还有两种渲染模式
fade和transparent的渲染模式区别在于 transparent仍然会反射光
当调成全透明的时候 fade这种渲染模式下所有的都物体信息都看不清了
但是transparent还会反射光线
transparent用来模拟玻璃的效果
fade用来模拟消隐掉的效果
选中材质可以在这里看到材质的属性
当这个纹理被平铺的时候 它被平铺的模式是怎么样的
默认使用三线性滤波 是最好的滤波模式
3.7 全局光照明系统
首先如图所示 建立这样的材质和图的效果
但是我们发现这个室内的“墙壁”并没有阴影照射下来,我们需要进行光照调整
环境照明选中遮蔽
并且选中环境光遮蔽
此时就会生成这样的一个光照效果
(不知道为什么我的这个是这样子 不知道哪里出错了)
环境反射相当于这个反射从哪里来
光照贴图器默认用的是上图中的方式
红框中分辨率越高 光照效果越好 但是也意味着更大的系统开销
这个选项可以清楚当前的光照贴图
3.8 探针
全局光照明系统只对静态物体有效,因为静态物体的全局光照信息可以预先计算下来,涉及到动态物体的全局光则需要使用探针
探针:英文名为probe
我们在unity中来实现