Shader - Skin & SSS
Demo Workflow 需要渲染出的特性: 毛孔造成细碎的高光现象 次表面散射造成的透光现象 金属工作流的高光参数只有光滑度,只能控制高光区域的聚集度。高光工作流的高光参数除了有光滑度,还有镜面反射率可以控制高光的反射量。渲染皮肤的方式适合使用高光工作流,可以更方便的控制高光的表现。 Specular Detail 毛孔需要有高精度的贴图来表现高频的反射凹凸变化。在限制了贴图尺寸的情况下,并且脸部通常会和身体放到一个贴图UV区域,脸部只占了其中的小部分区域。这些情况都会导致脸部的整体渲染精度不高,表达不出高频的毛孔凹凸的细节效果。 其中解决的一个思路是利用细节纹理的优势:Detail Map + Mask Map 细节纹理可以提供高频毛孔的镜面反射率,渲染出不规则凹凸的镜面反射高光效果。 上面从左往右的贴图分别是:Albedo Map,Smoothness Map,Specular Detail Map Direct Lighting & Specular Subsurface Scattering https://developer.nvidia.com/gpugems/gpugems3/part-iii-rendering/chapter-14-advanced-techniques-realistic-real-time-skin 实时次表面散射渲染技术主要分为纹理空间和屏幕空间,需要对贴图进行多次的高斯模糊处理和大量的贴图采样指令,这些都会在移动端造成很大的性能瓶颈。 下面介绍的两种散射实现方式,性能代价都是相对较小的,对于在移动端设备上的项目比较友好。 SSS Pre-integrated https://therealmjp.github.io/posts/sss-intro/ 预制作好散射的LUT贴图,将法线方向和光源方向的点积映射到贴图的U坐标,再添加一个曲线参数(Curvature)映射到贴图的V坐标。用映射后的UV坐标采样LUT贴图,替换BRDF中的漫反射项。 Direct Diffuse & Scattering SSS Back-facing 当观察的视角在模型的背光面时,散射会导致模型出现透光的效果,仿佛模型有略微的透明。 大白的身体出现略微的透光 从渲染微平面的角度分析,触发这个效果的条件是当光源和视角的方向相反,视线...