Unity3D/Shader
Shader) 2D URP 굴절 셰이더
HSH12345
2023. 10. 5. 15:12
Shader "Water/2DRefraction"
{
Properties
{
_MainTex("Main Texture", 2D) = "white" {}
_DistortionTex("Distortion Texture", 2D) = "white" {}
_Speed("Speed", float) = 1
_Scale("Scale", float) = 0.001
_Alpha("Alpha", float) = 1
_WaveHeight("Wave Height", float) = 0.05
_WaveFrequency("Wave Frequency", float) = 2.0
_WaveSpeed("Wave Speed", float) = 1.0
}
SubShader
{
Tags { "RenderType" = "Transparent" "RenderPipeline" = "UniversalRenderPipeline" }
LOD 100
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off
Cull Off
Pass
{
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
struct Attributes
{
float4 positionOS : POSITION;
float2 uv : TEXCOORD0;
};
struct Varyings
{
float4 positionHCS : SV_POSITION;
float2 uv : TEXCOORD0;
float2 screenUV : TEXCOORD1;
};
TEXTURE2D(_MainTex);
TEXTURE2D(_DistortionTex);
TEXTURE2D(_CameraSortingLayerTexture);
SAMPLER(sampler_MainTex);
SAMPLER(sampler_DistortionTex);
SAMPLER(sampler_CameraSortingLayerTexture);
CBUFFER_START(UnityPerMaterial)
float4 _MainTex_ST;
float4 _DistortionTex_ST;
float _Speed;
float _Scale;
float _Alpha;
float _WaveHeight;
float _WaveFrequency;
float _WaveSpeed;
CBUFFER_END
Varyings vert(Attributes IN)
{
Varyings OUT;
OUT.positionHCS = TransformObjectToHClip(IN.positionOS.xyz);
OUT.uv = IN.uv;
float4 clipPosition = OUT.positionHCS;
float2 screenUV = (clipPosition.xy / clipPosition.w) * 0.5 + 0.5;
screenUV.y = 1.0 - screenUV.y;
OUT.screenUV = screenUV;
return OUT;
}
half4 frag(Varyings IN) : SV_Target
{
float wave = _WaveHeight * sin(_WaveFrequency * IN.uv.x + _WaveSpeed * _Time.y);
float2 wavyUV = float2(IN.uv.x, IN.uv.y + wave);
float2 distortion = (_Speed * SAMPLE_TEXTURE2D(_DistortionTex, sampler_DistortionTex, wavyUV + _Time.y).rg - 0.5) * _Scale;
float2 distortedUV = IN.screenUV + distortion;
half4 sceneColor = SAMPLE_TEXTURE2D(_CameraSortingLayerTexture, sampler_CameraSortingLayerTexture, distortedUV);
return sceneColor;
}
ENDHLSL
}
}
}
-Renderer 2D Data설정