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
번호 분류 제목 글쓴이 날짜 추천
580553 일반 저녁먹고 갤질하세요 4 꿀뚤 2020-10-28 0
580552 일반 3.0 주저리 7 JugularVein 2020-10-28 3
580551 일반 응애 나 애기 사네코 33 차차 2020-10-28 0
580550 일반 귀여운 쿄코 둘이서.. 24 사나흘 2020-10-28 0
580549 일반 메갤 ㄹㅈㄷ네 6 반다이몰 2020-10-28 1
580548 일반 개꼴리는 쿄코짤 2 ㅇㅇ 112.158 2020-10-28 0
580547 일반 귀여운 노거스 4 엞엞 2020-10-28 0
580546 일반 귀여운 앨리스 20 럽미두 2020-10-28 0
580545 일반 아 친구 존나귀엽네 씨발 ㅋㅋㅋ 21 양산형이세계물 2020-10-28 0
580544 일반 아바타 추가하고 싶은데 8 묵언소녀 2020-10-28 0
580543 일반 루리웹에 vrchat게시판 만들어주세요 4 ㅇㅇ 2020-10-28 0
580542 일반 업데이트된 메리스가 왔어요! 15 메리스 2020-10-28 0
580541 일반 라이플 14 snrnsepdy 2020-10-28 1
580540 일반 친구정리 안하려고했는데 한번 해야겠네 8 세이히나 2020-10-28 0
580539 일반 이짤 출처점 알려주세여 8 triva 2020-10-28 0
580538 일반 링거 빨리 뽑았으면 좋겠어... 9 오래쟝 2020-10-28 0
580537 일반 아니씨발 솔직히 라무네 귀엽다니까? 8 양산형이세계물 2020-10-28 0
580536 일반 초코우유성능확실하노 4 명빵_접음 2020-10-28 0
580535 일반 라무네 대신 귀여운티엔 10 시뚬 2020-10-28 2
580534 일반 포토프린터 있으면 좋음 7 ㅇㅇ 175.203 2020-10-28 0
580533 일반 하카 앞에 손가락 내밀면 10에9는 물더라 4 KittyCannon 2020-10-28 0
580532 일반 다시 생각해봐도 만나자마자 침대있는 원룸으로 데려가면 15 요쨩 2020-10-28 0
580531 일반 지금 브이알챗 켜면 할 수 있는것 7 으ㅡ음 2020-10-28 1
580530 일반 귀여운 퍼지 1 JugularVein 2020-10-28 0
580529 일반 귀여운 라무네 13 tntnt 2020-10-28 0
580528 일반 너희는 라무네를 소중히하지않았지 10 양산형이세계물 2020-10-28 0
580527 일반 귀여운 미셰 2 JugularVein 2020-10-28 0
580526 일반 귀여운 라무네 8 Mire 2020-10-28 0
580525 일반 응애 아기브붕 청국장먹으러왔어용 4 백곰아저씨 2020-10-28 0
580524 일반 솔직히 「라.무.네」만큼은 안올렸으면 좋겠다 6 금발하카 2020-10-28 0
580523 일반 여기는 라무네쓰는사람 없어서 좋네요 6 JugularVein 2020-10-28 0
580522 일반 헉.. 얘들아 나 어떡해 ㅠㅠ 20 양산형이세계물 2020-10-28 0
580521 일반 응애 배고파 6 snrnsepdy 2020-10-28 0
580520 일반 평생 함께하고싶은 기분이지만 6 카페인237mg 2020-10-28 0
580519 일반 여기는 ㅇㅅㅇ쓰는사람 없어서 좋네요 8 JugularVein 2020-10-28 0
580518 일반 정박아말투 남이쓰는거보니까 되게비호감이네 6 시뚬 2020-10-28 0
580517 일반 브붕이들 맛점해 3 내가날렸다 2020-10-28 0
580516 일반 오늘 시험망쳤음ㅋㅋㅋ 10 거위사탕 2020-10-28 0
580515 일반 더이상은...무...무리야앗..안들어...간다고오...헤응 22 cafriSSUN 2020-10-28 0
580514 일반 노멀맵 있는게 확실히 금속 느낌이 더 잘사네 1 애송이회원 2020-10-28 0
념글 삭제글 갤러리 랭킹