이걸 해보죠 ㅋ




일단 세 개가 필요합니다 



아래처럼요 


그리는 순서를 지정합니다.  순서는 1 -3 -2 순서입니다. 벽부터 그리고 , 회색 캡슐 그리고, 마지막에 빨강 캡슐을 그리게 해 줘요 



빨강 캡슐은, 저한테 셰이더 강의 들었던 학생들이라면 몽땅 다 알고 있는 그 외곽선 방식입니다. 뒤집은거요. 



하지만 사실은 안 뒤집어도 돼요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 왠지는 나중에 생각해 보세요 

지금은 보기 편하게 그냥 뒤집었을 뿐이예요


자 그럼 



이렇게 되는게 당연하겠죠?




일단 우리가 먼저 할 일은


Ztest를 이용해서 빨강 공을 '언제나 앞으로 나오게' 만드는 거예요 


빨강 애의 Z 값은 가장 멀리 있어서 가장 크거든요? 근데 지금은 '작거나 같을때' 로 되어 있어서 저렇게 보이는 거예요 


뭐 다른 것도 되지만, 과감하게 '언제나' 옵션으로 해서 꼭 보이게 만들죠 




와, 뒤에 있는데 앞에 찍히게 되었어요. 그야말로 Z버퍼고 나발이고 그냥 언제나 찍어버리는 깡패짓을 한다는 거니까요 


그럼 이제 저 앞에 있는 벽 ( 플렌) 한테 뭔가 해 줘야 해요 



이렇게 해 줍니다. 벽은 지금 스탠실 1번을 찍고 있게 되었어요. 

스텐실은 몽땅 통과하고, 통과한 녀석은 1을 찍게요 


사실 전부 다 리플레이스로 해도 될거예요. 필요에 따라 하도록 하죠 



그럼 뭐 일단... 벽 있는데는 1번이란거 알겠죠? 


그럼 쉬워요 


빨강 캡슐을


"내가 1번인데! 마! 내가 ! 응! 너네 1번하고! 막 똑같이! 번호가 같으면 그리고! 응! 마! "


그렇게 셋팅하면 됩니다. 


1번 버퍼일때만 그리라고... 


그럼 다른데서는 안그려집니다. 


이래서 첨에뒤집는 것도 의미 없었음 ㅋㅋㅋ




그럼 이케 됩니다 뾰뿅




이것도 쓸만 하긴 한데... 외각선만 나왔으면 하는 생각이 있죠?


그러면 이렇게 하면 됩니다. .



저 흰 캡슐을요 



" 내가 2번인데!! 뭐..!! 그리는건... 비교고 뭐고 다 그릴끼다!!! (물론 Z값에 가려지면 가려지지만) "

"하여간! 그런데... Z Fail(Z값 땜에 안그려지는 사태) 가 나면!! 그 부분은 내가 버퍼를 2로 만들끼다!!!"


이것입니다. 


그렇게 하면 캡슐 부분은 2가 되니까 


빨강 캡슐은 흰 캡슐 부분을 그릴 수 없게 됩니다. 



즉 이렇게 되어서 





짜잔



이건 일단 뒤로 가려졌을때 쓸만하겠구요 

혹은 뭐 x레이 투시할때도 쓸만하겠네요 




