查看: 329|回复: 0

[引擎的各个功能] 次表面轮廓明暗处理模型

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2017-4-8 06:47:59 | 显示全部楼层 |阅读模式

次表面轮廓明暗处理模型



       
     
     
     Unreal Engine 4.9

       
     
         



   
    本页面的内容:
   

   
                                                            
        什么是次表面轮廓
                                                        
        启用、创建和使用次表面轮廓
                                                        
        材质输入通道
                                                        
        技术细节
                                                        
        比例调整和控制台命令
                                                        
        特别鸣谢
                                            


渲染逼真人体皮肤的能力,对于任何现代电子游戏引擎来说都不可或缺。为了满足此需求,虚幻引擎 4 (UE4) 现在提供了一种专门用于皮肤或蜡状表面的明暗处理方法,称为 次表面轮廓。
次表面轮廓明暗处理模型具有与次表面明暗处理模型类似的属性,其关键区别在于渲染方式有所不同。
次表面轮廓使用基于屏幕空间的渲染方法,因为这有助于更好地显示人体皮肤上的微妙次表面效果,而反向散射是仅在少数情况(例如,耳朵)下才会出现的次级效果。
以下文档将阐述什么是次表面轮廓以及如何在工作中使用它们。


   
        
次表面轮廓明暗处理模型


        
   
   
        
次表面轮廓明暗处理模型


        
   

       
特别感谢 Lee Perry-Smith 和他的公司 Infinite Realities
提供 3D 扫描头部模型及协助。


什么是次表面轮廓


次表面散射轮廓存储关于次表面散射渲染方式的信息。
它可以像任何其他 Actor 一样创建、共享并保存在 内容浏览器 中。
次表面散射轮廓通过存储美工驱动的数据来工作,这些数据与次表面中应该散射的光线距离、次表面颜色以及光线退出对象后具有的衰减颜色相关。
然后,可以将此数据应用于次表面材质,以影响次表面的外观。
您也可以采用交互方式来调整次表面轮廓,这表示您无需重新编译材质即可看到编辑结果。

启用、创建和使用次表面轮廓


要在某个材质中使用次表面轮廓,您必须先在该材质的 细节(Details)面板中将 明暗处理模型(Shading Model)设置为 次表面轮廓(Subsurface Profile),从而使该材质能够使用次表面轮廓。
通过在 次表面轮廓(Subsurface Profile)输入中输入另一个次表面轮廓,您可覆盖用于此材质的次表面轮廓。


       
次表面轮廓的默认设置接近于白种人皮肤。但请注意,这只是呈现栩栩如生的皮肤所需的要素之一。请始终确保纹理的底色适合于次表面散射轮廓。



次表面轮廓明暗处理模型



另外,也可以在材质实例中覆盖次表面轮廓。为此,您需要先打开要更改的材质实例。
然后,在该材质实例的 细节(Details)部分中启用 覆盖次表面轮廓(Override Subsurface Profile),接着在 次表面轮廓(Subsurface Profile)输入中提供要使用的次表面轮廓。


次表面轮廓明暗处理模型



要创建次表面轮廓,请先在 内容浏览器 中 右键单击。然后,选择 材质与纹理(Materials & Textures)选项,并选择 次表面轮廓(Subsurface Profile)选项。


次表面轮廓明暗处理模型



       
如果未指定任何次表面轮廓,那么它将使用默认的次表面轮廓,即白种人皮肤。



在 内容浏览器 中,使用 鼠标左键双击 次表面轮廓可将其打开,然后进行编辑。
打开后,您可调整次表面散射轮廓的各个属性,方法如下:使用键盘输入数值,或使用 鼠标左键单击 颜色条以显示取色器。


次表面轮廓明暗处理模型



散射半径(Scatter Radius):执行散射的距离(采用世界空间单位)。


次表面颜色(Subsurface Color):次表面颜色可用作次表面效果的权重。黑色表示不会发生次表面散射。
白色表示所有光线都进入材质并向四周散射。非灰阶值可以对进入表面的
颜色成分进行更多控制,从而产生外观更加复杂的明暗处理。


衰减颜色(Falloff Color):衰减颜色用于定义光线进入材质后的材质散射颜色。
如果您希望在看到散射的区域实现更加复杂的明暗变化,那么应该避免在此处使用鲜艳的颜色。


       
请记住,整个计算是节能的,因此无法通过散射创建更多光线(与旧/其他次表面方法不同)。


材质输入通道


“屏幕空间”次表面明暗处理轮廓与“照亮”明暗处理模式没有很大的区别,它们之间的主要区别在于“金属色”(Metallic)输入的用途已改变,不可使用。


底色(Base Color)输入:“底色”(Base Color)输入照例用于漫射照明。因为“屏幕空间”次表面散射不应该更改颜色或亮度,而仅仅将光线重新分布到邻近像素,所以没有额外的次表面散射颜色。
因此,如果某个材质应该以特定颜色散射,那么需要将该颜色表示为底色的组成部分。
底色应该是最终颜色,就像是从无法区分散射与漫射光线的遥远距离观察材质一样。


       
人体皮肤可看作薄薄的苍白色层,其表面下方是更有活力的红色,这就是默认颜色的外观。人体皮肤的可见散射距离大概是 1.2 厘米,这是次表面轮廓的默认值。



