✍️ 개요
쉐이더 프로퍼티는 쉐이더에서 정의된 변수로, Material을 통해 제어할 수 있는 값을 의미합니다.
Unity의 Inspector 창에서 쉽게 설정할 수 있으며, 이 값을 통해 Mesh에 적용되는 시각적 표현을 제어할 수 있습니다.
오늘은 주요 쉐이더 프로퍼티에 대해 알아보고, 생성하는 방법을 다루도록 하겠습니다.
📌 프로퍼티란?
프로퍼티(Property) : Material을 통해 제어할 수 있는 값
위 사진처럼 프로퍼티를 추가하면 Inspector에서 확인할 수 있습니다.
만약 Inspector에서 Color을 변경하면 변경된 Color가 쉐이더 코드에 적용됩니다.
그래서 동일한 쉐이더를 사용하더라도, 서로 다른 Material을 생성할 수 있습니다.
프로퍼티는 쉐이더 편집기에서 ' + ' 기호를 클릭하여 생성할 수 있습니다.
이제 각 프로퍼티에 대해 살펴보도록 하겠습니다.
📌 프로퍼티 파라미터
쉐이더 편집기를 살펴보면 왼쪽 상단에 Graph Inspector을 확인할 수 있습니다.
여기서 프로퍼티를 설정할 수 있는 공통 파라미터가 존재하는데, 여기에 대해 알아보도록 하겠습니다.
① Name
Propery의 이름을 의미하며, Inspector에 출력되는 값입니다.
한글이 가능합니다.
② Reference
입력 받은 값의 변수값이며, 스크립트로 접근할 때 사용합니다.
앞에 _ 을 붙여서 외부에서 들어온 값임을 표시합니다. 관습이라 따라주시는 것이 좋습니다.
한글과 같은 사용될 수 없는 문자는 제거되니 유의해주세요.
Name과 Reference은 동일한 이름을 사용해주는 것이 좋습니다.
아트와 프로그래머 간의 의사소통에 문제가 발생할 수 있기 때문입니다.
③ Precision
값의 정확도를 의미하며, 플랫폼에 따라 숫자의 정밀도를 조절합니다.
대부분의 경우에는 크게 신경 쓸 필요 없습니다.
Precision 종류
- Inherit : 뒤에 따라오는 노드의 정밀도에 따라 변함
- Single : Float 정밀도 (32-bit)을 사용
- Half : Half 정밀도 (64-bit)을 사용
- Use Graph Precision : 그래픽 전체에서 사용하는 정밀도를 따름
④ Scope
쉐이더 프로퍼티의 범위를 설정하는 값입니다.
최적화와 개별성 사이의 균형을 맞추는 데 중요한 역할을 합니다.
Scope 종류
- Global : 전역으로 사용, 모든 객체가 동일한 프로퍼티 값을 공유
- Per Material : Material 단위로 설정, 각 Material에 독립적으로 값을 설정
- Hybrid Per Instance : 각 인스턴스에 대해 개별적인 프로퍼티 값을 설정, GPU 인스턴싱 기술에서 사용합니다.
⑤ Show In Inspector
Unity의 Inspector 창에 표시하여 사용자가 쉽게 확인하고 수정할 수 있도록 하는 기능입니다.
만약 표시하고 싶지 않다면 체크를 해제하면 됩니다.
⑥ Default Value
변수에 대한 초기값을 지정하는 것을 의미하며, 프로퍼티가 설정되기 전에 가지는 기본적은 값입니다.
사용자 또는 코드가 수동으로 값을 변경하기 전까지 유지됩니다.
📌 프로퍼티 종류
① Float : 소수점 값 하나를 표현할 수 있는 데이터
Mode 종류
- Default(Float) : 소수점 표현
- Integer : 정수 표현 (제대로 작동하지 않아 사실상 사용 X)
- Slider : 값의 범위를 슬라이더로 표현
② Vector : 여러 개의 Float 데이터를 정의하는 데이터
Vector 종류
- Vector2 : 2개의 Float을 담는 데이터
- Vector3 : 3개의 Float을 담는 데이터
- Vector4 : 4개의 Float을 담는 데이터
여러 값을 한 번에 처리 가능하여 다차원 데이터를 효율적으로 표현합니다.
주로 위치, 방향, UV 조작, 색상 등 다양한 역할을 수행합니다.
💡 Vector의 재밌는 사실
만약 쉐이더 그래프를 HLSL로 Generate 했을 때, 다음과 같이 코드가 생성될 수 있어요.
_Vector2("Vector2", Vector) = (0, 0, 0, 0)
_Vector3("Vector3", Vector) = (0, 0, 0, 0)
_Vector4("Vector4", Vector) = (0, 0, 0, 0)
코드를 살펴보면, Vector 2 3 4 상관없이 모두 Vector4 형식을 가집니다.
즉, Vector2나 Vector3 모두 Vector4의 형태를 가지며, 앞부분만 사용한다고 생각하시면 됩니다.
③ Color : RGBA(빨강, 파랑, 초록, 알파)을 통해 색상 및 투명도를 표현하는 데이터
Color 종류
- Defaut
- 기본 색상 모드로, 색상과 투명도를 표현
- 값은 0 ~ 1 범위로 제한
- HDR
- 0 ~ 1 범위를 초과하는 값 지원
- Intensity(강도) 슬라이더를 통해 값의 범위 확대
Default는 주로 일반 색상, UI, 기본 텍스처 작업을 할 때 사용하며,
HDR은 발광, 조명, Bloom 등 강렬한 색상 표현 때 사용합니다.
💡 Color는 Vector4 인가?
맞습니다. Color는 RGBA로 이루어진 Vector4이며, Color와 Vector4가 호환이 가능할 정도로 같은 결과를 나타냅니다.
다만, Color는 Vector4와 다르게 Linear가 아닌, sRGB로 취급된다는 차이가 있습니다. 추후에 Gamma Correction 때 자세히 살펴보도록 하겠습니다.
④ Boolean : 간단한 조건부 논리를 처리하며, True / False 상태를 관리하는 데이터
Boolean을 통해 간단한 상태를 관리할 수 있습니다.
다만, 복잡한 논리에서는 적합하지 않아 Float 또는 Vector을 사용하는 것이 더 유용합니다.
⑤ Texture2D : 2D 텍스처를 표현하는 데이터
주로 Mode는 White 혹은 Black을 주로 사용하며, 노멀맵 텍스처는 Normal Map 모드를 사용합니다.
프로퍼티 파라미터 중에서 Use Tilling and Offset을 체크하면 Tilling과 Offset을 조절할 수 있습니다.
이때, Texture Inspector 창에서 Wrap Mode을 Repeat로 설정해야 합니다.
⑥ Cubemap : 주변 360도로 감싸는 좌표를 가진 텍스처 데이터
Cubemap은 6개의 면을 각각의 텍스처로 표현됩니다.
3D 방향 벡터 (x, y, z)를 기반으로 샘플링됩니다.
주로 Skybox, Reflection Probe, Environment Refection에 사용됩니다.
⑦ Category : 프로퍼티들을 논리적으로 그룹화하기 위한 기능
여러 프로퍼티를 카테고리로 묶어 관리합니다.
복잡한 쉐이더에서 수많은 프로퍼티를 다룰 때 사용합니다.
'유니티(Unity) > 쉐이더' 카테고리의 다른 글
[Unity 쉐이더] 메터리얼과 쉐이더 적용 (1) | 2024.12.26 |
---|---|
[Unity 쉐이더] 쉐이더란 무엇인가? (2) | 2024.12.24 |