Unity Standard Surface Shader 를 적용하는 기본적인 적용 방법과 여러 속성들에 대하여 설명합니다.
Version : Unity 2021.3.5f1
Test Material과 Standard Surface Shader를 생성해준다
shader를 material에 적용해주고 material을 생성한 sphere에 적용 시켜준다.
이제 Test Material shader를 열어보자
Shader "Custom/Test Material" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader. // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing. // #pragma instancing_options assumeuniformscaling UNITY_INSTANCING_BUFFER_START(Props) // put more per-instance properties here UNITY_INSTANCING_BUFFER_END(Props) void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; // Metallic and smoothness come from slider variables o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }
Shader
쉐이더가 시작한다는 의미이며 큰 의미는 없습니다.
“Custom/Test Material”
메터리얼에서 선택할 수 있는 쉐이더의 이름입니다.
/ 를 사용하면 트리구조가 생기고 없으면 루트 위치에 쉐이더가 생성됩니다.
많은 쉐이더를 관리할떄 사용합니다.
( ” 를 확실하게 닫는 것에 주의합니다.)
Properties
쉐이더의 인터페이스 부분입니다.
이 부분에 코드를 작성하면 아래와 같이 메터리얼에서 인터페이스로 볼 수 있습니다.
주석 처리 시 사라집니다.
https://docs.unity3d.com/kr/530/Manual/SL-Properties.html <- 한글
https://docs.unity3d.com/Manual/SL-Properties.html <- 영문
위의 사이트에서 Float / Float4 / Sampler를 받는 인터페이스를 확인 할 수 있습니다.
Range는 최솟값 / 최댓값을 입력하면 이 값에 해당하는 슬라이더가 나오는 명령입니다.
= 0 은 초기 값입니다. 나중에 인터페이스에서 값을 조절하면 무시됩니다.
_TestRange 에 입력되는 값은 flaot 입니다.
Float은 한 자리의 소수점을 입력받는 인터페이스를 만들어 줍니다.
인터페이스에서 값을 직접 입력하는 방식이 Range와 차이점입니다.
_TestFloat 입력되는 값은 flaot 입니다.
Color 인터페이스를 만들게 됩니다.
Color는 R G B A 라는 4자리 숫자를 입력받을 수 있으므로
_TestColor는 float4를 받게 됩니다.
Vector 는 float4를 직접 숫자로 입력받을 수 있는 인터페이스입니다.
color 와 같은 데이터지만 색상이 아닌 값으로 입력을 받는다는 것이 다릅니다.
_TestVector 는 float4를 받게 됩니다.
text2D
float 계열로 분류되지 않는 sampler 들입니다.
텍스처는 UV 좌표와 함께 계산되어야 float4로 출력될 수 있기 때문에,
아직 UV와 계산이 되지 않은 텍스처는 색상(float4)으로 나타낼 수 없습니다.
그래서 이때까지는 sampler라고 부릅니다.
그 중 text2D는 2D 텍스처를 받는 인터페이스를 만들어 줍니다.
(나중에 UV와 결합되어야 float4로 사용 가능합니다.)
2D는 이 인터페이스가 2D 텍스처를 받는 다는 의미입니다.
name ("display name", 2D) = "defaulttexture" {} name ("display name", Cube) = "defaulttexture" {} name ("display name", 3D) = "defaulttexture" {} 위와 같이 사용합니다.
“Albedo (RGB)” 는 이 프로퍼티에는 Albedo 텍스쳐를 사용 / A 채널을 제외한 RGB채널을 사용한다는 뜻입니다.
” ” 안은 해당 프로퍼티가 제어하고 사용할 수 있는지를 설명해주는 영역입니다.
white” {}는 이 텍스쳐 인터페이스가 처음 생겨서 아무것도 들어있지 않을 때,
기본으로 white 텍스쳐가 출력된다는 의미입니다.
white / black / red 등 다른 색도 가능합니다.
확인 시 _TestTex -> _MainTex 로 변경
Properties 의 추가 기능
[HideInInspector]
– 존재하지만 Inspector에 보이지 않게 만들어 줍니다.
스크립트로 접근해야 하지만 아티스트가 Inspector 에서 건드리면 곤란할 때 사용하면 좋습니다.
[NoScaleOffset]
– 텍스처의 UV 스타일링과 옵셋 메뉴가 없어집니다.
UV 타일링이나 옵셋을 다른 인터페이스로 조절하도록 만든 경우에 사용하면 좋습니다.
[Normal]
– 텍스쳐 속성에 노말맵이 들어올 것으로 예상시킵니다.
만약 노말맵이 들어오지 않으면 경고를 표시하고 노멀맵으로 강제 변환을 물어봅니다.
[HDR]
– 텍스쳐 속성에 HDR 텍스쳐가 들어올 것으로 예상시킵니다.
컬러 Properties 에서 사용하면 HDR 컬러 입력 인터페이스를 만들 수 있습니다.
[Toggle]
– toggle 메뉴가 생깁니다.
출력되는 값은 0.0 과 1.0 입니다.
[Enum(이름1, 1의값, 이름2, 2의값)]
– float 값의 팝업메뉴를 생성합니다.
( ) 안에는 네임스페이스로 규정된 유형을 넣거나 이름, 값으로 이루어진 한 쌍의 데이터로 작성될 수 있습니다.
최대 7개 까지 가능합니다.
[PowerSlider( )]
– 제곱이 적용된 슬라이더를 만듭니다. ( )안에 4.0 을 넣으면 4의 제곱 3.0을 넣으면 3의 제곱이 됩니다.
처음에는 값을 천천히 올라가다가 나중에는 값이 급격하게 올라가는 슬라이더를 만들 때 사용합니다.
스펙큘러 값처럼, 처음에는 민감하게 반응하다가 값이 커질수록 둔감해지는 옵션을 위한 조절자를 생성하는 데 이용하면 좋습니다.
[KeywordEnum(이름1, 이름2 ….)]
– 각 이름의 이넘(Enum)이 생성됩니다. 각각 0, 1, 2 값이 들어옵니다.
최대 9개까지 가능합니다.
[Space] / [Space(number)]
– [Space] 한칸 아래로 이동시킵니다. 여러번 사용 시 중첩됩니다.
– [Space(number)] number 의 숫자 포인트 만큼 아래로 이동시킵니다.
아래의 예제는 56포인트 이동입니다.
[Header (A group of thiongs)]
– 볼드체의 제목이 생깁니다
쉐이더 메뉴를 정리하는데 유용합니다.