新增回声扩散特效
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
Shader "IndianOcean/EchoRing"
|
||||
{
|
||||
// 回声红圈 Shader —— 配合 EchoSystem 使用
|
||||
// 在地面(XZ平面)上绘制一个红色渐变圆环,圆环位置跟随全局 _EchoRadius
|
||||
// 边缘使用 smoothstep 渐变,从圆环中心满透明度向两侧柔和消散
|
||||
Properties
|
||||
{
|
||||
_RingColor ("Ring Color", Color) = (1, 0.15, 0.1, 1)
|
||||
_RingWidth ("Ring Width (world units)", Float) = 2.5
|
||||
}
|
||||
SubShader
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"RenderType" = "Transparent"
|
||||
"Queue" = "Transparent+250"
|
||||
"RenderPipeline" = "UniversalPipeline"
|
||||
}
|
||||
Blend SrcAlpha OneMinusSrcAlpha
|
||||
ZWrite Off
|
||||
ZTest Always
|
||||
Cull Off
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "EchoRing"
|
||||
HLSLPROGRAM
|
||||
#pragma vertex vert
|
||||
#pragma fragment frag
|
||||
#pragma multi_compile_instancing
|
||||
|
||||
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||||
|
||||
struct Attributes
|
||||
{
|
||||
float4 positionOS : POSITION;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
struct Varyings
|
||||
{
|
||||
float4 positionCS : SV_POSITION;
|
||||
float3 worldPos : TEXCOORD0;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
CBUFFER_START(UnityPerMaterial)
|
||||
float4 _RingColor;
|
||||
float _RingWidth;
|
||||
CBUFFER_END
|
||||
|
||||
// 全局回声参数(由 EchoSystem 通过 Shader.SetGlobalX 设置)
|
||||
float4 _EchoCenter; // xy = 回声中心世界坐标 XZ
|
||||
float _EchoRingRadius; // 红圈独立扩散半径
|
||||
float _EchoRingAlpha; // 红圈独立透明度(独立于描边强度)
|
||||
|
||||
Varyings vert(Attributes input)
|
||||
{
|
||||
Varyings output;
|
||||
UNITY_SETUP_INSTANCE_ID(input);
|
||||
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
||||
|
||||
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
||||
output.worldPos = TransformObjectToWorld(input.positionOS.xyz);
|
||||
return output;
|
||||
}
|
||||
|
||||
half4 frag(Varyings input) : SV_Target
|
||||
{
|
||||
// 世界空间 XZ 平面上的距离
|
||||
float2 wp = input.worldPos.xz;
|
||||
float dist = distance(wp, _EchoCenter.xy);
|
||||
|
||||
// 距离圆环中心的偏差
|
||||
float distFromRing = abs(dist - _EchoRingRadius);
|
||||
|
||||
// 渐变:圆环中心满强度,两侧柔和消散
|
||||
float halfW = max(0.001, _RingWidth * 0.5);
|
||||
float alpha = 1.0 - smoothstep(0.0, halfW, distFromRing);
|
||||
|
||||
// 乘以红圈独立透明度(独立于描边消散时序)
|
||||
alpha *= _EchoRingAlpha;
|
||||
|
||||
if (alpha < 0.001) discard;
|
||||
|
||||
return half4(_RingColor.rgb, alpha * _RingColor.a);
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
FallBack Off
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: CX1JsiL7AnkPMkp0FGGR15PogOhTjb8ArRIm08D4oVWvMTimFo71lmA=
|
||||
ShaderImporter:
|
||||
externalObjects: {}
|
||||
defaultTextures: []
|
||||
nonModifiableTextures: []
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user