优化特效-溶解材质
This commit is contained in:
1 parent
5d58cb3743
commit
5bf02177df
32 files changed
+6537
-8
No files matched your search
@@ -9,7 +9,7 @@
|
||||
// Blend 是固定功能状态,不参与 shader 变体表,所以切换混合模式不产生额外变体。
|
||||
// 面向美术:程序/技术类参数一律用 [HideInInspector] 隐藏(混合模式内部值、Stencil 组、
|
||||
// 顶点 Mask 翻转),需要时由程序控制,材质面板只留艺术参数。
|
||||
Shader "VFX/VFX" {
|
||||
Shader "VFX/Yeomai_VFX" {
|
||||
Properties {
|
||||
[UIMaskBlendMode] _BlendMode ("混合模式", Float) = 0
|
||||
[HideInInspector] _SrcBlend ("Src Blend", Float) = 5
|
||||
@@ -38,6 +38,12 @@ Properties {
|
||||
[UIMaskChannel] _DissolveChannel("通道", Float) = 3
|
||||
_Dissolve ("溶解进度", Range(0, 1.01)) = 0
|
||||
_DissolveWidth ("溶解宽度", Range(0, 1)) = 0
|
||||
// 默认黑色 = 不叠加任何颜色,保证新参数不影响原有溶解效果
|
||||
[HDR]_DissolveEdgeColor ("溶解边缘颜色", Color) = (0, 0, 0, 1)
|
||||
_DissolveEdgeSharpness ("边缘锐度 (越大越细)", Range(0.001, 8)) = 2
|
||||
// 第二层:贴边界的细亮圈(烧纸的燃烧边),同样默认黑色不影响原效果
|
||||
[HDR]_DissolveHighlightColor ("溶解边缘高亮", Color) = (0, 0, 0, 1)
|
||||
_DissolveHighlightWidth ("高亮宽度 (越小越细)", Range(0.001, 0.5)) = 0.08
|
||||
[Toggle] _UseUIMaskClip("启用", Float) = 0
|
||||
_ClipRect("裁切矩形 (由 Mask / RectMask2D 控制)", Vector) = (-1, -1, 1, 1)
|
||||
[Toggle] _UseVertexMask("启用", Float) = 0
|
||||
@@ -124,6 +130,10 @@ Category {
|
||||
float _DissolveChannel;
|
||||
fixed _Dissolve;
|
||||
fixed _DissolveWidth;
|
||||
fixed4 _DissolveEdgeColor;
|
||||
fixed _DissolveEdgeSharpness;
|
||||
fixed4 _DissolveHighlightColor;
|
||||
fixed _DissolveHighlightWidth;
|
||||
#endif
|
||||
|
||||
// 通道选择:0=R 1=G 2=B 3=A。用点乘取通道,避免动态分量索引(SM2.0 不支持)
|
||||
@@ -244,6 +254,15 @@ Category {
|
||||
fixed dissolveMap = UIMaskSampleChannel(_DissolveTex, i.texcoordDissolve, _DissolveChannel);
|
||||
fixed dissolveAlpha = saturate(smoothstep( DissolveWithParticle, (DissolveWithParticle+_DissolveWidth), dissolveMap));
|
||||
col.a *= dissolveAlpha;
|
||||
// 溶解边缘色:越靠近溶解边界越亮。已溶解区域 alpha≈0 不可见,所以视觉上就是沿着溶解轮廓的一圈颜色。
|
||||
// 做火焰时把颜色设成 HDR 橙红(用 HDR 拾色器的强度调亮),边缘就会像在燃烧。
|
||||
fixed dissolveEdge = pow(1.0 - dissolveAlpha, _DissolveEdgeSharpness);
|
||||
col.rgb += _DissolveEdgeColor.rgb * dissolveEdge;
|
||||
|
||||
// 细亮圈:只在溶解边界(dissolveAlpha ≈ 0.5)附近加亮,越靠近边界越亮,
|
||||
// 宽度由 _DissolveHighlightWidth 控制;颜色用 HDR 拉高就是"烧得发白"的亮边。
|
||||
fixed highlightBand = saturate(1.0 - abs(dissolveAlpha - 0.5) / max(_DissolveHighlightWidth, 0.0001));
|
||||
col.rgb += _DissolveHighlightColor.rgb * smoothstep(0.0, 1.0, highlightBand);
|
||||
#endif
|
||||
|
||||
#if _USEUIMASKCLIP_ON
|
||||
|
||||
Reference in new issue
Block a user