Emission节点是Unity Shader Graph中用于创建自发光效果的核心节点。在实时渲染中,自发光效果能够让物体表面看起来像是自身在发光,而不依赖于场景中的光照系统。这种效果在游戏开发中有着广泛的应用,从简单的UI元素发光到复杂的科幻场景中的发光材质,都离不开Emission节点的支持。
在物理基础的渲染(PBR)流程中,Emission代表材质自身的发光属性,它不受场景光照的影响,但会影响周围环境的照明。这意味着即使场景完全黑暗,具有Emission的物体仍然可见,并且如果启用了全局光照,它还能作为光源照亮其他物体。
Emission节点的实现原理基于高动态范围(HDR)颜色处理。与普通的颜色值不同,HDR颜色可以表示超出标准0-1范围的亮度值,这使得Emission能够产生非常明亮的发光效果,而不会出现颜色裁切或过曝的问题。这种能力对于创建真实的发光材质至关重要,因为现实世界中的光源通常比表面反射的颜色要亮得多。
描述
Emission节点是Shader Graph中专门用于处理自发光效果的功能模块。它接受低动态范围(LDR)的颜色输入,并结合强度参数,输出高动态范围(HDR)的颜色值,用于材质的自发光通道。
基本工作原理
Emission节点的核心功能是将输入的LDR颜色转换为HDR颜色,并通过强度参数控制最终的发光亮度。这个过程涉及几个关键步骤:
首先,节点接收一个RGB颜色输入,这个颜色通常是在标准颜色选择器中选取的常规颜色,其每个通道的值范围在0到1之间。这种颜色被称为低动态范围颜色,因为它无法表示超出显示器标准亮度范围的颜色值。
接着,强度参数会对输入颜色进行缩放。强度值是一个浮点数,它可以大于1,这意味着它能够将LDR颜色转换为超出标准范围的亮度值。例如,如果输入颜色是(1, 0, 0)的红色,强度为5,那么实际输出的颜色亮度相当于标准红色的5倍。
最后,节点输出的是HDR颜色,这种颜色可以包含比标准颜色更亮的成分,适用于表示发光表面。在渲染过程中,这些HDR值会被色调映射过程正确处理,确保在最终图像中呈现出自然的发光效果,而不会出现不自然的过曝或颜色失真。
在渲染管线中的角色
在不同的渲染管线中,Emission节点的作用和实现方式有所不同。在HDRP中,Emission节点与物理光照单位紧密集成,支持以真实的物理单位(如尼特)来定义发光强度。这使得艺术家能够基于真实世界的参考来创建发光材质,确保不同光源之间的一致性。
而在URP中,虽然Emission节点的功能相对简化,但它仍然提供了创建各种自发光效果的基本能力。开发者可以通过调整颜色和强度参数来实现从微弱的荧光到强烈的光源等各种发光效果。
与材质属性的关联
Emission节点通常连接到材质的自发光属性上。在标准的PBR材质中,这对应于 emission color 或 emissive color 属性。当这个属性被设置后,材质表面就会产生自发光效果。
重要的是,Emission效果可以与材质的基础颜色、金属度和粗糙度等属性协同工作。这意味着一个表面可以同时具有反射特性和自发光特性,这在表现像发光的金属表面或霓虹灯等效果时非常有用。
渲染管线兼容性
Emission节点在不同渲染管线中的支持和功能实现存在显著差异。理解这些差异对于在不同项目中正确使用Emission效果至关重要。
高清渲染管线(HDRP)支持
在高清渲染管线中,Emission节点得到了全面支持,并且功能最为完整。HDRP为Emission节点提供了以下高级特性:
- 物理正确的光照单位:HDRP中的Emission支持使用真实的物理单位来定义发光强度,如尼特(nits)或曝光值(EV₁₀₀)。这使得艺术家能够基于真实世界的测量值来创建发光材质,确保不同光源之间的一致性。
- 与全局光照系统深度集成:在HDRP中,Emission材质可以作为真实的光源参与全局光照计算。这意味着发光的物体不仅自身可见,还能照亮周围的场景,产生间接光照效果。
- 曝光权重控制:HDRP提供了曝光权重参数,允许精细控制曝光对Emission效果的影响。这对于创建在某些光照条件下保持恒定亮度的光源(如LED指示灯)非常有用。
- 高质量的后处理支持:HDRP的后期处理堆栈,如色调映射和泛光效果,与Emission节点紧密集成,能够产生更加逼真的发光效果。
通用渲染管线(URP)兼容性
在通用渲染管线中,Emission节点的支持情况较为复杂。虽然URP本身支持自发光效果,但具体的实现方式可能与HDRP有所不同:
- 基本功能支持:URP支持基本的Emission效果,可以通过颜色和强度参数控制自发光的外观。
- 有限的物理单位支持:与HDRP不同,URP中的Emission通常不使用物理光照单位,而是依赖于相对强度值。
- 全局光照集成:在URP中,Emission材质可以参与轻量级的全局光照计算,但功能和精度可能不如HDRP全面。
- 性能优化:URP中的Emission实现通常更加注重性能,适合移动平台或低端设备。
内置渲染管线支持
对于仍在使用Unity内置渲染管线的项目,Emission节点的支持情况取决于具体的Shader Graph版本和配置。一般来说,较新版本的Shader Graph在内置渲染管线中也提供了基本的Emission功能,但可能缺少HDRP中的高级特性。
跨管线开发建议
在开发需要跨渲染管线兼容的项目时,考虑到Emission节点在不同管线中的差异,建议采取以下策略:
- 对于核心的发光效果,尽量使用基本的颜色和强度参数,这些在大多数管线中都能正常工作。
- 如果项目可能在不同管线之间迁移,避免依赖特定于HDRP的高级功能,如物理光照单位。
- 使用功能检测或自定义节点来处理不同管线之间的差异,确保着色器在各种环境下都能正常工
- 在URP项目中,如果需要更高级的Emission效果,可以考虑使用自定义着色器或后处理效果来补充Shader Graph的功能。
端口
Emission节点提供了三个主要的端口,用于输入颜色和强度参数,并输出最终的HDR颜色。理解每个端口的特性和使用方法对于创建有效的自发光效果至关重要。
颜色输入端口(Color)
颜色输入端口是Emission节点的主要输入,用于定义自发光的基色。这个端口接受LDR颜色值,通常是标准的RGB颜色。
- 数据类型:LDR Color (RGB) - 低动态范围颜色,每个通道的值通常在0到1之间。
- 功能说明:这个端口定义了发光材质的基本颜色。与常规的颜色不同,Emission颜色通常更加饱和和明亮,以产生明显的发光效果。
- 使用技巧 :
- 对于强烈的发光效果,建议使用较高饱和度的颜色,这样在施加强度倍增后能产生更明显的发光感。
- 如果需要创建白色发光效果,可以使用略带蓝色的白色,这样看起来更加自然和科技感。
- 对于模拟真实光源,如霓虹灯或LED,参考实际光源的色温值来选择颜色会更加真实。
- 连接来源 :颜色端口可以连接多种节点,包括:
- Constant Color节点,用于定义固定的发光颜色。
- Sample Texture 2D节点,用于基于纹理的发光图案。
- Color节点,用于在Graph中直接定义颜色值。
- 各种数学运算节点的结果,用于动态或条件性的发光颜色。
强度输入端口(Intensity)
强度输入端口控制自发光的亮度级别。这是一个浮点数值,用于倍增输入颜色的亮度。
- 数据类型:Float - 单精度浮点数,可以是任何非负值。
- 功能说明:强度参数对输入颜色进行线性倍增。值为1时保持原色亮度,大于1的值会增加亮度,小于1的值会降低亮度。在HDRP中,这个值可以与物理单位关联。
- 使用技巧 :
- 对于微弱的发光效果(如荧光材料),使用0.1到1之间的强度值。
- 对于中等亮度的发光(如电子设备指示灯),使用1到10之间的强度值。
- 对于强烈的光源效果(如灯泡或爆炸效果),使用10以上的强度值,甚至可达数百或数千。
- 在实际项目中,建议将强度值设置为可配置的参数,便于在不同场景中调整而不必修改着色器本身。
- 动态控制 :强度端口可以连接各种动态值,实现丰富的效果:
- 连接Time节点,创建脉动或闪烁的发光效果。
- 连接基于距离或角度的计算,实现接近发光或视角相关发光。
- 连接脚本驱动的参数,实现游戏事件触发的发光变化。
输出端口(Output)
输出端口提供Emission节点的最终结果,这是一个HDR颜色值,可以直接连接到主节点的Emission输入。
- 数据类型:HDR Color (RGB) - 高动态范围颜色,可以表示超出标准范围的颜色值。
- 功能说明:输出端口的颜色值已经考虑了输入颜色和强度参数的组合效果,适合直接用于材质的自发光通道。
- 后续处理 :虽然Emission节点的输出通常直接连接到主节点,但也可以进行额外的处理:
- 连接其他颜色调整节点,如饱和度、对比度或色调调整。
- 与其他的Emission输出混合,创建复杂的多层发光效果。
- 使用条件节点基于某些参数启用或禁用特定的发光部分。
- HDR特性 :由于输出是HDR颜色,它在后续的渲染流程中会被正确处理:
- 在色调映射过程中,过亮的部分会被适当压缩,避免裁切。
- 能够触发泛光(Bloom)后处理效果,产生光晕扩散。
- 在支持全局光照的管线中,能够作为真实光源影响周围环境。
端口连接最佳实践
为了创建高效且易于维护的Emission效果,建议遵循以下端口使用最佳实践:
- 为颜色和强度参数创建明确的命名,特别是在复杂的着色器中,这样便于其他团队成员理解和使用。
- 使用适当的默认值,确保即使某些输入未连接,着色器也能产生合理的结果。
- 在可能的情况下,使用节点分组和注释来组织Emission相关的节点,提高Graph的可读性。
- 对于需要频繁调整的参数,将其暴露为材质属性,便于艺术家在不用修改着色器的情况下进行调整。
注意
在使用Emission节点时,有几个重要的注意事项和技术细节需要了解,这些知识将帮助您创建更加有效和优化的自发光效果。
发射单位
在HDRP中,Emission节点的强度可以使用物理光单位来定义,这为创建真实世界的发光材质提供了准确的控制方式。
尼特(Nits)单位
尼特是亮度的SI单位,定义为每平方米坎德拉(cd/m²)。在HDRP中使用尼特单位定义Emission强度时,可以参考以下现实世界的亮度值:
- 典型的LCD显示器:200-300 nits
- 智能手机屏幕:500-1000 nits
- 室内LED照明:500-2000 nits
- 汽车前大灯:5000-15000 nits
- 晴朗天空下的雪地:15000 nits
使用尼特单位的好处是能够基于真实世界的测量值来创建发光材质,确保不同光源之间的一致性。例如,如果您知道某个LED面板的实际亮度是800 nits,就可以直接在强度参数中设置这个值,而不需要经过试错来找到合适的强度。
曝光值(EV₁₀₀)单位
曝光值是摄影中常用的对数单位,用于表示相机的曝光设置。在HDRP中,EV₁₀₀单位与ISO 100设置下的曝光值对应。EV₁₀₀与尼特的转换关系为:
- EV₁₀₀ = log₂(Nits / 2.5)
使用EV₁₀₀单位的好处是它与摄影师的思维方式更加接近,便于基于摄影参考来调整发光强度。例如,如果您知道某个场景在EV₁₀₀为12时正确曝光,就可以相应地设置发光材质的强度。
单位选择考虑
在选择使用哪种物理单位时,考虑以下因素:
- 如果您的团队熟悉摄影术语,或者项目有大量的摄影参考,使用EV₁₀₀单位可能更加直观。
- 如果您有真实光源的技术规格,或者需要精确模拟特定设备的发光特性,使用尼特单位更加直接。
- 在两种单位之间切换时,记住它们之间的转换关系,确保不会意外改变材质的视觉外观。
曝光权重
曝光权重是HDRP中控制曝光如何影响Emission效果的重要参数。这个值介于0到1之间,决定了色调映射和自动曝光调整对自发光部分的影
响程度。
曝光权重的工作原理
曝光权重参数的工作原理可以理解为在曝光调整和自发光强度之间建立了一个混合因子:
- 当曝光权重为1时,Emission颜色会完全受到场景曝光设置的影响。如果场景变暗,自发光也会相应变暗;如果场景变亮,自发光也会变亮。这种行为适用于大多数自然光源。
- 当曝光权重为0时,Emission颜色会完全忽略场景曝光设置,保持恒定的亮度。无论场景如何变亮或变暗,自发光物体的亮度都不会改变。这种行为适用于像LED指示灯、仪表盘等需要保持恒定亮度的光源。
- 中间值在两种行为之间提供平滑的过渡,允许部分受到曝光影响。
使用场景示例
理解曝光权重的适当使用场景对于创建真实的发光效果至关重要:
- 曝光权重 = 1.0:适用于自然光源,如灯泡、火焰、阳光照射的表面等。这些光源的感知亮度会随着环境光的变化而变化。
- 曝光权重 = 0.0:适用于人工指示器,如电子设备的LED指示灯、车辆仪表盘、霓虹灯标志等。这些光源通常设计为在任何光照条件下都保持相同的亮度。
- 曝光权重 = 0.5:适用于中间情况,如某些类型的荧光材料或需要部分适应环境的光源。
实现技巧
在实际项目中有效使用曝光权重的一些技巧:
- 对于同一场景中的不同发光材质,使用一致的曝光权重策略,确保视觉上的协调性。
- 在极端光照条件下测试Emission效果,确保在各种曝光设置下都能正常工作。
- 如果使用脚本控制曝光,考虑同时调整相关材质的曝光权重,保持视觉一致性。
- 记住曝光权重只影响Emission的亮度,不影响颜色或其他属性。
性能考虑
在使用Emission效果时,性能是一个重要的考虑因素,特别是在针对移动平台或低端设备开发时。
渲染开销
Emission效果的主要性能开销来自以下几个方面:
- 额外的像素着色器计算:Emission需要额外的着色器指令来计算发光颜色,特别是当使用复杂的纹理或动态效果时。
- 后处理效果:强烈的Emission效果可能会触发泛光(Bloom)后处理,这需要额外的全屏处理开销。
- 全局光照:如果Emission材质参与全局光照计算,会增加光照贴图的生成时间和运行时开销。
- Overdraw:明亮的Emission效果可能会在Tone Mapping前产生高亮度的像素,增加渲染管线的压力。
优化策略
为了在保持视觉效果的同时优化性能,考虑以下策略:
- 对于远距离或小尺寸的发光物体,使用简化的Emission效果,避免复杂的计算。
- 在移动平台上,限制同时可见的高强度Emission物体数量。
- 使用LOD系统,为远距离模型使用简化版本的Emission着色器。
- 避免在每一帧都更新动态Emission效果,如果变化不明显,可以降低更新频率。
- 使用适当的Mipmap设置确保Emission纹理在远距离不会产生性能问题。
平台特定考虑
不同平台对Emission效果的支持和性能特征有所不同:
- 高端PC/主机:可以充分利用HDRP的高级Emission功能,包括物理正确的单位和高质量的全局光照。
- 移动平台:建议使用简化的Emission效果,避免过高的强度值和复杂的动态效果。
- VR平台:需要特别注意性能,因为Emission效果可能会增加运动到光子延迟,影响用户体验。
与其他效果的交互
Emission效果不孤立存在,它与渲染管线中的其他效果和系统有复杂的交互关系。
与后期处理效果的交互
Emission效果与多种后期处理效果有密切的交互:
- 泛光(Bloom):Emission是触发泛光效果的主要来源。高强度的Emission颜色会产生光晕扩散效果,增强发光的视觉冲击力。
- 色调映射(Tone Mapping):Emission的HDR颜色会经过色调映射过程,确保在标准显示器上正确显示。
- 颜色分级:颜色分级操作会影响Emission颜色的最终外观,特别是在使用LUT或曲线调整时。
- 自动曝光:如果使用自动曝光,强烈的Emission区域可能会影响整个场景的曝光设置。
与光照系统的交互
Emission材质与场景光照系统的交互方式取决于渲染管线和具体设置:
- 直接光照:Emission效果不受直接光照影响,但可以与直接光照共存。
- 间接光照:在启用全局光照的情况下,Emission材质可以作为次级光源,照亮周围环境。
- 反射:Emission颜色会影响镜面反射,发光的表面会在反射中显示为光源。
- 阴影:Emission材质通常不投射阴影,但可以接收阴影。
与透明度和混合模式的交互
当Emission效果用于透明或半透明材质时,需要考虑额外的因素:
- 混合模式:不同的混合模式会影响Emission颜色的合成方式。
- 深度写入:强烈的Emission效果可能会在透明物体排序时产生视觉异常。
- 多重采样:在抗锯齿处理中,高对比度的Emission边缘可能需要特殊处理。
【Unity Shader Graph 使用与特效实现】专栏-直达 (欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)