새 머티리얼을 생성하려면 메인 메뉴의 Assets->Create->Material 또는 Project View 컨텍스트 메뉴를 사용해야 합니다.
기본 설정의 새 머티리얼에는 스탠다드 셰이더가 할당되며, 다음과 같이 모든 맵 프로퍼티가 비어있는 상태입니다.
새 머티리얼이 생성되면 오브젝트에 적용할 수 있으며 인스펙터 의 모든 프로퍼티를 조정할 수 있습니다. 오브젝트에 적용하려면 프로젝트 뷰 에서 씬 또는 계층 구조 의 오브젝트로 드래그해야 합니다.
특정 머티리얼에 사용하고 싶은 셰이더를 선택할 수 있습니다. 인스펙터에서 Shader 드롭다운을 확장하고 새로운 셰이더를 선택합니다. 선택한 셰이더로 변경할 수 있는 프로퍼티가 표시됩니다. 프로퍼티에는 컬러, 슬라이더, 텍스처, 숫자, 벡터가 있습니다. 씬 의 활성 오브젝트에 머티리얼을 적용하면 프로퍼티를 변경하는 즉시 실시간으로 오브젝트에 반영되는 것을 화면에서 확인할 수 있습니다.
텍스처 를 프로퍼티에 적용하는 방법에는 두 가지가 있습니다.
스탠다드 셰이더 외에도 특수 목적의 다양한 빌트인 셰이더 카테고리가 있습니다.
셰이더는 모델 표면의 픽셀이 어떻게 나타나야 하는지에 대한 수학적인 연산과 알고리즘을 담고 있는 스크립트입니다. 스탠다드 셰이더는 복잡하고 현실성 있는 조명 연산을 수행합니다. 다른 셰이더는 더 간단한 연산이나 다른 종류의 연산을 통해 다양한 결과를 나타낼 수 있습니다. 각 셰이더에는 셰이더를 사용하는 머티리얼로부터 값을 받는 프로퍼티가 있습니다. 프로퍼티는 숫자, 컬러 정의, 텍스처 등으로 구성되며 머티리얼을 볼 때 인스펙터에 나타납니다. 이후 머티리얼은 게임 오브젝트에 연결된 Renderer 컴포넌트에 의해 각 게임 오브젝트 메시를 렌더링하는 데 사용됩니다.
같은 텍스처를 레퍼런스하는 여러 다양한 머티리얼을 가질 수 있습니다. 머티리얼은 요구 사항에 따라 동일하거나 다른 셰이더를 사용할 수 있습니다.
아래는 3개의 머티리얼, 2개의 셰이더, 1개의 텍스처를 사용한 셋업 조합의 예제입니다.
다이어그램에 빨간 자동차와 파란 자동차가 있습니다. 각 모델은 별도의 머티리얼을 사용하여 각각 “빨간 자동차 머티리얼”과 “파란 자동차 머티리얼” 바디워크를 만들었습니다.
각 바디워크 머티리얼은 동일한 사용자 셰이더인 “자동차바디 셰이더”를 사용합니다. 커스텀 셰이더를 사용하는 이유는 자동차에 대한 특정 셰이더 추가 요소를 더할 수 있기 때문입니다. 예를 들어, 메탈릭 스파클 렌더링이나 커스텀 데미지 마스킹 요소가 있습니다.
각 자동차바디 머티리얼은 “자동차 텍스처”에 대한 레퍼런스가 있습니다. 이것은 특정 페인트 컬러를 제외한 모든 바디워크의 세부 사항을 담고 있는 텍스처 맵입니다.
자동차바디 셰이더는 틴트 컬러도 받아들이며 빨간 자동차와 파란 자동차에 다른 컬러로 설정됩니다. 각 자동차가 한 개의 텍스처를 동시에 사용하면서도 다르게 보이게 합니다.
자동차 바퀴 모델은 별도의 머티리얼을 사용하지만 두 자동차의 바퀴에 대한 차이가 없으므로 같은 머티리얼을 사용합니다. 바퀴 머티리얼은 스탠다드 셰이더를 사용하며 또한 자동차 텍스처에 대한 레퍼런스를 가집니다.
자동차 텍스처가 담고 있는 바디워크와 바퀴에 대한 세부 사항에 유의하십시오. 텍스처 아틀라스는 텍스처 이미지의 다양한 부분이 명시적으로 모델의 다른 부분에 매핑되어 있음을 나타냅니다.
바디워크 머티리얼이 바퀴 이미지를 담고 있는 텍스처를 사용하더라도 바퀴가 바디에 나타나지 않는 이유는 텍스처의 해당 부분이 바디워크 지오메트리에 매핑되어 있지 않기 때문입니다.
유사하게도, 바퀴 머티리얼은 바디워크 세부 사항을 담고 있는 같은 텍스처를 사용합니다. 바디워크 디테일이 바퀴에 나타나지 않는 이유는 텍스처의 일부만 바퀴 지오메트리에 매핑된 바퀴 디테일을 보여주기 때문입니다.
매핑은 외부 3D 애플리케이션의 3D 아티스트에 의해 이루어지며 “UV 매핑”이라고 합니다.
셰이더가 정의하는 요소는 다음과 같습니다.
머티리얼은 다음 요소를 정의합니다.
커스텀 셰이더는 그래픽스 프로그래머가 작성해야 합니다. ShaderLab 언어를 사용하여 생성할 수 있는데 방법은 꽤 간단합니다. 그러나 다양한 그래픽 카드에서 셰이더가 잘 작동하게 하는 것은 복잡한 작업이며 그래픽 카드 작동에 대한 포괄적인 지식이 필요합니다.
많은 셰이더가 Unity에 내장되어 있으며 일부는 스탠다드 에셋 라이브러리에 포함됩니다.