인디에서 언리얼이랑 유니티 때깔이 가장 큰 차이를 보이는건 사실 언리얼은 기본세팅이 어느정도 되어있기 때문임.

유니티는 기본세팅이 하나도 없고, 그냥 하나하나 전부 추가해야되고.
그래서 몇년동안 유니티를 다뤄본 아트 아니면 기능들을 제대로 쓰질 못함.

PC기반으로 때깔을 올리기 위해 해야되는 기본적인 것들을 법을 공유해봄.
뉴비거나 비아티스트 기준이고, 이미 유니티에서 어느정도 때깔을 낼수있는 경력자는 볼필요 없음.

(편의상 255로 변환된 숫치값은 사용하지 않음...프로그램상에서 0은 블랙이고 1이 화이트임)

1.매테리얼(비아티스트는 이부분은 볼필요 없을듯?...뭐 보고 아트팀한테 이렇게 해야된다고 시키는것도 나쁘지 않긴 함.) 유니티 기본 매테리얼기준


알베도>기본색상

메탈릭>텍스쳐의 R채널을 가져와서 사용. 금속,비금속분류하는 역할.

대부분의 경우 0과 1로 금속과 비금속을 구분짓는데 사용함. 중간값은 몇몇 특별한경우 아니면 사용하지 않음.(ex.몬헌은 역전몬스터에 중간값의 메탈릭을 사용해서 일반몬스터보다 더 쌔보이는 느낌을 줌.)

수치값이 기록된 텍스쳐니 임포트 옵션에서 SRGB 체크 해제해야됨.

스무스니스> 설정에따라 메탈릭이나 알베도의 알파값을 가져와서 사용..1이 빤질빤질한제질, 0이 거친제질...1이나 0에 해당하는 질감은 현실에 존재하지 않으니 왠만하면 피하는게 좋음.

많이 실수하는게 여기다 러프니스맵을 그대로 넣는건데 러프니스는 1이 거친제질이고 0이 빤질빤질한 제질임...

포토샾 같은데서 반전시키던지, 임포트 옵션에서 RGB전부 1-R,1-G,1-B로 바꾸던지 해서 반전시켜야 제대로나옴...

약한 웨더링(물자국,지문자국,먼지등)은 다른 텍스쳐에 손대지말고 여기에서 디테일을 넣어주는게 이쁘게나옴..

수치값이 기록된 텍스쳐니 임포트 옵션에서 SRGB 체크 해제해야됨.

노말> 하이폴과 로폴간의 노말벡터(XYZ)차이를 텍스쳐(RGB)에 기록해놓은 맵. 베이스 메쉬의 노말에 대응하는거라 메쉬를 함부로 변경하면 퀼리티가 확 떨어짐..

이것도 많이 실수하는게 그린채널인데, 다이렉트 기반이랑 오픈지엘 기반의 그린채널 처리 방식이 반대임.

확인하고 반대로되있으면 임포트 옵션에서 1-G로 뒤집어줘야됨..특히 언리얼이랑 반대라 엔진간에 애셋 옮기는경우 반드시 뒤집어줘야됨..

애셋을 넣었는데 애가 좀 쪼글쪼글하고 우울하고 빛이 이상하게 밑에서 올라오는거 같다..높은 확률로 노말 그린채널 뒤집힌거임...

다른확률은 메쉬 수정되서 노말 바뀐거...(이건 노말 새로 뽑지않으면 수정 불가)
참고로 유니티는 G채널이 위에서아래로 빛을 받는 느낌이고, 언리얼은 아래에서 위로 빛을 받는 느낌임.  

헤이트맵> 시차맵핑인데 너무 구려서 잘 안씀.

앰비언트오클루젼> 텍스쳐의 G채널을 가져와서 사용. 그림자 내부에 물체와 물체가 서로 닿아있는 지점에 퍼져나가는 그림자를 추가해줌.
라이트를 받는부분은 적용되지 않아서 처음보면 이게뭔가 하는경우가 있는데 그림자 퀼리티를 확 잡아줌.
특히 입안이나 콧구멍 같은 안쪽으로 들어간 부위는 이거 없으면 리플랙션 받아서 싼티나게 반짝반짝 빛남...

