--- title: ToonShaderModel date: 2023-12-18 10:00:34 excerpt: tags: rating: ⭐ --- # ToonStandard(Cel打底) ## Diffuse ```c++ //Lighting.Diffuse *= AreaLight.FalloffColor * (Falloff * HalfLambert); //TODO:添加阴影过渡效果。 //ToonShadow添加类型:1.PBR(只能调整过渡颜色) Lighting.Diffuse = DiffuseColor * (1 / PI) * AreaLight.FalloffColor * (Falloff * HalfLambert); 2.ShadowColorTexture(兼容RampTexture效果也就是原神的效果),还需要添加ShadowColorIntensity(后需要改成曝光相关额东西)。Lighting.Diffuse = DiffuseColor * (1 / PI); //ToonLighting添加类型:1.PBR(多光源模式)2.主光有效,针对cel。 //--------------------------------------------------------- //Specular //ToonSpecular添加类型:1.PBR 2. 各项异性(defaultLit)3. 各项异性头发 4. 自定义高光大小与过渡效果 https://zhuanlan.zhihu.com/p/361918341 5.自定义高光形状贴图 https://zhuanlan.zhihu.com/p/640258070 https://github.com/AnCG7/URPShaderCodeSample/blob/891034b3fa6e838e2b231390755479f0f649f181/Assets/Shaders/NPR/Cartoon/Stylized%20Highlight%20(Transform).shader#L2 ``` **ToonShadow**: 再实现阴影偏移以及阴影羽化效果的基础上。 1. PBR:兼容UE默认阴影效果。只能调节阴影过渡颜色。使用的公式为: `Lighting.Diffuse = DiffuseColor * (1 / PI) * AreaLight.FalloffColor * (Falloff * HalfLambert);` 2. ShadowColorTexture:用于定义ShadowColor(使用贴图指定ShadowColor) **ToonLighting**: 1. PBR:UE默认光照,多光源模式。 2. 仅主光有效:针对cel。 ## Specular **ToonSpecular**: 1. PBR:UE默认高光效果。 2. 各项异性(defaultLit):UE默认的各向异性高光效果。 3. 各项异性头发 :**Kajiya-Kay**高光模型。 4. 自定义高光大小与过渡效果:https://zhuanlan.zhihu.com/p/361918341 5. 自定义高光形状贴图:https://zhuanlan.zhihu.com/p/640258070 https://github.com/AnCG7/URPShaderCodeSample/blob/891034b3fa6e838e2b231390755479f0f649f181/Assets/Shaders/NPR/Cartoon/Stylized%20Highlight%20(Transform).shader#L2 ## 罪恶装备渲染效果还原 - 原始演讲视频:https://www.bilibili.com/video/BV1Ps411C7mw/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e - 原始演讲PPT:https://www.ggxrd.com/Motomura_Junya_GuiltyGearXrd.pdf - [【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(1)](https://www.cnblogs.com/TracePlus/p/4205798.html "发布于 2015-01-06 12:56") - [【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(2)](https://www.cnblogs.com/TracePlus/p/4205834.html "发布于 2015-01-06 13:23") - [【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇](https://www.cnblogs.com/TracePlus/p/4205978.html "发布于 2015-01-06 14:23") - 知乎文章 1. [ ] ***https://zhuanlan.zhihu.com/p/631214546 2. [ ] https://zhuanlan.zhihu.com/p/436850004 3. https://zhuanlan.zhihu.com/p/513598386 4. https://zhuanlan.zhihu.com/p/493802718 5. [x] https://zhuanlan.zhihu.com/p/513228315 1. 其他人的Demo视频,角色胜利动画。 1. [ ] [Guraaaa的技术美术作品集](https://www.bilibili.com/video/BV1xx4y1T7Er/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e&t=11) ### 贴图 - base:基础色 - [x] rgb:亮面颜色 - **a**:?basecolor的A通道用于区分皮肤区域和头发区域? - ShadowMap (SSS) - [x] rgb:暗面颜色 - **a**:? - ILM - [x] **ilm(R)**:高光强度 ?***高光类型(待验证)***,根绝高光类型来设置不同的强度数值。 - `0` 无高光、无边缘光。为角色的眼睛或者眉毛,有个例外:JKO的头发。 - `(0~50]` 计算高光?、边缘光。主要的渲染区域,为角色的主要衣服与皮肤。 - `(50~100]` 贴图绘制高光(ILM.b)、有边缘光。为角色的**头发**与衣服。 - `(100~150]`计算高光、无边缘光。为角色身体上的金属边缘或者刮痕,BGT身上的金属物件? - `(150~200]`贴图绘制高光、无边缘光。为角色身体上大部分的金属物件。SOL腰带上的铁环与肩膀处的铁环。 - `(200~255]` - [x] ilm(G):阴影与高光Offset - ilm(B):高光遮罩 ? 高光类型Mask。 - `[0,128)`:无高光 - `128`:裁边高光 - `(128,255]`:PBR高光 - [x] ilm(A):本衬线(基于UV制作,风格化内描边,原理参考先前文章),内描边Mask。 - [x] detail(texcoord[1]):细节贴图,第二套UV。 - [x] decal:贴花,单独一个材质。 - VertexColor - [x] VertexColor(R):AO - VertexColor(G):用于区分身体各个部位。 - Xrd翻译文章:对应到Camera的距离,轮廓线的在哪个范围膨胀的系数。 - VertexColor(B):描边粗细,也就是Backface Outline的挤出数值。 - Xrd翻译文章:轮廓线的Z Offset 值 - ~~VertexColor(A) ~~:不存在 - Xrd翻译文章:轮廓线的粗细系数。0.5是标准,1是最粗,0的话就没有轮廓线。 - OLM? ### ILM.R 为整体、同一的色块,判定为区域判断用。 - 0 - 49~50 - 99~100 - 200 特例:BGT出现了80、150数值。 ### ILM.B 有出现Ramp,判定为高光形状Mask。 ### TODO - [x] 实现AmbientOcclusion叠加阴影效果。 - [x] 添加ToonDataAsset 控制是否接受阴影选项。 - [x] 使用代理Shadow模型来渲染阴影。 ## UnityChan ## 蓝色协议 # 厚涂 ShaderModel(通过修改预积分ShaderModel)