99 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: ToonShaderModel
date: 2023-12-18 10:00:34
excerpt:
tags:
rating: ⭐
---
# ToonStandardCel打底
## 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. 各项异性defaultLit3. 各项异性头发 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. PBRUE默认光照多光源模式。
2. 仅主光有效针对cel。
## Specular
**ToonSpecular**
1. PBRUE默认高光效果。
2. 各项异性defaultLitUE默认的各向异性高光效果。
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. [x] ***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亮面颜色
- [x] **a**basecolor的A通道用于区分脸、身体区域和头发区域。BGT会兜帽内侧与脸都是黑色、头发是灰色MAY头发是灰色身体与头是黑色RAM、JKO身体与头发都是黑色SOL正脸、头发是黑色侧脸是白色。
- ShadowMap SSS
- [x] rgb暗面颜色
- **a**
- ILM
- [x] **ilmR**:高光强度 ***高光类型(待验证)***,根绝高光类型来设置不同的强度数值。
- `0` 无高光、无边缘光。为角色的眼睛或者眉毛有个例外JKO的头发。
- `(0~50]` 计算高光?、边缘光。主要的渲染区域,为角色的主要衣服与皮肤。
- `(50~100]` 贴图绘制高光ILM.b)、有边缘光。为角色的**头发**与衣服。
- `(100~150]`计算高光、无边缘光。为角色身体上的金属边缘或者刮痕SOL的武器。
- `(150~200]`贴图绘制高光、无边缘光。为角色身体上大部分的金属物件。SOL腰带上的铁环与肩膀处的铁环。
- `(200~255]`
- [x] ilmG阴影与高光Offset
- [x] ilmB高光遮罩 高光类型Mask。
- 目前猜测计算高光使用数值调整高光大小类似Roughness高光Mask直接使用这个Mask。
- `0`:无高光
- `128`:计算高光区域。
- `(128,255]`(128,255) => (0,1) 高光Mask
- [x] ilmA本衬线基于UV制作风格化内描边原理参考先前文章内描边Mask。
- [x] detailtexcoord[1]细节贴图第二套UV。
- [x] decal贴花单独一个材质。
- VertexColor
- [x] VertexColor(RAO
- [x] VertexColor(G猜测是轮廓线的PixelDepthOffset以此解决角色叠在一起可能会出现的问题。
- ~~Xrd翻译文章对应到Camera的距离轮廓线的在哪个范围膨胀的系数。~~
- [x] VertexColor(B描边粗细也就是Backface Outline的挤出数值。
- Xrd翻译文章轮廓线的Z Offset 值
- ~~VertexColor(A) ~~:不存在
- Xrd翻译文章轮廓线的粗细系数。0.5是标准1是最粗0的话就没有轮廓线。
- [x] OLM皮肤Mask部分角色RAM、JKO还会包括头发。颜色数值不一定相同RAM就不同
### 边缘光
### TODO
- [x] 实现AmbientOcclusion叠加阴影效果。
- [x] 添加ToonDataAsset 控制是否接受阴影选项。
- [x] 使用代理Shadow模型来渲染阴影。
## UnityChan
## 蓝色协议
# 厚涂 ShaderModel通过修改预积分ShaderModel