反射光特指除天空漫反射之外的所有环境漫反射。 在Unity3D中,主要是通过光照贴图或者光照探针来模拟。
自发光物体。 在Unity3D中,自发光物体本身的亮度仅通过颜色来模拟,而自发光物体对环境的影响则通过光照贴图或光探针来模拟。
2.1 天空盒和环境
Unity3D的天空盒类似于Maya中天空球的概念。 它在场景的外围生成一个封闭的、面向前方的环境,以模拟天空的颜色和光照效果。 不过,Unity3D的天空盒使用的是Box形的天空环境而不是球体,并且使用6种不同的纹理而不是1种全景纹理作为天空纹理。
我们可以将Maya中常用的全景HDR环境贴图转换为适合Skybox的方形贴图来创建我们自己的Skybox。 这种转换可以在地图设置中完成:
Skybox 的纹理均为 .exr 图像格式,具有高动态颜色深度(俗称 HDR 图像)。 最好不要使用.jpg或.png等传统的8位颜色深度图像来制作Skybox,除非我们确认场景不需要纹理(这种情况下,Skybox只会起到一个环境图)。
对于简单的场景(或者刻意追求纯粹的效果),可以使用纯色天空而不使用Skybox。 即使游戏不需要看到天空,也可以直接设置为None。
场景中天空盒的光照效果主要来自于它对环境光的影响。 天空盒贴图生成的环境光肯定比纯色环境光更丰富,也更符合天空的颜色。
环境光所需的计算量很小,因此是一种非常有效的照明方法。 不要忽视它。
2.2 光照贴图和烘焙
简单来说,Lightmap就是利用纹理来模拟全局光照的效果,但是Lightmap在当今的游戏引擎中的作用远不是纹理那么简单。 根据官方的说法,Lightmap不仅可以包含物体表面的光照颜色信息(传统Lightmap功能),还可以包含物体之间的光线穿透关系信息(新版本中的Realtime Lighting功能),也就是说,动态光源还可以为具有烘焙光照贴图的静态场景对象产生正确的光照。
光照贴图需要将所有参与场景对象的UV重新排列组合成一个相互不重叠且变形尽可能小的方形结构,然后将光照信息烘焙成一张或几张较大尺寸(最大4K)的贴图。 这些烘焙后的纹理会存储在场景文件所在目录中与场景文件同名的子目录中,因此在烘焙光照贴图之前需要保存场景。
光照贴图烘焙参数设置
环境:环境参数设置
天空盒材质:设置天空盒材质
太阳来源:落日。 您可以指定一个平行光作为太阳,然后平行光的旋转角度将影响其亮度和颜色。
环境照明:有关环境照明的设置
光源:环境光源
- Skybox:来源于天空盒
- Gradient:来源于一个从地平线到穹顶的颜色渐变
- Color:来源于单色
强度倍增器:环境光强度增强
环境模式:环境光模式
- Baked:烘焙在光照贴图中
- Realtime:实时
环境反射:有关环境反射的设置
来源:环境反射源
- Skybox:来源于天空盒
- Custom:来源于一个自定义的Cubemap(方盒贴图)
分辨率:环境反射贴图分辨率
压缩:是否压缩环境反射贴图
强度倍增器:环境反射强度增强
Bounces:环境反射计算次数
实时光照:有关实时光照烘焙的设置
Realtime Global Illumination:是否进行实时光照烘焙
混合照明:有关混合照明烘焙的设置
Baked Global Illumination:是否进行混合光照烘焙
照明模式:照明模式
Baked Indirect
Distance Shadowmask
Shadowmask
Subtractive
光照贴图设置:光照烘焙的常用设置
光照贴图器:选择光照烘焙器
Enlighten:这是常用的烘焙机
Progressive(预览版):这是面包师的新版本,仍处于预览状态。 它会先烘焙相机可见的区域,然后烘焙其他区域,因此预览速度更快。
Indirect Resolution:间接光照分辨率(单位长度有多少个体素(texels)),值越高,光照细节越高
Lightmap Resolution:光照贴图分辨率(单位长度有多少个体素),通常设置为间接分辨率的10倍左右
Lightmap Padding:纠正两个对象的Lightmap之间的距离以避免颜色渗色
Lightmap Size:光照贴图大小(最大 4096)
压缩光照贴图:是否压缩光照贴图
Ambient Occlusion:是否烘焙环境光遮罩
Final Gather:是否对最后一次GI光反射后的光照结果进行另一次FG计算。 如果检查的话,质量会更好,但烘烤时间会增加。
定向模式
间接强度:间接照明的强度
反照率提升
光照贴图参数:设置详细的光照贴图参数(您可以使用几个默认值,或者创建新的设置,这应该适合有经验的用户)
其他设置:其他设置
雾:添加场景雾效果
Color:雾效颜色
Mode:雾效衰减模式
3Density:雾效密度
设置完成后,不要忘记单击“生成光照”按钮来烘焙光照贴图!
烘焙光照贴图需要时间。 新版本的Unity3D提供了自动烘焙功能:AutoGenerate选项,它可以让我们调试场景时不用频繁手动点击Bake按钮,但是自动烘焙的结果不会被存储,所以光照贴图仍然需要烘焙在最终发布之前手动进行。
注意,从名称上看,很容易将“自动烘焙”和“实时全局照明”这两个设置等同起来,这是一个非常大的误解。
定义光照贴图比例
由于所有场景对象都被打包到一个大纹理中,因此多边形面片上的光照信息的准确性受到纹理中与多边形面片对应的UV所占据的区域的限制。 为了场景优化,我们当然希望将有限的光照图区域尽可能多的分配给更多需要的物体,因此Unity3D在Mesh Render组件中提供了修改物体所占光照图比例的参数:
Scale In Lightmap(在光照贴图中缩放)控制对象在光照贴图重新排列中的 UV 缩放。 数字越小,比例越小。
如何确定哪些物体的紫外线比率低,哪些物体的紫外线比率高? 通常远处物体的比例低于近处物体的比例。 表面光滑的物体比例低于表面细节丰富的物体。 内部不太显眼的模型比例通常尽可能低。 地面或地形等面积较大的物体游戏素材下载 免费,中等比例为好,否则会挤占其他物体的光照图细节。
2.3 光探头
光照烘焙不适用于动态对象(Dynamic Objects),即未设置为 Lightmap Static 的对象。 如果要正确照亮动态对象,则需要创建 Light Probe Group。
Light Probe可以认为是场景中的一个小“光源”,多个Light Probe组成的网络就是一个Light Probe Group。 这些小光源被烘焙以获得场景中点的亮度信息,然后整个网络利用这些信息来照亮动态物体。
同时,只有距离动态物体最近的 Probe 才会生效,并且 Light Probe 距离移动物体越近,其光照效果越强。 我们可以根据场景的光照环境特征设置合适的Light Probe Group。
在场景中添加Light Probe Group可以很好地将动态物体与静态场景融为一体,尤其是在光照环境复杂的室内场景中,添加Light Probe Group显得尤为必要。
3、如何提高图像的渲染质量
Unity3D 中的图像质量由多种因素决定,默认参数设置通常不是最佳的。 我们制作游戏的时候,需要在游戏运行效率和游戏画面质量之间做出选择。
有些游戏(例如2D游戏)的游戏图形与渲染质量基本无关。 此时,您可以关闭一些影响性能的功能或选项,以提高运行效率。
但有些游戏(如3D游戏,或虚拟房产渲染等模拟应用)对图像渲染质量的要求较高。 我们还需要知道可以通过什么手段来增强画面效果,同时了解这样做会牺牲多少运行性能。 。
设置质量级别
Unity3D允许用户设置多个质量级别并在每个级别中使用不同的质量参数。 前面讨论阴影时谈到了这一方面。
对于新手来说,一个常见的错误是明明设置了高水平的图像质量,却以较低的水平预览场景,或者明明需要输出到WebGL(默认为中等质量水平),却不断调整最高质量水平参数。
选择渲染路径
简单来说,Deferred渲染路径的图像质量更高,但是Forward渲染路径在灯光不多的情况下速度更快。
阴影质量
当阴影中出现伪像时unity 天空盒动态变化,请调整 Bias 参数和 Normal Bias 参数。
复杂场景的阴影质量需要手动调整Cascade Splits参数中多个图层的比例,以保证附近阴影有足够的质量。
照明精度
使用反射探头
Unity3D中没有真正的Raytrace反射,但所有反射效果都是通过反射贴图模拟的。
如果我们在场景中放置一个反光性很强的球3D角色,我们可以看到球上实际反射的是我们的天空盒,根本不会反射场景对象。 这不仅影响场景中反光物体反射的准确性,而且严重影响整个场景的照明精度。
我们可以向场景添加反射探针来纠正不正确的反射贴图。
Reflection Probe 可以看作是一个有 6 个摄像头的点。 它将沿 6 个方向(前、后、左、右、上、下)渲染该点,将渲染结果组合成 Cubemap,并将其应用于特定框中的所有对象。 作为反射贴图。
对于更复杂的环境,例如具有多个区域的大房间,我们可以放置多个反射探头并手动设置其影响范围。
Reflection Probe默认不计算动态对象,仅计算烘焙对象。 我们可以修改属性以包含动态对象。 我们还可以修改Every Frame的属性,每帧更新它们,以准确反映动态物体的运动。 还可以在Lighting Settings中增加Reflection Bounces来增加反射次数(这样就不会出现一个强反射物体在另一个反射物体中是黑色的情况)。 但要注意,这些修改会占用更多的系统资源unity 天空盒动态变化,尤其是每帧更新反射贴图之类的设置。
4、如何提高烘焙效率
烘焙效率虽然不影响最终游戏的性能,但是对我们的制作流程却有着很大的影响。 没有人愿意每次修改场景布局或光照布局时都花几个小时甚至几十个小时来烘焙光照贴图。
一个小技巧是不要将所有对象设置为Lightmap Static来参与光照贴图烘焙。 许多精细物体(例如地面上的小砾石)不需要非常精确的间接光照效果,并且可能没有足够的光照图精度来对应这些精细物体。 这时,使用光探针可能比使用光贴图更有效。 高效的。