그냥 게임개발자

개발일지_006(언리얼엔진) 본문

엔진스터디

개발일지_006(언리얼엔진)

sudoju 2021. 11. 18. 17:54

협업 섹션에 소스 컨트롤 알아보자.

 

 

소스 컨트롤에 사용되는 소프트웨어는 두 가지가 있다.

 

Perforce와 Subversion이 있는데 두 프로그램을 사용해서 세 가지 작업을 할 수 있다.

- 데이터 동기화 : 서버로부터 가장 최근의 변경 사항을 작업 PC로 내려받는 데 사용, 최신 콘텐츠로 작업을 할 수 있다.

- 데이터 추가 혹은 제거 : 내가 만든 새 콘텐츠를 서버에 추가해 다른 사람들이 동기화를 통해 이 콘텐츠를 사용할 수 있게 하거나 더 이상 프로젝트에 필요 없는 데이터를 제거할 수도 있다.

- 데이터를 되돌림 : 데이터를 되돌리거나 이전 상태로 되돌려놓는 데 사용

 

소스 컨트로는 실수로 파일을 손상시킬 필요 없이 파일 편집, 변경, 덮어쓰기가 모두 가능하다.

 

이게 소스컨트롤을 사용하는 핵심이다.

 

소스 컨트롤을 사용하는 것에 대해 알아보자.

 

 

 

 

 

 

언리얼 엔진을 사용하면 소스 컨트롤은 처음에는 Default 값으로 비활성화가 되어있다.

활성화시키려면

소스 컨트롤에 들어가서 로그인 정보를 작성하면 활성화할 수 있는데 나는 아직 하지 않았다.

활성화를 하면 각종 콘텐츠 브라우저에 있는 에셋에 아이콘이 표시가 된다.

체크, 플러스, 느낌표, 물음표가 표시가 되는데,

- 체크 표시는 이 파일이 나에게만 체크아웃되었기 때문에 다른 누구도 해당 파일을 덮어쓸 수 없다는 뜻이다.

- 플러스는 이 파일이 추가 예약되었다는 뜻이다. 이것은 최근에 생성한 파일로 소스 컨트롤에 추가할 수 있다는 말이다.

- 느낌표는 이 파일이 구버전이라 동기화가 필요하다는 뜻

- 물음표는 해당 파일이 디포에 없다는 뜻, 내가 보기엔 콘텐츠 브라우저에 없다는 뜻인 것 같은데 확인해봐야겠다.

 

 

 

 

언리얼 엔진 프로젝트를 작업할 때는 반드시 최종 에셋만 임포트를 해야 한다.

예를 들어 My Material_vol.1과 My Material_vol.2를 임포트 하게 되면 패키지가 비대해져서 혼란을 일으키기 때문이다.

겹치는 부분도 많을 테니 항상 최종 에셋만 임포트를 해야 한다.

만약 그렇게 임포트 하게 된다면 실제 사용되지 않는 데이터들이 모두 저장이 되며, 해당 프로젝트의 설치 크기와 메모리 요구량이 필요 이상으로 살짝 높아질 수 있다는 점을 주의해야 한다.

 

만약 소스 컨트롤이 없다면 책임자를 정해서 서로 다른 소유권 영역을 할당하게 만들고 각자 맡은 소유권 영역을 맡으면 된다.

누구는 액터 누구는 머티리얼 등 이렇게 나누어서 하면 된다.

 

근데 한 번 팀과 소스 컨트롤을 사용해봐야겠다.

 

 

 

■텍스처[ 더 나은 3D 메시와 텍스처 만들기 ]

 

네이밍 컨벤션(Naming Conventions) - 명명 규칙

명명 규칙을 사용하는 이유는 사람들이 프로젝트에 있는 애셋을 빨리 찾을 수 있도록 도와주기 때문이다.

ex)

SM_Rock_00 - Static Mesh for a Rock version 00(스태틱 메시의 바위 버전은 00)

T_Rock_00_BC - Base Color Texture for a Rock version 00(기본 컬러 텍스쳐를 가진 바위 버전 00)

SKM_RokcBunch_99 - Skeletal Mesh for Rocks Version 00(바위 버전 00의 스켈레탈 메시)

그래서 콘텐츠 브라우저에 검색을 할 때 SM_을 입력하면 다양한 스태틱메시의 애셋들이 나온다.

 

텍스처는 언제나 2의 제곱이어야 한다.

텍스처의 x, y축은 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 & 8192이다.

하지만 텍스처는 꼭 정사각형이어야 한다는 것은 아니다.

그냥 2의 제곱이기만 하면 된다.

예를 들어 16 * 128이나 2048*1024, 2*4096, 2048*64의 값으로도 만들 수 있다.

 

텍스처가 꼭 2의 제곱이어야만 하는 이유는 텍스처가 마지막에 메모리로 패킹되는 방식과 밉맵(Mip Map)이나 텍스처 스트리밍 같은 언리얼의 내장 최적화에서 활용되는 방식이기 때문이다.

