언리얼 마스터링 6장 - 머터리얼의 기초

반응형

이제야 머터리얼 개념이 살포시 잡혀가는군.
내 머리로 동영상만으로 이해한다는건 힘들어..ㅎㅎ


머티리얼 : 표면에 칠해져 있는 페인트.
           오브젝트의 속성을 표현하는 재질.
           오브젝트의 모습을 최종적으로 결정짓는 코팅.

머티리얼과 텍스쳐 : 텍스쳐는 단순한 그림, 머티리얼은 텍스쳐를 포함한 많은 요소들로 생성한 완성본.
      머티리얼의 구성요소중 하나가 텍스쳐.

언리얼에서의 색 : 0~1까지의 실수로 저장.
- 매우 밝은 색을 표현하기 위해 1.0보다 큰 값을 색 정보로 사용가능.
- 색 정보에 음수를 사용할 수 있다.
- 색의 3가지 채널은 서로 완전히 독립적으로 계산된다.
- 서로 다른 채널 수를 가지는 색 끼리는 연산이 불가능, 예로 rgba색과 rgb색은 연산이나 조합이 불가능.
  예외로 여러개의 채널과 한개의 채널끼리는 연산가능.
  채널수가 다르면 연산이 불가능하다는 불편을 없애기 위해 컴포넌트 마스크라는 연산 사용.
- 컴포넌트 마스크연산을 사용하면 두 개의 색을 조합하기 위해 원하지 않는 채널정보를
  없애버리는 것이 가능하다.

머티리얼과 라이팅 : 머티리얼은 라이트에 대한 각 표면의 반응.
- 머티리얼을 셋팅하는 작업은 어느정도 레벨에 라이트를 배치하는 작업과 맞물린다.

머티리얼 :
- 일반적으로 머티리얼의 최종 결과물은 머티리얼 노드, 머티리얼 채널, 머티리얼 익스프레션,
  이렇게 세 요소들이 합쳐져서 나타난다.
 

머티리얼 채널 :
- Diffuse : 오브젝트의 색상, 단일색이거나 텍스쳐
- Emissive : 머티리얼의 발광효과, RGB값 사용
- Specular : 표면반사의 가장 빛나는 부분 제어, 하이라이트의 강도와 색상을 제어
- Specular Power : 하이라이트의 형태를 제어.
- Opacity : 머티리얼이 얼마나 투명할지를 설정.
- Opacity Mask : 라이팅 모델이 Phong일때 투명도 설정, 2진법(0또는1) 사용, 구멍뚫거나 할때 유용하다.
- Distortion : 굴절효과.
- Transmission Mask/ Color : 일반적으로 같이 쓰이며 sub-surface scattering이라 불리는  효과 표현.
- Normal : 오브젝트 표면의 특정 지점에서의 법선 방향을 표현하는 텍스쳐.
- CustomLighting : 빛과 표면이 상호작용 방식을 직접 제어가능.

머티리얼 익스프레션(표현식) : 머티리얼을 생성하기 위한 기본 단위.
- new vector parameter 생성 : 왼쪽에 있는 검정,빨강, 초록, 파랑, 하얀색의 아이콘은
                              다른 것과 연결하는 출력, 각 RGB색상정보, 알파정보,
                              그리고 검정색은 RGB를 합친 색상정보를 나타낸다.

벽돌 틈새로 깜빡이는 머티리얼 만들기
- Diffuse
  - 우선 필요한건 diffuse 텍스쳐.
  - 이 기본 diffuse 텍스쳐가 너무 어둡다면 상수를 하나 추가해서
    곱해서 쓰면 된다. 이 작업을 위해 필요한건 상수, 곱셈 표현식이다.
  - 좀 더 울퉁불퉁한 모습을 보기 위해 BumpOffset을 추가할 수 있다.
    이 범프옵셋은 노말맵의 높이값을 이용해서 uv 위치를 옮겨준다.
    그러므로 이 범프옵셋이 사용할 수 있는 노말맵의 높이값을 연결해 줘야 한다.
   

- Specular
  - 따로 스펙큘라맵이 있다면 그걸 넣으면 될테고 기본 diffuse 텍스쳐의 알파에
    스펙큘라 정보가 있다면 그 diffuse 텍스쳐의 알파를 바로 스펙큘라에 넣면 된다.


 

- Emissive
  - 이 방사성 값을 사용하여 특정효과를 줄 수 있다.
  - diffuse 텍스쳐가 벽돌이라면 이 벽돌 틈 사이에 빛을 발하도록 만들자.
  - 빛을 발하기 위한 밝은 텍스쳐는 노말맵의 알파채널을 통해 만들 수 있다.
    노말맵을 보면 벽돌부분(튀어나온 부분)은 밝고 틈 부분(들어간 부분)이 어둡다.
    이를 이용해서 이 값을 반전해서 사용하면 된다.
    반전을 위해 필요한 계산식은 1-x 이다.
    이렇게 노말의 알파채널을 반전해서 바로 쓰면 너무 강해서 쓰기 힘들다.
    밝게 빛나는 영역을 틈으로 축소해야 한다.
    이때 사용되는 것이 Power 표현식이며 반전된 출력물에 적당한 상수표현식을 사용해
    출력을 만들고 이를 Emissive에 연결한다.
  - 이렇게만 하면 그 밝게 빛나는 부분이 많이 번져 보인다.
    딱 원하는 위치만을 사용하기 위해선 Diffuse에서 넣어준 범프 옵셋값을
    노말에서도 똑같이 사용해 줘야 한다. 노말의 uv입력값으로 이 범프를 사용하면
    범프가 적용된 uv를 기준으로 방사값을 결정해 준다.
  - 이 밝은 빛에 색을 추가해 주기 위해서는 최종 결과물에 벡터값 하나 추가해서
    멀티 플라이로 곱해주면 된다.
  - 이 값의 밝기는 또다시 상수하나 추가해서 설정한 다음 멀티하나 추가해서 곱해주면 된다.
  - 여기에 깜빡이는걸로 바꿔볼까 하면 피똥싸는거다.
    우선 깜빡여야 하니까 Time하나 추가하고 깜빡이는 주기를 위해 Sine하나 추가하고,
    깜빡이는 폭을 조절하기 위한 상수값도 필요하다.
    여기서 쓰인 공식은 ((sin(time)) x 0.375) + 0.625 인데
    이 공식에 맞게 짜기 위해서 곱셈이 필요하고 덧셈이 필요하다.

- Normal
  - 노말텍스쳐를 연결해 주면 된다.

하다보면 이리저리 엉키는데 코멘트를 적절히 사용하자.
하지만 엉킬 수 밖에 없는 이유가 여기서 사용된 것이 저기서 사용되고 하기 때문이다.
이런게 싫다면 그냥 나처럼 복사 붙여넣기 신공으로 하나 더 만들어서 써도 된다.
그런데 이렇게 같은걸 몇개 더 만들면 부하가 더 많이 걸릴려나?..
단지 유아이 계산쪽만 부하가 걸릴까, 아니면 실제 코드만들때 갯수만큼 만드는 걸까...

TAGS.

Comments