VRChat 마이너 갤러리 저장소

제 목
강좌/정보 VRC Shader 강좌 #02 - 렌더큐(RenderQueue)
글쓴이
포동포도
추천
5
댓글
6
원본 글 주소
https://gall.dcinside.com/vr/579994
  • 2020-10-27 14:57:32
							


viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a77ec82d4e74e1b8591280f088e9ebfbf72db0e5f9a5857618






viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a713a52f4e7de9bf5b128dfead66af4f84310a970e3a2821aaa5


게임에서 사용하는 셰이더들을 보면 거의 렌더큐(RenderQueue)라고 적힌 게 있다.


이 기능은 물체를 그릴 순서를 결정하는 것으로 이 값을 통해

어떤 물체가 먼저 보이고 어떤 게 가려질지 판단할 수 있게 된다.


대표적인 예시로, 현실에서는 책상에 노란 종이를 올리고 그 위에 빨간 종이를 올리면 당연히 빨간 종이가 보이겠지만


유니티에서는 물체를 보여줄 순서가 미리 정해져 있지 않아서

나중에 가르칠 Z 버퍼(Z-Buffer)라는 것과 렌더큐를 통해

‘같은 크기의 노란 종이와 빨간 종이가 똑같은 위치에 있어서 무엇을 먼저 보여줘야 할지 모르겠는데,

Z 버퍼와 렌더큐를 참고해봤더니 노란 종이가 뒤에 있고 빨간 종이가 앞에 나오는 모습을 보여줘야겠다’

라는 결과를 내보내는 것이다.




viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a713a52f4e7de9bf5b128dfead66f61e876f0ec6553e2821aaa5


사진을 다시 보자. 렌더큐가 From Shader라고 되어 있는데 이는 이 셰이더의 기본 렌더큐 값을 사용하겠다는 의미다. 


저 From Shader 부분을 클릭하여 펼쳐보면



viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a713a52f4e7de9bf5b128dfead66a312d03853c152692821aaa5


흔히 본 것은 Opaque(불투명)라는 이름이 붙은 셰이더에서 쓰는 지오메트리(Geometry)와 트랜스패런트(Transparent)일 것이다.
지오메트리는 렌더큐가 2000인 값이고 트랜스패런트는 3000이라는 값을 가졌다.


둘을 비교해보라고 하면 ‘트랜스패런트가 1000만큼 더 크니 힘이 셀 것이고 먼저 보일 거야’ 라고 생각할 수 있겠다.

물론 정답이다(Z 버퍼를 참고하지 않는 가정하에). 같은 위치에 같은 크기의 물체가 있다면 트랜스패런트 체가 먼저 보이게 된다.


유니티에서 확인해보자.






viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e4e3df518cb2b4a79e9b93244dbf53ef43c8fc45ed0703f


같은 위치에 똑같은 크기의 체를 놓고 셰이더의 렌더큐 값만 다르게 해 보았다.

확인해 본 결과 Geometry<Transparent 이므로

트랜스패런트로 변경한 파란색 체가 먼저 보이게 되었다.


만약 반투명한 물체에 지오메트리(Opaque) 셰이더를 쓰면 어떻게 될지 보자.

*Opaque: '불투명'. 대다수의 RenderQueue값이 2000인 VRChat Shader의 이름에는 Opaque가 붙어 있다.






viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a77ec82d4e74e1b8591280f088bdb4faf429b2e8aaa59f6818


물체의 투명했어야 하는 부분이 뒤에 있는 물체를 검은색으로 가리거나 잘라버려서 이상한 결과가 나올 것이다.


이로써 우리는 반투명한 물체는 지오메트리(Opaque)를 쓰고

투명한 물체는 트랜스패런트(Transparent)를 쓴다는 결론을 얻을 수 있겠다.




하지만 셰이더가 사진으로부터 투명한 부분을 구별할 수 없다면?



viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e4e3df518cb2b4a79e9b93212dcf7f51eed71ad9a434b8a


렌더큐를 트랜스패런트로 바꿔도 투명해지지 않는다.




