SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
Deferred Shading

                 http://ohyecloudy.com
      http://cafe.naver.com/shader.cafe
                              2009.03.30
Introduction
• 보통 사용하는 Forward Shading에서는 라이
  팅 비용이 비싸다.
 – 각각의 오브젝트마다 라이팅
 – 게임에서 사용하는 라이트 개수가 많아지고 있다.
• G-buffer에 라이팅 재료들을 렌더링하고 라
  이팅에 오브젝트들 대신 G-buffer를 사용.
 – 라이팅 비용을 줄인다.
 – Deferred Shading
Three major options for
       real-time lighting
• Forward Rendering
  – single pass with multiple lights
  – multiple passes with multiple lights lighting


• Deferred Rendering
Single-pass, multi-light
for each object do
  for each light do
    framebuffer = light_model(object,light);
Frame

Buffer
문제점
• 화면에 렌더링 되지 않을 Geometry도 라
  이팅 연산을 한다.
• 멀티 라이트일때 관리가 어렵다.
 – 싱글 셰이더 템플릿을 사용하기 때문에 조합
   하는 가지수가 폭발적으로 늘어난다.
Multi-pass, multi-light
for each light do
  for each object affected by light do
    framebuffer += light_model(object,light);
Previous
 Frame
 Buffer




Current
 Frame
 Buffer
문제점
• 화면에 렌더링 되지 않을 Geometry도 라
  이팅 연산을 한다.
• 높은 배치 카운트
 – 1/object/light
• 각 패스마다 중복된 작업이 많다.
 – Vertex transform & setup
Deferred Shading
for each object do
  G-buffer = lighting properties of object;
for each light do
  framebuffer += light_model(G-buffer,light);
G-Buffer




Previous              Current
 Frame                 Frame
 Buffer                Buffer
특징
• 배치가 갂단해지고 관리가 쉽다
• 그림자 테크닉과 통합이 쉽다.
• 라이팅이 O(1)에 가능
 – 오브젝트 개수에 상관 없다.
G-Buffer
• Per-pixel lighting에 필요한 모든 정보
 – Normal
 – Position
 – Diffuse / Specular Albedo, other attributes
Normal
Depth
Diffuse
Specular factor
Computing Lighting
For each light:
    diffuse += diffuse(G-buff.N, L))
    specular += G-buff.spec *
         specular(G-buff.N, G-buff.P, L)
Diffuse Lighting
Specular reflection
Deferred Composition
framebuffer
  = diffuse * G-buff.diffuse + specular
Shader code
• Writing G-buffer
• Lighting
Writing G-buffer
PS_MRT_OUTPUT SimplePS(VS_OUTPUT0 In)
{
         PS_MRT_OUTPUT Out;

        half4 diffuseTex = tex2D( DiffuseMapSampler, In.TexCoord0);
        half3 normalTex = tex2D( NormalMapSampler, In.TexCoord1);

        diffuseTex.xyz = diffuseTex.w;

        //put normal into view space
        float3x3 TangentToView;
        TangentToView[0] = In.TangentToView0;
        TangentToView[1] = In.TangentToView1;
        TangentToView[2] = In.TangentToView2;
        half3 normal = normalize(mul(normalTex, TangentToView));

        //pack
        normal = normal * 0.5f + 0.5f;

        Out.Color0 = float4(diffuseTex.xyz, NotShadowed);
        Out.Color1 = float4(normal, 0.0);
        Out.Color2 = float4(In.Position2.z / In.Position2.w, 0.0f, 0.0f, 0.0f);

        return Out;
}
Per-Pixel Lighting
float4 DirLightingPS(VS_OUTPUT1 In) : COLOR
{
       half4 diffuseTex = tex2D(MRT0Sampler, In.TexCoord);
       half4 normalTex   = tex2D(MRT1Sampler, In.TexCoord);
       half z            = tex2D(MRT2Sampler, In.TexCoord);

      //reconstruct original view-space position
      float x = In.Position2.x;
      float y = In.Position2.y;
      float4 position = mul(float4(x, y, z, 1.0), InvProj);
      position.xyz = position.xyz / position.www;
      position.w = 1.0f;

      //compute position in light space
      …
      //diffuse lighting
      finalLighting = shadow * diffuse + Ambient + emissive;
      return float4(finalLighting, 1.0f);
}
극복해야 할 사항
• Transparency
  – alpha blending
  – G-buffer는 하나의 픽셀만 저장하기 때문에
    Forward Rendering처럼 갂단하지 않다.
