66 lines
3.2 KiB
Plaintext
66 lines
3.2 KiB
Plaintext
// 빌트인 렌더 파이프라인 이식판(삼국지 슬링샷 · 2026-11-09) — 원본 = WL 프로젝트 URP 셰이더 ResWork/VFX/MasterStylizedFX/Shaders/SimpleEmissive.shader (EmissiveParticle · Amplify)
|
|
// GUID · 셰이더 이름 · 속성 이름을 원본과 같게 두어 WL 에서 옮겨 온 재질이 그대로 이 셰이더를 쓴다. 계산식 = 원본 Forward 패스 그대로(URP 함수 → UnityCG).
|
|
Shader "EmissiveParticle"
|
|
{
|
|
Properties
|
|
{
|
|
[HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5
|
|
[HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1)
|
|
_TextureSample0("Texture Sample 0", 2D) = "white" {}
|
|
_FresnelScale("FresnelScale", Float) = 0
|
|
_FresnelPower("FresnelPower", Float) = 0
|
|
[HideInInspector] _texcoord("", 2D) = "white" {}
|
|
[HideInInspector] _QueueOffset("_QueueOffset", Float) = 0
|
|
[HideInInspector] _QueueControl("_QueueControl", Float) = -1
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True" }
|
|
Pass
|
|
{
|
|
Cull Off ZWrite Off ZTest LEqual
|
|
Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#pragma shader_feature_local _ALPHATEST_ON
|
|
#pragma shader_feature_local _ALPHAPREMULTIPLY_ON
|
|
#include "UnityCG.cginc"
|
|
#include "TKS_HdrApprox.cginc"
|
|
struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; float4 color : COLOR; float4 uv0 : TEXCOORD0; };
|
|
struct v2f { float4 pos : SV_POSITION; float4 color : COLOR; float4 uv0 : TEXCOORD0; float3 normalWS : TEXCOORD1; float3 posWS : TEXCOORD2; };
|
|
sampler2D _TextureSample0; float4 _TextureSample0_ST; float _FresnelScale, _FresnelPower;
|
|
v2f vert(appdata v)
|
|
{
|
|
v2f o;
|
|
o.pos = UnityObjectToClipPos(v.vertex);
|
|
o.color = v.color;
|
|
o.uv0 = v.uv0;
|
|
o.normalWS = UnityObjectToWorldNormal(v.normal);
|
|
o.posWS = mul(unity_ObjectToWorld, v.vertex).xyz;
|
|
return o;
|
|
}
|
|
float4 frag(v2f i) : SV_Target
|
|
{
|
|
float2 uv = i.uv0.xy * _TextureSample0_ST.xy + _TextureSample0_ST.zw;
|
|
float4 c = i.color * (i.uv0.z + 1.0) * tex2D(_TextureSample0, uv);
|
|
float3 viewDir = normalize(_WorldSpaceCameraPos.xyz - i.posWS);
|
|
float ndv = dot(i.normalWS, viewDir);
|
|
float fres = _FresnelScale * pow(max(1e-4, 1.0 - ndv), _FresnelPower);
|
|
float alpha = clamp(c.a + fres, 0.0, 1.0);
|
|
#ifdef _ALPHATEST_ON
|
|
clip(alpha - 0.5);
|
|
#endif
|
|
float hot;
|
|
float3 rgb = TKS_HotToWhite(c.rgb, hot); // URP HDR 톤매핑·블룸 근사(TKS_HdrApprox.cginc)
|
|
alpha = TKS_CelAlpha(saturate(alpha * (1.0 + hot))); // 불투명도 3단계(셀 · 2026-11-10 Fable 검토)
|
|
#ifdef _ALPHAPREMULTIPLY_ON
|
|
rgb *= alpha;
|
|
#endif
|
|
return float4(rgb, alpha);
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
}
|