2025-10-09 17:36:27 +08:00

105 lines
3.4 KiB
Plaintext

Shader "Unlit URP Shader"
{
Properties
{
_HeadColor("HeadColor",color)=(1,1,1,1)
_TailColor("TailColor",color)=(1,1,1,1)
_Value("Value",Range(0,1))=0.5
_SpPow("SpPow",float)=1
_SpScale("SpScale",float)=1
_FPow("FPow",float)=1
_FScale("Fscale",float)=1
}
SubShader
{
Tags { "Queue"="Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" }
LOD 100
Pass
{
Name "Unlit"
Tags { "LightMode"="UniversalForward"}
Blend SrcAlpha OneMinusSrcAlpha
HLSLPROGRAM
// Required to compile gles 2.0 with standard srp library
#pragma prefer_hlslcc gles
#pragma exclude_renderers d3d11_9x
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE
#pragma multi_compile _ _SHADOWS_SOFT
#pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
float3 normal:NORMAL;
float3 wpos:TEXCOORD1;
};
struct Varyings
{
float4 positionCS : SV_POSITION;
float2 uv : TEXCOORD0;
float3 normal:TEXCOORD1;
float3 wpos:TEXCOORD2;
};
CBUFFER_START(UnityPerMaterial)
float _Value;
float4 _HeadColor;
float4 _TailColor;
float _SpPow;
float _SpScale;
float _FPow;
float _FScale;
CBUFFER_END
TEXTURE2D (_BaseMap);SAMPLER(sampler_BaseMap);
Varyings vert(Attributes v)
{
Varyings o = (Varyings)0;
o.positionCS = TransformObjectToHClip(v.positionOS.xyz);
o.uv =v.uv;
o.normal=TransformObjectToWorldNormal(v.normal);
o.wpos=TransformObjectToWorld(v.positionOS);
return o;
}
half4 frag(Varyings i) : SV_Target
{
half4 c;
float3 LDir=normalize(_MainLightPosition);
float3 VDir=normalize(_WorldSpaceCameraPos-i.wpos);
float NdL=dot(i.normal,LDir)*0.5+0.5;
float NdH=pow(saturate(dot(i.normal,normalize(LDir+VDir))),_SpPow)*_SpScale;
float NdV=pow(saturate(dot(i.normal,VDir)),_FPow);
float F=(1-NdV)*_FScale;
c.rgba=lerp(_TailColor,_HeadColor,step(_Value,i.uv.y));
float3 specular=c.rgb*NdH;
c.rgb=c.rgb*NdL+specular+F.xxx;
//c.rgb=F.xxxx;
//c.rgb = MixFog(c.rgb, i.fogCoord);
return c;
}
ENDHLSL
}
}
}