본문 바로가기
테크니컬 아트/언리얼 머티리얼

테크니컬 아트 : 기초 개념 1

by oddsilk 2024. 7. 1.

 

쉐이더(Shader)

  • 게임 아트의 꽃: 쉐이더는 게임 아트의 중요한 부분으로, 실시간 렌더링이 가능하고 다이나믹하게 활용할 수 있어 매우 유용하다.
  • 역할: 실시간 게임 렌더러에서 쉐이더는 중요한 역할을 한다.
  • 개량 필요: 고정적이고 보수적으로 관리하지 않으며, 계속해서 개량해 나가야 한다.

PBR (Physical Based Rendering)

  • 기반: 재질과 라이팅에 기반을 둔 렌더링 방식.
  • 빛의 반사: 빛을 재질에 어떻게 반사시키느냐에 따라 다양한 시각적 결과를 출력한다. 반사는 정반사와 난반사로 나뉘며, 각각의 선택에 따라 결과물이 달라질 수 있다.
  • 정의: 정반사와 난반사를 기반으로 실제 물리적 재질에서 나오는 시각적 표현을 하는 것을 PBR이라고 한다.
  • 물리적 한계: 완전히 물리적인 것은 아니지만, 물리적 재질을 표현하는 것에 기반한 렌더링 기법이다.

예시:

  • 메탈과 비메탈: 메탈과 비메탈은 정반사와 난반사에서 큰 차이가 있다. 엔진은 이 속성을 단순화시켜 표현하며, 실시간으로 렌더링하며 초당 30프레임 이상의 계산을 해야 하기 때문에 간접광 같은 부분이 단순화된다.
  • 소재의 단순화: 빛이 아닌 소재의 속성도 단순화된다. 예를 들어, 종이의 반사나 빛의 산란, 피부의 반투명한 느낌 등은 기본적으로 제공되지 않기 때문에 따로 구현해야 한다.
  • 물리적 흉내: 물리적인 것을 최대한 흉내낸 것이다.
  • 장점: PBR은 재질의 효과나 워크플로우를 도입했을 때, 단순한 세팅으로 구현할 수 있으며, 물리기반 효과를 쉽게 구현할 수 있게 해준다. 이는 작업자의 스킬 차이에도 불구하고 균일한 퀄리티를 유지할 수 있다.
  • 직관성: PBR은 작업의 직관성을 높여, 이해하고 제작하기 쉽게 만들어준다.

모바일의 특수성

  • 자원 활용: 모바일에서는 쉐이더나 리소스를 얼마나 잘 활용하느냐가 큰 차이를 만든다.
  • 예시: 기본 머티리얼과 최소한의 버텍스를 가진 구체 vs. 복잡한 쉐이더와 많은 버텍스를 가진 구체. 둘 중 왼쪽이 더 가벼워 보일 수 있지만, 실제로는 상황에 따라 다를 수 있다.

렌더링 단계

  1. Vertex Rendering: 버텍스의 개수가 중요하다.
  2. Pixel Rendering: 쉐이더의 복잡도가 중요하다.
  3. PostProcess: 화면에 많이 차지하는 부분이 렌더링의 주류가 된다.
  • 실제 예시: 복잡한 쉐이더와 버텍스를 가진 구체가 멀리 있다면, 렌더링해야 하는 픽셀의 개수가 많지 않아 생각보다 가벼울 수 있다.
  • 결론: 무조건 무겁거나 가벼운 기능, 쉐이더, 코드, 효과는 없으며, 환경과 장르에 따라 달라질 수 있다.

Draw Call

  • 정의: 하나의 물체를 그리기 위해 "너 이거 그려야 해"라고 몇 번의 명령을 내리는지를 숫자로 표현한 것.
  • Set Pass Call과 Draw Call의 차이: 둘은 엄연히 다르다.
  • 변수: 캐릭터 100개를 1개의 드로우콜로 그릴 때와 캐릭터 1개를 100개의 드로우콜로 그릴 때의 차이. 면적, 상호작용, 스키닝 데이터, 캐릭터의 분절 상태, 이동 방식, 로딩 방식 등에 따라 변수가 많다.

 

 

뷰모드

언리얼 엔진의 다양한 렌더링 모드를 설명합니다. 이 모드들은 재질, 라이트, 쉐이더 등의 정보를 어떻게 표현하는지에 따라 나뉩니다.

 

 

