Quick Comparison
Exposed property는 material 값, keyword는 shader 분기, MaterialPropertyBlock은 shared material을 복제하지 않고 Renderer별 property를 바꿀 때 사용합니다. property를 많이 노출하면 Inspector 관리가 어려워지지만 variant 조합을 늘리는 직접 원인은 keyword이며, keyword는 local/global 범위와 Boolean/Enum·Shader Feature/Multi Compile 설정을 함께 결정합니다.
| 표면 | 쓰는 때 | 빌드·런타임 결과 |
|---|---|---|
| Exposed property | 색, 강도, 텍스처처럼 material 값만 바꿀 때 | material state가 바뀌며 keyword variant는 늘리지 않음 |
| keyword | 코드 경로·기능 자체를 켜고 끌 때 | 조합에 따라 shader variant가 늘 수 있음 |
MaterialPropertyBlock | shared material을 복제하지 않고 Renderer별 값을 바꿀 때 | property만 다르게 할 수 있으며 batching 조건을 확인해야 함 |
구조 이해
- Shader Graph를 실제 프로젝트에서 쓰기 시작하면 그래프를 만드는 것보다 "어떤 값을 material에서 바꿀 수 있게 열어 둘 것인가"가 더 중요해집니다. 이때 중심이 되는 개념이 property와 keyword입니다.
- property는 색상, 강도, 텍스처, 범위값처럼 material마다 달라질 수 있는 파라미터를 노출하는 장치입니다. Blackboard에 추가하고 Exposed로 열어 두면 material inspector에서 조절할 수 있습니다.
- keyword는 표현 분기를 제어하는 데 유용합니다. 예를 들어 emission on/off, rim light 유형 선택, 디테일 모드 전환처럼 상태 조합을 material 수준에서 관리할 수 있습니다.
- 중요한 점은 "모든 것을 노출하지 않는다"는 원칙입니다. property가 많으면 material 관리가 어려워지고, keyword가 많으면 variant 수와 build·warmup 비용도 커집니다. 두 비용을 같은 것으로 취급하면 property를 불필요하게 숨기거나 keyword explosion을 놓치기 쉽습니다.
- 따라서 Shader Graph 실전 운영은 그래프 제작보다 인터페이스 설계에 가깝습니다. 아티스트가 건드려야 할 값, 고정해야 할 값, variant를 나눠야 할 값을 구분하는 것이 유지보수의 핵심입니다.
체크포인트
| 상황 | 적합한 선택 |
|---|---|
| material마다 색상·강도 다르게 | Blackboard에 Exposed property 추가 |
| emission on/off처럼 분기 필요 | keyword로 material 단위 분기 |
| 모든 값을 inspector에 노출 | 아티스트가 건드릴 값만 최소한으로 노출 |
| material 변형 조합이 폭발적으로 늘어남 | keyword 수 줄이고 variant 관리 |
주의할 점
variant를 조합적으로 늘리는 직접 원인은 keyword입니다. property는 material 값과 Inspector 복잡도를 늘리지만, property만 Exposed로 열었다고 compile-time variant가 생기지는 않습니다.
text
// ❌ 모든 값을 Exposed property로 열기
- _Color (Exposed)
- _EmissionColor (Exposed)
- _RimIntensity (Exposed)
- _DetailNormal (Exposed)
- ... 20개 노출
// → material마다 조합이 달라 일관성 없어짐
// → 어떤 값이 중요한 조절 포인트인지 불명확
// ✅ 역할별 노출 기준 정하기
Exposed (아티스트가 인스턴스마다 조절):
- _BaseColor, _EmissionColor
Internal (그래프 내부에서만 사용):
- _NoiseScale, _BlendWeight
Keyword (기능 분기):
- EMISSION_ON/OFF (enum keyword)
// → 유효 조합: BaseColor + Emission ON/OFF = 2가지만 관리참고 링크
3 sources