XDRender_ObjPass_ShaderMode_Cloth(0) 面料渲染

XDRender_ObjPass_ShaderMode_Cloth(0) 面料渲染

前言


首先说明:面料的物理渲染模型是比较多的, 但总体上还是归结于漫反射,散射,镜面反射. 以及半透明和镂空等等的处理

而面料分类又特别多:丝绸,蕾丝,牛仔,反光,薄面料,针织,镂空,中厚面料,毛、绒等等(这也是为啥衣服那么贵!!!), 但大多数会混淆( 没法子, 直男眼睛,哈哈). 这也是小道分析的原因.

正文


非正式杂学

比如 : 绸和缎 (嘿嘿)

科普一下, 缎:比较厚的正面平滑有光泽的丝织品 . 绸:面平挺细腻,手感滑挺

绸用于平纹或变化组织,经纬交错紧密的丝织物,而缎是应用缎纹组织,绸面平滑光亮的织

下面是为难死人的非图程和非技美的参考

https://mp.weixin.qq.com/s/TQC-QXM5UNKGdIanbIC58g

https://mp.weixin.qq.com/s/EFwhte3Ar3nmym1Kd5r5GA

看了这两个, 我们还是有兴趣去分析和实现一下的.

特殊说明: 布料整个系统不仅包括了渲染着色, 还有布料的物理模拟(DynamicBone, 粒子模拟,这里还多出CPU模拟和GPUCS模拟)

表面粗糙的织物有棉布、亚麻布等,

表面光滑的织物有丝绸、天鹅绒等。

一些特殊部分

棉布类织物表面主要为较淡的织物颜色组成的漫反射,丝绸类织物表面有类金属的反射,而且会有多种的高光颜色。 观察还发现棉布类织物纤维周围有一圈很细的绒毛,丝绸类织物的纤维绒毛很少。

理论


总体来说布料的漫反射和高光,均有一些特性、此外还有两个Feature:一个是细微绒毛和多层, 最后高光对光滑的多丝还有一个各项异性处理.

实现


按照漫反射、高光、细微绒毛、多层、各项异性的步骤一个个处理.

这里同时利用了CustomData1和2, 类型Half4来获取扩展的数据,.

(额外一句, 对于各种Mode经常会需要多出一些类型, 这里有两种方式: 一种是多出来的合并或者替代原有不用的数据, 一种是结构体分化比如Fabr,Eye等等有自己的)

这里分成了皮革, 普通棉布, 绒毛, 丝绸或纱, 雪纺来说明.具体在后续....

1、设计Mode

FDirectLightingResult ClothLitBxDF(
    FLightMaterial pBRDF,float3 lightColor
    ,float3 normal,float3 lightDir,float3 viewDir
    )

2、构建处理函数

待后续写完,统一归拢

Diff

​ 模拟环绕散开

lerp(diffcuseTerm,diffcuseTerm * SubSurfaceWrap(context.NoL,FabricScatterSale),clothValue);
Spec

​ 这里根据需要选取不同的D和G项,同时F也会做轻度修改

FabricSpecularGGX
额外的Spec
透明

总结


备注

参考:

https://zhuanlan.zhihu.com/p/37601940

https://zhuanlan.zhihu.com/p/60977923

https://blog.csdn.net/fyy2019/article/details/100971016?spm=1000.2123.3001.4430

人生当苦,笑着看看
原文地址:https://www.cnblogs.com/BaiPao-XD/p/13967208.html