unity Lighting
终于还是到了烘焙这里。(我用的unity版本是2017.2.0f3.新手一枚,如果有错误的地方,各位大哥及时指正.以免误人子弟.)
先来说下灯光的各个参数:
unity 的灯光有以下几种:
- Directional Light : 平行光(方向光) 最省资源 可以改变角度 联想:太阳
- Point light :点光源(由一个点向四周发射光源) 可以改变位置 联想:灯泡
- Spotlight:聚光灯(聚光/锥光) 最耗费资源 可以改变位置和角度 联想:手电 探照灯
- Area Light:面灯,区域光(创造灯光贴图烘焙时使用) 无法应用于实时光照
- Reflection Probe: 反射探头(在探头位置生成反射贴图,cube图的取样内容) 基于效能考虑反射探头越少越好,反射探头并非用来让物理得到精确结果,而是让游戏世界有更好的反射
- Light Probe Group: 灯光探测器组(保存灯光信息,让物体有真实的光照效果.)
注:4 5 6 都是用于烘培的,相当于在编辑器下保存信息,用于游戏模式下计算.
- Directional Light
Type:光源的类型。
Color:光照颜色。
Mode: 光照应用的模块。Realtime 实时光(灯光会作用于所有物体). mixed:混合模式(光源只对动态物体有效) . Baked:烘培(灯光只作用于静态物体).
Intensity: 光照浓度
Indirect Multiplier: 间接光照强度。如果大于1,每次反弹的光线更亮。如果小于1,每次反弹的灯光都会变暗。如果不需要反弹,设为0.
Shadow Type:阴影类型.(软阴影,硬阴影,无阴影) 烘培时需要产生影子的话使用软阴影。
硬阴影:
软阴影:
区别:边缘没有锯齿。
Strength:阴影的阴暗程度。
Resolution:分辨率,阴影的质量。如果阴影有
Bias:微调阴影的位置
Normal Bias:微调阴影的位置
Shadow Near Plane:解决这种阴影泄流的问题。 应该时这个效果:
Cookie: 指定投射阴影的纹理遮罩。这个纹理的阿尔法(alpha)通道作为一个遮罩,使光线在不同的地方有不同的亮度。如果灯光是聚光灯或方向光,这必须是一个2D纹理。如果灯光是一个点光源,它必须是一个立方图(Cubemap)。
可以用于制作:类似某些汽车,开门下车的时候,地上有汽车的标志 或者 提示文字的效果。 ,alpha 的通道就是 标志.
Cookie Size: 缩放 遮罩的缩放,可以放大上图的 BMW 效果 也可以缩小其效果。
Draw Halo :绘制光晕,光线带有一定半径范围的球形光晕被绘制. 勾选后:
Flare: 耀斑,在光的位置渲染出来. 制作方式:http://www.zf3d.com/bbs_list.asp?id=163486 后面详解
Render Mode: 渲染模式, auto Important 灯光是逐个像素渲染. Not Important 灯光总是以最快的速度渲染
Culling Mask : 消隐遮罩. 就是灯光只作用在那些层上面。
- Point light : Range 调节点光源的范围. Bake Shadow Radius: 阴影的柔化效果范围。
- Spotlight :Spot Angel :spot 灯光的角度范围。 Range 调节点光源的范围. Bake Shadow Radius: 阴影的柔化效果范围。
- Reflection Probe: 反射探头。只有标记为”ReflectionProbe Static”的对象才会被反射探头取样
Type:选择类型, 三种可选.
Baked:用于烘焙模式的,在Lighting面板下点击Bake进行烘焙光照贴图时,生成对应的反射贴图。
Custom:自定义一个cubeMap来指定反射贴图,选择Dynamic Objects可将非静态物体也给Bake出来.
Dynamic Objcts:动态物件也会被渲染到cubemap 上
Cubemap:指定反射Cubemap
Realtime:实时生成反射贴图,但是和实时光照一样的消耗性能.很少用, 一般作用于镜子效果。
如果要启用 实时的反射球,必须在QualitySetting里面勾选 是否支持realtime reflection probes。
Refresh Mode:刷新模式,On Awake 在创建的时候。Every Frame:每帧都刷新。 Via Scripting:脚本调用
TimeSlicing:反射贴图的刷新频率
All faces at once---9帧, 性能消耗中等. (9帧之内再次通过Via Scripting调用刷新是无效的)
Individual faces---14帧(在9帧的基础上加了将六个面分为六帧的那多出来的五帧), 性能消耗最低.(14帧之内再次通过Via Scripting调用刷新是无效的)
No time slicing---1帧. 所有动作都在同一帧执行, 这种性能消耗最大. (1帧之内再次通过Via Scripting调用刷新是无效的)
Importance:-自动混合比例
影响了一个MeshRenderer中的多个ReflectionProbe的Weight的自动混合比例. 当一个物体处在多个Reflection Probe的”领地”内的时候, 首先会考虑每个Reflection Probe的Importance, 之后, 在此基础上才会考虑每个Reflection Probe与该物体之间的分别的交叉的体积的大小. 也就是说Importance的优先级高于交叉体积的计算.
关于交叉体积的计算: For ex., if the first volume is 1.0 and the second is 2.0, then first probe’s influence will be 1.0 / (1.0 + 2.0) = 0.33, the second probe’s influence will be 2.0 / (1.0 + 2.0) = 0.67. 还有一种特殊情况, 就是就是一个小的Probe套在一个大的Probe里面, 而一个物体又完全在这个小的Probe里面, 那么对这个物体来说, 小的Probe的Weight会是1, 大的会是0. 而当这个物体逐渐脱离这个小的Probe的时候, 那么小的Probe和大的Probe对于这个物体的Weight会进行一个混合.
Intensity:强度,生成的CubeMap的明暗强度。
Box projection :
一般情况下,反射cubemap是被假设在无限远出投射出来的图像,不同的角度都能看到反射的团,但是当你距离反射物体远近改变时,这个反射的图案不会发生改变,这个特性,一般情况下,在室外场景很适用,但是到了室内就不行了,
开启Box projection 选项,(支持Shader Model3以上平台可用)允许我们创建一个投射有限距离内的物体,当我们与反射物体距离发生变化时,反射图案的尺寸也同样发生变化,Probe Size以及Probe Origin会影响Reflection Probe的映射图案的效果.
Blend Distance:两个反射探球的 混合距离
Box Size:反射探针的 box 大小
Box Offset:反射探针的 box 偏移值
Resolution:反射探针 生成的 CubeMap的分辨率,值越大,性能越耗,效果越好。
HDR: 高动态范围
Shadow Distance:反射阴影距离, 特性和Quality Setting中的特性一样, 数值越小, 在反射画面中阴影显示越近, 但阴影越精细, 调成0会完全关闭阴影.
Clear Flags:清除标记。决定屏幕的哪部分将被清除。
Skybox:天空盒。默认模式。在屏幕中的空白部分将显示当前摄像机的天空盒。如果当前摄像机没有设置天空盒,会默认用Background色。
Solid Color:纯色。选择该模式屏幕上的空白部分将显示当前摄像机的background色。
Back Ground :调整Cube Map的背景色
Culling Mask:剔除层标记,那些层要渲染,那些层不渲染。提高效率。
Use Occlusion Culling:启用遮挡剔除。
Clipping Planes: Near:近切面. Far:远切面。
调整摄像机的近远切面,生成CubeMap的实质,其实就是摄像机看6个方向,将6个方向看到的图片保存下来。
反射探球,需要注意的东西:
1、物体需要勾选反射探球标记(static->Reflection Probe Static)。Dynamic Objcts 会反射动态物体。 Realtime 就会反射所有物体 和标记无关。
2、要勾选 culling mask和clipping plane。一个是控制那些物体能渲染到贴图上,另一个是控制摄像机看到的远近。
3、当出现一个物体从一个反射探球,进入到另一个反射探球的时候,需要调节Importance控制他们之间的过渡。
4、分辨率:当反射细节不是很重要(反射物体很小或很远)时,可以将分辨率设置小点儿;
5、贴图压缩:可以通过控制烘焙反射探头贴图的压缩减少gpu消耗。在烘培面板设置。
- Light Probe Group: 灯光探测器组 (可以看下这篇文章:https://blog.csdn.net/qq617119142/article/details/41674755)
目的是为了:即使场景中没有灯光,人物进入场景的时候,任然有灯光的效果作用在物体上。
进入编辑模式, 点击Add probe,一个点一个点增加,或者使用Duplicate Selected 复制所选的点,让点把灯光照射范围包围起来.
注意:1、需要启用 Lightmap static 静态标记
2、需要关闭掉 被Light Probe Group 包围的灯光。
- Mesh Render Lighting
Light Probes: 照明插值模式
Off: 关闭
Blend Probes: 探针插值。 默认
Use Proxy Volume:渲染器使用插入光探针的3D网格。
Reflection Probes: 指定对象如何受场景中的反射影响。延迟渲染模式下,无法禁用。
Off:反射探头被禁用,天空盒将被用于反射。
Blend Probes: 反射探头已启用。 混合只发生在探头之间,适用于室内环境。 如果附近没有反射探针,渲染器将使用默认反射,但默认反射和探针之间不会混合。
Blend Probes And Skybox:反射探头已启用。 探头或探头与默认反射之间会发生混合,这对室外环境很有用。
Simple:反射探针已启用,但当有两个重叠的体积时,探针之间不会发生混合。
Anchor Override:用于确定使用光探针或反射探针系统时的插值位置的变换。
Cast Shadows:
On:当阴影投射在它上面时,网格会投下阴影
Off:当阴影投射在它上面时,网格不会投下阴影
Two Sided:双面阴影从网格的两侧投射。 Enlighten或Progressive Lightmapper不支持双面阴影。 无用选项,lightmapper 只有2种格式 2种都不支持,哈哈。是不是我理解错了?
Shadows Only:网格中的阴影将可见
Receive Shadows:启用此复选框可使Mesh显示投射在其上的任何阴影。 仅在使用渐进式光照贴图时才支持“审查阴影”
Motion Vectors:指定运动矢量渲染的模式。运动矢量从一帧到下一帧追踪每像素对象的速度。 使用这些信息,您可以应用特定的图像效果,如运动模糊或时间消除锯齿。
Lightmap Static:启用此复选框可向Unity指示对象的位置已修复,并且将参与全局照明计算。 如果一个物体没有标记为Lightmap Static,那么它仍然可以使用Light Probes点亮。
Dynamic Occluded:对此对象执行遮挡剔除。
UV Charting Control
Optimize Realtime Uvs:
指定创作的网格UV是否针对实时全局照明进行了优化。 启用时,创作的UV会合并,缩放并打包以实现优化目的。
禁用时,创作的UV将被缩放和打包,但不会合并。
请注意,优化有时会对原始UV贴图中的不连续性做出错误判断。 例如,有意识的尖锐边缘可能会被误解为连续的表面。
Max Distance:指定用于UV图表简化的最大世界空间距离。 如果图表在这个距离内,它们将被简化。
Max Angle:指定共享UV边缘的面之间的最大角度(以度为单位)。 如果两面之间的角度低于此值,则UV图表将被简化。
Ignore normal:选中此框可防止在实时全局照明照明预计算过程中分割UV图表。
Min chart size:指定用于UV图表的最小纹理元素大小。 如果需要缝合,值为4将创建一个4x4像素的图表来存储照明和方向性。 如果不需要拼接,则值为2将减少纹理密度并提供更好的照明构建时间和游戏性能。
Lightmap settings
Scale in Lightmap:该值指定了光照贴图中对象UV的相对大小。 值为0将导致对象未被光照贴图,但仍有助于照亮场景中的其他对象。 大于1.0的值会增加用于该对象的像素数量(即光照贴图分辨率),而小于1.0的值会减少该像素的数量。 您可以使用此属性来优化光照贴图,以便重要和详细的区域更加精确。 例如:具有平坦黑色墙壁的孤立建筑物将使用较低的光照贴图比例(小于1.0),而显示在一起的丰富多彩的摩托车则保证了较高的比例值。
通过调整这个值,可以控制该物体在Lightmap中所占的纹理大小。比如调整成0.1,则此物体的光照纹理就只有原来的十分之一,而调整成0,则此物体虽然可以产生阴影,但是不接收任何光照信息。
Prioritize illumination: Unity始终将此对象包含在光照计算中。 对于强烈发射的物体非常有用,以确保其他物体将被该物体照亮。
Lightmap Parameters:
选择烘培的质量参数
到此:light 面板里面的所有属性都介绍完了。相信你应该比较清楚了。
下面介绍:lighting的设置面板:全局光照设置窗口
这个才是重头戏啊,初学者,拿到这个面板基本上是一片茫然啊。先介绍各个属性,然后在说里面的坑。
这个Lighting窗口划分了三个区域:
1、Scene:设置适用于整个场景而不是单个GameObjects。这些设置控制灯光效果和优化选择。
2、Global maps:显示所有lightmap资产文件生成的GI照明过程。
3、Object maps:预览当前选中的GameObject的GI lightmap纹理(包括阴影遮罩)。
下方有一个Auto Generate,勾上它,unity就会自动更新Lightmap 数据,但更新的过程非常耗时,
因此不建议勾选 Auto Generate。可以手动点击Generate Lighting来烘焙。
- Scene Tab
包含6个模块:
- 1、Environment
环境光部分包含设置天空盒,漫反射和镜面反射。
Skybox Material : 天空盒材质。
改变当前天空盒的材质。也可以选择一个 带流光效果的材质,这样可以做牢笼 等魔法效果。 不要限制死了,认为天空盒,只能放天空的贴图。
Sun Source:设置一个定向光(directional Light)作为场景里的太阳,如果设置为None,unity则将最亮的定向光作为太阳(太阳:不管你设置的多大远多,光都会照到场景里)。
Environment Lighting 环境光设置 这下知道unity的环境光在哪里了吧。哎。
Source :漫反射环境光(背景光),默认以天空盒作为环境光。
Color: 以某种颜色作为环境光。
Gradient: //梯度 sky, Equator and Ground分别选择一种颜色,混合出一种环境光。
Skybox: 天空盒作为环境光.
Ambient Mode:微光模式. 场景中GI的模式。Realtime 实时更新。 Baked 烘焙(预先计算场景中的灯光).
//
Environment Reflections 全局设置反射参数。
Source:反射源。 Skybox:天空盒作为反射源。Custom :用一个cube map作为反射源。
Resolution: 反射贴图的分辨率
Compression//压缩 反射贴图是否被压缩。 Auto :如果适合压缩,那就压缩。Uncompressed:不压缩。Compressed:压缩。最好不要选 不压缩。
Intensity Multiplier:控制天空盒 和自定义的反射贴图对 场景的影响大小. 不用修改,默认为1即可。
Bounces:控制反射次数。如果为1的话,镜子里面看到的就是黑色。镜面需要看到反射的话,需要设置为2哦。当然次数越大烘培越慢哦。
- Realtime Lighting:实时光设置。 Realtime Global Illumination: 是否开启实时全景光照。 直接选关闭吧。没必要用实时的,太耗了。效果也一般。
- Mixed Lighting:混合灯光
Baked Global Illumination :是否采用烘焙的全局光照。
Lighting Mode:决定混合灯光和GameObject的阴影,修改了Light Mode需要重新烘焙
照明模式决定混合灯光和阴影在场景中与GameObjects一起使用的方式。
Baked Indirect:烘焙间接模式。(https://docs.unity3d.com/Manual/LightMode-Mixed-BakedIndirect.html)
混合光线提供实时直接照明,而间接光线则烘焙成光照贴图和光线探针。只有间接照明的路线是预先计算的。
烘焙间接模式的性能要求使其成为构建中档PC和高端移动设备的理想选择。
优点
它提供与实时照明相同的视觉效果。 它为静态和动态GameObjects的所有组合提供实时阴影。 它提供间接照明。
缺点
与其他混合光模式相比,它具有更高的性能要求,因为它会将阴影投射静态GameObjects渲染到阴影贴图中。 阴影不会超出阴影距离。
Shadow Mask:阴影遮罩。间接照明和直接遮挡的路线是预计算的。
启用该效果 还需要设置:Edit > Project Settings > Quality 。选择模式:
ShadowMask:投射阴影的静态GameObjects始终使用烘焙阴影。
Distance Shadowmask:Unity使用达到阴影距离的实时阴影以及超出阴影的烘焙阴影。距离之内的实时计算,距离之外的用烘焙的。
Subtractive:所有的光路都是预先计算好的。主方向光(通常是太阳)是唯一的光源,它将来自动态GameObject的实时阴影投射到静态GameObjects上。
Subtractive模式的性能要求使其成为构建低端移动设备的理想选择。
优点
它在光照贴图中的静态GameObjects之间提供高品质阴影,无需额外的性能要求。
Shader中的一个纹理操作处理静态GameObject之间的所有光照和阴影。
它提供间接照明。
缺点
它不提供实时直接照明,因此不提供镜面照明。
它不会在静态GameObjects上提供动态阴影,除了一个方向灯(主灯)。
它仅通过Light Probes将静态GameObject上的低分辨率阴影提供给动态GameObjects。
它提供了不准确的动态和静态阴影组合。
它增加了光照贴图纹理集的内存要求(与没有光照贴图相比)。
Realtime Shadow Color:实时阴影的颜色
- Lightmapping 光照贴图设置
Lightmapper:使用此选项指定要使用哪个内部照明计算软件来计算场景中的光照贴图。(https://docs.unity3d.com/Manual/ProgressiveLightmapper.html)
Enlighten :
Progressive (experimental): 选他。原因是他快。 后续空了好好看下他们之间更细致的区别。
Prioritize View :烘培的先后顺序,先烘培摄像机视锥体里面已经启用的元素,然后在烘培视锥体以外的。一个字 选上
Direct Samples: 直射光的采样数量。对于一些场景,尤其是户外场景,100个样本可能就足够了。 对于具有发射几何形状的室内场景,将需要更多。这个需要自己去把控。
Indirect Samples: 间接光的采样数量。
Bounces: 间接光的反射次数。跟踪路径时要执行的间接反弹次数。 对于大多数场景来说,两次反弹就足够了。 对于一些室内场景,可能需要更多。
Filtering:配置光照贴图的后期处理。
None:无
Auto:自动。具体什么限制我也不知道。
Advanced:高级模式
Direct Filter:直射光的后期处理模式。None:无。Gaussian:在有些细节丢失的地方进行高斯模糊。A-Trous:减少噪点。
Direct Radius/Sigma:元素中高斯过滤器的半径,用于光照贴图中的直射光。 更高的半径会增加模糊强度。
还有间接光 和 ao。
Indirect Resolution:使用此值指定用于间接照明计算的每个单元的纹理元素数。 增加此值可提高间接光的视觉质量,但也会增加烘烤光照贴图所需的时间。 默认值是2。
Lightmap Resolution:使用此值指定用于光照贴图的每个单位的纹理像素数。 增加此值可提高光照贴图质量,但也会增加烘烤时间。 默认值是40。
Lightmap Padding:使用此值可指定烘焙光照贴图中不同形状之间的分隔(以texel为单位)。 默认值是2。
Lightmap Size:光照贴图大小
Compress Lightmaps:压缩的光照贴图需要较少的存储空间,但压缩过程会将不需要的视觉效果引入到纹理中。 选中此复选框可压缩光照贴图,或取消选中它以保持其未压缩状态。 该复选框默认打勾。
Ambient Occlusion:允许您控制环境遮挡中表面的相对亮度。 较高的值表示遮挡区和全亮区之间的较大对比度。 这仅适用于由GI系统计算的间接照明。
Max Distance:设置一个值来控制射线的射程,以确定对象是否被遮挡。 较大的值会生成较长的光线,并为光照贴图提供更多阴影,而较小的值会生成较短的光线,这些光线仅在物体彼此非常接近时才会贡献阴影。 值为0的投射无限长射线,没有最大距离。 默认值是1。(ao 是需要计算面与面之间的距离的。通过射线来计算距离)
Indirect Contribution:调整最终光照贴图中看到的间接光亮度。默认为1
Direct Contribution:调整最终光照贴图中看到的直射光亮度.
Final Gather:启用最终聚集时,GI计算中的最终光线反射将以与烘焙光照贴图相同的分辨率进行计算。 这提高了光照贴图的视觉质量,但是以编辑器中额外的烘焙时间为代价。 需要更长的烘培时间,但是效果好,最后效果需要开启。预览阶段关闭。
Ray Count:使用此值来定义为每个最终聚集点发射的光线数量。 默认值是256。
Denoising:将去噪滤镜应用于最终聚集输出。 此框默认打勾。
Directional Mode:您可以设置光照贴图来存储关于物体表面上每个点处主导入射光的信息。(https://docs.unity3d.com/Manual/LightmappingDirectional.html)
Directional:在方向模式下,会生成第二个光照贴图来存储入射光的主要方向。 这允许漫射法线贴图材料与GI一起工作。 定向模式需要大约两倍的额外光照贴图数据的存储空间。 定向光照贴图无法在SM2.0硬件或使用GLES2.0时解码。 他们将回退到非定向光照贴图。
Non-directiona:选它。不要考虑。
Indirect Intensity:控制实时存储的间接光照和烘焙光照贴图的亮度,亮度值介于0和5之间。大于1的值会增加间接光的强度,而小于1的值会降低间接光的强度。 默认值是1。不用调
Albedo Boost:控制通过强化场景中材质的反照率来控制表面之间反射的光量,数值介于1和10之间。增加此值可将反射率值绘制为白色以进行间接光线计算。 默认值1是物理上准确的。 不用调
Lightmap Parameters:
- Other Settings
Fog:雾效。雾效的参数就不介绍了。
Halo Texture: 设置您想要用于在灯光周围绘制光晕的纹理。
Halo Strength:定义灯光周围晕圈的可见度,从0到1之间的值。
Flare Fade Speed:定义最初出现后镜头光斑从视野中消失的时间(以秒为单位)。 默认设置为3。
Flare Strength:从0到1之间的值定义灯光镜头耀斑的可见性。
Spot Cookie:设置您想要用于投射灯的Cookie纹理。
- Debug Setting 调试设置
Light Probe Visualization:
Display Weights:当勾选时,Unity从用于有效选择的光探针绘制一条直线到用于插值的四面体上的位置。 这是调试探针插值和放置问题的一种方法。
Display Occlusion:勾选时,如果混合照明模式为距离阴影遮罩或阴影遮罩,Unity会显示光线探测器的遮挡数据。
生成按钮 有三个选项哦:
Generate Lighting :烘培光照贴图
Bake Reflection Probe: 烘培反射探头
Clear Baked Data: 清楚烘培数据
- 2、Global maps:显示所有lightmap资产文件生成的GI照明过程。
使用全局地图选项卡查看照明系统正在使用的实际纹理。 这些包括强度光照贴图,阴影遮罩和方向性贴图。 这仅适用于使用烘焙照明或混合照明的情况; 预览对于实时照明是空白的。
- 3、Object maps:预览当前选中的GameObject的GI lightmap纹理(包括阴影遮罩)。
使用对象贴图选项卡仅查看当前选定的* *游戏对象的已烘焙贴图的预览,包括遮罩。
- 烘培总结:
1、要做到近处用实时阴影,远处用静态烘培效果。
1.Edit->Project Setting->Quality.在Inspector->Shadows->Shadow Mode 选择Distance Shadowmask. 调整 Shadow Distance 参数。
开启后的效果。方框处为静态烘培的阴影,椭圆里面的是实时产生的阴影。
2、
注:
最近开发中在对场景进行光照贴图烘焙时发现一个坑爹问题,在使用自定义shader的时候,shader命名中必须包含Transparent路径,否则烘焙的时候不对alpha通道进行计算,烘焙出来都是狗皮膏药
比如一个shader叫
Shader "xx/UnlitAlphaCutout" 要改为
Shader "xx/Transparent/UnlitAlphaCutout" 才能烘焙出正常的效果,不知道Unity做了什么黑科技,居然在烘焙的时候判断了Transparent关键字?!