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