따라서 셰이더 제작자가 "내 셰이더는 렌더큐값을 이리저리 바꿔도 투명한걸 가려낼 수 있어요!"라고 말하지 않는 이상

인스펙터에서 렌더큐 값을 조절하는 행위는 자제하는 것이 좋다.


렌더큐 값을 변경하고 투명과 반투명 모두 표현할 수 있는 한 개의 만능 셰이더를 만드는 것은 매우 어렵고 최적화에도 좋지 않아서

많은 제작자들은 셰이더를 각각 용도에 맞게 Opaque(렌더큐가 Geomerty인), Transparent로 구분해둘 것이다.

우리는 렌더큐를 함부로 건드리기보다는 상황에 맞는 이름이 적힌 셰이더를 찾아 적용하면 되는게 좋은 선택이다.




근데 이딴걸 왜 설명하는거고 우리가 어디에다가 써먹을 수 있냐고?

바로 대표적인 예가 아바타의 홍조다.


아바타의 불투명한 얼굴과 투명한 홍조는 서로 겹쳐있는데

기본적인 Standard 셰이더로 보면 이런 결과가 나온다.


viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a77ec82d4e74e1b8591280f088ebb3a8fe2db6e9a8a59f6818


대개 VRCMods나 데비앙아트, 블렌더를 통해 유니티에 모델을 집어넣었을 때 볼 수 있겠다.

원래 투명했어야 할 홍조 외곽 부분이 검은색으로 되어버려 흉측한 모습이다.






viewimage.php?id=3baf&no=24b0d769e1d32ca73dec84fa11d0283195504478ca9b7677dc322c30cb329b43568e0b68a77ec82d4e74e1b8591280f088bfeafda129b8b2aba59f6818


Unlit/Transparent로 셰이더를 바꿔보았다. (Standard 셰이더의 Transparent는 투명이 완벽하지 않다)

홍조가 잘 드러나는 모습으로 이로써 이 강좌를 세 줄 요약할 수 있겠다.






1. 물체가 겹쳐있을 때 앞과 뒤를 결정하는건 렌더큐(RenderQueue)다.

2. 불투명한 물체는 대개 렌더큐가 2000인 Opaque 셰이더를 사용한다.

3. 반투명한 물체는 렌더큐가 3000인 Transparent 셰이더를 사용한다.






+ 추가적으로 나머지 렌더큐 값들이 있는데 함께 정리하자면 용도는 이렇다.


Background - 1000

가장 뒤에서 보이게 되는데 이름 그대로 배경이나 스카이박스를 만들 때 쓴다.


Geometry - 2000

기본적인 불투명 물체에 쓴다.


AlphaTest - 2500

불투명과 반투명 사이에 위치한 값. Transparent처럼 반투명 물체를 표현할 수 있음.

Transparent에 의해 물체가 가려져야 할 때 쓰기도 함.


Transparent - 3000

기본적인 반투명 오브젝트에 쓴다. 파티클도 이에 포함된다.


Overlay - 4000

가장 먼저 보이게 될 물체에 쓴다. 셰이더FX(특히 굴절)나 렌즈 플레어 등에 사용한다.



