안녕하세요, 답변이 늦어져 먼저 죄송하다는 말씀을 드립니다.
말씀주셨던 겹치는 부분에 대한 아웃라인 표현은 Custom Depth Stencil Write Mask를 활용하실 경우 여러 물체에 대한 대응이 가능할 것으로 보입니다.
해당 옵션은 StaticMeshComponent > Rendering > Advanced 아래에서 확인하실 수 있습니다.
[Image Removed]
해당 기능은 CustomDepth Stencil Value값에서 특정 비트에 대한 값만 쓰기 지정을 할 수 있도록 합니다.
위 이미지 예에서라면 Value값인 7(이진수 111)에서 Second bit, 즉, 4(이진수 010)의 값만을 쓸 것입니다.
총 8 비트에 대한 조작이 가능하기에 8가지의 물체의 겹쳐짐을 표현할 수 있습니다.
앞서 보내드렸던 Material에서 위, 아래 각각 +1, -1씩의 Depth값을 비교하여 Outline을 표현하고 있었습니다만,
이를 Stencil 값의 차이로 변경하는 것으로 말씀주신 것과 유사한 효과의 샘플을 만들 수 있었습니다.
자세한 내용은 변경한 Material 파일도 함께 전달드리오니 확인하시고 모호한 점이 있으시거나 질문이 필요하신 부분 말씀 부탁드리겠습니다.
[Image Removed]
- Sphere 설정
- CustomDepth Stencil Value - 7
- Custom Depth Stencil Write Mask - First bit (1), ignore depth
- Cube 설정
- CustomDepth Stencil Value - 7
- Custom Depth Stencil Write Mask - Second bit (2), ignore depth
- Cylinder 설정
- CustomDepth Stencil Value - 7
- Custom Depth Stencil Write Mask - Third bit (4), ignore depth
추가로 문의주셨던 Custom Depth를 여러장을 그리는 것은 앞서 안내드렸 듯 엔진 수정을 필요로 합니다.
해당 기능을 위해서는 다음 대규모의 엔진 수정을 필요하신 Custom Depth의 개수만큼 반복해주시는 것이 요구됩니다.
- StaticMeshComponent 또는 각각의 다른 Renderer Component에서 Custom Depth N에 대한 옵션 추가
- SceneProxy에 Custom Depth N에 대한 Render Flag 추가
- Visibility 처리에 대한 코드에서 Custom Depth N 렌더링에 대한 플래그 전달
- MeshPass상 Custom Depth N 패스 추가
- SceneTextures 리소스에 Custom Depth N 텍스쳐 추가
- 사용하고 계신 SceneRenderer의 Render() 함수에서 Custom Depth를 그리는 Render Pass콜을 Custom Depth N에 대해서 하도록 복제
이처럼 복잡한 커스텀 과정 외에도 Custom Depth 패스는 등록된 모든 오브젝트들을 대상으로 Render Loop를 실행하게 되기에 그 자체로 높은 성능 비용을 발생시킵니다.
또한 저희가 이해한 바가 맞다면, Custom Depth를 여러장 그리는 방법은 기본적으로 각 오브젝트마다 Depth Rendering -> Outline Draw를 실행하는 것과 유사한 비용이 발생할 것으로 추측됩니다.
관련 내용이 필요하실 경우 사용하고 계신 SceneRenderer 또는 빌드 타겟 플랫폼을 알려주시면 Diff 파일 형태의 패치 파일을 전달드릴 수 있도록 하겠습니다.