際際滷

際際滷Share a Scribd company logo
Texture Array襯 伎 Cascaded
Shadow Maps
豌
Microsoft Visual C++ MVP
tw:@dgtman
http://megayuchi.wordpress.com
   螳 譴朱 螻  蠏碁殊 襷 蠍磯
 蟲蠍 暑.
 Soft-shadow豌襴 暑.
Shadow Maps
 蟯(蠏碁殊襯 襴) 觀郁概螳 Shadow Caster螳 
る碁(轟  豌) 襷 -> Depth Buffer(Texture)襯
蟲
蟲  Pass 0 , Shadow Caster
蟲  Pass 1 , Shadow Receiver
 蟯(蠏碁殊襯 襴) View- Space襦 覲.
 -1 ~ 1伎 譬螻糾 0  1企 覲.
 覲 (0  1) 譬襦 Depth Buffer襦覿 depth螳 襷
 Receiver depth螳螻 Depth Buffer depth螳 觜蟲
 receiver_z > depth_value -> 蠏碁殊螳 襴讌
Shadow Map in Shadow Space On Rendering in Camera Space
Shadow Map applied
 

Shader Resource View
Sampling z-value from
Shadow Map
Compare z-value  and 
per pixel.
  レ Texture襦  螻糾 蠍一 伎螳 覿譟燕.
 Texture 伎襯 蟆? -> 讌レ, But 焔 , GPU覃覈襴
觜
 PSM, TSM, LiPSM 焔  レ Texture襷 覃伎 豕
觜   蠍磯 煙
蠏碁 郁鍵 所 覓語螳
 Shadow Map 襷   レ Texture螳   レ Texture
 蠏碁Μ.
 觀壱ろ   螳 螻糾朱 殊  レ Shadow
Map Texture襯 .
 螳蟾 螻 襾  磯 Shadow Map 覦 譟一 螳.
 Shadow Map 伎 讀螳 磯ジ 觜螳 .
Cascaded Shadow Maps
eye
Shadow Light
Shadow Map Texture  Size(Width x N , Height)
 Shadow Map朱  Texture 譴觜
 N螳 Cascaded 螻襯 る Texture 伎 Width x N, Height
 Width x N 伎  レ Texture N螻 Shadow Map 願鍵
企.
 襭襯 覃 0 ~ N-1螻蟾讌 Shadow Caster襯 襷.
 觀壱 れ 覦蠖螳覃  レ Texture 覈 企.
 Shadow Receiver襯 襷 曙 企 Cascaded螻
れ願讌 谿場 tex譬 u焔 offset譟一
 危 朱 Shadow Map螻 螳.
蟲
 Cascaded螻 磯 Draw Call螳 企. CPU  觜.
 貊 覲旧″伎.
 覦 覈 Cascaded 螻襯 豌襴  蟾?
螳螻 苦
 襷 蠏碁襦 Texture覦一
 覦一伎伎襷  Texture豌 る0  .
 SRV, RTV襦  螳.
 CPU豸 貊 API 覦覯 朱 Texture 螳.
 Texture襦覿 襷 譬 x,y,z焔譴 z焔 覦一伎
碁煙る 
Texture Array
Texture2DArray texDiffuseArray: register(t0);
SamplerState samplerDiffuse: register(s0);
float4 psArrayDiffuse(PS_INPUT input) : SV_Target
{
float3 texCoord = float3(input.TexCoord.xy,TexArrayIndex);
float4 texColor = texDiffuseArray.Sample(samplerDiffuse, texCoord);
float4 outColor = texColor;
return outColor;
}
Using Texture Array as SRV
Using Texture Array as RTV
struct PS_OUT_TEX_ARRAY
{
float4 Pos : SV_POSITION;
uint RTIndex : SV_RenderTargetArrayIndex;
};
[maxvertexcount(3)]
void gsDefault ( triangle GS_INPUT input[3], inout TriangleStream<PS_OUT_TEX_ARRAY> TriStream )
{
PS_OUT_TEX_ARRAY output;
for (uint i=0; i<3; i++)
{
output.Pos = mul(input[i].PosWorld,matViewProjList[i]);
output.RTIndex = N;
TriStream.Append(output[j]);
}
TriStream.RestartStrip();
}
 N螳 Cascaded螻螳   伎 Width , Height 覦一伎
N螳 Texture 
 朱 Texture 襷谿螳讌襦 RTV SRV
 Shader 企 Cascaded 螻 讌 螻壱螻 蠏
