.obsidian
00-MOC
01-Diary
02-Note
03-UnrealEngine
04-ComputerGraphics
05-SDHGame
06-DCC
07-Other
AI
MAC
Node.js
Qt
Unity
ComputeShader笔记.md
ShaderLab笔记.md
Unity-Chan 2种模式比对.md
Unity-Chan Toon Shader Body.md
Unity-Chan Toon Shader Outline.md
Unity-Chan Toon Shader PixelShader.md
Unity-Chan Toon Shader 学习.md
Unity通用渲染管线(URP)系列(一)——自定义渲染管线.md
Unity通用渲染管线(URP)系列(三)——方向光(Direct Illumination).md
Unity通用渲染管线(URP)系列(二)——Draw Calls(Shaders&Batches).md
Unity通用渲染管线(URP)系列(十一)——后处理(Bloom).md
Unity通用渲染管线(URP)系列(十二)——HDR.md
Unity通用渲染管线(URP)系列(四)——方向阴影(Cascaded Shadow Maps).md
《UnityShader入门》NPR部分学习.md
《UnityShader入门》后处理部分学习.md
生活
简历
装机
.keep
VPS账号 以及PS4 DNS.md
github-recovery-codes.txt
如何打开微软商店.md
技术演示.pptx
背景.png
08-Assets
09-Templates
.gitignore
.gitmodules
LICENSE
48 lines
3.4 KiB
Markdown
48 lines
3.4 KiB
Markdown
|
## 公式
|
|||
|
```c#
|
|||
|
saturate((1.0 + ( (Set_ShadingGrade - (_1st_ShadeColor_Step-_1st_ShadeColor_Feather)) * (0.0 - 1.0) ) / (_1st_ShadeColor_Step - (_1st_ShadeColor_Step-_1st_ShadeColor_Feather)))); // Base and 1st Shade Mask
|
|||
|
```
|
|||
|
|
|||
|
## ShadingGradeMap
|
|||
|
```c#
|
|||
|
float3 Set_BaseColor = lerp( (_MainTex_var.rgb*_BaseColor.rgb), ((_MainTex_var.rgb*_BaseColor.rgb)*Set_LightColor), _Is_LightColor_Base );
|
|||
|
float3 _BaseColor_var = lerp(Set_BaseColor,_Is_LightColor_1st_Shade_var,Set_FinalShadowMask);
|
|||
|
|
|||
|
float Set_FinalShadowMask = saturate((1.0 + ( (Set_ShadingGrade - (_1st_ShadeColor_Step-_1st_ShadeColor_Feather)) * (0.0 - 1.0) ) / (_1st_ShadeColor_Step - (_1st_ShadeColor_Step-_1st_ShadeColor_Feather))));
|
|||
|
float Set_ShadeShadowMask = saturate((1.0 + ( (Set_ShadingGrade - (_2nd_ShadeColor_Step-_2nd_ShadeColor_Feather)) * (0.0 - 1.0) ) / (_2nd_ShadeColor_Step - (_2nd_ShadeColor_Step-_2nd_ShadeColor_Feather))));
|
|||
|
|
|||
|
float3 Set_FinalBaseColor = lerp( _BaseColor_var,
|
|||
|
lerp(_Is_LightColor_1st_Shade_var,
|
|||
|
lerp( _2nd_ShadeMap_var.rgb*_2nd_ShadeColor.rgb,
|
|||
|
((_2nd_ShadeMap_var.rgb*_2nd_ShadeColor.rgb)*Set_LightColor),
|
|||
|
_Is_LightColor_2nd_Shade ),
|
|||
|
Set_ShadeShadowMask),
|
|||
|
Set_FinalShadowMask);
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
## Feather
|
|||
|
```c#
|
|||
|
_Set_1st_ShadePosition与 _Set_2st_ShadePosition,默认为白色。
|
|||
|
|
|||
|
float3 Set_BaseColor = lerp( (_BaseColor.rgb*_MainTex_var.rgb), ((_BaseColor.rgb*_MainTex_var.rgb)*Set_LightColor), _Is_LightColor_Base );
|
|||
|
|
|||
|
float Set_FinalShadowMask = saturate(1.0 + lerp( _HalfLambert_var,
|
|||
|
_HalfLambert_var*saturate(_SystemShadowsLevel_var),
|
|||
|
_Set_SystemShadowsToBase ) - (_BaseColor_Step-_BaseShade_Feather) *
|
|||
|
((1.0 - _Set_1st_ShadePosition_var.rgb).r - 1.0) //对应上面的 (0.0 - 1.0)项
|
|||
|
/ (_BaseColor_Step - (_BaseColor_Step-_BaseShade_Feather)));
|
|||
|
|
|||
|
|
|||
|
float3 Set_FinalBaseColor = lerp( Set_BaseColor,
|
|||
|
lerp(Set_1st_ShadeColor,
|
|||
|
Set_2nd_ShadeColor,
|
|||
|
saturate((1.0 + ( (_HalfLambert_var - (_ShadeColor_Step-_1st2nd_Shades_Feather)) * ((1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0) ) / (_ShadeColor_Step - (_ShadeColor_Step-_1st2nd_Shades_Feather))))
|
|||
|
),
|
|||
|
Set_FinalShadowMask); // Final Color
|
|||
|
```
|
|||
|
|
|||
|
## 总结
|
|||
|
可以看得出两者都使用了UTS的祖传公式进行插值。但不同点在于:
|
|||
|
- ShadingGradeMap工作模式的UTS公式插值对象为ShadingGradeMap,之后使用1st、2stShadeColor对应的Step与Feather进行计算来获得2个ShadeMask。最后再使用2个Mask对BaseColor、1stShadeColor与2stShadeColor进行插值来获取最终结果。
|
|||
|
- Feather工作模式的UTS公式插值对象为HalfLambert,之后也使用2份Step与Feather进行计算得到来获得2个ShadeMask。最后再使用2个Mask对BaseColor、1stShadeColor与2stShadeColor进行插值来获取最终结果。还有一个区别在于里面增加了ShadePositionMap对UTS公式的分子项进行控制,也就是使用`(1.0 - _Set_2nd_ShadePosition_var.rgb).r - 1.0)`来代替`(0.0 - 1.0)`
|