[학원 Unity]/[게임 그래픽 프로그래밍]
09-03 수업내용 ) UV 이미지 이용해보기
롤링페이퍼
2024. 9. 3. 10:29
uv 애니메이션
Shader "Custom/Tex2"
{
Properties
{
_MainTexture ("Main Texture 2D", 2D) = "white" {}
_UVOffsetX ("UV Offset X", Range(-1, 1)) = 0
_UVOffsetY ("UV Offset Y", Range(-1, 1)) = 0
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard
#pragma target 3.0
sampler2D _MainTexture;
float _UVOffsetX;
float _UVOffsetY;
struct Input
{
float2 uv_MainTexture;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
float2 uv = IN.uv_MainTexture;
float dir = -1;
float speed = 1.2;
float4 color = tex2D(_MainTexture, float2(uv.x + (dir * speed * _Time.y), uv.y));
o.Emission = color.rgb;
o.Alpha = color.a;
}
ENDCG
}
FallBack "Diffuse"
}
태그와 옵션을 사용해서 텍스쳐의 반투명하게 만들기
Shader "Custom/Fire"
{
Properties
{
_FireTex ("Fire Texture 2D", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard
#pragma target 3.0
sampler2D _FireTex;
struct Input
{
float2 uv_FireTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
float4 color = tex2D(_FireTex, IN.uv_FireTex);
o.Emission = color.rgb;
o.Alpha = color.a;
}
ENDCG
}
FallBack "Diffuse"
}
Shader "Custom/Fire"
{
Properties
{
_FireTex ("Fire Texture 2D", 2D) = "white" {}
_NoiseTex ("Noise Texture 2D", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue" = "Transparent"}
CGPROGRAM
#pragma surface surf Standard alpha:fade
#pragma target 3.0
sampler2D _FireTex;
sampler2D _NoiseTex;
struct Input
{
float2 uv_FireTex;
float2 uv_NoiseTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
float4 fireColore = tex2D(_FireTex, IN.uv_FireTex);
float2 uvNoise = IN.uv_NoiseTex;
float4 noiseColor = tex2D(_NoiseTex, float2(uvNoise.x, uvNoise.y - _Time.y));
o.Emission = fireColore.rgb * noiseColor.rgb;
o.Alpha = fireColore.a * noiseColor.a;
}
ENDCG
}
FallBack "Diffuse"
}
3. 이미지를 흐르게 구겨지게 만들어보자
Shader "Custom/Fire"
{
Properties
{
_FireTex ("Fire Texture 2D", 2D) = "white" {}
_NoiseTex ("Noise Texture 2D", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue" = "Transparent"}
CGPROGRAM
#pragma surface surf Standard alpha:fade
#pragma target 3.0
sampler2D _FireTex;
sampler2D _NoiseTex;
struct Input
{
float2 uv_FireTex;
float2 uv_NoiseTex;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
float4 noiseColor = tex2D(_NoiseTex, float2(IN.uv_NoiseTex.x, IN.uv_NoiseTex.y - _Time.y));
float4 fireColore = tex2D(_FireTex, IN.uv_FireTex + noiseColor.r);
o.Emission = fireColore.rgb;
o.Alpha = fireColore.a;
}
ENDCG
}
FallBack "Diffuse"
}
4. 구겨지는 강도를 조절해보기 (수정 필요)
Shader "Custom/Fire"
{
// 인터페이스
Properties
{
_FireTex ("Fire Texture 2D", 2D) = "white" {} // 첫번째 이미지
_NoiseTex ("Noise Texture 2D", 2D) = "white" {} // 두번째 이미지
_NosieStrength("Nosie Strength", Range(0,1)) = 1 // 구겨지는 이미지 값 조절
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue" = "Transparent"}
CGPROGRAM
#pragma surface surf Standard alpha:fade
#pragma target 3.0
// 매개 변수
sampler2D _FireTex;
sampler2D _NoiseTex;
float _NosieStrength;
struct Input
{
// 변수 선언
float2 uv_FireTex;
float2 uv_NoiseTex;
float2 _NosieStrength;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
// 데이터
// 해당 이미지에 애니메이션 : float2(IN.해당이미지.x, IN.해당이미지.y - _Time.y)
float2 uvNoiseTex = IN.uv_NoiseTex;
float4 noiseColor = tex2D(_NoiseTex, float2(uvNoiseTex.x, uvNoiseTex.y - _Time.y));
// 데이터를 적용할 텍스쳐
float4 fireColore = tex2D(_FireTex, IN.uv_FireTex + noiseColor.r * _NosieStrength);
o.Emission = fireColore.rgb;
o.Alpha = fireColore.a;
}
ENDCG
}
FallBack "Diffuse"
}