유니티 쉐이더 기초 - depth intersection

그래픽스꿀잼·2026년 4월 10일

그래픽스

목록 보기
8/20
post-thumbnail

depth intersection

직역하면 깊이 교차로?

화면 공간에서 오브젝트와 씬 깊이를 비교해서
“겹치거나 가까운 경계 영역”을 찾아
그 부분에만 쉐이더 효과를 적용하는 기법

항목Scene Depth (빨간선)Screen Position(초록선)
의미화면에 이미 그려진 픽셀의 깊이현재 픽셀의 화면 좌표
타입스칼라 (float)벡터 (float2 / float4)
역할얼마나 멀리 있는지화면 어디에 있는지
용도깊이 비교텍스처 샘플링 좌표

이 두 노드를 이용해서
Screen Position으로 화면 좌표를 얻고,
Scene Depth로 해당 위치를 씬 기준으로 깊이를 샘플링한 뒤,
현재 오브젝트의 깊이와 비교해서 값이 거의 같은 영역(경계)에 쉐이더 효과를 적용하는 것

주의점!

Scene depth는 필요에 따라 변경가능하지만, 바라보는 위치에서 쉐이더가 적용되어야하면 Eye(카메라)로 해줘야하고,

Screen position은 Raw로 설정해야 w값이 제거되지 않고 사용가능!

Depth intersection texturing

기본개념은 엄청 간단함

scene depth - screen position.w(a, 깊이)를 해주면 된다.

다만 값이 너무 커지는 경향이 있어 saturate를 통해 0,1로 범위를 잡아줌.

그럼 이런식으로 경계부분에 검은색으로 칠해짐

gradient로 보이는 부분은 픽셀마다 계산을 하기때문에
0~1사이로 모두 연결이 되는 값들이라 gradient처럼 되는거임

이걸 해결하려면
step으로 아예 gradient를 없애거나
smoothStep으로 gradient를 조절하면 됨

  • depth intersection 계산

    핵심은 bend size로 보여질 intersection부분의 크기 정해주기

  • 원하는 텍스쳐로 설정해주기

    핵심은 intersection의 결과는 경계선이 검은색(0),
    지정한 step종류에 따라서 그 외의 공간은 흰색(1 혹은 gradient),
    그걸 유의해서 검은색부분, 흰색부분 원하는대로 설정 후 텍스쳐, 컬러 연결ㄱㄱ

  • alpha조절
    핵심은 intersection의 결과는 경계선이 검은색(0),
    지정한 step종류에 따라서 그 외의 공간은 흰색(1 혹은 gradient),
    따라서 경계선 부분을 투명하게 하려면 그대로 alpha에 연결,
    흰부분을 투명하게 하려면 반전(one minus)를 해서 연결

굳~

Fresnel

외곽선을 추가하는 용도이다

현재 다른 오브젝트에 가려지면 해당부분은 잘 표시되는데 반해
빨간점선으로 그린 영역의 외곽선이 표시되지 않아 쉐이더가 어색해보인다

기본개념은 다음과 같음

  • 위에서 살펴본 depth intersection은 그대로 적용(텍스쳐부분 빼고)
  • 해당 결과에 fresnel을 ADD해줌
    • 왜 add냐 하면,
      depth intersection의 결과를 one minus를 통해 값을 반전시킴
      여기에 multiply를 하면 one minus전의 흰부분(외곽부분)이었던 곳이 one minus를 통해 검은색이 됐는데,
      fresnel을 아무리 곱해도 0n=00*n = 0 이므로 add를 통해 값을 보간처리 해줘야함

이렇게 빨간부분을 조심해서 depth intersection + fresnel을 해주고 alpha에 연결하고

대충 이런 텍스쳐랑 색을 넣어주면

경계선 + depth intersection까지 되는 텍스쳐 완성

profile
그래픽스 공부중

0개의 댓글