가끔 커스텀 쉐이더 같은거 만들다가 이걸 0으로 설정하고 질문글 올라오는경우가 있는데 이거 0이면 빛받는 부분을 제외한 모든부분을 블랙으로 덮어버림...주의...

이미션> 그냥 빛나는부분...블룸때리면 반짝반짝 빛남..



기본적으로 알베도,메탈릭,스무스니스,앰비언트오클루젼은 PBR기반이면 다 쓰는게 좋음...애셋을 샀는데 없는게 있으면 뭐....아쉬운거고...애셋이 그렇지뭐...


2.리플랙션

또 많이들 하는 실수가 리플랙션프로브 세팅 안하는거임.

PBR개념이 주변의 환경값을 받아와서 랜더링을 하는건데, 환경값을 실시간으로 받아오면 무거우니 베이킹해놔야됨.

이걸 하는게 리플랙션 프로브임...PBR에서 이건 무조건 있어야됨...이걸 세팅 안하고 기본값(스카이박스로 되어있음)그대로 쓰니 게임들이 다 시퍼런 하늘만 반사해서 퍼렇게 떠있는거임.

사용법은 간단함...리플랙션 프로브 씬에다 놓고 영역 설정하고 베이킹 딸깍 하면됨.(라이트 베이킹시 기본적으로 같이 베이킹됨)

빛을 저장해야되니 HDR로 베이킹할것. 해상도는 굳이 높을필요 없음.

방같이 사방이 막힌 공간이면 BoxProject를 켜고 공간크기에 영역을 딱 맞추면 거의 완벽하게 딱 맞는 반사를 얻을수있음.

형태가 사각형이니 한개만 설치하는거 아니고 각 구역별로 하나씩 설치하는게 좋음.

오브젝트중 스태틱체크 하위메뉴에서 리플랙션스태틱으로 설정되있는 오브젝트만 베이킹함.


3.라이트 베이킹

유니티는 2번째 UV채널을 라이트맵에 강제로 사용함..이부분은 최대한 전부 붙여서 손으로 직접 UV를 펴주는것이 가장 좋고 이게 안되면 걍 메쉬 임포트할때 자동 돌려도됨.
(조각조각나면 그부분 그림자가 칼같이 잘림..손으로 안펴고 자동으로 돌리면 이게 심함)

리얼타임 GI는 왠만하면 쓰지말것(배필3때 사용했던 실시간 GI엔진인데 그냥 실시간라이트 쓰는것보다 무겁고 퀼리티도 떨어짐...역동적인 라이트변화가 없으면 티도 안남)

라이팅은 베이킹하는게 무조건 좋음. 스태틱 메쉬들의 퀼리티가 확 살아나고 무게는 확 줄어듬.

그리고 생각보다 라이트의 반경을 크게쓰고 강도도 높게 때려야됨. 그리고 후처리에서 노출값을 줄이는게 맞음. 

라이트세팅에서 Mixed나 Baked로 되어있는 라이트만 베이킹이됨. 간단하게 움직이는 라이트는 RealTime, 고정된 라이트는 Baked나 Mixed 로 쓴다고 생각하면 됨.

그림자가 소프트쉐도우일 경우 베이키드 쉐도우 앵글이나 라디우스 항목이 생기는데 여기 값을 이용하면 멀어질수록 흐려지는 굉장히 멋진 그림자가 베이킹됨.(나는 0.1이나 0.2정도씀...너무 높으면 완전히 뭉게져서 그림자 자체가 없어짐)

단점은 베이킹된 라이트는 스펙큘러 하이라이트가 안생기고 리플렉션만 적용되서 좀 건조하거나 밋밋한 느낌이됨...

라이트베이킹은 옵션마다 특징이 다름 

