NoiseCat
귀여운 공포게임은 어떤 느낌으로 표현해야할까 테스트하다가 만들어보았습니다.
White Noise 표현은 Ronja 님의 튜토리얼을 참조하였습니다.
< https://www.ronja-tutorials.com/2018/09/02/white-noise.html >
전체 코드
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
Shader "Unlit/NoiseCat" { Properties { _Tint("TintColor",Color) = (0.0,0.0,0.0,0.0) _MainTex ("Texture", 2D) = "white" {} _Light("Light", 2D) = "white" {} _Arm("Arm", 2D) = "white" {} _ArmLight("ArmLight", 2D) = "white" {} _NoiseMask("NoiseMask", 2D) = "white" {} _LightStrength("LightStrength",Range(0,10)) = 0.0 _LightBlurStrength("LightBlurStrength",Range(0,10)) = 0.0 _NoiseStrength("NoiseStrength",Range(0,10)) = 0.0 _WaveStart("WaveStart",Range(0,1)) = 0.0 _WaveStrength("WaveStrength", Range(0, 10)) = 0.0 _WaveAmptitude("WaveAmptitude",Range(0,1000)) = 0.0 _WaveSpeed("WaveSpeed",Range(0,100)) = 0.0 } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent" } Blend SrcAlpha OneMinusSrcAlpha LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 position : POS; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; sampler2D _Light; sampler2D _Arm; sampler2D _ArmLight; sampler2D _NoiseMask; float4 _MainTex_ST; float4 _Tint; half _NoiseStrength; half _LightStrength; half _LightBlurStrength; half _WaveStart; half _WaveStrength; half _WaveAmptitude; half _WaveSpeed; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.position = v.vertex; o.uv = TRANSFORM_TEX(v.uv, _MainTex); UNITY_TRANSFER_FOG(o,o.vertex); return o; } float rand(float3 vec) { float random = dot(vec, float3(12.9898, 78.233, 37.719)); random = frac(random * 143758.5453); return random; } fixed4 frag (v2f i) : SV_Target { float TimeValue = sin(_Time.y * 300); float WaveDistance = distance(_WaveStart,i.uv.y); float2 ArmUV = float2(sin(-_Time.y*_WaveSpeed + _WaveAmptitude * WaveDistance)*(saturate(_WaveStart - i.uv.y)*WaveDistance*_WaveStrength), 0); float4 Arm = tex2D(_Arm, i.uv + ArmUV)*_Tint; fixed4 MainColor = tex2D(_MainTex, i.uv)*_Tint; MainColor = max(Arm, MainColor); float4 LightUV = float4(i.uv, 0, _LightBlurStrength + TimeValue * _LightBlurStrength); float4 ArmUVforLight = float4(i.uv + ArmUV, 0, _LightBlurStrength + TimeValue * _LightBlurStrength); fixed Light = tex2Dlod(_Light, LightUV); fixed ArmLight = tex2Dlod(_ArmLight, ArmUVforLight); float3 newNoiseSeed = float3(i.position.x, i.position.y, i.position.z)/ TimeValue*0.001; float Noise = tex2D(_NoiseMask, i.uv) *rand(newNoiseSeed)*(0.75+TimeValue*0.25)* _NoiseStrength; return MainColor +(Light + ArmLight )* _LightStrength + Noise ; } ENDCG } } }
댓글