라이팅 포함

  • 정의: 재질과 라이트와 관련된 모든 계산이 포함된 씬을 의미합니다. 이는 게임 내에서 실제로 보이는 최종 결과물에 가깝습니다.

라이팅 제외

  • 정의: 라이트가 적용되지 않은 상태로, 표면의 고유한 색상만을 표시합니다. 기본 컬러만 보여주는 모드입니다.

와이어프레임

  • 정의: 모델의 구조를 보여주는 모드로, 폴리곤의 모서리와 점들을 선으로 연결하여 와이어프레임 형태로 표시합니다.

디테일 라이팅

  • 정의: 라이트 정보에 대한 결과 값을 보여줍니다. 이 모드에서는 기본적으로 노말 맵이 적용된 결과물을 확인할 수 있습니다.

라이팅만

  • 정의: 노말 맵 정보를 제외하고, 빛 정보만을 담고 있는 모드입니다. 빛이 어떻게 씬에 적용되는지 확인할 수 있습니다.

리플렉션

  • 정의: 씬에서 반사 값을 표시합니다. 물체가 반사하는 빛의 정보를 보여줍니다.

플레이어 콜리전

  • 정의: 플레이어가 충돌할 수 있는 모든 객체를 화면에 표시합니다. 게임 플레이 중 충돌 판정을 확인할 때 유용합니다.

버퍼

  • 정의: 렌더링 시 사용되는 저장소 정보를 표시합니다. 버퍼에는 렌더링에 필요한 다양한 정보가 저장되며, 이 정보는 '라이팅 포함' 같은 최종 결과물을 생성하는 데 사용됩니다.
  • 버퍼 시각화의 필요성: 특정 정보를 어떻게 활용하는지 확인하기 위해 버퍼 시각화를 사용합니다. 이는 현재 버퍼에 저장된 정보가 어떻게 처리되고 있는지 시각적으로 확인할 수 있게 해줍니다.

이와 같이, 언리얼 엔진의 다양한 렌더링 모드를 이해하면, 게임 개발 과정에서 더욱 세밀하고 정확한 작업을 수행할 수 있습니다. 필요에 따라 모드를 전환하며 작업하면 더욱 효율적으로 개발할 수 있습니다.

 

 

 

스태틱 메쉬

- 미리 한 번 로딩이 되고 그 이후에 특별한 속성이 변하지 않는 '정적인' 개체에 스태틱이라느 접두어를 붙인다.

- 스태틱 메쉬는 3D 메쉬가 스태틱한 속성을 띄는 것을 말한다

 

모든 것들은 저장소를 기반으로 폴더에 반영된다. 

 

 

 

스켈레탈  메쉬

- 뼈대를 기반으로 애니메이션이 가능한 메쉬

 

 

 

스테틱 메쉬 에디터 

레벨에 올라가있는 것이 아닌 저장소의 원본 리소스 상태를 볼 수 있다'.

왼쪽 위에 기본적으로 정보를 표시한다.

LOD / 현재화면 크기 / 트라이앵글 개수 , 버텍스 개수 , UV채널 개수 , 크기 , 프리미티브 콜리전 수

 

저장 : 에셋의 LOD나 소켓정보, 콜리전 정보를 수정할 경우 이 버튼을 눌러서 저장해야한다.

베이스 메쉬  리임포트: 원본을 DCC에서 수정할경우 다시 리임포트 해줘야한다. 

소켓: 소켓을 생성하는 버튼 ( 인디케이터나 UI를 출력할때)

ex) 보물상자 위에 물음표를 띄워야 할 때 특정 위치를 지정하는 것보다. 소켓을 생성하고, 소켓의 이름을 이용해 물음표를 붙이는 방법을 사용하면 더 효율적인 경우가 있다. 

 

 

와이어프레임 : 와이어프레임 뷰로 볼 수 있도록 도와준다.

버텍스 컬러:

- 굉장히 유용한 정보다. 모든 메시 데이터는 export 될때 규격이 있다. 데이터 포맷에 따라서 달라지게 되는데 요즘은 FBX를 대부분 사용한다. 

