78 lines
2.3 KiB
Plaintext
78 lines
2.3 KiB
Plaintext
Shader "IndianOcean/AbyssEdgeGlow"
|
|
{
|
|
// 悬崖边缘发光线 Shader
|
|
// 加法混合 + Queue 3200(在黑暗遮罩之后渲染)
|
|
// UV.y = 1 在顶部(亮),UV.y = 0 在底部(暗)
|
|
// 用于 CliffWallBuilder 生成的边缘条带,勾勒地面断开处的轮廓
|
|
Properties
|
|
{
|
|
_Color ("发光颜色", Color) = (0.2, 0.6, 0.9, 1.0)
|
|
_Intensity ("亮度", Range(0.1, 5.0)) = 1.5
|
|
_Gradient ("渐变(越大边缘越硬)", Range(0.1, 3.0)) = 1.0
|
|
}
|
|
SubShader
|
|
{
|
|
Tags
|
|
{
|
|
"RenderType" = "Transparent"
|
|
"Queue" = "Transparent+200"
|
|
"RenderPipeline" = "UniversalPipeline"
|
|
}
|
|
Blend SrcAlpha One
|
|
ZWrite Off
|
|
ZTest LEqual
|
|
Cull Off
|
|
|
|
Pass
|
|
{
|
|
Name "EdgeGlow"
|
|
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;
|
|
float2 uv : TEXCOORD0;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
struct Varyings
|
|
{
|
|
float4 positionCS : SV_POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
|
};
|
|
|
|
CBUFFER_START(UnityPerMaterial)
|
|
float4 _Color;
|
|
float _Intensity;
|
|
float _Gradient;
|
|
CBUFFER_END
|
|
|
|
Varyings vert(Attributes input)
|
|
{
|
|
Varyings output;
|
|
UNITY_SETUP_INSTANCE_ID(input);
|
|
UNITY_TRANSFER_INSTANCE_ID(input, output);
|
|
output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
|
|
output.uv = input.uv;
|
|
return output;
|
|
}
|
|
|
|
half4 frag(Varyings input) : SV_Target
|
|
{
|
|
// UV.y: 1=顶部(亮), 0=底部(暗)
|
|
float glow = pow(input.uv.y, _Gradient);
|
|
float3 col = _Color.rgb * _Intensity;
|
|
return half4(col, glow);
|
|
}
|
|
ENDHLSL
|
|
}
|
|
}
|
|
FallBack Off
|
|
}
|