밍뉴 몰라 개추 2020.10.27 14:59:11
밥주나 2020.10.27 15:00:28
ㅇㅇ 어려운거 쉽게쓰려고 고민햇구나.고생햇어 - dc App 119.193 2020.10.27 15:03:17
조개껍데기 2020.10.27 15:08:37
ㅇㅇ 역시 똑똑한사람이 강좌쓰면 보기가 쉬워 121.152 2020.10.27 15:20:14
키에르 2020.10.27 15:24:11
번호 분류 제목 글쓴이 날짜 추천
580370 일반 실친이 내가 과몰입 9번 한 것도 암 20 연어수비드스테이크 2020-10-28 0
580369 일반 갤로그 키라는건 고닉으로 오라는것과 같은 뜻 2 Doohle 2020-10-28 0
580368 일반 댕댕이 2년차 플탐 10 적쥐 2020-10-28 0
580367 일반 친구한테 들키는건 괜찮은데 9 백곰아저씨 2020-10-28 0
580366 일반 저는 갤로그를 꺼두지안앗어여 2 딜런 2020-10-28 0
580365 일반 평소에 쓰는 글 8 연어수비드스테이크 2020-10-28 0
580364 일반 평소 정상적인글만 쓰고다닌다면 찔릴일이 없겠죠 8 Yaksok 2020-10-28 0
580363 일반 브갤은 부끄러운게 맞다 7 Doohle 2020-10-28 0
580362 일반 실친이 너네들 브갤 하는 거 아냐? 25 연어수비드스테이크 2020-10-28 0
580361 일반 요즘 왜 패션 아싸들이 많은걸까 24 토끼쟝 2020-10-28 0
580360 일반 이제부터 주기적으로 클리너 돌려야겠어 9 SkyFall 2020-10-28 0
580359 일반 H파티에서 개꼴리는 메리노랑 친추함 7 빅몬 2020-10-28 0
580358 일반 분명 내가 잘못한건 하나도없는데 사과해야하는 이 기분 6 ㅇㅇ 117.111 2020-10-28 0
580357 일반 자기도 부끄러워서 브챗 갤로그 꺼놨음서 ㅋㅋ 10 ㅇㅇ 39.7 2020-10-28 0
580356 일반 칼삭당했어 4 ㅇㅇ 175.223 2020-10-28 0
580355 일반 곤약젤리 맛있네 2020-10-28 1
580354 일반 저 꼴려요? 4 ㅇㅇ 112.158 2020-10-28 0
580353 일반 진짜 아싸는 저 처럼 친구가 없서용 3 연어수비드스테이크 2020-10-28 0
580352 일반 지듣노 5 백곰아저씨 2020-10-28 0
580351 일반 어제 매운맛 친구 처음따라가서 2 ㅇㅇ 175.223 2020-10-28 0
580350 일반 님들은 그냥 이 노래나 들으세용 5 딜런 2020-10-28 0
580349 일반 아이!!!! 2 2020-10-28 0
580348 일반 탕수육이 먹고싶음 4 Doohle 2020-10-28 0
580347 일반 갈게요 ㅇㅇ 39.7 2020-10-28 0
580346 일반 집 가고싶다 2 토끼쟝 2020-10-28 0
580345 일반 나같이 소심한 사람은 사는 게 힘들다 15 신도담 2020-10-28 0
580344 일반 앨리스 존나꼴려 6 TENDER 2020-10-28 0
580343 일반 브알챗은 드라군임 4 엘렝 2020-10-28 0
580342 일반 으앙 ㅇㅇ 175.223 2020-10-28 0
580341 일반 여자한테도 쥬지 달려 있는데 모르노 2 ㅇㅇ 223.62 2020-10-28 0
580340 일반 같은 노래만 반복해서 듣는사람은 우울증이래요 14 Yaksok 2020-10-28 0
580339 일반 나는 다를거라 생각하는게 진쟈 블랙코미디네용 9 ㅇㅇ 39.7 2020-10-28 0
580338 일반 님들 소가 놀라면 머라말하개용 4 딜런 2020-10-28 0
580337 일반 여러분 그거아시나용? 11 백곰아저씨 2020-10-28 0
580336 일반 그래서 점심 뭐 먹지 11 Doohle 2020-10-28 0
580335 일반 형아 소리 들을때마다 기분 묘하네 23 기타 2020-10-28 0
580334 일반 아는 동생이 조퇴하고 커피 사옴 16 연어수비드스테이크 2020-10-28 0
580333 일반 맥모닝도 맛잇는데 버거킹 아침매뉴도 맛잇어 2 핑크여우씨 2020-10-28 0
580332 일반 인덱컨 다 좋은데 9 Zon 2020-10-28 0
580331 일반 불같은 나의 사랑 피할수 없어~~ 7 요쨩 2020-10-28 0
념글 삭제글 갤러리 랭킹