- 이 FBX 안에 들어가는 정보가 있다. 메쉬정보, 노말정보(면이 바라보는 정보) .UV와 같은 텍스쳐를 입힐 수 있는 정보도 있다. 바로 이 UV에 포함되는게 바로  버텍스컬러가 바로 여기에 포함된다

- 특정 Vertex 하나하나마다 고유의 위치 값(3d 벡터 값)을 가지고 있다. 여러가지 정보가 이안에 포함되는데, 여기에 RGBA 채널의 컬러값을 넣을 수 있습니다. 

- 이 버텍스컬러는 굉장히 유용하다. 육안으로  버텍스컬러를 확인할 수 도 있고 나중에 이 버텍스 컬러를 이용한 페인팅도 할 수 있습니다. 

 

콜리전: 충돌 정보를 설정할수 있다. 

- 상단의 콜리전 탭에서 콜리전을 생성할 수  있다. 때에 따라서 복잡한 메쉬의 경우는 다른 형태로 optional 하게 만들어야한다.  보통 레벨디자인 하는 사람들이 많이 건드리게 된다. 

 

피벗: 오브젝트의 중점을 말한다. 

- 특정 오브젝트를 임포트 했을 때, 오브젝트가 누워있거나 다른 위치에 있는 경우  보통 이 피벗이 틀린 경우가 많다. 

 

 

노멀: 점의 방향성을 표시한다. 

Vertex는 방향성이 있다 . 각각 엣지가 교차할때 각각 방향이 다르기 때문에 Vertex 하나마다 여러개 일 수밖에 없다. 우리는 이렇게 딱 점이 있으면 완전히 봉합된 막힌 걸 생각하지만 실제로는 이 정보가 다 있어야 라이트를 받았을때 방향도 할 것이다. 이걸 통해 "면"이 바라보든 노멀 값도 우리가 알수 있게 된다.

 

- 노멀 정보가 실제로는 없는데 있는 것 처럼 가상화 시켜주는 것이 노말맵이다.  

 

탄젠트, 바이노멀: 자주 사용하지는 않는 정보다. 쉐이더를 만들 때도 탄젠트나 바이노멀로 뭔가를 연산해야되는 경우 많지 않습니다. 

 

UV: UV맵을 볼 수 있다. 

3d 좌표계에서는 X,Y,Z를 사용하는데 2d 좌표를 가진 X,Y를 그대로 쓰면 이게 2차원 정보인지 3차원 정보인지 헷갈릴 수 있다. 

그래서 편의를 위해 2d 좌표계에서는 U,V,W를 사용하게된다. 알파벳 순서를 앞으 당긴것이다 UVW<-XYZ

 

 

 

라이트 정보 표시하기

L버튼을 누르고 마우스를 이동하면 라이트의 방향을 수정할 수 있다. 

디테일한 정보는 프리뷰 씬 세팅에서 조절이 가능하다. 

- 주요광원 (Directional Light)

- 간접광원 (Indirectional Light)

- 환경광원 (Environment Ligfht)

 

 

LOD: Level Of Detail

- 화면 사이즈의 비중에 맞춰서 LOD를 통해 메쉬의 버텍스 사이즈를 다르게 조절 할 수 있다. 

 

 

 

스켈레탈 메쉬 에디터

- 기본적인 내용들은 스태틱 메쉬에서 설명했다. 공통적인 부분들이 꽤 많다. 

- 뼈대를 사용하기 때문에 스켈레탈 메쉬는 애니메이션을 할 수 있다는 것이 굉장한 장점이다. 

- 애니메이션 탭: 실제 애니메이션과 관련된 내용을 여기서 확인할 수 있다.

- 애니메이션 블루프린트: 언리얼의 애니메이션 블루프린트는 특히 굉장히 강력한 툴이다

- 피직스 탭: 피직스와 같은 물리력이 가해졌을때 반응하는 옵션도 여기서 설정할 수 있다. 

- 스켈레톤 트리: 이거를 통해서 본 데이터를 확인할 수 도 있다. 

- 모프타겟 프리뷰어: morph target과 같은 Vetex애니메이션은 똑같은 아이디를 가진 (예를들어 Vertex몇개를 당기고 뭘 못하게 설정했다면) vertex와 당겨진  vertex를 블렌딩시킬 수가 있다. (ex) 쭉쭉 늘어나는 효과를 만들때 주로 사용을 하게됩니다.