게임 그래픽 프로그래밍
셰이더: 골렘?
101won
2024. 9. 4. 23:45
Shader "Custom/golem"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_MainTex2 ("Albedo (RGB)", 2D) = "white" {}
_MainTex3 ("Albedo (RGB)", 2D) = "white" {}
_BumpMap("BumpMap", 2D) = "bump" {} // 노말을 위한 범프맵, 백터 수치 집함. 디테일이 있는 것처럼 보이게~
_Metallic ("Metallic", Range(0, 1))= 0 // 반사로 금속 재질 효과 적용 0난반사, 1정반사(매끈)
_Smoothness ("Smoothness", Range(0, 1)) = 0 // 표면을 부드럽고 매끈하게~
_NormalX ("Normal X", Range(1, 2)) = 1
_NormalY ("Normal Y", Range(1, 2)) = 1
_Occlusion ("Occlusion", 2D) = "white" {} // 음영 조절을 통한 디테일 추가 //반드시 _MainTex와 같은 uv를 사용
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
sampler2D _MainTex;
sampler2D _MainTex2;
sampler2D _MainTex3;
sampler2D _BumpMap;
sampler2D _Occlusion;
float _Metallic;
float _Smoothness;
float _NormalX;
float _NormalY;
struct Input
{
float2 uv_MainTex;
float2 uv_MainTex2;
float2 uv_MainTex3;
float2 uv_BumpMap;
float4 color : COLOR; // 버택스 칼라
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
fixed4 c2 = tex2D (_MainTex2, IN.uv_MainTex2);
fixed4 c3 = tex2D (_MainTex3, IN.uv_MainTex3);
float4 normalColor = tex2D(_BumpMap, IN.uv_BumpMap);
float3 normal = UnpackNormal(normalColor);
o.Normal = float3(normal.x * _NormalX, normal.y * _NormalY, normal.z);
// o.Albedo = IN.color.rgb; // 버택스 칼라 보기
o.Albedo = lerp(c.rgb, c2.rgb, IN.color.r * 0.5);
o.Albedo = lerp(o.Albedo, c3.rgb, IN.color.g * 0.5);
o.Metallic = _Metallic;
// o.Metallic = _Metallic* c.rgb; // 얼굴만 적용
o.Smoothness = _Smoothness;
float4 occlusion = tex2D(_Occlusion, c);
o.Occlusion = occlusion;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}