섭트랙티브 > 가장 가벼움. 세팅 상관없이 그냥 모든 라이트를 베이킹함, 다이나믹 오브젝트에는 디렉셔널 라이트의 가짜 그림자가 생김. 쉐도우 컬러에서 이 그림자 색깔을 베이킹된 그림자랑 맞춰주고 쓰면됨.

베이키드 인다이렉트> 라이트 속성이 믹스드로 되어있는 라이트의 간접광을 베이킹함.사실상 그냥 간접광이 추가된 실시간 라이트임.더 이뻐지는거 말곤 최적화에서는 큰의미 없음.

쉐도우마스크 > 가장많이 쓰는방식. 베이키드로 설정된 라이트는 그냥 베이킹하고 믹스드로 설정된 라이트는 간접광과 그림자를 분리해서 베이킹함.

분리된 그림자텍스쳐를 이용해서 쉐도우디스턴스 거리 안쪽은 실시간으로 돌리고 거리 바깥쪽은 분리된 그림자텍스쳐를 덮어서 베이킹된 라이트로돌림.

덕분에 옵션에서 그림자 거리를 짧게 설정해도 캐릭터 그림자만 사라지고 배경그림자는 베이킹된 데이터로 전환되기때문에 퀼리티와 최적화를 둘다 잡을수 있음.

제한사항은 그림자 텍스쳐를 RGBA에 각각 저장하기때문에 라이트맵 한장당 믹스드 라이트를 최대 4개이상 쓸수 없음.

4개이상일경우 유니티는 강제로 지가 판단하기에 중요도가 떨어지는 라이트들을 베이키드로 전환해서 베이킹함.

그외 라이팅 창에서 신경쓸거는 가능하면 무조건 GPU베이킹(베이킹이 10배정도 빠름),바운스 횟수 3회이상, 유닛퍼텍셀 세가지임

뭐 샘플갯수 같은건 그냥 노이즈 안보일정도로만 적당히 올리면됨...나같은경우는 대충 512 1024 때려넣음...

유닛퍼 텍셀은 1유닛당 들어갈 라이트맵 픽셀갯수임...이게 10이면 1미터당 10픽셀의 라이트맵이 구워지는거임. 대충 10정도 놓고 베이킹 반복하면서 수정하다가 만족스럽다 싶으면 올리면됨.


4.라이트프로브

스태틱 메쉬는 라이트를 베이킹하면 되는데 다이나믹은 베이킹이 안되잖아...그래서 이걸 설치해야됨.

설치하면 공8개짜리 박스가 하나 생김.

베이킹을 하면 이 공 하나하나 마다 주변 라이팅 정보가 저장되고 캐릭터같은 다이나믹오브젝트는 가장가까운 공3개의 값을 조합해서 라이트를 반영함. 

에디트 누르고 공들을 복사해서 라이트가 크게 변화하는 곳에 가져다 깔아두면됨.뭐 그림자의 경계라던가...라이트의 색상이 변화하는 곳이라던가...

특히 그림자경계랑 안쪽,바깥쪽에 충분히 설치해줘야 그림자에 들어갈때 캐릭터가 맞춰서 어두워짐...안그러면 그림자에 들어가도 애가 혼자 밝게 빛나는 불상사가 생김

몇년전에 모바일에서 100개 정도 써도 큰문제 없다고 했으니 갯수는 크게 신경 안써도 될듯.

유니티6은 APV가 생겨서 그거 쓰면 언리얼처럼 자동으로 깔림

순서가 라이트베이킹 밑에있긴 한데 이거 설치하고 라이트베이킹을 해야 이것도 같이 베이킹됨


5.후처리(포스트프로세싱)...가장 중요한 부분임.

이제 거의 다옴.

일단 카메라에서 HDR무조건 켤것.(URP나 HDRP는 프로필에 있음)

HDR 안켜면 아무리 조명이나 이미션을 강하게 넣어도 1이상의 값이 잘려나가기 때문에 블룸같은게 제대로 먹지 않음.

그리고 후처리에서 무조건 넣어야되는게 3개있음.

Bloom이랑 ToneMapping..그리고 Color Adjustments

