본문 바로가기
언리얼/Shader Study

03. 3D 리소스와 구동 원리와 특징

by witn331ss 2023. 5. 29.

01. 매쉬의 종류와 행렬연산

스태틱 매쉬 스켈레톤 매쉬의 차이는 본을 통해서 움직이는 매쉬냐 아니냐에 따라서 달라지는데

엔진에서는 아주아주 큰 차이가 있다.

 

두 매쉬 다 쉐이더에서 버텍스위치나 크기를 수정할 순 있으나 원리 자체는 다르다

 

본이 잡힌 매쉬는 완전히 다르게 잡힌다고 생각하면 된다.

(TA를 목표로 한다면 테크리깅은 정말로 중요하게 생각해야만 한다.)

 

 

행렬연산이라는 것은 매 프레임마다 캐릭터가 가진 본의 갯수만큼 변한 행렬을 연산을 하게 된다

본이 움직였으니까 어떻게 움직였는지 연산을 해야한다는 소리

 

버텍스만큼 뼈에 영향을 받고, 그 부분은 웨이트에 따라서 본의 움직임을 따라간다.

 

 

 

 

 

02. 텍스쳐 종류와 용법 배우기

 

 www.merl.com/brdf 

 

베이스 컬러나 러프니스 등 그런것들을 텍스쳐들을 사용해야만 구현할 수 있는건 아니다.

다만 우리가 UV, 그러니까 텍스쳐를 사용해서 하나의 모델에 여러재질을 모아둘 때 한장의 UV로 영역을 지정할 수 있어 적용하기 수월하기 때문에 이용한다고 생각하면 된다.

 

폴리곤, 엘레멘탈 단위로 지정할 수 있다면 제작이나 수정이 더 수월하다고 생각하면 된다.

파라곤 리소스같은걸 뜯어보면서 에픽이 어떤 방식으로 PBR을 바라봤는가? 연구해봐도 좋을 것이다.

 

텍스쳐는 재질 표현소재로써, 하나의 비용으로써, 어떤식으로 적용하는 적용방식에서 차이가 있다.

 

- sheen은 천 재질을 표현할 때 꽤나 중요한 영역이다.

 

-

 

코드에서는 UV나 이런것들을 Semantic이라고 부르는데

의미의 종류에 따라서 구조를 선언하고 응용하는 것들이 많다.

 

노드에서는 그것들을 선언하지 않아도 빠른 테스트를 할 수 있다

 

코드는 빠른 테스트가 힘든게 단점이다.

 

-

 

쉐이더에서 일반적으로 한번에 사용 가능한 텍스쳐를 16장 정도로 규정하고 있다.

정확히는 텍스쳐가 16장이 아니라 샘플러가 선언하는걸 16개로 제한하는데

텍스쳐는 배열형식으로 116장까지 사용할 수 있긴 하다.

 

터레인은 최적화하기 조금 어렵다.

샘플러를 많이 쪼개서 만들기에는 리소스 제작방식이 너무 힘들어지고

제작방식을이나 시간을 줄이기 위해서 합치기에는 텍스쳐 샘플이 부족한 딜레마를 가지고 있다.

 

쉐이더에서 16개를 사용할 수 있다고 해도 몇개를 예약을 하둔 것들도 있다.

스태틱 라이트 같은 라이트 맵을 위해 두개를 예약을 하는 등 말이다.

 

반투명이면 조금 더 복잡해진다.

 

텍스쳐는 사용 자체가 비용이기에 적을수록 최적화에 도움이 된다.

 

-

 

보통 쉐이더만 놓고보면

인스트럭션이라는 계산과 텍스쳐 샘플 위주로 무겁냐 가볍냐 판단을 하게 된다.

연산을 줄이기 위해선 항상 줄여나가야 한다.

 

최적화는 항상 미리 설계가 되어있어야만 한다.

모바일에서는 3장도 좀 무거운 정도다.

 

꼭 POT 사이즈로만 사용해야한다 (2의 배수)

 

Open GL ES 3.1 = 16 Texture Samplers

SM 5.0(DX11) = 16 Texture Samplers

 

예전에 최적화를 위해 아틀라스라는걸 사용했는데

텍스쳐 하나에 여러가지를 몰아서 한장으로 만들어버리고 UV편집으로 나눠서 사용하는 개념이라고 생각하면 된다.

 

-

 

플랫폼이라는 것의 명확한 뜻은 하드웨어를 뜻하는 거고

거기서 더 딥하게 가면 하드웨어가 가진 GPU, 그 GPU가 지원하는 쉐이더 모델을 얘기하는 것이다.

 

각 버전마다 허용하는 것이 조금씩 다르다.

 

근데 상용엔진은 알아서 다 해주니 감사하며 사용하도록 하자.

 

-

 

 

 

메탈릭같은 경우는 딱히 감마보정을 받지 않아도 되는 데이터 텍스쳐기 때문에 sGRB를 사용하지 않고 Linear를 사용한다고 생각하면 된다

 

 

 

03. 마스크맵 활용과 버텍스 컬러 활용

 

우리는 쉐이더를 제작할 때 많은 수학공식을 사용하기 때문에 명시성이 아주 중요하다.

모든 수치가 0과 1사이 일 수 없다.

 

우리가 어떤 의도를 가지고 싶을 때 그 의도를 uv로 영역을 지정하고 강도를 지정하는 것이 마스크 맵인 것이다.

 

마스크맵으로 가장 많이 쓰는 것은 alpha mask라고 생각하면 된다.

thickness mask 처럼 가짜 SSS를 만들 때에도 사용할 수 있다고 생각할 수도 있겠다.

 

-

 

모든 매쉬에는 인덱스 버퍼라는 것을 가지고 기본적으로 포함되는 정보가 있다.

그중 버텍스 컬러값이 포함되어 있는데 

 

버텍스 컬러는 텍스쳐를 쓰지않고 특정 영역을 마스크 할 수 있는 거의 공짜인 마스크다!

단점은 폴리곤 단위로만 지정할 수 있는 것

 

배경에는 조금 기하급수적으로 무거워지는데 캐릭터에는 꽤 득이많다.

픽셀을 그리기 전 단계에서 이미 영역을 알고 들어오기 때문에 참 좋다!

 

폴리곤이 적으면 점과 점사이에 보간이 생겨 퀄리티가 조금 떨어져보일 수도 있다.