• Anti-Aliasing
  – Forward Rendering처럼 frame buffer에 직접
    렌더링할때 자동으로 받는 하드웨어 anti-
    aliasing이 불가능
결론
• O(1)에 Lighting을 할 수 있다.
 – 오브젝트 개수에 상관없이 상수 시갂에 라이
   팅이 가능하다.
• 사용하는 렌더 타겟의 개수가 늘어나는게
  부담.
• Transparency, AA 등 극복해야 하는 문제
  점들이 존재.
참고
• Deferred Shading – NVIDIA
• Deferred Rendering in Leadwerks Engine
• HDR Deferred Shading – NVIDIA SDK

Contenu connexe

Tendances

Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art TechnologiesSangYun Yi
 
Ch.5 Deep Learning
Ch.5 Deep LearningCh.5 Deep Learning
Ch.5 Deep LearningPartPrime
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Dae Hyek KIM
 
SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진SUNGCHEOL KIM
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02SangYun Yi
 
Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03SangYun Yi
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayYEONG-CHEON YOU
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseYEONG-CHEON YOU
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석SangYun Yi
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트재철 황
 

Tendances (20)

Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
 
Ch.5 Deep Learning
Ch.5 Deep LearningCh.5 Deep Learning
Ch.5 Deep Learning
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진SGL : 소프트웨어 3D 렌더링 엔진
SGL : 소프트웨어 3D 렌더링 엔진
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02Unity Surface Shader for Artist 02
Unity Surface Shader for Artist 02
 
Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03Unity Surface Shader for Artist 03
Unity Surface Shader for Artist 03
 
Motion blur
Motion blurMotion blur
Motion blur
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
Ssao
SsaoSsao
Ssao
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트NDC2015 광개토태왕 테크니컬 아트
NDC2015 광개토태왕 테크니컬 아트
 

Similaire à Deferred Shading

D2 Depth of field
D2 Depth of fieldD2 Depth of field
D2 Depth of fieldYoupyo Choi
 
Unity performanceoptimzation
Unity performanceoptimzationUnity performanceoptimzation
Unity performanceoptimzationegohim
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_재현 최
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...종빈 오
 
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)해강
 
gametech 2012 Gladius project
gametech 2012 Gladius projectgametech 2012 Gladius project
gametech 2012 Gladius projectWuwon Yu
 
NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요 Wuwon Yu
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blogozlael ozlael
 
Cheap realisticskinshading kor
Cheap realisticskinshading korCheap realisticskinshading kor
Cheap realisticskinshading kor민웅 이
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
Deview deep learning-김정희
Deview deep learning-김정희Deview deep learning-김정희
Deview deep learning-김정희NAVER D2
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법강 민우
 
A Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderA Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderLee Seungeun
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 

Similaire à Deferred Shading (20)

D2 Depth of field
D2 Depth of fieldD2 Depth of field
D2 Depth of field
 
Unity performanceoptimzation
Unity performanceoptimzationUnity performanceoptimzation
Unity performanceoptimzation
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_
 
D2 Rain (1/2)
D2 Rain (1/2)D2 Rain (1/2)
D2 Rain (1/2)
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
[shaderx6] 3.7 Robust Order-Independent Transparency via Reverse Depth Peelin...
 
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
[Shader study] the rendering technology of lords of the fallen - 발표메모(14.06.23)
 
gametech 2012 Gladius project
gametech 2012 Gladius projectgametech 2012 Gladius project
gametech 2012 Gladius project
 
NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요  NDC2015 유니티 정적 라이팅 이게 최선인가요
NDC2015 유니티 정적 라이팅 이게 최선인가요
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
 
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
 
3D Graphics 101
3D Graphics 1013D Graphics 101
3D Graphics 101
 
Cheap realisticskinshading kor
Cheap realisticskinshading korCheap realisticskinshading kor
Cheap realisticskinshading kor
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
Deview deep learning-김정희
Deview deep learning-김정희Deview deep learning-김정희
Deview deep learning-김정희
 
