UDN
Search public documentation:

BokehDepthOfFieldKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 언리얼 엔진 3 의 DirectX 11 > 보케 뎁스 오브 필드
UE3 홈 > 포스트 프로세스 이펙트 > 보케 뎁스 오브 필드

보케 뎁스 오브 필드


개요


디지털 카메라로 찍은 다음 실사 이미지는 일부에 포커스인, 일부에 포커스 아웃된 오브젝트를 나타냅니다.

PhotoReference.jpg

포커스 아웃 부분은 둥근 모양을 이루는데, (일본어로 물방울을 뜻하는) 보케라 합니다. 포커스 아웃이 심하게 된 작고 밝은 오브젝트로 좀 더 선명하게 보일 수도 있습니다.

이러한 효과를 흉내내고 근사치를 수용하여 효율적으로 실시간 구현이 가능케 하고자 합니다. 다른 여러가지 뎁스 오브 필드 렌더링 메서드처럼, 이 기능도 컬러 이미지에 포스트 프로세스를 적용하여 이뤄내고 있습니다. 픽셀별 깊이(뎁스) 정보와 소위 착란원(Circle of Confusion)이라는 함수를 사용하여 이미지의 선명하고 흐린 부분을 계산해 낼 수 있습니다.

BokehDOFTeaser.jpg

이 실시간 렌더된 이미지를 보면 포커스 인되어 선명한 오브젝트와 포커스 아웃되어 흐려진 오브젝트가 보입니다. 보케 모양은 다섯날 렌즈 조리개 모양을 흉내내고 있습니다.

보케 뎁스 오브 필드 켜기


주: 이 기능은 지오메트리 셰이더 기능이 지원되어야 하는데, 현재 Direct3D 11 에 대해서만 구현되어 있습니다. (켜는 방법은 DirectX 11 Rendering KR 참고)

활성 포스트 프로세싱 체인을 열고 위버 포스트 프로세스 이펙트를 클릭(하거나 추가)합니다. Depth of Field 그룹에 보면 관련 세팅을 찾을 수 있습니다:

EditorEffect.jpg

Type 이 "BokehDOF" 인지 확인합니다.
Quality 는 퍼포먼스를 대가로 품질을 올릴 수 있으나, 효과는 미미할 수도 있습니다. 이상적인 경우 Low 로 놔둔 상태에서, 올린 후 시각적으로 차이가 있으면서 성능도 괜찮을 때만 쓰는 것이 좋습니다.
BokehTexture 는 아무 2D 텍스처여도 괜찮으나 이상적으로는:

  • 그레이스케일 (올바른 보케(color fringe)는 위치만을 기준으로 해야 하나, 이미지에 색이 들어가면 그 역시 보케처럼 보일 수가 있기 때문입니다.)
  • 128 x 128 이하 (더 크면 메모리 낭비입니다.)
  • 어두운 테두리 (쿼드가 클 수록 텍스처도 커지며, 보케 모양도 바이리니어 필터링으로 인해 앤티-앨리어싱되기 때문입니다.)
  • 미압축상태 또는 휘도(luminance)만
  • 적절한 밝기 (샘플 참고)

보케 모양


아티스트가 포스트프로세싱 체인에서 보케 텍스처를 지정할 수 있습니다. 다음 이미지에서 (좌하단 부분) 텍스처가 렌더된 이미지에 어떤 영향을 끼치는지 알아볼 수 있습니다:

BokehShapes.png

반투명


뎁스 오브 필드를 포스트 프로세스로 처리하니 각 픽셀(이나 조각)마다 깊이 정보가 있는 불투명 오브젝트에는 잘 통합니다. 그러나 반투명 렌더링에는 포스트 프로세싱 방법이 잘 통하지 않습니다. 이러한 문제를 무시하면 반투명 오브젝트의 포커스는 (배경에 따라) 너무 심하게 잡히거나 흐려지거나 합니다.

이 문제는 뎁스 오브 필드에 영향을 끼치(거나 끼치지 않)는 반투명 오브젝트 부분을 (머티리얼 세팅에서) 지정하는 식으로 해결했습니다 (나중에는 DX11 없이도 돌아가게 만들었구요):

SeparateTranslucency.jpg

거기에 더해 새로 생긴 "DepthOfFieldFunction" 이라는 머티리얼 노드로 (페이드 아웃 하거나 블러링 상태로 블렌딩하는 등) 셰이딩을 조절할 수 있습니다:

MaterialNode.jpg

알려진 한계점 (로우 레벨 정보)

  • 이 기술은 소스의 반해상도 이미지를 사용하므로 밝은 픽셀의 작은 부작용이 잘못된 레이어로 샐 수가 있습니다.
  • 풀 씬 앤티-앨리어싱(MSAA)과 함께 작동하는 효과지만, 픽셀의 너무 밝은 부분이 잘못된 레이어로 샐 수가 있습니다. uberpostprocesseffect MSAA 인지상태(aware)에서 샘플을 더 많이 뽑아내면 이런 현상을 방지할 수 있습니다.
  • 레이어 내부의 오클루전은 처리되지 않습니다. 이로 인해 색이 약간 샐 수 있습니다.
  • 포커스 아웃된 효과는 모든 모션 블러에 영향받지 않습니다. (MotionBlurSoftEdge 기능으로 에지가 연해지는 곳에는, 모션 블러나 하드 실루엣 중 하나가 빠질 것이라는 뜻입니다.)

최적화 (로우 레벨 정보)


퍼포먼스를 위해 알고리즘은 반해상도 이미지에만 적용하고, 나중에 전해상도 이미지와 재결합시킵니다. 재결합 단계는 (단순성과 퍼포먼스를 위해) 픽셀 별로 MSAA 를 무시하여 진행됩니다. 이게 가끔은 품질상의 문제를 일으킬 수도 있습니다. (MSAA 를 꺼 보면 확인할 수 있습니다.)

최신 그래픽 카드에서는 보케 반경이 어느정도 작기만 하면 퍼포먼스가 괜찮으나, 반경이 커 질수록 렌더링 속도가 급격히 떨어질 수 있습니다 (반경이 2 배면 채우기(fill) 비용은 4 배).

지오메트리 셰이더는 2x2 블록을 처리합니다. 2x2 블록 콘텐츠가 알맞은 경우 (휴리스틱은 코드에 정의되어 있습니다) 전체 블록에는 하나의 쿼드만 스폰되며, 그렇지 않은 경우 각 픽셀마다 쿼드를 하나씩 (총 4 개의 쿼드를) 스폰합니다. 다음 이미지에서 보면 1쿼드로만 렌더링되는 부분(초록)과 4쿼드가 필요한 부분(빨강)이 어떻게 되는지 확인할 수 있으며, 그 외에는 온전한 색으로 나타나고 있습니다:

BokehDoFOptimized.jpg