Version: Unity 6.0 (6000.0)
언어 : 한국어
셰이더에 머티리얼 프로퍼티 추가
머티리얼 프로퍼티 추가

머티리얼 프로퍼티 소개

ShaderLab 코드에서 머티리얼 프로퍼티를 정의할 수 있습니다. 머티리얼 프로퍼티는 Unity가 머티리얼 에셋의 일부로 저장하는 프로퍼티입니다. 이를 통해 아티스트는 다양한 설정의 머티리얼을 생성하고 편집하고 공유할 수 있습니다.

머티리얼 프로퍼티를 사용하는 경우:

  • 머티리얼에 함수(예: Material.SetFloat)를 호출하여 셰이더 오브젝트의 변수 값을 가져오거나 설정할 수 있습니다.
  • 머티리얼 인스펙터를 사용하여 값을 확인하고 수정할 수 있습니다.
  • Unity는 사용자가 수행한 변경 사항이 세션 간 지속되도록 머티리얼 에셋의 일부로 저장합니다.

머티리얼 프로퍼티를 사용하지 않는 경우:

  • 이 경우에도 머티리얼에 함수를 호출하여 셰이더 오브젝트의 변수 값을 가져오거나 설정할 수 있습니다.
  • 이러한 값을 볼 수 있는 시각적 에디터는 없습니다.
  • 변경 사항이 세션 간 지속되지 않습니다.

일반적으로 머티리얼 프로퍼티를 생성하지 않는 경우는 오직 스크립트만 사용하여 셰이더 프로퍼티 값을 설정하려는 경우(예: 절차적 콘텐츠를 만드는 경우), 프로퍼티를 머티리얼 프로퍼티로 만들 수 없는 경우 또는 프로퍼티를 인스펙터에서 수정하지 않으려는 경우뿐입니다.

프로퍼티 값이 셰이더에 제공되는 방법

셰이더 프로퍼티 값은 다음 위치에서 발견되고 셰이더에 제공됩니다.

  • MaterialPropertyBlock에 설정된 렌더러당 값. 이는 일반적으로 ‘인스턴스당’ 데이터(예: 동일한 머티리얼을 공유하는 많은 오브젝트에 대한 맞춤형 틴트 컬러)입니다.
  • 렌더링된 오브젝트에 사용되는 머티리얼에 설정된 값
  • Unity 렌더링 코드 자체에 설정되거나(빌트인 셰이더 변수 참조) 자체 스크립트(예: Shader.SetGlobalTexture)에서 설정된 글로벌 셰이더 프로퍼티

우선 순위는 위와 같습니다. 인스턴스당 데이터는 모든 것을 오버라이드합니다. 그러면 머티리얼 데이터가 사용됩니다. 그리고 마지막으로 셰이더 프로퍼티가 이 두 위치에 없으면 전역 프로퍼티 값이 사용됩니다. 마지막으로 셰이더 프로퍼티 값이 어느 곳에도 정의되지 않은 경우 ‘기본’ 값(플로트의 경우 0, 컬러의 경우 검은색, 텍스처의 경우 빈 흰색 텍스처)이 제공됩니다.

직렬화 및 런타임 머티리얼 프로퍼티

머티리얼은 직렬화 및 런타임에서 설정한 프로퍼티 값을 모두 포함할 수 있습니다.

직렬화된 데이터는 셰이더의 프로퍼티 블록에 정의된 모든 프로퍼티입니다. 일반적으로 머티리얼에 저장해야 하는 값이며, 머티리얼 인스펙터에서 사용자가 조정할 수 있습니다.

머티리얼은 셰이더가 사용하지만 셰이더의 프로퍼티 블록에 선언되지 않은 일부 프로퍼티도 가질 수 있습니다. 일반적으로 이는 런타임 시점에 스크립트 코드에서 설정된 프로퍼티(예: Material.SetColor를 통해)에 해당합니다. 매트릭스와 배열은 직렬화되지 않은 런타임 프로퍼티로만 존재할 수 있습니다(프로퍼티 블록에서 정의할 방법이 없기 때문).

셰이더에 머티리얼 프로퍼티 추가
머티리얼 프로퍼티 추가
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961