텍스처의 정보를 보면 Method는 스트리밍 모드로 되어있다.

DXT1로 포맷이 되어있고 LOD Bias는 0

Mips는 12개를 생성할 수 있다고 나와있다.

LOD 0과 5의 해상도 차이(2048x2048)

LOD 바이러스를 0에서 멀어질수록 해상도가 낮아지고 0에 가까워질수록 해상도가 높아진다.

데이터 손실 없이 텍스처가 어떻게 보이는지 확인이 가능하기 때문에 훌륭한 최적화이다.

다만 2의 제곱이 아닌 텍스처는 LOD를 움직여도 변화가 없다.

이유는 밉맵을 생성하는 것이 1개이기 때문에 최적화에 도움이 되지 않는다.

LOD 0과 LOD 13의 해상도차이(500x500)

포토샵으로 UE4로고로 더 나은 3D 메시를 만들어보자.

왼쪽 로고는 임베디드 알파를 사용하고 오른쪽 로고는 알파채널이 없다.

다른 텍스처를 알파 정보로 사용할 거다.

이유는 텍스처에 저장된 정보가 삽입된 알파(왼쪽 로고)가 독립된 알파(오른쪽)보다 비용이 두 배 더 들기 때문이다.

텍스처가 삽입된 알파는 압축되지 않은 채 언리얼로 들어오기 때문이다.

 

이게 왜 중요하냐면

왼쪽 알파채널이 삽입된로고 오른쪽은 알파텍스처가 따로 들어간 로고

왼쪽은 로고와 알파채널이 들어가 있는 로고를 LOD를 5로 해놨고 오른쪽은 로고는 그대로 알파채널만 LOD를 5로 해놨다.

보시다시피 왼쪽은 전체적인 화질이 안 좋아졌지만 오른쪽은 배경만 흐릿해지고 로고는 선명하다.

이렇듯 알파 텍스처를 따로 결합하는 이유이기도 하다.

알파 채널 정보를 정말 저렴하게 만들면서도 베이스 컬러 정보는 제대로 볼 수 있다.

삽입이든 독립으로 하든 뭘 선택할지는 자기 마음이다.

 

■RGB 마스크 패킹

RGB 마스크 패킹은 프로젝트 전체에 사용되는 텍스처의 양과 메모리를 줄이는 방법이다.

이것을 하려면 일단 텍스처 프로퍼티 자체에서 sRGB를 반드시 비활성화해야 한다.

또 이것을 머티리얼에 사용하려면 Sampler Type이 Masks로 설정되어야 한다.

텍스처를 저장하거나 할 때 PNG, PSD, TGA로 저장하는 것이 좋다.

BMP, FLOAT, PCX, IPG, EXR , DDS, HDR도 지원이 된다.

 

HDR은 2의 제곱 규칙을 따를 필요가 없다.

 

 

■밉맵이란?

텍스처의 레벨 오브 디테일이라고 표현할 수 있다.

멀리 떨어졌을 때의 렌더링 비용을 줄여주는 역할을 하거나 텍스처의 최적화 역할을 도와준다.

밉맵 생성은 텍스처를 UE4로 임포트 할 때 발생하며 아주 특별한 상황만 아니면 딱히 신경 쓸 필요가 없다.

또한 텍스처를 불러올 때 언리얼 엔진은 프로그램 뒤편에서 밉맵을 생성한다.

밉맵 체인

이렇게 최대 텍스쳐를 생성하고 그다음 그의 절반의 텍스처 그다음 절반의 텍스처... 이렇게 생성을 하게 된다.

 

만약 멀리 있는 텍스처에서 계단현상이나 일렁임이 발생한다면 Mip Gen Settings에서 sharpen이나 Blur로 바꿔주면 된다.

 

하지만 어느 프로젝트에서는 해결이 되고 어느 프로젝트에서는 해결이 안 될 수도 있다.

그냥 일일이 확인하라고 하는 것 같다.

 

 

■텍스처를 임포트 하는 방법

그림만 봐도 이해가 간다.

윈도 탐색기에서 드래그 드롭을 해서 임포트 하거나 임포트 버튼을 눌러 폴더에서 찾아서 임포트를 하거나 둘 중 한 가지다.

 

 

■텍스처 그룹

그룹 안의 텍스처가 프로젝트에서 그려질 크기를 제어하고 또한 텍스처를 축소하고 확대하는 정도도 제어하며 또 GPU를 통해서 텍스처에 적용할 필터링 종류도 제어한다.

또한 텍스처 그룹은 리소스와 관련된 대규모의 실험을 비파괴적(?)으로 할 수 있는 훌륭한 수단이다.

■텍스처 압축 방식

또한 텍스처는 언리얼 엔진에서도 압축방식을 바꿀 수 있다.