ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ue5] 툰쉐이더 일부 오브젝트에만 적용하기
    언리얼엔진5 2023. 7. 11. 12:18
    728x90
    반응형

    배경은 그대로두고

    캐릭터나 일부 오브젝트에만 적용하는 법 ..like 원신?

    이럴땐 custom depth buffer를 사용하면됨

     

     

    custom depth 란무엇이냐..

    일단 lit 모드를 클릭하고 모드를 

    buffer visualization> custom depth 선택해보자
    그리고 뷰포트로 보면 완전 깜깜 당연함ㅇㅇcustom depth 설정을 안해줘서 안보이는것임

     

    설정을 어떻게하냐? custom depth주고싶은 액터 선택하고 추가해주면됨

    액터 stage선택후  디테일패널에서 custom depth 찾아서 체크해줌

    Render CustomDepth Pass 에 체크하면됨

    이제 다시 머티리얼 노드로 돌아와서

    scene texture 추가> scene texture ID를 Custom depth선택.

     

    마스크 컴포넌트 추가한다음  R값만 사용.

    대충 이해를 해보자면...

    커스텀뎁스 안에 있는경우 픽셀 깊이를 반환하고?

    커스텀 뎁스 안에 있지 않는 경우 매우 큰 값을 반환할것임.. 그래서 툰쉐이더가 적용안되게 하나봄?

    step노드를 사용하고 

    y값에 constant 숫자 값 넣어줌. 매우 크게..500000정도?

    그리고 step뒤에 1- 노드를 넣어서

    커스텀 뎁스 적용되면  1, 아니면 0값이 반환하게 함.

     

     step노드 모야.. 불린같은거야?

     

    아까 하늘부분 격리시키는(멀리있는부분) 노드들 복사해다 붙여넣기 해주고

    하늘 격리하는것>A

    툰쉐이더 > B

    커스텀뎁스 >alpha 에 넣어주자

     

    커스텀뎁스값이 0일경우> 하늘격리  , 1일경우 > 툰쉐이더가 적용 되는것.

     

     

    그리고 이 lerp 결과값을 뒤에있는 lerp의 a값에 넣어주자.

    그리고 뷰포트를보면.. 커스텀 뎁스 적용된 오브젝트에만 툰쉐이더가 적용된것을 볼수있음

     

    하지만 또 여기서 문제가있음 ㅠ

    커스텀 뎁스 적용된 물체를 숨겨도 보임... 왜죠...

    아까 커스텀뎁스 만들었떤 노드 아래에 scene depth 노드를 추가하고..

    component mask로 r값만 뺀다음 subtract노드써서  위의 커스텀뎁스노드에서 scene depth 노드값을 빼줌

    그리고 step노드에  넣은다음..

    위의 1-x노드결과값과 곱해줌.

     

    그값을 위  lerp의 alpha값에넣어줌

    와 여기서부턴 이해를 포기하고 그냥 하는걸로~~

    lerp 뒤에 custom depth buffer라는 이름의 switch parameter노드 추가.

    앞의 툰쉐이더 (multiply로 끝나는) 노드 더블클릭해서 reroute 점 만들어주고  거기서 뽑아서 false값에 넣어줌

    그 결과값은 또 lerp의 a값에 대신넣어줌

    커스텀 뎁스 버퍼 스위치의 값이 true일 경우

    custom depth 노드 실행되고

    false일경우 걍 커스텀뎁스 버퍼 없이 모두 툰쉐이더 실행

     

    728x90
Designed by Tistory.