您需要 登录 才可以下载或查看,没有账号?注册
x
什么是substrate?Substrate是UE5创作材质的一种新方式,依赖“物质Slab(slab of matter)”概念, 即一种由具有明确单位的物理量参数化的原则性表示。在这个核心构建块基础上,材质表示为执行各种运算(例如混合或substrate)的闭包图,substrate可以更准确地呈现混合金属、玻璃模糊折射等复杂的材质表面。因功能设计需要,Substrate已在5.2版本中实现代码层级的重命名,用以替代5.1版本中所有原Strata相关工具和节点。本文将结合substrate的基本参数设置和5.2中substrate的更新来展开介绍。启用substrate5.2以上版本要启用substrate,打开项目设置(Project Settings),搜索“substrate”,然后启用“substrate材质(试验性)(substrate Materials [Experimental])”。此操作需要重新启动引擎。因设计需要Substrate已在5.2版本中实现代码层级的重命名,用以替代5.1版本中所有Strata相关工具和节点。其他可选项目设置:substrate逐像素字节数(substrate bytes per pixel)——用户可以指定substrate材质自动简化前的逐像素存储字节数。材质越复杂,存储要求越高。substrate不透明材质粗糙折射(substrate层 opaque material rough refraction)——用户指定是否允许覆盖在其他材质上的粗糙表面以物理上可行的方式模糊较低层。substrate高级可视化着色 (substrate advanded visualization shaders)——用户指定材质是否将生成与r.substrate.Debug.VisualizeMode 3一起使用的着色器。这些着色器会影响材质的性能,默认设置为关闭,应在需要调试材质拓扑时启用。
现有材质的转换项目设置里激活 substrate 后,启动 UE工程将会把传统材质转换成具有“旧版”着色节点的substrate材质网络。除非是需要在专用的substrate项目中工作,否则不要保存材质。如果重新打开编辑器时禁用了substrate,将无法使用转换后的材质,但可以手动将substrate材质重新连接回传统材质。
BSDF”节点
主要substrate材质节点如下:substrate Slab:一个聚合了以下多个分量的物质Slab的原则性表示:漫反射、高光度、浑浊度、布料绒毛和各向异性。它可以渲染不透明次表面或半透明散射/透射等效果。次表面substrate SimpleClearCoat:可简单又快捷渲地染顶部有透明涂层的材质。这是个专用节点,经过优化,用于渲染旧版透明涂层材质,在后台使用Slab节点。
以下节点必须单独使用,不能使用substrate混合运算符混合使用:substrate Unlit:用于使用彩色自发光亮度渲染无光照元素的BSDF,彩色透射取代了旧版灰阶不透明度。(如果需要混合无光照Slab,需要使用只有自发光数值的常规Slab。)substrate Hair:用于毛发渲染的BSDF。substrate SingleLayerWater:用于渲染单层水的BSDF。substrate Volumetric:用于渲染体积雾或云。substrate Eye:用于渲染眼睛的BSDF。
所有substrate材质图表都需要连接到材质的正面材质(Front Material)输入引脚。下面是一个示例:
“substrate构建块”节点材质函数节点Coated Layer:图层材质函数。Standard Surface Opaque:标准表面不透明材质函数。Standard Surface Translucent:标准表面透明材质函数。UE4 Default shading: UE4默认材质函数,可在substrate中用传统方法创建材质。UE4 Unlit shading: UE4无光照材质函数,可在substrate中用传统方法创建材质。
substrate中的UE4默认材质”节点额外节点Light Function:灯光函数,必须单独使用。Post Process:后期处理,必须单独使用。Convert To Decal:所有材质图表都可以作为贴花使用,使用此节点将材质图表转换为贴花。Substrate UI:UI材质
旧版转换节点无需手动创建substrate旧版转换节点,或者将其用于新的substrate材质,仅在打开现有材质资产时使用。什么是SlabSlab节点是substrate的默认材质节点,表示由界面和介质组成的物质切片,可以实现大部分的材质外观。
可实现两种参数化:金属性(Metallness):类似传统的UE4式材质的参数化,将金属与漫反射颜色结合在一起。非金属性(Non-metallness):可去除高光度和漫反射关联,从而实现更大的自由度。能量守恒可确保高光度界面和介质不会增加能量。金属性参数化金属感(Metallic):通过差值使Slab从非传导性外观变为传导性外观。漫反射分量逐渐消失,高光度高亮变成彩色。基础颜色(BaseColor):Slab的整体颜色。金属感为0时,此参数定义漫反射反射率。金属感为1时,此参数定义彩色高光度反射率。高光度(Specular):非金属感部件的反射率边缘颜色(EdgeColor):切线角反射率颜色
非金属性参数化F0:材质垂直于表面视角下的反射率(可以着色)。 对于非传导性材质(塑料、其他非金属材质),这个数值通常在[0, 0.08]范围内。对于金属材质,它的范围最高可以达到1。宝石通常范围最高可以达到0.16。需要注意,substrate会自动强制执行能量守恒,因此F0越高,漫反射就越不明显。F90:材质与表面相切视角(换言之,在相对于摄像机视图的切线角)下的反射率(可以着色)。漫反射颜色(DiffuseColor):介质的反射率使用边缘颜色或F90时,可以实现各种复杂材质对光源的漫反射和高光度响应。例如,下面这个红色球体,它拥有青色到黄色的高光度反射,而且与切线垂直。
还可以使用触发器辅助节点来实现基于法线的高光度着色。通过可调衰减过渡控制高光度颜色F0/F90的变化。它是个材质函数(需要打开引擎内容),可以通过细节调整来派生出自己的函数。
常见参数
粗糙度(Roughness):控制粗糙度外观各向异性(Anisotropy):控制材质的各向异性(-1:高光与双切线对齐,1:高光与切线对齐)第二粗糙度/第二粗糙度权重(Second Roughness / Second Roughness Weight):控制第二高光度波瓣的粗糙度,以及主要波瓣和次要波瓣之间的混合因子。(0:仅主要,0.5:主次各占50%,1:仅次要)。MFP:平均自由程。它控制材质的“密度”,并影响材质对光源的吸收和散射。准确地说,定义光子与物质粒子相互作用的平均距离。这个距离由每个颜色通道控制。 MFP缩放(MFP scale):缩放MFP数值法线(Normal):定义着色法线切线(Tangent):定义着色切线自发光(Emissive):控制自发光颜色绒毛量(FuzzAmount):在界面上添加一层“绒毛”,从而引发彩色逆反射。此参数在织物外观情境中使用绒毛颜色(FuzzColor):控制绒毛的颜色次表面轮廓(SSS Profile):定义要使用的次表面轮廓
粗糙度(Roughness):0至1
各向异性(Anisotropy):-1至1
浑浊度(Haziness):0至1。
使用顶部(Top)为白色(White)和底部(Bottom)为黑色(Black)基础颜色(BaseColor)的淡黄透射。厚度(Thickness)从0到3 cm不等。
第二粗糙度(Second Roughness)(0:无粗糙度,1:完全粗糙)/第二粗糙度权重(Second Roughness Weight)(0:仅主要,0.5:主次各占50%,1:仅次要)Slab运算符由于Slab代表一块物质,substrate提供了组成这些块的方法。这种组成是通过运算符完成:水平混合(HorizontalMixing):按给定混合比率混合两块Slab。此运算符允许混合两种材质,也就是说,将对两种材质求值,然后将它们混合。
垂直substrate(VerticalLayering):用某块Slab覆盖另一块Slab。被覆盖Slab的外观将受到覆盖Slab属性的影响。此运算符可用于车漆、涂漆木材。
权重(Weight):控制Slab的覆盖范围。减少权重可缩小物质的覆盖范围。这意味着你将透视物质。它可以与垂直substrate(VerticalLayering)运算符结合使用,在一层不透明物质上面覆盖另一层不透明物质,比如灰尘。 相加(Add):此运算符将两块Slab相加,在物理上缺乏可行性,会导致从表面传出的能量比传入的能量更多。应尽量避免使用此运算符。这些运算符可以通过将几块Slab一起混合/substrate来形成复杂的外观。在运行时执行此操作的开销可能很高。为了解决这个问题,可以将大多数运算更改为参数混合运算,而不是通过使用参数混合(UseParameterBlending)选项来混合材质求值。虽然产生的外观将(略微)不同,但它是一个有用的工具。下一页将对此做更详细的介绍。
下面是将两块Slab进行垂直混合的示例:
参数混合若逐像素使用多个BSDF,则渲染速度会按照计数等比例地减慢。相比单个BSDF,对两个BSDF的光照进行计算要慢两倍。对于不透明和半透明表面也是如此。依靠参数混合来补救这个问题,实现参数混合有三种方法:1.自行在材质图表中混合漫反射颜色(DiffuseColor)、F0和F90、粗糙度以及其他参数。在图表的末尾,将它们输出到一个插入FrontMaterial输入的Slab中。2.使用substrate材质工作流程。3.根据需要,使用包含多个BSDF和运算符的材质图表。然后只需启用最后一个运算符的“使用参数混合(Use Parameter Blending)”。这会自动强制使用所有先前的运算符进行参数混合。
解决方案1非常适合独立的材质。但当使用材质库来建立更复杂的材质时,可能很快就会变得难以管理。解决方案2伸缩性更好。解决方案3是替代方案,会根据图表中的所有混合和substrate操作保持较好的材质外观。在低端平台上,为了提高性能,编译器将自动启用参数混合。在中端平台上,材质的底层将渐进式使用参数混合,以保持在目标内存和性能约束范围之内。例如,以下这种材质的次表面混合了金属,外层是具有各向异性高光度的蓝色透明涂层,其本身覆盖有一层稀疏的半透明粘性物:
包括4块Slab、1个水平混合、2个垂直substrate和1个覆盖范围权重运算符。由此产生的内存开销为每像素108字节(将Slab转换为闭包的存储空间)。若全程使用参数混合,可将开销降至每像素28字节,同时尽可能保持一致的外观:
次表面散射、参与介质该Slab含有参与介质,可用于模拟各种体积外观。如果仅考虑渲染不透明材质,当Slab位于材质拓扑的底部时,将考虑将其用于次表面散射。此时将考虑两种情况:如果将次表面轮廓指定给某个Slab,将在Slab使用它。但每个像素将只考虑一个轮廓(轮廓不可混合)。否则,散射将由Slab的基础颜色(BaseColor)和次表面轮廓平均自由程(MFP)(SSS Mean Free Path [MFP])属性决定。此类属性可以混合。
一种基础颜色(BaseColor)为白色、MFP为淡红、平均自由程从0到1进行缩放的材质所有不在不透明材质底部(或在半透明材质中使用)的Slab,都将考虑用于体积表示,同样要依靠基础颜色(BaseColor)和次表面轮廓平均自由程(MFP)(SSS Mean Free Path [MFP])属性。基础颜色(BaseColor)表示将单次和多次散射都考虑在内的介质漫反射反射率。SSS MFP是一种控制介质垂直于表面视图透射率的方法。它表示下方表面的可见度。
一种透射率颜色范围从左至右从黑色向蓝色变化,基础颜色范围从上到下从黑色向白色变化Slab相互叠加的垂直substrate可以看作是一种涂层运算。底Slab的彩色可视性取决于顶Slab的透射率。可以减少顶Slab的覆盖范围(比如在小水坑的边缘或血液飞溅的效果)这是通过使用覆盖范围权重(Coverage Weight)运算符实现的,类似于Alpha混合。
一种透射率范围从左至右从黑色向蓝色变化,覆盖范围从上到下从0向1变化的材质为了实现特定的透射率颜色,不建议直接控制MFP,因为它不是一种颜色,并且它遵循一种非直观的非线性行为。(透射率颜色插值在感知上是线性的,而MFP插值则并非线性。)为了简化这一设置,可以使用substrateTransmitanceToMFP节点。从达到目标距离的所需透射率颜色派生MFP和厚度数值。
半透明和混合模式半透明表面着色可以通过选择半透明混合模式来实现,在考虑由物质构成的表面时更具合理性:不透明:覆盖范围是1的不透明表面。与旧版不透明混合模式相同。遮罩:覆盖范围是1或0的不透明表面。与旧版遮罩混合模式相同。半透明彩色透射率:一种具有彩色表面、覆盖范围和彩色透射率的全功能半透明材质。这类似于旧版“薄半透明(ThinTranslucent)”着色模型。半透明灰色透射率:一种具有彩色表面和覆盖范围的半透明材质。透射率减少为灰阶:这可以加快速度,因为它可以防止将后景深半透明额外渲染成调制通道。这是退却模式,适合不支持硬件彩色半透明度(称为双源颜色混合)的平台。这类似于旧版“半透明(Translucent)”混合模式。仅彩色透射率:仅使用材质的透射率。表面相互作用减少到0。与旧版乘(Multiply)混合模式相同。Alpha维持:与旧版Alpha维持(Alpha Holdout)混合模式相同。
比如半透明彩色透射率substrate混合模式、使用表面前向着色(Surface ForwardShading)光照模式,并将单一Slab节点输入正面材质引脚,可以获得具有不透明外观的半透明表面:
如果想要Alpha半透明效果,需要对物质Slab的覆盖范围设置权重。下面是设置了棋盘格纹理权重的效果:
如果想让物质Slab表示某种材质,例如一块彩色玻璃,则需要指定参与介质的自由程。使用Transmittance-To-MeanFreePath辅助节点更容易。粗糙折射粗糙折射关闭:
粗糙折射打开:
调试使用菜单项“显示(Show) -> 可视化(Visualize) -> substrate材质(substrate Material)”检查不透明材质。 设置完成后,就可以通过r.substrate.Debug.VisualizeMode使用不同的模式。r.substrate.Debug.VisualizeMode 1:用鼠标指向你想要检查的像素,将能够看到用于光照的最终封装材质闭包:属性、彩色权重、启用的特性、使用的字节等。
r.substrate.Debug.VisualizeMode 2:这与模式1相同,但它还根据BSDF计数给像素着色。
r.substrate.Debug.VisualizeMode 3:用鼠标指向想要检查的像素,构成材质的不同Slab将分离,并分别呈现在屏幕上。注意:要访问此视图模式,你需要在项目设置(Project Settings)中启用substrate高级可视化着色器(substrate advanced visualization shaders)选项。
使用r.substrate.Classification.Debug 1按图块直观显示材质复杂性。绿色表示简单的Slab旧版Disney式材质(快速)黄色表示具有特性但不使用各向异性的单一Slab材质(正常速度)红色表示已混合/substrate或具有各向异性的多Slab材质(慢速)
这些图块用于运行优化后的光照后通道。减少Slab、特性的数量并使用参数混合是优化材质的好方法。如果一种材质是由几种材质混合/substrate而成,但对于给定像素只有一个Slab可见(由于动态遮罩或低透射率值),则不可见的Slab将被优化掉。
substrate还处于试验状态。请勿将它用于正式产品开发。部分原因如下:可能会遇到一些漏洞要到5.2甚至更高的版本才会修复。性能仍然是重点需要改进。在5.2中Substrate已经支持移动平台渲染管线(不包括defered rendering)。未来对substrate做出的修改可能不会向后兼容,这会使现有资产的行为发生变化或可能失效。
全文完
公众号链接:https://mp.weixin.qq.com/s/ujKwilar_DDPIFwtLDoN0A |