碁煙 螳 れ 譬 z焔朱 
Texture Arrary襯 Shadow Maps
UINT Width = DEFAULT_SHADOW_MAP_WIDTH;
UINT Height = DEFAULT_SHADOW_MAP_HEIGHT;
UINT ArrayCount = MAX_CASCADE_NUM;
D3D11_TEXTURE2D_DESC texDesc =
{
Width, Height, 1, ArrayCount, DXGI_FORMAT_R32_TYPELESS, 1, 0, D3D11_USAGE_DEFAULT, D3D11_BIND_DEPTH_STENCIL |
D3D11_BIND_SHADER_RESOURCE, 0, 0
};
D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc = { DXGI_FORMAT_D32_FLOAT, D3D11_DSV_DIMENSION_TEXTURE2DARRAY, 0 };
dsvDesc.Texture2DArray.FirstArraySlice = 0;
dsvDesc.Texture2DArray.ArraySize = ArrayCount;
dsvDesc.Texture2DArray.MipSlice = 0;
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc = { DXGI_FORMAT_R32_FLOAT, D3D11_SRV_DIMENSION_TEXTURE2DARRAY, 0, 0 };
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = ArrayCount;
srvDesc.Texture2DArray.MipLevels = 1;
srvDesc.Texture2DArray.MostDetailedMip = 0;
ID3D11Texture2D* pTex = nullptr;
HRESULT hr = m_pD3DDevice->CreateTexture2D(&texDesc, NULL, &pTex);
if (FAILED(hr))
__debugbreak();
hr = m_pD3DDevice->CreateDepthStencilView(pTex, &dsvDesc, &m_pShadowMapDSV);
if (FAILED(hr))
__debugbreak();
hr = m_pD3DDevice->CreateShaderResourceView(pTex, &srvDesc, &m_pShadowMapSRV);
if (FAILED(hr))
__debugbreak();
pTex->Release();
Creating SRV,DSV from Texture Array
Texture Texture Array
// set matrix for shadow-space,
SetCascadedLightSpaceAll(N);
// Draw shadow casters to Depth Buffer
DrawShadowCasters();
for (DWORD i=0; i<N; i++)
{
// set matrix for shadow-space,
SetCascadedLightSpace(i);
// Draw shadow casters to Depth Buffer
DrawShadowCasters();
}
CPU Code  Shadow Caster 襷 觜蟲
cbuffer ConstantBufferShadowMap : register( b0 )
{
matrix matWorld;
matrix matViewList[MAX_CASCADE_NUM];
matrix matProjList[MAX_CASCADE_NUM];
}
struct PS_OUT_TEX_ARRAY
{
float4 Pos : SV_POSITION;
uint RTIndex : SV_RenderTargetArrayIndex;
};
struct GS_INPUT
{
float4 PosWorld: POSITION;
};
Shader Code  Pass 0 , Shadow Caster
float4 vsShadowCaster( VS_INPUT_VL input ) : POSITION
{
float4 PosWorld = mul( input.Pos, matWorld );
return PosWorld;
}
[maxvertexcount(3*MAX_CASCADE_NUM)]
void gsShadowCaster( triangle GS_INPUT input[3], inout TriangleStream<PS_OUT_TEX_ARRAY> TriStream )
{
PS_OUT_TEX_ARRAY output[3];
for (uint i=0; i<MAX_CASCADE_NUM; i++ )
{
for (uint j=0; j<3; j++)
{
float4 PosView = mul(input[j].PosWorld,matViewList[i]);
PosView.z += 2.5f; // bias value
output[j].Pos = mul(PosView,matProjList[i]);
output[j].RTIndex = i;
TriStream.Append(output[j]);
}
TriStream.RestartStrip();
}
}
Shader Code  Pass 0 , Shadow Caster
cbuffer ConstantBufferGBufferShader : register (b0)
{
matrix ViewInv;
matrix matShadowViewProjCascade[MAX_CASCADE_NUM];
CASCADE_CONSTNAT CascadeConst[MAX_CASCADE_NUM];
};
Texture2DArray texShadowMap: register(t2);
SamplerComparisonState samplerComp : register(s2);
void CalcIndex(out float OutIndex, in float Dist)
{
uint index = MAX_CASCADE_NUM - 1;
for (uint i = 0; i < MAX_CASCADE_NUM; i++)
{
if (Dist <= CascadeConst[i].Dist)
{
index = i;
break;
}
}
OutIndex = index;
}
Shader Code  Pass 1 , Shadow Receiver
float3 CalcShadowColor3x3(Texture2DArray texShadowMap, SamplerComparisonState samplerComp, float4 PosWorld, float Dist)
{
float3 shadowColor = float3(1, 1, 1);
uint index;
CalcIndex(index, Dist);
float4 PosShadowSpace = mul(PosWorld, matShadowViewProjCascade[index]);
float4 texCoord = PosShadowSpace / PosShadowSpace.w;
float cmp_z = texCoord.z;
float litSum = 0;
int2 offset[9] = {-1,-1, 0,-1, 1,-1, -1,0, 0,0, 1,0, -1,1, 0,1, 1,1 };
for (int i = 0; i < 9; i++)
{
litSum += texShadowMap.SampleCmpLevelZero(samplerComp, float3(texCoord.xy,index), cmp_z, offset[i]);
}
float shadowValue = litSum / 9.0f;
shadowColor = lerp(float3(0,0,0), float3(1, 1, 1), shadowValue);
return shadowColor;
}
Shader Code  Pass 1 , Shadow Receiver
 Draw Call  譴  . CPU豸 覲覈 譴
 貊螳 覲企 螳蟆壱伎.
Texture Array レ
 螳螳 Light View Space ろ  culling
 ろ  culling 襾殊   Constant Buffer襯 牛 bit
flags襦 .
 Geometry Shader 0,1,2,3 螳 觜碁ゼ 豌危覃 0  N蟾讌
Cascaded螻 讌襯 蟆. 觜瑚 0企 蠏碁襦 蠍.
 GPU 企Μ 企伎覩襦 CPU豸′ 覲 Culling
 螳 螳覃 蟲褐 螳 讌????
豢螳 豕
Reference
 https://msdn.microsoft.com/en-
us/library/windows/desktop/ee416307(v=vs.85).aspx
 http://developer.download.nvidia.com/SDK/10.5/opengl/src/cascade
d_shadow_maps/doc/cascaded_shadow_maps.pdf

More Related Content

What's hot (20)

