• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
D2 Depth of field

D2 Depth of field






Total Views
Views on SlideShare
Embed Views



2 Embeds 79

http://aker.tistory.com 78
http://www.slideshare.net 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    D2 Depth of field D2 Depth of field Presentation Transcript

    • Depth of Field 김정희 최유표
    • Table of Contents• DOF?• Our DOF• QnA
    • DOF• Depth Of Field (피사계심도) – 렌즈로 피사체를 바라보면 그 앞/뒤에 초점이 맞는데 그 범위를 이르는 말• Circle Of Confusion (착란원) – 점모양의 물체가 초점이 맞지 않는 위치에 있으면, 이 물체는 둥 그런 반점 모양으로 보이는데 이를 COC라고 한다.• Focal Length (초점거리) – 렌즈의 초점거리.
    • DOFv In computer graphics, we typically project onto our virtual film using an idealized pinhole camera that has a lens of zero size, so there is only a single path for light to travel from the scene to the film. So to achieve the depth-of-field effect, we must approximate the blur that would otherwise happen with a real lens. – GPU Gems1
    • DOF
    • D2• ATI Sample 참고 – MipMap과 MSAA를 사용하여 DOF – 장점 • Source가 매우 Simple! • MipMap 생성에 HW 및 DX API 이용 • Blur Pass를 절약 – 단점 • MipMap 생성을 제어할 수 없다. • 이 Sample에서 쓰인 MSAA는 DX10 전용
    • D2• Flow … 생략… Device.CreateTexture(width, height, Usage.RenderTarget | Usage.AutoGenerateMipMap, format, Pool.Default); … 생략 RenderRepository.cs … 생략… PostProcessing() { … 생략… PostProcessing.TextureHandle.DxTexture.GenerateMipSubLevels(); } BeginViewPort(); Dof(); EndViewPort();
    • D2float4 DefaultPS( OUTPUT_VS In ) : COLOR{ * Uniform 상수 float lodLevel = GetLod(In.tex); maxLevel = 2.5f float3 deferredRgb = GetLodColor(In.tex, lodLevel); distance = 100 return float4(deferredRgb,1);}float GetLod(float2 tex){ float viewZ = tex2D(depthSampler, tex).a; // MRT1번 float blur = abs(viewZ - dofZ); // 렌더링 물체의 viewZ와 Focal Plane의 viewZ (= 카메라와 캐릭터의 거리) return maxLevel * saturate(blur / distance);}float3 GetLodColor(float2 tex, float lod){ return tex2Dlod(ldSampler, float4(tex, 0, lod)).rgb; // PostProcessing, MotionBlur까지 끝낸 Texture}
    • D2• Artifact – MipLevel이 커질수록 Aliasing 발생 – MipLevel이 차이나는 곳에서 Aliasing 발생• 원인 – MipMap에서 이미 Blurring 되었기 때문에
    • D2
    • D2Level0 Level1 0 0 1 0 Screen
    • D2• Solution – MipMap을 자동생성하지 않고 깊이를 비교하 여 생성 (귀찮음 적용하지 않음) – Sampling 할 때 인접 픽셀들과 평균 – 인접픽셀은 대각선 방향의 4개 픽셀을 사용 • Aliasing은 대각선에만 발생되기 때문에 상하좌우 보다 대각선방향의 픽셀을 가져오는 것이 효과적 인 것 같다!
    • D2float4 DefaultPS( OUTPUT_VS In ) : COLOR{ float lodLevel = GetLod(In.tex); float3 deferredRgb = GetLodColor(In.tex, lodLevel); // 좌상, 우상, 우하, 좌하 + 중앙 float p = lodLevel * 2; float offsetA = offsetAB.xy * p; float offsetB = offsetAB.zw * p; deferredRgb += GetLodColor(In.tex+offsetA, lodLevel); deferredRgb += GetLodColor(In.tex-offsetA, lodLevel); deferredRgb += GetLodColor(In.tex+offsetB, lodLevel); deferredRgb += GetLodColor(In.tex-offsetB, lodLevel); deferredRgb /= 5; return float4(deferredRgb,1);}
    • D2
    • D2
    • QnA• Future Work – 없어