YOUR COMMENT IS THE CRITICAL SUCCESS FACTOR FOR THE QUALITY OF BLOG POST
  1. 캐시미얼 2018.08.31 14:58  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 설마 대마왕제이님이 그 대마왕J님 이실줄은 몰랐습니다 ㅠㅠ
    유니티 막히는 부분 검색하면 높은 확률로 대마왕님 블로그에 들리게 되는것 같습니다..
    특히 최적화 관련해서 많은 부분 배웠습니다.
    블로그 잘보고 있습니다 대마왕님!!!

    여기 작성된 부분이 제가 원하는 기능을 거의 정확하게 구현할 수 있는 방법이 되는 것 같은데,
    중요한건 제가 무지..해서 포스팅 내용을 잘 이해하지 못한다는 점입니다...ㅠㅠ
    그래서 죄송하지만 몇가지 질문을 더 드려야 할 것 같습니다.

    (1) 일단 쉐이더를 사용해야 한다는 것은 확실하고, 커스텀 쉐이더를 제작해야 한다는 것으로 이해했습니다.
    (2) 앰플리파이 쉐이더라는 것을 검색해보니 유니티 에셋스토어에서 구매를 해야한다고 하더군요. 포스팅에서 언급해주신게 이 에셋이 맞는건가요?
    (3) 만약 구매하지 않고 진행(코딩도 똑같다고 말씀해주신 부분)한다면 제가 제작할 쉐이더 부분에 포스팅 그림에서 나오는 Depth나 Stensil Buffer부분을 자체적으로 구현하는 방식으로 진행할 수 있는 건가요?

    휴.. 도무지 어디서부터 여쭤봐야 할지 모르겠어서 질문도 이상하지만 아무 단서라도 조금더 주시면 정말 감사하겠습니다.
    쉐이더를 다뤄본적이 없다보니 질문의 깊이가 낮은 점 죄송합니다 ㅠㅠ

    • 캬오 대마왕J 2018.08.31 15:04 신고  댓글주소  수정/삭제

      그렇군요. 그냥 쉐이더로도 가능합니다.
      엠플리파이드는 구매해야 하는데 좀 더 쉽게 작성하게 해줄 뿐이니까요
      댑스나 스텐실 기능은 쉐이더 코딩으로 동일하게 만들 수 있습니다.
      워낙 옵션이 다양해서 원하시는 방식을 가는 길이 다양한게 단점이긴 한데 ...
      요점은 뒤에 있는걸 앞에 나오게 하고 싶으시다는 거지요? 어떤 경우라도?

    • 캬오 대마왕J 2018.08.31 15:08 신고  댓글주소  수정/삭제

      가장 간단한 방법부터 테스트 해 보지요
      '앞에 찍히고 싶은 뒤에 있는 녀석' 에게 커스텀 쉐이더를 하나 만드시고

      SubShader {
      Tags { "RenderType"="Opaque " }
      LOD 200

      부분을

      SubShader {
      Tags { "RenderType"="Opaque +1" }
      LOD 200
      Ztest Always


      으로 고쳐서 해 보세요

  2. 캐시미얼 2018.08.31 15:19  댓글주소  수정/삭제  댓글쓰기

    일단 unlit으로 진행해보았습니다. 혹시 제가 잘못한 것이 있을까요? 아직은 보이지 않는 것 같습니다...

    https://drive.google.com/open?id=14lAbtVWCEGXbDBvWVqNmjLkEXbw4x1ER

  3. 캐시미얼 2018.08.31 15:27  댓글주소  수정/삭제  댓글쓰기

    벽은 standard 디폴트 쉐이더로 있는 상태입니다. 무엇이 문제일까요... ㅠㅠㅠ

    • 캬오 대마왕J 2018.08.31 15:33 신고  댓글주소  수정/삭제

      그렇다면 지금만으로는 무엇이 이유인지 확실하지 않습니다.
      저게 안되는 것 부터 뭔가 이상하거든요
      https://www.dropbox.com/s/g5sigszbyxx493j/20180831_152429.png?dl=0

  4. 캐시미얼 2018.08.31 15:36  댓글주소  수정/삭제  댓글쓰기

    ... 제가 바라는 결과 그대로인데요...? 하하.. 뭐가 문제인지..ㅠㅠ 혹시 export package 파일 하나만 공유 부탁드려도 될까요... chviff@gmail.com 입니다... 아니면 편하신 방법으로 부탁드려도 될까요?? ㅠㅠㅠ

  5. 캐시미얼 2018.08.31 15:43  댓글주소  수정/삭제  댓글쓰기

    아 받았고, 실행 잘됩니다 ㅠㅠㅠㅠㅠ 정말 감사합니다... ㅠㅠㅠㅠ

    받아보니 유일한 차이는 저는 벽을 plane으로 만들었고 대마왕님은 quad로 해주셨는데 이런 상황은 quad만 해당되는 상황인가요?

  6. 캐시미얼 2018.08.31 15:45  댓글주소  수정/삭제  댓글쓰기

    아 그리고 다른 부분은 shader코드가 Opaque-1이네요! 이부분만 체크해보면 확실히 알 수 있을것 같습니다. 왠지 해결될 것 같은데요!!!!

    • 캬오 대마왕J 2018.08.31 15:46 신고  댓글주소  수정/삭제

      아 그건 제가 테스트 하다가 넣은건데 +1 이 맞습니다. 운이 좋아서 -1인데도 나온거구요
      어쨌거나 이제 역추적 해보시면 발견하실테니 잘 되었네요 :)

    • 캐시미얼 2018.08.31 15:47  댓글주소  수정/삭제

      변화가 없군요... ㅎ... 되는게 미스터리해지는 이 순간이네요... ㅠㅠㅠ

  7. 캐시미얼 2018.08.31 15:51  댓글주소  수정/삭제  댓글쓰기

    일단 보내주신 패키지가지고 역추적해서 알아보도록하겠씁니다!!! ㅠㅠㅠ 일단 가장 중요한 단서를 만들어주셔서 감사합니다.... ㅠㅠ 너무 감사합니다.. 도와드릴만한건 잦은 방문.. 밖에 없겠지만 더 많이 방문하도록 하겠습니다 ㅋㅋ 시간 내주셔서 정말 감사합니다!!! ㅠㅠㅠㅠㅠ

  8. 캐시미얼 2018.08.31 16:48  댓글주소  수정/삭제  댓글쓰기

    대마왕님!!! 염치없이 마지막 질문 하나만 여쭤봐도 될까요??

    일단 위 오류의 경우 생성과정에서 무언가 문제가 있는것 같습니다. 아직 그것이 무엇인지 확실하지는 않지만, 비슷하게 따라하면 될때가 있고 안될때가 있습니다.(이 부분은 더 스터디가 필요할 것으로 보입니다)

    여기서 한걸음 더 나아가서 정확히 제가 원하는 상황인 큐브의 벽면(plane 또는 quad)이 가장 먼저 렌더링(즉 맨 뒤로 가게)되게 하고, 나머지 큐브나 스피어들이 그 앞에 배치되는 상황을 만들고 싶더라구요.

    그래서 서치해보니 Shader 코드에서 Render Type 중 Background를 활용하면 어떨까 싶어서 다음 방법을 실험하였으나 제대로 작동하지 않아서, 혹시 코멘트를 부탁드리고 싶습니다.

    1. 360도 촬영 영상이 배경으로 보여질 6개의 벽면에 대한 Material을 만들었습니다.
    2. 위 해당 Material이 속할 Shader를 만들었습니다.
    3. 만든 Shader에서 SubShader부분을
    {
    Tags { "RenderType"="Background" }
    LOD 100
    Ztest Always ... (이하동일)
    으로 변경하였습니다.
    4. 그리고 벽면을 생성, Shader를 적용한 벽면 Material을 적용했습니다.
    5. 이후 배경 벽면 앞에 띄워질 오브젝트(Sphere, Cube)를 만들고 해당 오브젝트의 Shader는 Standard로 설정하였습니다.

    이런 과정을 거쳐서 진행했지만, 벽면이 맨 뒤로 가지 않고, 앞에서 가리는 문제가 계속 발생하고 있습니다.
    저의 설계에 문제가 있는 걸까요? 한번 더 조언 부탁드리겠습니다... ㅠㅠㅠ
    감사합니다!!!!

  9. 캐시미얼 2018.08.31 17:05  댓글주소  수정/삭제  댓글쓰기

    그리고 위에서 언급된 쉐이더 문제의 경우 제가 쉐이더를 수정하는 방식에 문제가 있는 것 같습니다.

    분명 쉐이더를 생성하고, 수정을 하는데, 이후 컴파일을 해보면 수정이 안된 것으로 컴파일이 되는 것처럼 보입니다.(첨부파일에 캡쳐를 올렸습니다)

    대마왕님이 보내주신 쉐이더는 컴파일 해보면 Opaque-1 부분과 ZTest가 수행됨이 나타나는데, 제가 만든 쉐이더는 실행이 안되는 문제로 보입니다 ㅠㅠㅠ

    혹시 어떻게 해결할 수 있는지 조언 부탁드려도 될까요??

    https://drive.google.com/open?id=1Fbi8B6m81rgM9a7GRqzZyfWcbcAor_SN

  10. 캐시미얼 2018.08.31 17:11  댓글주소  수정/삭제  댓글쓰기

    아마 계속 제가 테스트를 할 수 없었던 이유가 변경사항이 하나도 적용이 안되고 있어서 그랬던 것 같습니다.... ㅠㅠㅠ 일단 재설치해보고 Background 부분은 할 수 있는데까지 해보도록 하겠습니다. 방향성만이라도 어느정도 맞다면 한번 시도해보려구요!!! 감사합니다!!! ㅠㅠㅠ

  11. 캐시미얼 2018.08.31 20:13  댓글주소  수정/삭제  댓글쓰기

    휴... 머리털 빠질 것 같습니다... 앞 포스트도 같이 읽어보고 스터디 해봤는데 결국 문제는 "쉐이더가 적용된 대상"이 어떻게 보여질지를 결정하는 거다보니 그냥 배경으로 작용하기는 쉽지 않은 것 같다.. 이런 느낌이 듭니다 ㅠㅠㅠ 혹시 시간 되시면 Background 작동 방식에 대해서 조금 더 설명 부탁드려도 될까요?? ㅠㅠ 그것만으로 잘 안된달까... 부분에 대해서 힌트를 부탁드리고 싶습니다.. ㅠㅠ

    • 캬오 대마왕J 2018.09.01 02:46 신고  댓글주소  수정/삭제

      늦었습니다. 일단 Background나 Opaque 같은 커멘드는 사실 숫자입니다.
      Opaque가 2000이고, 그보다 작으면 먼저 그리고 크면 늦게 그립니다.
      간단하게 그리는 순서를 강제로 정렬해 줄 수 있는데, 예를 들어 하늘 같은건 Opaque -500 같은 느낌으로 가장 먼저 그리게 해줄 수도 있습니다. 뭐 사실 그리는 순서는 별로 중요하지 않은게, Z 버퍼와 함께 연산되면 늦게 그려도 뒤에 그려질 수가 있으니 별 문제 없지만 말이지요. 일단 그 부분과 Z 쪽을 함께 보시면 원하시는건 다 표현 가능하실 겁니다.

    • 캐시미얼 2018.09.03 08:33  댓글주소  수정/삭제

      넵 일단 말씀해주신 Opaque와 Z를 동시에 사용하는 방식으로 한번 시도해보도록 하겠습니다!! 감사합니다!!! ㅠㅠㅠ

  12. 랜쓰 2020.02.14 17:27  댓글주소  수정/삭제  댓글쓰기

    좋은 튜토리얼 감사합니다.
    근데 플랜이 물체의 앞에 있건 뒤에있건 전부 빨간 테두리가 렌더링 되네요.
    빨간 테두리 ztest가 always 라서 그런거 같은데..
    벽이 물체의 앞에 있을때만 물체의 테두리가 나오게도 가능한가요??