104 lines
5.2 KiB
Plaintext
104 lines
5.2 KiB
Plaintext
// 빌트인 렌더 파이프라인 이식판(삼국지 슬링샷 · 2026-11-10) — 원본 = WL 프로젝트 URP 셰이더 ResWork/VFX/MasterStylizedFX/Shaders/CommonMeshLoop.shader (CommonMeshLoop · Amplify)
|
||
// GUID · 셰이더 이름 · 속성 이름을 원본과 같게 두어 WL 에서 옮겨 온 재질이 그대로 이 셰이더를 쓴다. 계산식 = 원본 ExtraPrePass(뒷면) + Forward(앞면) 그대로(URP 함수 → UnityCG · _TimeParameters.x → _Time.y)
|
||
// + TKS_HdrApprox.cginc(URP HDR 톤매핑 · 블룸 근사 — 1 넘는 밝기를 흰빛으로).
|
||
Shader "CommonMeshLoop"
|
||
{
|
||
Properties
|
||
{
|
||
[HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1)
|
||
[HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5
|
||
[Header(Main)][NoScaleOffset]_Main("Main", 2D) = "white" {}
|
||
_Tiling("Tiling", Vector) = (1,1,0,0)
|
||
_Offset("Offset", Vector) = (0,0,0,0)
|
||
_Scroll("Scroll", Vector) = (1,0,0,0)
|
||
[Header(LimitUV)]_LimitUVRange("LimitUVRange", Vector) = (0,1,0,1)
|
||
[Toggle]_LimitUV("LimitUV", Float) = 0
|
||
[Header(Mask)][NoScaleOffset]_NoiseMask("NoiseMask", 2D) = "white" {}
|
||
[Toggle]_Mask("Mask", Float) = 1
|
||
_MaskTiling("MaskTiling", Vector) = (0,0,0,0)
|
||
_MaskOffset("MaskOffset", Vector) = (0,0,0,0)
|
||
_MaskScroll("MaskScroll", Vector) = (0,0,0,0)
|
||
_Feather("Feather", Range(0, 1)) = 0
|
||
[Header(StaticMask)]_StaticMask("StaticMask", 2D) = "white" {}
|
||
_SmoothStep("SmoothStep", Vector) = (0,1,0,0)
|
||
[HideInInspector] _texcoord("", 2D) = "white" {}
|
||
[HideInInspector] _QueueOffset("_QueueOffset", Float) = 0
|
||
[HideInInspector] _QueueControl("_QueueControl", Float) = -1
|
||
}
|
||
SubShader
|
||
{
|
||
Tags { "RenderType" = "Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True" }
|
||
|
||
CGINCLUDE
|
||
#include "UnityCG.cginc"
|
||
#include "TKS_HdrApprox.cginc"
|
||
struct appdata { float4 vertex : POSITION; float4 color : COLOR; float4 uv0 : TEXCOORD0; float4 uv1 : TEXCOORD1; };
|
||
struct v2f { float4 pos : SV_POSITION; float4 color : COLOR; float4 uv0 : TEXCOORD0; float4 uv1 : TEXCOORD1; };
|
||
sampler2D _Main, _NoiseMask, _StaticMask;
|
||
float4 _StaticMask_ST, _LimitUVRange, _SmoothStep;
|
||
float4 _Tiling, _Offset, _Scroll, _MaskScroll, _MaskTiling, _MaskOffset;
|
||
float _LimitUV, _Mask, _Feather;
|
||
v2f vert(appdata v)
|
||
{
|
||
v2f o;
|
||
o.pos = UnityObjectToClipPos(v.vertex);
|
||
o.color = v.color;
|
||
o.uv0 = float4(v.uv0.xyz, 0);
|
||
o.uv1 = v.uv1;
|
||
return o;
|
||
}
|
||
float4 fragCommon(v2f i)
|
||
{
|
||
float2 uv = i.uv0.xy * _Tiling.xy + (((i.uv0.z * _Scroll.xy) * _Time.y) + _Offset.xy);
|
||
float2 uvc = clamp(uv, float2(_LimitUVRange.x, _LimitUVRange.z), float2(_LimitUVRange.y, _LimitUVRange.w));
|
||
float4 mainTex = tex2D(_Main, _LimitUV > 0.5 ? uvc : uv);
|
||
float lr = lerp(0.0 - _Feather, 1.0 + _Feather, i.uv1.z);
|
||
float2 maskUV = i.uv0.xy * _MaskTiling.xy + (_MaskOffset.xy + ((i.uv1.w * _Time.y) * _MaskScroll.xy));
|
||
float noiseMask = smoothstep(lr - _Feather, lr + _Feather, tex2D(_NoiseMask, maskUV).r);
|
||
float2 uvStatic = i.uv0.xy * _StaticMask_ST.xy + _StaticMask_ST.zw;
|
||
float staticMask = smoothstep(_SmoothStep.x, _SmoothStep.y, tex2D(_StaticMask, uvStatic).r);
|
||
float3 rgb = (i.color * mainTex * (1.0 + i.uv1.x)).rgb;
|
||
float alpha = (i.color.a * mainTex.a) * (_Mask > 0.5 ? noiseMask : 1.0) * staticMask;
|
||
#ifdef _ALPHATEST_ON
|
||
clip(alpha - 0.5);
|
||
#endif
|
||
float hot;
|
||
rgb = TKS_HotToWhite(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
|
||
|
||
Pass
|
||
{
|
||
Name "ExtraPrePass"
|
||
Cull Front ZWrite Off ZTest LEqual
|
||
Blend SrcAlpha OneMinusSrcAlpha
|
||
CGPROGRAM
|
||
#pragma vertex vert
|
||
#pragma fragment frag
|
||
#pragma shader_feature_local _ALPHATEST_ON
|
||
#pragma shader_feature_local _ALPHAPREMULTIPLY_ON
|
||
// 뒷면 셸 = 같은 색을 어둡게(그늘 테두리 · 2026-11-10 Fable 검토 「어두운 림」 → 고정 갈색은 셸 아래 검은 얼룩으로 보여(실측) 진영색 × TKS_RIM_SHADE 로 · 원본 = 같은 색 그대로)
|
||
float4 frag(v2f i) : SV_Target { float4 c = fragCommon(i); return float4(c.rgb * TKS_RIM_SHADE, c.a * TKS_RIM_ALPHA); }
|
||
ENDCG
|
||
}
|
||
Pass
|
||
{
|
||
Name "Forward"
|
||
Cull Back 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
|
||
float4 frag(v2f i) : SV_Target { return fragCommon(i); }
|
||
ENDCG
|
||
}
|
||
}
|
||
}
|