게임 그래픽 프로그래밍
도끼
101won
2024. 9. 6. 18:28
Shader "Custom/axe"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Gloss ("Gloss", Range(0,1)) = 0.25
_Specular("Spec", Range(0,1)) = 0.8
_SpecColor("Specular Color", color) = (1,1,1,1)
_NoiseStrangth("Noise Strangth", float) = 2 // 강도 제어 슬라이더
_NoiseSpeed("Noise Speed", Range(0,5)) = 0.1 // 속도 제어 슬라이더
_RedTex ("Red Tex", 2D) = "white" {}
_NoiseAniTex ("Noise AniTex", 2D) = "white" {}
_GreenTex ("Green Tex", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf BlinnPhong
#pragma target 3.0
sampler2D _MainTex;
sampler2D _RedTex;
sampler2D _NoiseAniTex;
sampler2D _GreenTex;
float _Gloss;
float _Specular;
float _NoiseStrangth;
float _NoiseSpeed;
// float4 _SpecColor; // 변수 선언하면 안된다
struct Input
{
float2 uv_MainTex;
float2 uv_RedTex;
float2 uv_NoiseAniTex;
float2 uv_GreenTex;
float4 color:Color;
};
void surf (Input IN, inout SurfaceOutput o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
// fixed4 GreenTex = tex2D (_GreenTex, IN.uv_GreenTex);
// 노이즈 애니매이션 적용
fixed4 NoiseAniTex = tex2D (_NoiseAniTex, float2(IN.uv_NoiseAniTex.x, IN.uv_NoiseAniTex.y - (_Time.y *_NoiseSpeed))); // 시간에 보정 속도를 곱함
fixed4 RedTex = tex2D (_RedTex, IN.uv_RedTex + NoiseAniTex * _NoiseStrangth); // r애니매이션
fixed4 GreenTex = tex2D (_GreenTex, IN.uv_GreenTex + NoiseAniTex * _NoiseStrangth); // g애니매이션 (b도 하고 싶었는데 텍스쳐가 넘 많다함ㅠㅠ)
// o.Albedo = IN.color; // 버택스 확인용
o.Albedo = c.rgb *_Gloss * _Specular;
// o.Gloss= _Gloss;
// o.Specular = _Specular;
o.Emission = lerp(o.Albedo, RedTex.rgb, IN.color.r);
o.Emission = lerp(o.Emission, GreenTex.rgb, IN.color.g);
o.Alpha = o.Alpha;
}
ENDCG
}
FallBack "Diffuse"
}