재질들과 셰이더들(Materials and Shaders)

유니티 에서는 재질(Materials)셰이더(Shaders)가 긴밀한 관계에 있다. 셰이더들은 어떤 속성과 어떤 애셋(asset)들을 사용할지 정의하는 코드를 포함. 재질은 사용자가 속성들을 조절(adjust)하고 에셋 지정(assign)하는 것을 가능하게 한다.


재질을 통해 구현된 셰이더

새로운 재질을 만들기 위해서는, 메인 메뉴의 Assets→Create→Material을 사용하거나 프로젝트 뷰(Project View)의 컨텍스트(context) 메뉴를 사용하면 된다. 재질이 일단 생성되면, 오브젝트에 적용할 수 있고, 인스펙터(Inspector) 내에서 속성들을 변경할 수 있다. 그것을 오브젝트에 적용시키려면 프로젝트 뷰에서 그것을 드래그하여 씬(Scene)이나 계층(Hierarchy)의 아무 오브젝트로에게나 드래그하면 된다.

재질 속성들 설정 (Setting material properties)

원하는 셰이더와 사용할 특정 재질을 선택 할 수 있다. 인스펙터의 셰이더(Shader) 드롭다운을 펼치세요. 그리고 새로운 셰이더를 선택. 선택된 셰이더는 변경 가능한 속성들을 요구할 것이다. 속성들은 색상, 슬라이더들, 질감들, 숫자들, 벡터들이다. 만약, 씬(Scene)에서 재질을 활성화된 오브젝트로 적용하면, 실시간으로 속성의 변화가 오브젝트에 적용되는 것을 볼 수 있다.

텍스쳐(Texture)를 어느 속성(property)에 적용하는 것에는 두 가지 방법이 있다.

  1. 텍스쳐를 프로젝트 뷰로부터 끌어서 텍스쳐 사각형(Texture square)의 위에 논다.
  2. 셀렉트(Select) 버튼 클릭 후 보이는 드롭다운 리스트로부터 재질 선택

텍스쳐(Texture)에는 두 개의 위치(placement) 옵션이 존재:

Tiling 차이에 따라 텍스쳐를 스케일.
Offset 텍스쳐를 옆이나 위로 이동.

내장 셰이더들(Built-in Shaders)

유니티의 모든 설치에 표준으로 따라오는 built-in Shaders 라이브러리가 있다. 30개 이상의 built-in Shaders가 있으며, 6개의 기본적 타입(family)들이 있다.

  • 표준 Normal : 불투명한 질감의 오브젝트를 위함.
  • 투명 Transparent : 어느 정도 투명한 오브젝트들을 위함. 텍스쳐의 알파 채널이 투명도의 레벨을 정의.
  • TransparentCutOut : 완전히 불투명하고 완전히 투명한 지역을 함께 갖는 오브젝트들을 위함(예: 펜스).
  • 자체발광 Self-Illuminated : 빛을 방출하는부분이 있는 오브젝트들을 위함.
  • 반사 Reflective : 환경(environment) 큐브맵(Cubemap)을 반사하는 불투명한 텍스쳐 오브젝트들을 위함.

각각의 그룹에서 내장 셰이더들은 복잡도에 의해서 간단한 버텍스릿(VertexLit)으로부터, 복잡한 패럴랙스 범프드 위드 스페큘러(Parallax Bumped with Specular)에 이릅니다. 셰이더들의 성능에 관한 더 많은 정보는, 내장 셰이더 성능 페이지 performance page를 참조하라.

이 그리드는 내장셰이더의 썸네일을 표시:


내장 유니티 셰이더 매트릭스

셰이더 기술적 세부사항(Shader technical details)

유니티는 광범위한 셰이더 시스템을 가지고 있어서, 모든 게임 내부의 그래픽들의 외관적인 모습을 변경할 수 있게 . 이것은 다음과 같이 작동:

셰이더는 기본적으로 게임 내부 셰이딩이 어떻게 보일지를 식(formula)을 통하여 정의. 주어진 셰이더 안에는 속성들(특히 텍스쳐들)이 있다. 셰이더들은 재질(Materials)을 통하여 구현되며, 각각의 게임오브젝트에 직접 부착된다. 재질들 안에서 셰이더를 선택하고, 셰이더에 쓰일 속성들(일반적으로는 텍스쳐와 색상, 그러나 속성들은 다양할 수 있음)을 정의.

이는 매우 복잡하므로, 작업 순서도의 도면을 살펴봅시다:

그래프의 왼편에는 차바디 셰이더(Carbody Shader)가 있다. 이로부터 두 개의 다른 재질들이 생성된다. Blue car MaterialRed car Material이다. 이들 재질들 각각에게는 두 개의 텍스쳐가 할당된다. 차 텍스쳐(Car Texture)는 그 차의 메인 텍스쳐와 색상 FX 텍스쳐(Color FX texture)를 정의. 이들 속성들은 차가 투톤(2-tone) 으로 페인트 칠해진 것으로 보이게 하기 위해 셰이더에 의해 사용되어진다. 이는 빨강 차의 앞에서 볼 수 있다. 그것은 카메라 정면에서 보이는 노란색 부분이고 각이 증가할수록 보라빛으로 변하면서 바래진다. 차의 텍스쳐들은 2개의 차들에 부착된다. 차의 바퀴, 조명, 그리고 창문은 색상 변화 효과를 보여주지 않기 때문에 다른 재질을 사용해야 . 그래프의 아래 부분에는 간단한 메탈 셰이더(Simple Metal Shader)가 있다. 바퀴 재질(Wheel Material)에는 이 셰이더를 사용. 비록 같은 차 텍스쳐(Car Texture)가 재사용 되었지만, 재질에서 사용된 셰이더가 다르기 때문에 최종 결과는 아까 차량의 본체(car body)와는 사뭇 다릅니다.

더 정확히 파고들자면 셰이더(Shader)는 다음을 정의:

  • 오브젝트를 렌더하는 방법. 사용자의 그래픽 카드에 의존하는 다른 방법을 사용하는 것을 포함.
  • 렌더를 위해 사용된 버텍스(vertex)와 프래그먼트(fragment) 프로그램들.
  • 재질들 안의 할당 가능한 몇몇 텍스쳐 속성들.
  • 재질들 안의 할당 가능한 색상과 숫자 설정들.

재질(Material)은 다음을 정의:

  • 렌더링을 위해서 어떤 질감을 사용할 것인가를 정의.
  • 렌더링을 위해서 어떤 색상을 사용할 것인가를 정의.
  • 렌더링을 위해 셰이더에 의해 요구된 큐브맵(cubemap) 같은 다른 에셋들

셰이더들은 그래픽 프로그래머들에 의해 쓰여지도록 의도 되었다. 셰이더들은 굉장히 간단한 쎼이더랩(ShaderLab) 언어를 사용하여 생성되었다. 그러나 다양한 그래픽 카드에서 잘 동작하는 셰이더를 얻는 것은 전문적인 일이고, 그래픽 카드가 어떤 식으로 동작하는지를 알아야 하는 등의 지식을 요구.

몇몇 셰이더 들은 유니티에 내장되어있고 더 많은 것이 Standard Assets 라이브러리에도 있다. 원한다면 내장 셰이더(Built-in Shader) 가이드 페이지에서 더 많은 정보를 볼 수 있다.

역링크