金属色(Metallic)输入:使用次表面轮廓时,“金属色”(Metallic)输入通道不可用,这是因为“金属色”(Metallic)输入的 GBuffer 空间的用途已改变,无法容纳次表面轮廓数据。


“不透明度”(Opacity)输入:“不透明度”(Opacity)输入通道用来屏蔽次表面散射的影响。
其工作方式为:使用 0 到 1 范围内的值来支持在次表面散射强度的不同区域之间平滑过渡。
例如,如果将值 0 输入到“不透明度”(Opacity)输入,那么将禁用次表面散射。
输入值 1 将显示次表面散射的整个范围。
为了更好地控制次表面散射的加强或减弱,最好使用蒙版纹理。
蒙版纹理中值接近于 1(即,白色)的区域将具有最强的次表面散射效果,而接近于 0(即,黑色)的区域的效果不明显。
调整次表面颜色有助于在区域过暗时进行补偿,请记住,使用较亮的颜色将导致更多次表面散射。


在这里,您可以看到如何使用蒙版来使用一个材质渲染两种表面类型。请注意,过渡比较柔和,并且不限于三角形边界。


       
次表面轮廓明暗处理模型
次表面轮廓明暗处理模型




技术细节


目前,次表面散射轮廓明暗处理模型与“照亮”区别不大(朗伯漫射,GGX 镜面反射,无金属色)。
大部分魔法在计算所有光线之后的后处理过程中发生。


       
次表面散射轮廓基于 Jorge Jimenez
的工作。请确保查阅他的网页,以获得有关如何使 3D 图像更加逼真的许多有用提示。



我们将非镜面反射(并非依赖于视图)的光线影响分隔开,以便在次表面材质上支持镜面反射并向下采样,从而提高性能。
与高斯模糊类似,我们使用两遍(假定内核可分离)后处理过程来过滤图像。
过滤内核依赖于次表面散射轮廓,后者存储在 GBuffer 中(每个场景最多 255 个活动轮廓)。
此内核具有彩色权重以及特定的取样位置,它们在轮廓中可进行比例调整(以每厘米单位数定义)。
在最终步骤中,我们将散射光线的影响与完整的解析图像进行重新组合。为了将依赖于视图的光线与并非依赖于视图的光线分隔开,我们在场景颜色阿尔法通道中存储一个加权项。
这种近似法需要 64 位的渲染目标(请参阅 r.SceneColorFormat),并且适用于大部分情况。


它会成功地剔除镜面反射,但对于这些镜面反射像素,您将获得更加去饱和度且并非依赖于视图的颜色。您可以通过将两个 32 位渲染目标用于所有照明通道加以改善。它们具有相同的存储带宽,但在某些硬件上,速度可能较慢。这可能是我们想要更改的情况(已增加代码复杂性)。


在以下示例中,我们在应用模糊之前去除了镜面反射。请注意,在最后的图像(最右边的图像)中,镜面反射清晰而平滑。这就是我们想要实现的效果。


       
次表面轮廓明暗处理模型
次表面轮廓明暗处理模型





在以下示例中,我们在应用模糊之前未去除镜面反射。请注意,在最后的图像(最右边的图像)中,镜面反射显得暗沉并且有点拉伸。这不是渲染此效果的正确方法。


       
次表面轮廓明暗处理模型
次表面轮廓明暗处理模型




比例调整和控制台命令


您可使用一些比例调整和性能控制台命令,来帮助在高品质视觉效果与更好的性能之间进行良好平衡。


r.SSS.Scale:允许禁用后处理过程或调整效果,以便快速加以试验。


r.SSS.SampleSet:允许减少所使用的样本,以加快效果的运行速度。但是,这意味着效果质量欠佳或产生渲染失真。


下图显示系统的更多一些内部信息。您可使用 ShowFlag.VisualizeSSS 1 来启用此视图。


       
次表面轮廓明暗处理模型
次表面轮廓明暗处理模型





虽然次表面散射轮廓明暗处理模型在渲染皮肤方面取得很大进步,但在处理能力方面还是有所局限。
请注意,随着此系统变得越来越完美,此列表可能会有变化。


此功能在非延迟(移动)渲染模式下无法工作。


设置较大的屏幕散射半径会导致在极端照明条件下显示带状失真。


目前,没有光线反向散射。


目前,当 SSS 材质被非 SSS 材质遮挡时,会出现灰色轮廓。

特别鸣谢


特别感谢 Lee Perry-Smith 和他的公司 Infinite Realities
提供头部模型及协助。
另外,特别感谢 Jorge Jimenez
发布他的实现,因为此功能以他的工作成果为基础。






                                       
                                       
完整内容索引
                                       
                               
                       
                       
            

            
            

     2004-2017, Epic Games, Inc. 版权所有。Unreal 及相关的商标是 Epic 在美国和其他国家的注册商标。


    使用条款 | 隐私政策

            
        
               
       
   
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部