블룸은 Thredhold 값 0으로 쓰고 화면이 뭉게지지 않도록 강도는 0.1이하로 낮게 설정함..(언리얼이 이렇게하더라)
그리고 카메라에서 HDR 켜고 실제로 라이트강도나 이미션값을 높게 때려서 정확한 블룸효과를 얻는게 가장 때깔이 좋음.

Thredhold값 올려서 밝은영역잡고 블룸강도 올려서 세팅하는거 아님...이건 HDR없던 2000년대 초반에 쓰던 방식이고,

그래서 당연히 이렇게하면 플스2~3시절 게임같은 짜치는 퀼리티가 나옴...

그다음 카메라에서 HDR켰으면 무조건 들어가야되는게 톤매핑...

HDR을 켜면 빛나는 부분이 1이상의 색상값으로 저장되고 블룸의 이걸 빛의 강도로 판단해서 정확하고 이쁜 블룸이 들어가는데,문제는 모니터는 1이상의 값을 출력할수 없음...

그래서 블룸까지 다 계산한뒤 색상범위를 다시 0과1사이 값으로 꾸겨넣는게 톤맵핑임.

추천하는 방식은 ACES...
뭐 다른방식 써도 결국 좀 이뻐보이게 만지다 보면 결국 ACES비슷하게 되더라...
특별히 원하는 톤이 있지 않는이상은 ACES가 가장 좋은듯...

그리고 위에서 라이팅 쌔게때리고 노출값 조절하라고 했었는데 노출값은 칼라어드저스트먼츠 에서 Exposure 값 내리면됨.

HDRP나 빌트인은 자동노출 있어서 그거 넣으면 알아서 조절되는데, URP는 자동노출이 없어서 이렇게 수동으로 내려줘야된다.

아니면 애셋스토어 가서 URP용 Auto Exposure 를 사던가...

그리고 여기서 Contrast나 Saturation도 좀 올려주는게 좋음...PBR이 원래 좀 색감이나 채도가 떨어지게 나오기 때문에 만져줘야됨.

그외에는 취향임...
색수차 같은걸로 좀더 실사같은 느낌을 살릴수도 있고..
쉐도우,미들톤,하이라이트 같은걸로 영화나 드라마같은 톤도 낼수있고... 


여기까지하면 이제 돈받고 팔만하다 싶은 때깔이 나올거임...
대충 필요한 기능들 설명까지 하니까 길어져서 존나 어려워보이는데 실제로 하는건 딸깍딸깍 몇번 하는 수준이라 별로 안어려움...

요약
매테리얼 세팅잘하고

리플랙션 프로브 설치하고

라이트프로브 설치하고
유닛퍼텍셀값 조절한다음 라이트베이킹한번 눌러주고
후처리에 블룸이랑 톤맵핑(ACES) 넣어주면

이제 돈받고 팔아도 꿀릴거 없겠다 싶은게 나옴.

딸깍 5번정도면 충분하네..


6. 추천애셋

-Bakery
베이킹하면 스펙큘러가 없어져서 캐릭터가 좀 밋밋해지는거 때문에 쓰기 시작한건데 , 라이트 베이킹에 있어서는 애셋스토어 탑인듯...

전용쉐이더 쓰면 베이킹된 라이트도 스펙큘러 하이라이트나 좀더 정확한 리플랙션이 생기고, 원래쓰던 쉐이더 있으면 쉐이더그래프 기반이라 병합하기도 그다지 어렵지 않음.

라이트 베이킹해서 프리팹으로 묶어서 여기저기 쓸수도 있고, 구간별로 나눠서 베이킹도 되고, 라이트프로브 보다 좋은 캐릭터용 볼륨 베이킹 시스템도 있고... 
좀 복잡해서 메뉴얼이랑 쓰래드 보고 좀 공부좀 해야되긴 함.
그리고 엔비디아 기술 기반이라 라데온은 못씀..
VRchat에서 퀼리티 좋은 맵들은 다 이거쓰더라.