Ndc11 이창희_hdr
Ndc11 이창희_hdrNdc11 이창희_hdr
Ndc11 이창희_hdr
 
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
[IGC2018] 유영천 개발자 - Voxel기반 네트워크 게임 최적화기법
 
A Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding AutoencoderA Beginner's guide to understanding Autoencoder
A Beginner's guide to understanding Autoencoder
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 

Plus de 종빈 오

트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기종빈 오
 
적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0종빈 오
 
페리 수열(Farey sequence)
페리 수열(Farey sequence)페리 수열(Farey sequence)
페리 수열(Farey sequence)종빈 오
 
내가 본 미드 이야기
내가 본 미드 이야기내가 본 미드 이야기
내가 본 미드 이야기종빈 오
 
비트 경제와 공짜
비트 경제와 공짜비트 경제와 공짜
비트 경제와 공짜종빈 오
 
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해종빈 오
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스종빈 오
 
Intrusive data structure 소개
Intrusive data structure 소개Intrusive data structure 소개
Intrusive data structure 소개종빈 오
 
2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템종빈 오
 
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81종빈 오
 
[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments종빈 오
 
넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우종빈 오
 
[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합종빈 오
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개종빈 오
 
[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline종빈 오
 
[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당종빈 오
 
[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary종빈 오
 
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬종빈 오
 
[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명종빈 오
 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering종빈 오
 

Plus de 종빈 오 (20)

트위터 봇 개발 후기
트위터 봇 개발 후기트위터 봇 개발 후기
트위터 봇 개발 후기
 
적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0적당한 스터디 발표자료 만들기 2.0
적당한 스터디 발표자료 만들기 2.0
 
페리 수열(Farey sequence)
페리 수열(Farey sequence)페리 수열(Farey sequence)
페리 수열(Farey sequence)
 
내가 본 미드 이야기
내가 본 미드 이야기내가 본 미드 이야기
내가 본 미드 이야기
 
비트 경제와 공짜
비트 경제와 공짜비트 경제와 공짜
비트 경제와 공짜
 
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
[NDC12] 게임 물리 엔진의 내부 동작 원리 이해
 
[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스[Windows via c/c++] 4장 프로세스
[Windows via c/c++] 4장 프로세스
 
Intrusive data structure 소개
Intrusive data structure 소개Intrusive data structure 소개
Intrusive data structure 소개
 
2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템2011 아꿈사 오전반 포스트모템
2011 아꿈사 오전반 포스트모템
 
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
[프로젝트가 서쪽으로 간 까닭은] chap 17, 18, 26, 33, 81
 
[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments[GEG1] 3.volumetric representation of virtual environments
[GEG1] 3.volumetric representation of virtual environments
 
넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우넘쳐나는 정보 소화 노하우
넘쳐나는 정보 소화 노하우
 
[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합[Domain driven design] 17장 전략의 종합
[Domain driven design] 17장 전략의 종합
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개
 
[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline[GEG1] 2.the game asset pipeline
[GEG1] 2.the game asset pipeline
 
[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당[TAOCP] 2.5 동적인 저장소 할당
[TAOCP] 2.5 동적인 저장소 할당
 
[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary[GEG1] 24. key value dictionary
[GEG1] 24. key value dictionary
 
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬[TAOCP] 2.2.3 연결된 할당 - 위상정렬
[TAOCP] 2.2.3 연결된 할당 - 위상정렬
 
[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명[TAOCP] 1.3.1 MIX 설명
[TAOCP] 1.3.1 MIX 설명
 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering
 

Deferred Shading

  • 1. Deferred Shading http://ohyecloudy.com http://cafe.naver.com/shader.cafe 2009.03.30
  • 2. Introduction • 보통 사용하는 Forward Shading에서는 라이 팅 비용이 비싸다. – 각각의 오브젝트마다 라이팅 – 게임에서 사용하는 라이트 개수가 많아지고 있다. • G-buffer에 라이팅 재료들을 렌더링하고 라 이팅에 오브젝트들 대신 G-buffer를 사용. – 라이팅 비용을 줄인다. – Deferred Shading
  • 3. Three major options for real-time lighting • Forward Rendering – single pass with multiple lights – multiple passes with multiple lights lighting • Deferred Rendering
  • 4. Single-pass, multi-light for each object do for each light do framebuffer = light_model(object,light);
  • 6. 문제점 • 화면에 렌더링 되지 않을 Geometry도 라 이팅 연산을 한다. • 멀티 라이트일때 관리가 어렵다. – 싱글 셰이더 템플릿을 사용하기 때문에 조합 하는 가지수가 폭발적으로 늘어난다.
  • 7. Multi-pass, multi-light for each light do for each object affected by light do framebuffer += light_model(object,light);
  • 9. 문제점 • 화면에 렌더링 되지 않을 Geometry도 라 이팅 연산을 한다. • 높은 배치 카운트 – 1/object/light • 각 패스마다 중복된 작업이 많다. – Vertex transform & setup
  • 10. Deferred Shading for each object do G-buffer = lighting properties of object; for each light do framebuffer += light_model(G-buffer,light);
  • 11. G-Buffer Previous Current Frame Frame Buffer Buffer
  • 12. 특징 • 배치가 갂단해지고 관리가 쉽다 • 그림자 테크닉과 통합이 쉽다. • 라이팅이 O(1)에 가능 – 오브젝트 개수에 상관 없다.
  • 13. G-Buffer • Per-pixel lighting에 필요한 모든 정보 – Normal – Position – Diffuse / Specular Albedo, other attributes
  • 15. Depth
  • 18. Computing Lighting For each light: diffuse += diffuse(G-buff.N, L)) specular += G-buff.spec * specular(G-buff.N, G-buff.P, L)
  • 21. Deferred Composition framebuffer = diffuse * G-buff.diffuse + specular
  • 22.
  • 23. Shader code • Writing G-buffer • Lighting
  • 24. Writing G-buffer PS_MRT_OUTPUT SimplePS(VS_OUTPUT0 In) { PS_MRT_OUTPUT Out; half4 diffuseTex = tex2D( DiffuseMapSampler, In.TexCoord0); half3 normalTex = tex2D( NormalMapSampler, In.TexCoord1); diffuseTex.xyz = diffuseTex.w; //put normal into view space float3x3 TangentToView; TangentToView[0] = In.TangentToView0; TangentToView[1] = In.TangentToView1; TangentToView[2] = In.TangentToView2; half3 normal = normalize(mul(normalTex, TangentToView)); //pack normal = normal * 0.5f + 0.5f; Out.Color0 = float4(diffuseTex.xyz, NotShadowed); Out.Color1 = float4(normal, 0.0); Out.Color2 = float4(In.Position2.z / In.Position2.w, 0.0f, 0.0f, 0.0f); return Out; }
  • 25. Per-Pixel Lighting float4 DirLightingPS(VS_OUTPUT1 In) : COLOR { half4 diffuseTex = tex2D(MRT0Sampler, In.TexCoord); half4 normalTex = tex2D(MRT1Sampler, In.TexCoord); half z = tex2D(MRT2Sampler, In.TexCoord); //reconstruct original view-space position float x = In.Position2.x; float y = In.Position2.y; float4 position = mul(float4(x, y, z, 1.0), InvProj); position.xyz = position.xyz / position.www; position.w = 1.0f; //compute position in light space … //diffuse lighting finalLighting = shadow * diffuse + Ambient + emissive; return float4(finalLighting, 1.0f); }
  • 26. 극복해야 할 사항 • Transparency – alpha blending – G-buffer는 하나의 픽셀만 저장하기 때문에 Forward Rendering처럼 갂단하지 않다. • Anti-Aliasing – Forward Rendering처럼 frame buffer에 직접 렌더링할때 자동으로 받는 하드웨어 anti- aliasing이 불가능
  • 27. 결론 • O(1)에 Lighting을 할 수 있다. – 오브젝트 개수에 상관없이 상수 시갂에 라이 팅이 가능하다. • 사용하는 렌더 타겟의 개수가 늘어나는게 부담. • Transparency, AA 등 극복해야 하는 문제 점들이 존재.
  • 28. 참고 • Deferred Shading – NVIDIA • Deferred Rendering in Leadwerks Engine • HDR Deferred Shading – NVIDIA SDK