修改
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
Shader "IndianOcean/AbyssGlowParticle"
|
||||
{
|
||||
// 深渊荧光粒子 Shader
|
||||
// 加法混合 + Queue 3200(在 DarknessOverlay 的 3100 之后渲染)
|
||||
// 不受乘法黑暗遮罩影响,在纯黑虚空中也能发光
|
||||
// 程序化软圆点,不需要贴图
|
||||
//
|
||||
// 使用方式:
|
||||
// 1. 创建材质,选此 shader
|
||||
// 2. 材质赋给 ParticleSystem 的 Renderer > Material
|
||||
// 3. 粒子贴图留空(程序化圆点),用 Vertex Color 控制颜色/透明度
|
||||
Properties
|
||||
{
|
||||
_Color ("颜色", Color) = (1.0, 0.85, 0.4, 1.0)
|
||||
_Softness ("柔和度(边缘渐变宽度)", Range(0.01, 1.0)) = 0.5
|
||||
_Intensity ("亮度倍数", Range(0.1, 5.0)) = 1.0
|
||||
}
|
||||
SubShader
|
||||
{
|
||||
Tags
|
||||
{
|
||||
"RenderType" = "Transparent"
|
||||
"Queue" = "Transparent+200"
|
||||
"RenderPipeline" = "UniversalPipeline"
|
||||
}
|
||||
// alpha 加法混合:finalColor = src.rgb * src.a + dst.rgb
|
||||
// 粒子在黑暗遮罩之后渲染,直接往画面上加光
|
||||
Blend SrcAlpha One
|
||||
ZWrite Off
|
||||
ZTest LEqual
|
||||
Cull Off
|
||||
|
||||
Pass
|
||||
{
|
||||
Name "AbyssGlow"
|
||||
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;
|
||||
float4 color : COLOR; // 粒子系统顶点色(含生命周期 alpha)
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
struct Varyings
|
||||
{
|
||||
float4 positionCS : SV_POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
float4 color : COLOR;
|
||||
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||||
};
|
||||
|
||||
CBUFFER_START(UnityPerMaterial)
|
||||
float4 _Color;
|
||||
float _Softness;
|
||||
float _Intensity;
|
||||
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;
|
||||
output.color = input.color;
|
||||
return output;
|
||||
}
|
||||
|
||||
half4 frag(Varyings input) : SV_Target
|
||||
{
|
||||
// 程序化软圆点:UV 中心 (0.5,0.5) 到边缘的距离
|
||||
float2 center = float2(0.5, 0.5);
|
||||
float dist = distance(input.uv, center);
|
||||
float softCircle = 1.0 - smoothstep(_Softness * 0.5, 0.5, dist);
|
||||
softCircle = max(0.0, softCircle);
|
||||
|
||||
// 颜色 = 材质色 × 粒子顶点色 × 亮度 × 软圆形状
|
||||
float3 col = _Color.rgb * input.color.rgb * _Intensity;
|
||||
float alpha = softCircle * input.color.a;
|
||||
|
||||
return half4(col, alpha);
|
||||
}
|
||||
ENDHLSL
|
||||
}
|
||||
}
|
||||
FallBack Off
|
||||
}
|
||||
Reference in New Issue
Block a user