-
SurfaceOutputStandard(Metallic & Smoothness)유니티/게임그래픽 2024. 2. 21. 14:19
Standard Shader : 유니티 5.0부터 다른 많은 그래픽 툴이나 엔진처럼 최신 쉐이더 시스템인 물리기반 시스템이 도입됐다
물리기반 쉐이더 : 주변 환경에 따른 재질 변화를 물리 법칙에 기반하여
실시간으로 재질을 구현해주는 사실적인 쉐이더 표현 방식
(Standard Shader가 대표적인 물리기반 쉐이더이고 o.Albedo, o.Emission 모두 물리기반 쉐이더 요소이다)
그리고 SurfaceOutputStandard 구조체에 이 요소들이 정의되어있다
즉, SurfaceOutputStandard는 물리기반 쉐이더 요소들을 정의하고 있는 구조체이다
이번글에서는 쉐이더 요소들 중 Metallic과 Smoothness를 사용해보겠다
Shader "Custom/NewSurfaceShader" { Properties { _MainTex("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _MainTex; struct Input { float2 uv_MainTex; }; fixed4 _Color; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; } ENDCG } FallBack "Diffuse" }
간단하게 구 모양에다 텍스쳐 하나 입력받고 출력해준다
이제 여기서 Metallic과 Smoothness를 사용하여 더 현실적인 금속재질을 만들어보겠다
Shader "Custom/NewSurfaceShader" { Properties { _MainTex("Texture", 2D) = "white" {} _Metallic("Metallic", range(0,1)) = 0 _Smoothness("Smoothness", range(0,1)) = 0.5 } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Standard fullforwardshadows sampler2D _MainTex; //변수 정의 float _Metallic; float _Smoothness; struct Input { float2 uv_MainTex; }; fixed4 _Color; void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D(_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Smoothness; } ENDCG } FallBack "Diffuse" }
range형식의 Metallic과 Smoothness라는 이름의 스위치를 만들어준다
당연히 range니까 float 형식으로 변수를 정의해주고
o.Metallic = _Metallic;
o.Smoothness = _Smoothness;가장 중요한 부분. 출력파트에 각각 맞는 이름으로 쉐이더 요소를 넣어준다
Metallic은 재질이 금속이냐 아니냐를 결정 하는 부분이며, 0이면 비금속, 1이면 금속 재질이 된다
Smoothness는 이 재질이 매끄러운지 거친지를 결정하는 부분이다
0이면 완벽히 거칠어서 난반사만 일어나고 1이면 완벽히 매끄러워서 정반사만 일어나게 된다
스위치 조절에 따라 훨씬 더 질감퀄리티가 좋은 금속재질이 표현된다
여기서 주의할건 출력을 빛의 영향을 받지 않는 Emisson이 아닌 Albedo로 해야 효과적이라는것이다
'유니티 > 게임그래픽' 카테고리의 다른 글
Lambert & Blinn Phong (0) 2024.02.21 NormalMap (0) 2024.02.21 Vertex Color Masking (0) 2024.02.21 Vertex Color (1) 2024.02.21 _Time 변수 스크립트 기본형 (0) 2024.02.20