본문 바로가기

Material, BluePrint/Material

CustomDepth로 가려진 물체 표현

더보기

SceneDepth

깊이 버퍼에 저장된 값은 삼각형의 정점 3개가 세계 뷰-정점 행렬에 의해 변환된 후 삼각형의 보간 w 좌표로 나눈 삼각형의 보간 z 좌표다. 깊이 버퍼를 텍스처로 사용하여, 그 픽셀의 뷰포트 위치를 현재 뷰-투영 매트릭스의 역순으로 변환한 다음 그 결과를 w 성분으로 곱하여 깊이 버퍼에 렌더링된 객체의 월드 스페이스 위치를 추출할 수 있다.

뷰포트 공간의 픽셀 위치로 뷰포트 위치를 정의한다. 즉, x 및 y components가 화면 중앙이 (0, 0)이고  -1~1의 범위에 있다.해당 픽셀의 깊이 버퍼에 저장된 깊이가 z component가 되고 w component는 1로 설정된다.

 

SceneDepth

깊이 버퍼에 저장된 값은 삼각형의 정점 3개가 세계 뷰-정점 행렬에 의해 변환된 후 삼각형의 보간 w 좌표로 나눈 삼각형의 보간 z 좌표다. 깊이 버퍼를 텍스처로 사용하여, 그 픽셀의 뷰포트 위치를 현재 뷰-투영 매트릭스의 역순으로 변환한 다음 그 결과를 w 성분으로 곱하여 깊이 버퍼에 렌더링된 객체의 월드 스페이스 위치를 추출할 수 있다.

뷰포트 공간의 픽셀 위치로 뷰포트 위치를 정의한다. 즉, x 및 y components가 화면 중앙이 (0, 0)이고  -1~1의 범위에 있다.해당 픽셀의 깊이 버퍼에 저장된 깊이가 z component가 되고 w component는 1로 설정된다.

//Get the depth buffer value at this pixel. 

float zOverW = tex2D(depthTexture, texCoord); 

// H is the viewport position at this pixel in the range -1 to 1. 
float4 H = float4(texCoord.x * 2 - 1, (1 - texCoord.y) * 2 - 1, zOverW, 1); 

// Transform by the view-projection inverse. 
float4 D = mul(H, g_ViewProjectionInverseMatrix);

// Divide by w to get the world position. 
float4 worldPos = D / D.w;

 

 

 

 

 

카메라 걸리는 구간에 PostProcess Volume - PP 쉐이더 

오브젝트 뒤에 있는 오브젝트가 앞에 보이게

 


IF 노드 사용시

 

 

  • 특정 값과 커스텀 뎁스 값을 비교해서 커스텀뎁스는  붉게 나머지는 SceneTexture가 나오는 노드

아래 시각화이미지를 통해 B의 CustomDepth적용된 오브젝트외의 값은(흰바탕) 10000이상이다는 결론 -> 검증 ->

테스트로 A값 10000과 Clamp를 건 CustomDepth*0.0002의 값을 비교하는데 Clamp의 Max값이 10000미만일떄는 주황, 같을때는 블루, 초과일떄는 SceneTexture임을 확인

 

 

 

B의 시각화

 


1-2의 Clamp Max값이 =10000일때


1-2의 Clamp Max값이 10000.1일떄


1-2의 ClampMax값이 9999.9일때

 

  • 커스텀뎁스와 씬뎁스를 비교해서 씬뎁스가 커스텀뎁스보다 앞에 있을때(물체가 앞에 있을떄)는 위의 결과값(커스텀뎁스만 붉고 나머진 SceneTexture값)을 내놓는다.

씬뎁스 값이 크면 물체가 뒤에, CustomDepth가 크면 물체가 CustomDepth앞에

 


IF 노드 없이

 

 

A

 

 

B

 

C

 

 

 

D=clamp(1-(A*B), 0, 1)
E=A*C
F=clamp(D*E, 0,1)

 

 

F를 알파값으로



 

 

SceneDepthDistance 파라미터 값과 카메라위치에 따라 가려진 오브젝트의 컬러가 보이고 안보이고 한다. 카메라가 오브젝트에 가까워지면 가려진 오브젝트 전체에 컬러가 먹는 문제점이 있다.

 

이 방법으론 카메라가 항상 오브젝트에서 일정한 거리에 있으면 써도 문제가 없을거 같다.

 

 

 

 

 

'Material, BluePrint > Material' 카테고리의 다른 글

지구  (0) 2020.11.03
customdepth  (0) 2020.07.17
PostProcess - Radial Blur  (0) 2020.07.15
Pivot Painter 2.0를 이용해 작업중~  (0) 2020.05.26
UE4 - ICE / Mineral  (0) 2020.05.07