[Kgc2012] deferred forward 伎綾
[Kgc2012] deferred forward 伎綾[Kgc2012] deferred forward 伎綾
[Kgc2012] deferred forward 伎綾
changehee lee
Motion blur
Motion blurMotion blur
Motion blur
changehee lee
Ndc2010 蠏 襷觜瑚鍵2 貂襴 襷 蠍一
Ndc2010 蠏   襷觜瑚鍵2 貂襴 襷 蠍一Ndc2010 蠏   襷觜瑚鍵2 貂襴 襷 蠍一
Ndc2010 蠏 襷觜瑚鍵2 貂襴 襷 蠍一
henjeon
觜襯 襷 る 蠍一
觜襯 襷  る  蠍一觜襯 襷  る  蠍一
觜襯 襷 る 蠍一
YEONG-CHEON YOU
Volumetric Fog
Volumetric FogVolumetric Fog
Volumetric Fog
Bongseok Cho
蟆襦語 GPGPU
蟆襦語  GPGPU蟆襦語  GPGPU
蟆襦語 GPGPU
YEONG-CHEON YOU
蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019
蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019
蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019
devCAT Studio, NEXON
覃一る 襷 (Multithreaded rendering)
覃一る 襷 (Multithreaded rendering)覃一る 襷 (Multithreaded rendering)
覃一る 襷 (Multithreaded rendering)
Bongseok Cho
磯У 豢 蠏覈 殊危 企慨
磯У 豢 蠏覈 殊危 企慨磯У 豢 蠏覈 殊危 企慨
磯У 豢 蠏覈 殊危 企慨
Seongdae Kim
ろ襴 ろ伎 一梗 誤 覲伎(襾 40,000: ろ伎 襷襴)
ろ襴 ろ伎 一梗  誤 覲伎(襾 40,000: ろ伎 襷襴)ろ襴 ろ伎 一梗  誤 覲伎(襾 40,000: ろ伎 襷襴)
ろ襴 ろ伎 一梗 誤 覲伎(襾 40,000: ろ伎 襷襴)
襷 讌 螳覦蠍
襷 讌 螳覦蠍襷 讌 螳覦蠍
襷 讌 螳覦蠍
YEONG-CHEON YOU
[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓
[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓
[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓
MinGeun Park
Shadow mapping 襴
Shadow mapping 襴Shadow mapping 襴
Shadow mapping 襴
changehee lee
襴螻 螳觜讌 貉
襴螻 螳觜讌 貉襴螻 螳觜讌 貉
襴螻 螳觜讌 貉
QooJuice
Ssao
SsaoSsao
Ssao
Minsu Park
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
[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ
[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ
[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ
MinGeun Park
碁企 2 ray marching 蟲襴
碁企 2 ray marching 蟲襴 碁企 2 ray marching 蟲襴
碁企 2 ray marching 蟲襴
覩殊
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
YEONG-CHEON YOU
[Kgc2012] deferred forward 伎綾
[Kgc2012] deferred forward 伎綾[Kgc2012] deferred forward 伎綾
[Kgc2012] deferred forward 伎綾
changehee lee
Ndc2010 蠏 襷觜瑚鍵2 貂襴 襷 蠍一
Ndc2010 蠏   襷觜瑚鍵2 貂襴 襷 蠍一Ndc2010 蠏   襷觜瑚鍵2 貂襴 襷 蠍一
Ndc2010 蠏 襷觜瑚鍵2 貂襴 襷 蠍一
henjeon
觜襯 襷 る 蠍一
觜襯 襷  る  蠍一觜襯 襷  る  蠍一
觜襯 襷 る 蠍一
YEONG-CHEON YOU
蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019
蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019
蟾, <螻 企> PBR螻 危碁伎 襷 蠍磯, NDC2019
devCAT Studio, NEXON
覃一る 襷 (Multithreaded rendering)
覃一る 襷 (Multithreaded rendering)覃一る 襷 (Multithreaded rendering)
覃一る 襷 (Multithreaded rendering)
Bongseok Cho
磯У 豢 蠏覈 殊危 企慨
磯У 豢 蠏覈 殊危 企慨磯У 豢 蠏覈 殊危 企慨
磯У 豢 蠏覈 殊危 企慨
Seongdae Kim
ろ襴 ろ伎 一梗 誤 覲伎(襾 40,000: ろ伎 襷襴)
ろ襴 ろ伎 一梗  誤 覲伎(襾 40,000: ろ伎 襷襴)ろ襴 ろ伎 一梗  誤 覲伎(襾 40,000: ろ伎 襷襴)
ろ襴 ろ伎 一梗 誤 覲伎(襾 40,000: ろ伎 襷襴)
[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓
[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓
[Ndc12] 蟲 蠍一 hdr螻 るУ 覦覩手啓
MinGeun Park
Shadow mapping 襴
Shadow mapping 襴Shadow mapping 襴
Shadow mapping 襴
changehee lee
襴螻 螳觜讌 貉
襴螻 螳觜讌 貉襴螻 螳觜讌 貉
襴螻 螳觜讌 貉
QooJuice
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
[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ
[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ
[0107 覦覩手啓] 所 覦一磯 hdr螻 るУ
MinGeun Park
碁企 2 ray marching 蟲襴
碁企 2 ray marching 蟲襴 碁企 2 ray marching 蟲襴
碁企 2 ray marching 蟲襴
覩殊
Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5Introduction to DirectX 12 Programming , Ver 1.5
Introduction to DirectX 12 Programming , Ver 1.5
YEONG-CHEON YOU

Viewers also liked (11)

襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP 螳覦 瑚襦~
襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP  螳覦 瑚襦~襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP  螳覦 瑚襦~
襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP 螳覦 瑚襦~
YEONG-CHEON YOU
[0122 蟲蟆曙]蟆 豢豌襴
[0122 蟲蟆曙]蟆 豢豌襴[0122 蟲蟆曙]蟆 豢豌襴
[0122 蟲蟆曙]蟆 豢豌襴
KyeongWon Koo
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
YEONG-CHEON YOU
GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴
GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴
GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴
YEONG-CHEON YOU
10_Raytracing Introduction
10_Raytracing Introduction10_Raytracing Introduction
10_Raytracing Introduction
noerror
Hierarchical z buffer occlusion culling
Hierarchical z buffer occlusion cullingHierarchical z buffer occlusion culling
Hierarchical z buffer occlusion culling
Jaeyun Lee
DirectX + C++ 伎 WindowsStore App螻 Windows Phone 蟆 螳覦
DirectX + C++ 伎  WindowsStore App螻 Windows Phone 蟆 螳覦DirectX + C++ 伎  WindowsStore App螻 Windows Phone 蟆 螳覦
DirectX + C++ 伎 WindowsStore App螻 Windows Phone 蟆 螳覦
YEONG-CHEON YOU
[0602 覦覩手啓] Direct2D
[0602 覦覩手啓] Direct2D[0602 覦覩手啓] Direct2D
[0602 覦覩手啓] Direct2D
ル旭 豕
[る語ろ磯] 蠏朱 螻 伎
[る語ろ磯] 蠏朱  螻 伎[る語ろ磯] 蠏朱  螻 伎
[る語ろ磯] 蠏朱 螻 伎
Hyekyoung Yun
[NDC12] 蟆 覓朱Μ 讌 企 襴 危
[NDC12] 蟆 覓朱Μ 讌 企  襴 危[NDC12] 蟆 覓朱Μ 讌 企  襴 危
[NDC12] 蟆 覓朱Μ 讌 企 襴 危
譬觜
ろ語 蠍一豈襦 伎螳蠍
ろ語 蠍一豈襦 伎螳蠍ろ語 蠍一豈襦 伎螳蠍
ろ語 蠍一豈襦 伎螳蠍
Hyun-woo Park
襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP 螳覦 瑚襦~
襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP  螳覦 瑚襦~襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP  螳覦 瑚襦~
襦蠏碁覦 語伎 F1襾語 C++ 螻 Windows 10 UWP 螳覦 瑚襦~
YEONG-CHEON YOU
[0122 蟲蟆曙]蟆 豢豌襴
[0122 蟲蟆曙]蟆 豢豌襴[0122 蟲蟆曙]蟆 豢豌襴
[0122 蟲蟆曙]蟆 豢豌襴
KyeongWon Koo
Porting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp appPorting direct x 11 desktop game to uwp app
Porting direct x 11 desktop game to uwp app
YEONG-CHEON YOU
GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴
GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴
GPGPU(CUDA)襯 伎 MMOG 貂襴 豢豌襴
YEONG-CHEON YOU
10_Raytracing Introduction
10_Raytracing Introduction10_Raytracing Introduction
10_Raytracing Introduction
noerror
Hierarchical z buffer occlusion culling
Hierarchical z buffer occlusion cullingHierarchical z buffer occlusion culling
Hierarchical z buffer occlusion culling
Jaeyun Lee
DirectX + C++ 伎 WindowsStore App螻 Windows Phone 蟆 螳覦
DirectX + C++ 伎  WindowsStore App螻 Windows Phone 蟆 螳覦DirectX + C++ 伎  WindowsStore App螻 Windows Phone 蟆 螳覦
DirectX + C++ 伎 WindowsStore App螻 Windows Phone 蟆 螳覦
YEONG-CHEON YOU
[0602 覦覩手啓] Direct2D
[0602 覦覩手啓] Direct2D[0602 覦覩手啓] Direct2D
[0602 覦覩手啓] Direct2D
ル旭 豕
[る語ろ磯] 蠏朱 螻 伎
[る語ろ磯] 蠏朱  螻 伎[る語ろ磯] 蠏朱  螻 伎
[る語ろ磯] 蠏朱 螻 伎
Hyekyoung Yun
[NDC12] 蟆 覓朱Μ 讌 企 襴 危
[NDC12] 蟆 覓朱Μ 讌 企  襴 危[NDC12] 蟆 覓朱Μ 讌 企  襴 危
[NDC12] 蟆 覓朱Μ 讌 企 襴 危
譬觜
ろ語 蠍一豈襦 伎螳蠍
ろ語 蠍一豈襦 伎螳蠍ろ語 蠍一豈襦 伎螳蠍
ろ語 蠍一豈襦 伎螳蠍
Hyun-woo Park

Similar to Implements Cascaded Shadow Maps with using Texture Array (20)

鰻禽遺11喝狩企
鰻禽遺11喝狩企鰻禽遺11喝狩企
鰻禽遺11喝狩企
noerror
[14.10.21] Far Cry and DX9 覯(shaderstudy)
[14.10.21] Far Cry and DX9 覯(shaderstudy)[14.10.21] Far Cry and DX9 覯(shaderstudy)
[14.10.21] Far Cry and DX9 覯(shaderstudy)
矧願
[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...
[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...
[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...
譬觜
[0312 譟一] good bye dx9
[0312 譟一] good bye dx9[0312 譟一] good bye dx9
[0312 譟一] good bye dx9
讌 譟
Bs webgl覈002
Bs webgl覈002Bs webgl覈002
Bs webgl覈002
Seonki Paik
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
SangYun Yi
鰻禽遺11喝蟾仰煙騎繻狩企
鰻禽遺11喝蟾仰煙騎繻狩企鰻禽遺11喝蟾仰煙騎繻狩企
鰻禽遺11喝蟾仰煙騎繻狩企
Sungik Kim
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow Maps
Bongseok Cho
れ 焔 危危蠍
れ 焔 危危蠍れ 焔 危危蠍
れ 焔 危危蠍
Yongha Yoo
D2 Rain (1/2)
D2 Rain (1/2)D2 Rain (1/2)
D2 Rain (1/2)
Youpyo Choi
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
ozlael ozlael
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
ozlael ozlael
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)
覩殊
鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲
鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲
鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲
noerror
5-1. html5 graphics
5-1. html5 graphics5-1. html5 graphics
5-1. html5 graphics
JinKyoungHeo
NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一
NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一
NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一
Ki Hyunwoo
3ds maxscript 襴_20151206_讌
3ds maxscript 襴_20151206_讌3ds maxscript 襴_20151206_讌
3ds maxscript 襴_20151206_讌
JinTaek Seo
Javascript 譟郁 蠍
Javascript 譟郁   蠍Javascript 譟郁   蠍
Javascript 譟郁 蠍
jongho jeong
D2 Rain (2/2)
D2 Rain (2/2)D2 Rain (2/2)
D2 Rain (2/2)
Youpyo Choi
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
YEONG-CHEON YOU
鰻禽遺11喝狩企
鰻禽遺11喝狩企鰻禽遺11喝狩企
鰻禽遺11喝狩企
noerror
[14.10.21] Far Cry and DX9 覯(shaderstudy)
[14.10.21] Far Cry and DX9 覯(shaderstudy)[14.10.21] Far Cry and DX9 覯(shaderstudy)
[14.10.21] Far Cry and DX9 覯(shaderstudy)
矧願
[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...
[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...
[ShaderX5] 4.4 Edge Masking and Per-Texel Depth Extent Propagation For Comput...
譬觜
[0312 譟一] good bye dx9
[0312 譟一] good bye dx9[0312 譟一] good bye dx9
[0312 譟一] good bye dx9
讌 譟
Bs webgl覈002
Bs webgl覈002Bs webgl覈002
Bs webgl覈002
Seonki Paik
Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01Unity Surface Shader for Artist 01
Unity Surface Shader for Artist 01
SangYun Yi
鰻禽遺11喝蟾仰煙騎繻狩企
鰻禽遺11喝蟾仰煙騎繻狩企鰻禽遺11喝蟾仰煙騎繻狩企
鰻禽遺11喝蟾仰煙騎繻狩企
Sungik Kim
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow Maps
Bongseok Cho
れ 焔 危危蠍
れ 焔 危危蠍れ 焔 危危蠍
れ 焔 危危蠍
Yongha Yoo
D2 Rain (1/2)
D2 Rain (1/2)D2 Rain (1/2)
D2 Rain (1/2)
Youpyo Choi
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
ozlael ozlael
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
ozlael ozlael
Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)Light in screen_space(Light Pre Pass)
Light in screen_space(Light Pre Pass)
覩殊
鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲
鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲
鰻禽遺12喝晦看界一鉛艶壊壊蟆覯り仰蟲
noerror
5-1. html5 graphics
5-1. html5 graphics5-1. html5 graphics
5-1. html5 graphics
JinKyoungHeo
NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一
NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一
NDC2016 襦 A1 AAA蠍 貂襴 襷 蠍一
Ki Hyunwoo
3ds maxscript 襴_20151206_讌
3ds maxscript 襴_20151206_讌3ds maxscript 襴_20151206_讌
3ds maxscript 襴_20151206_讌
JinTaek Seo
Javascript 譟郁 蠍
Javascript 譟郁   蠍Javascript 譟郁   蠍
Javascript 譟郁 蠍
jongho jeong
D2 Rain (2/2)
D2 Rain (2/2)D2 Rain (2/2)
D2 Rain (2/2)
Youpyo Choi
Voxel based game_optimazation_relelase
Voxel based game_optimazation_relelaseVoxel based game_optimazation_relelase
Voxel based game_optimazation_relelase
YEONG-CHEON YOU

More from YEONG-CHEON YOU (17)

禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳
禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳
禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳
YEONG-CHEON YOU
CUDA Raytracing 伎 Voxelる 螳 ろ
CUDA Raytracing 伎 Voxelる 螳 ろCUDA Raytracing 伎 Voxelる 螳 ろ
CUDA Raytracing 伎 Voxelる 螳 ろ
YEONG-CHEON YOU
Visual Studio襯 伎 伎觚襴 part 2
Visual Studio襯 伎 伎觚襴  part 2Visual Studio襯 伎 伎觚襴  part 2
Visual Studio襯 伎 伎觚襴 part 2
YEONG-CHEON YOU
Visual Studio襯 伎 伎觚襴 part 1
Visual Studio襯 伎 伎觚襴  part 1Visual Studio襯 伎 伎觚襴  part 1
Visual Studio襯 伎 伎觚襴 part 1
YEONG-CHEON YOU
XDK XBOX蟆 螳覦蠍(UWP on XBOX)
XDK XBOX蟆 螳覦蠍(UWP on XBOX)XDK XBOX蟆 螳覦蠍(UWP on XBOX)
XDK XBOX蟆 螳覦蠍(UWP on XBOX)
YEONG-CHEON YOU
MMOG Server-Side 豢 覦 企豌襴 り 蟲
MMOG Server-Side 豢 覦 企豌襴 り 蟲MMOG Server-Side 豢 覦 企豌襴 り 蟲
MMOG Server-Side 豢 覦 企豌襴 り 蟲
YEONG-CHEON YOU
れ螳 蟆 覯 豕
れ螳 蟆 覯 豕 れ螳 蟆 覯 豕
れ螳 蟆 覯 豕
YEONG-CHEON YOU
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
YEONG-CHEON YOU
Sw occlusion culling
Sw occlusion cullingSw occlusion culling
Sw occlusion culling
YEONG-CHEON YOU
CUDA襯 蟆 襦語 蠍
CUDA襯 蟆 襦語 蠍CUDA襯 蟆 襦語 蠍
CUDA襯 蟆 襦語 蠍
YEONG-CHEON YOU
覯 企殊伎誤 螳 讌 蠍
覯 企殊伎誤 螳 讌 蠍覯 企殊伎誤 螳 讌 蠍
覯 企殊伎誤 螳 讌 蠍
YEONG-CHEON YOU
危 レ 螻糾覿 覦 る 貉襷 蠍磯
危 レ  螻糾覿 覦 る 貉襷 蠍磯危 レ  螻糾覿 覦 る 貉襷 蠍磯
危 レ 螻糾覿 覦 る 貉襷 蠍磯
YEONG-CHEON YOU
win32 app UWP API語蠍
win32 app UWP API語蠍win32 app UWP API語蠍
win32 app UWP API語蠍
YEONG-CHEON YOU
Azure襦 MMO蟆 觜ろ蠍
Azure襦 MMO蟆 觜ろ蠍Azure襦 MMO蟆 觜ろ蠍
Azure襦 MMO蟆 觜ろ蠍
YEONG-CHEON YOU
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
YEONG-CHEON YOU
觜蟯襴 覦 覯蟾 (2010 襭)
觜蟯襴 覦 覯蟾 (2010 襭)觜蟯襴 覦 覯蟾 (2010 襭)
觜蟯襴 覦 覯蟾 (2010 襭)
YEONG-CHEON YOU
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
YEONG-CHEON YOU
禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳
禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳
禽庄姻艶界岳皆岳姻看温乙艶競襦蠏碁覦螳
YEONG-CHEON YOU
CUDA Raytracing 伎 Voxelる 螳 ろ
CUDA Raytracing 伎 Voxelる 螳 ろCUDA Raytracing 伎 Voxelる 螳 ろ
CUDA Raytracing 伎 Voxelる 螳 ろ
YEONG-CHEON YOU
Visual Studio襯 伎 伎觚襴 part 2
Visual Studio襯 伎 伎觚襴  part 2Visual Studio襯 伎 伎觚襴  part 2
Visual Studio襯 伎 伎觚襴 part 2
YEONG-CHEON YOU
Visual Studio襯 伎 伎觚襴 part 1
Visual Studio襯 伎 伎觚襴  part 1Visual Studio襯 伎 伎觚襴  part 1
Visual Studio襯 伎 伎觚襴 part 1
YEONG-CHEON YOU
XDK XBOX蟆 螳覦蠍(UWP on XBOX)
XDK XBOX蟆 螳覦蠍(UWP on XBOX)XDK XBOX蟆 螳覦蠍(UWP on XBOX)
XDK XBOX蟆 螳覦蠍(UWP on XBOX)
YEONG-CHEON YOU
MMOG Server-Side 豢 覦 企豌襴 り 蟲
MMOG Server-Side 豢 覦 企豌襴 り 蟲MMOG Server-Side 豢 覦 企豌襴 り 蟲
MMOG Server-Side 豢 覦 企豌襴 り 蟲
YEONG-CHEON YOU
Voxelizaition with GPU
Voxelizaition with GPUVoxelizaition with GPU
Voxelizaition with GPU
YEONG-CHEON YOU
CUDA襯 蟆 襦語 蠍
CUDA襯 蟆 襦語 蠍CUDA襯 蟆 襦語 蠍
CUDA襯 蟆 襦語 蠍
YEONG-CHEON YOU
覯 企殊伎誤 螳 讌 蠍
覯 企殊伎誤 螳 讌 蠍覯 企殊伎誤 螳 讌 蠍
覯 企殊伎誤 螳 讌 蠍
YEONG-CHEON YOU
危 レ 螻糾覿 覦 る 貉襷 蠍磯
危 レ  螻糾覿 覦 る 貉襷 蠍磯危 レ  螻糾覿 覦 る 貉襷 蠍磯
危 レ 螻糾覿 覦 る 貉襷 蠍磯
YEONG-CHEON YOU
win32 app UWP API語蠍
win32 app UWP API語蠍win32 app UWP API語蠍
win32 app UWP API語蠍
YEONG-CHEON YOU
Azure襦 MMO蟆 觜ろ蠍
Azure襦 MMO蟆 觜ろ蠍Azure襦 MMO蟆 觜ろ蠍
Azure襦 MMO蟆 觜ろ蠍
YEONG-CHEON YOU
Development AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic APIDevelopment AR App with C++ and Windows Holographic API
Development AR App with C++ and Windows Holographic API
YEONG-CHEON YOU
觜蟯襴 覦 覯蟾 (2010 襭)
觜蟯襴 覦 覯蟾 (2010 襭)觜蟯襴 覦 覯蟾 (2010 襭)
觜蟯襴 覦 覯蟾 (2010 襭)
YEONG-CHEON YOU
Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2Tips and experience_of_dx12_engine_development._ver_1.2
Tips and experience_of_dx12_engine_development._ver_1.2
YEONG-CHEON YOU

Implements Cascaded Shadow Maps with using Texture Array

  • 1. Texture Array襯 伎 Cascaded Shadow Maps 豌 Microsoft Visual C++ MVP tw:@dgtman http://megayuchi.wordpress.com
  • 2. 螳 譴朱 螻 蠏碁殊 襷 蠍磯 蟲蠍 暑. Soft-shadow豌襴 暑. Shadow Maps
  • 3. 蟯(蠏碁殊襯 襴) 觀郁概螳 Shadow Caster螳 る碁(轟 豌) 襷 -> Depth Buffer(Texture)襯 蟲 蟲 Pass 0 , Shadow Caster
  • 4. 蟲 Pass 1 , Shadow Receiver 蟯(蠏碁殊襯 襴) View- Space襦 覲. -1 ~ 1伎 譬螻糾 0 1企 覲. 覲 (0 1) 譬襦 Depth Buffer襦覿 depth螳 襷 Receiver depth螳螻 Depth Buffer depth螳 觜蟲 receiver_z > depth_value -> 蠏碁殊螳 襴讌
  • 5. Shadow Map in Shadow Space On Rendering in Camera Space Shadow Map applied Shader Resource View Sampling z-value from Shadow Map Compare z-value and per pixel.
  • 6. Texture襦 螻糾 蠍一 伎螳 覿譟燕. Texture 伎襯 蟆? -> 讌レ, But 焔 , GPU覃覈襴 觜 PSM, TSM, LiPSM 焔 レ Texture襷 覃伎 豕 觜 蠍磯 煙 蠏碁 郁鍵 所 覓語螳
  • 7. Shadow Map 襷 レ Texture螳 レ Texture 蠏碁Μ. 觀壱ろ 螳 螻糾朱 殊 レ Shadow Map Texture襯 . 螳蟾 螻 襾 磯 Shadow Map 覦 譟一 螳. Shadow Map 伎 讀螳 磯ジ 觜螳 . Cascaded Shadow Maps
  • 8. eye Shadow Light Shadow Map Texture Size(Width x N , Height)
  • 9. Shadow Map朱 Texture 譴觜 N螳 Cascaded 螻襯 る Texture 伎 Width x N, Height Width x N 伎 レ Texture N螻 Shadow Map 願鍵 企. 襭襯 覃 0 ~ N-1螻蟾讌 Shadow Caster襯 襷. 觀壱 れ 覦蠖螳覃 レ Texture 覈 企. Shadow Receiver襯 襷 曙 企 Cascaded螻 れ願讌 谿場 tex譬 u焔 offset譟一 危 朱 Shadow Map螻 螳. 蟲
  • 10. Cascaded螻 磯 Draw Call螳 企. CPU 觜. 貊 覲旧″伎. 覦 覈 Cascaded 螻襯 豌襴 蟾? 螳螻 苦
  • 11. 襷 蠏碁襦 Texture覦一 覦一伎伎襷 Texture豌 る0 . SRV, RTV襦 螳. CPU豸 貊 API 覦覯 朱 Texture 螳. Texture襦覿 襷 譬 x,y,z焔譴 z焔 覦一伎 碁煙る Texture Array
  • 12. Texture2DArray texDiffuseArray: register(t0); SamplerState samplerDiffuse: register(s0); float4 psArrayDiffuse(PS_INPUT input) : SV_Target { float3 texCoord = float3(input.TexCoord.xy,TexArrayIndex); float4 texColor = texDiffuseArray.Sample(samplerDiffuse, texCoord); float4 outColor = texColor; return outColor; } Using Texture Array as SRV
  • 13. Using Texture Array as RTV struct PS_OUT_TEX_ARRAY { float4 Pos : SV_POSITION; uint RTIndex : SV_RenderTargetArrayIndex; }; [maxvertexcount(3)] void gsDefault ( triangle GS_INPUT input[3], inout TriangleStream<PS_OUT_TEX_ARRAY> TriStream ) { PS_OUT_TEX_ARRAY output; for (uint i=0; i<3; i++) { output.Pos = mul(input[i].PosWorld,matViewProjList[i]); output.RTIndex = N; TriStream.Append(output[j]); } TriStream.RestartStrip(); }
  • 14. N螳 Cascaded螻螳 伎 Width , Height 覦一伎 N螳 Texture 朱 Texture 襷谿螳讌襦 RTV SRV Shader 企 Cascaded 螻 讌 螻壱螻 蠏 碁煙 螳 れ 譬 z焔朱 Texture Arrary襯 Shadow Maps
  • 15. UINT Width = DEFAULT_SHADOW_MAP_WIDTH; UINT Height = DEFAULT_SHADOW_MAP_HEIGHT; UINT ArrayCount = MAX_CASCADE_NUM; D3D11_TEXTURE2D_DESC texDesc = { Width, Height, 1, ArrayCount, DXGI_FORMAT_R32_TYPELESS, 1, 0, D3D11_USAGE_DEFAULT, D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE, 0, 0 }; D3D11_DEPTH_STENCIL_VIEW_DESC dsvDesc = { DXGI_FORMAT_D32_FLOAT, D3D11_DSV_DIMENSION_TEXTURE2DARRAY, 0 }; dsvDesc.Texture2DArray.FirstArraySlice = 0; dsvDesc.Texture2DArray.ArraySize = ArrayCount; dsvDesc.Texture2DArray.MipSlice = 0; D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc = { DXGI_FORMAT_R32_FLOAT, D3D11_SRV_DIMENSION_TEXTURE2DARRAY, 0, 0 }; srvDesc.Texture2DArray.FirstArraySlice = 0; srvDesc.Texture2DArray.ArraySize = ArrayCount; srvDesc.Texture2DArray.MipLevels = 1; srvDesc.Texture2DArray.MostDetailedMip = 0; ID3D11Texture2D* pTex = nullptr; HRESULT hr = m_pD3DDevice->CreateTexture2D(&texDesc, NULL, &pTex); if (FAILED(hr)) __debugbreak(); hr = m_pD3DDevice->CreateDepthStencilView(pTex, &dsvDesc, &m_pShadowMapDSV); if (FAILED(hr)) __debugbreak(); hr = m_pD3DDevice->CreateShaderResourceView(pTex, &srvDesc, &m_pShadowMapSRV); if (FAILED(hr)) __debugbreak(); pTex->Release(); Creating SRV,DSV from Texture Array
  • 16. Texture Texture Array // set matrix for shadow-space, SetCascadedLightSpaceAll(N); // Draw shadow casters to Depth Buffer DrawShadowCasters(); for (DWORD i=0; i<N; i++) { // set matrix for shadow-space, SetCascadedLightSpace(i); // Draw shadow casters to Depth Buffer DrawShadowCasters(); } CPU Code Shadow Caster 襷 觜蟲
  • 17. cbuffer ConstantBufferShadowMap : register( b0 ) { matrix matWorld; matrix matViewList[MAX_CASCADE_NUM]; matrix matProjList[MAX_CASCADE_NUM]; } struct PS_OUT_TEX_ARRAY { float4 Pos : SV_POSITION; uint RTIndex : SV_RenderTargetArrayIndex; }; struct GS_INPUT { float4 PosWorld: POSITION; }; Shader Code Pass 0 , Shadow Caster
  • 18. float4 vsShadowCaster( VS_INPUT_VL input ) : POSITION { float4 PosWorld = mul( input.Pos, matWorld ); return PosWorld; } [maxvertexcount(3*MAX_CASCADE_NUM)] void gsShadowCaster( triangle GS_INPUT input[3], inout TriangleStream<PS_OUT_TEX_ARRAY> TriStream ) { PS_OUT_TEX_ARRAY output[3]; for (uint i=0; i<MAX_CASCADE_NUM; i++ ) { for (uint j=0; j<3; j++) { float4 PosView = mul(input[j].PosWorld,matViewList[i]); PosView.z += 2.5f; // bias value output[j].Pos = mul(PosView,matProjList[i]); output[j].RTIndex = i; TriStream.Append(output[j]); } TriStream.RestartStrip(); } } Shader Code Pass 0 , Shadow Caster
  • 19. cbuffer ConstantBufferGBufferShader : register (b0) { matrix ViewInv; matrix matShadowViewProjCascade[MAX_CASCADE_NUM]; CASCADE_CONSTNAT CascadeConst[MAX_CASCADE_NUM]; }; Texture2DArray texShadowMap: register(t2); SamplerComparisonState samplerComp : register(s2); void CalcIndex(out float OutIndex, in float Dist) { uint index = MAX_CASCADE_NUM - 1; for (uint i = 0; i < MAX_CASCADE_NUM; i++) { if (Dist <= CascadeConst[i].Dist) { index = i; break; } } OutIndex = index; } Shader Code Pass 1 , Shadow Receiver
  • 20. float3 CalcShadowColor3x3(Texture2DArray texShadowMap, SamplerComparisonState samplerComp, float4 PosWorld, float Dist) { float3 shadowColor = float3(1, 1, 1); uint index; CalcIndex(index, Dist); float4 PosShadowSpace = mul(PosWorld, matShadowViewProjCascade[index]); float4 texCoord = PosShadowSpace / PosShadowSpace.w; float cmp_z = texCoord.z; float litSum = 0; int2 offset[9] = {-1,-1, 0,-1, 1,-1, -1,0, 0,0, 1,0, -1,1, 0,1, 1,1 }; for (int i = 0; i < 9; i++) { litSum += texShadowMap.SampleCmpLevelZero(samplerComp, float3(texCoord.xy,index), cmp_z, offset[i]); } float shadowValue = litSum / 9.0f; shadowColor = lerp(float3(0,0,0), float3(1, 1, 1), shadowValue); return shadowColor; } Shader Code Pass 1 , Shadow Receiver
  • 21. Draw Call 譴 . CPU豸 覲覈 譴 貊螳 覲企 螳蟆壱伎. Texture Array レ
  • 22. 螳螳 Light View Space ろ culling ろ culling 襾殊 Constant Buffer襯 牛 bit flags襦 . Geometry Shader 0,1,2,3 螳 觜碁ゼ 豌危覃 0 N蟾讌 Cascaded螻 讌襯 蟆. 觜瑚 0企 蠏碁襦 蠍. GPU 企Μ 企伎覩襦 CPU豸′ 覲 Culling 螳 螳覃 蟲褐 螳 讌???? 豢螳 豕