Virtual Shadow Map(VSM)์€ ์–ธ๋ฆฌ์–ผ ์—”์ง„ 5์—์„œ ๋„์ž…๋œ ์ƒˆ๋กœ์šด ๊ทธ๋ฆผ์ž ๋ Œ๋”๋ง ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

๊ธฐ์กด์˜ ์ „ํ†ต์ ์ธ Cascaded Shadow Map ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ, ํ™”๋ฉด์— ๋…ธ์ถœ๋˜๋Š” ์˜์—ญ๋งŒ ๊ณ ํ•ด์ƒ๋„๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ๋†’์€ ๋””ํ…Œ์ผ์˜ ๊ทธ๋ฆผ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์„œ๋Š” VSM์˜ ํŠน์„ฑ๊ณผ ์‹ค๋ฌด์—์„œ ๋งˆ์ฃผ์น˜๋Š” ๋ฌธ์ œ๋“ค์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

Virtual Shadow Map์˜ ์ž‘๋™ ์›๋ฆฌ

Virtual Shadow Map์€ ์ดˆ๋Œ€ํ˜• ๋Ÿฐํƒ€์ž„ ๋ฒ„์ถ”์–ผ ํ…์Šค์ฒ˜๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ™”๋ฉด์—์„œ ๊ฐ ์˜์—ญ์ด ์ฐจ์ง€ํ•˜๋Š” ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๋‹ค๋ฅธ ํ•ด์ƒ๋„๋กœ ๋ Œ๋”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์นด๋ฉ”๋ผ์— ๊ฐ€๊นŒ์šด ์˜์—ญ์€ ๋†’์€ ํ•ด์ƒ๋„๋กœ, ๋จผ ์˜์—ญ์€ ๋‚ฎ์€ ํ•ด์ƒ๋„๋กœ ๊ทธ๋ฆผ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๋ฉด์„œ๋„ ํ•„์š”ํ•œ ๊ณณ์— ๋†’์€ ํ’ˆ์งˆ์˜ ๊ทธ๋ฆผ์ž๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Nanite Geometry์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.

Soft Shadow ํ‘œํ˜„์˜ ํ•œ๊ณ„์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

Virtual Shadow Map์€ ํ•˜๋“œํ•˜๊ฑฐ๋‚˜ ์„ธ๋ฏธ-ํ•˜๋“œํ•œ ์กฐ๋ช… ํ™˜๊ฒฝ์—๋Š” ์ ํ•ฉํ•˜์ง€๋งŒ, ์†Œํ”„ํŠธํ•œ ์กฐ๋ช… ํ™˜๊ฒฝ์—์„œ๋Š” ํ‘œํ˜„์— ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Lumen๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๊ทธ๋ฆผ์ž์˜ ๋ฐ˜์Œ์˜(penumbra) ํ‘œํ˜„์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

์†Œํ”„ํŠธ ์„€๋„์šฐ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

๋ถ€๋“œ๋Ÿฌ์šด ๊ทธ๋ฆผ์ž ํšจ๊ณผ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์ด Ray-Traced Shadow๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Local Light์˜ ๋””ํ…Œ์ผ ํŒจ๋„์—์„œ Cast Raytraced Shadow๋ฅผ Enable๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Raytracing Samples ๊ฐ’์„ 1~4 ์‚ฌ์ด๋กœ ์„ค์ •ํ•˜๋ฉด ๊ทธ๋ฆผ์ž ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ๊ทธ๋ฆผ์ž๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Warning

Ray-Traced Shadow๋Š” ๊ทธ๋ฆผ์ž์˜ ๋‹ค์ด๋‚˜๋ฏน ๋ ˆ์ธ์ง€๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ๋ Œ๋”๋ง ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Trouble Shooting

Nanite Geometry ๊ด€๋ จ Issue

์–ผ๋ฃฉ๋œ๋ฃฉํ•œ ๊ทธ๋ฆผ์ž ์ œ๊ฑฐ

์ด ์˜ต์…˜์€ Nanite ๋ฉ”์‹œ์˜ ๋ ˆ์ด ํŠธ๋ ˆ์ด์‹ฑ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

r.RayTracing.Nanite.Mode 1

Nanite ๋ฉ”์‹œ์—์„œ Ray Tracing๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์–ผ๋ฃฉ๋œ๋ฃฉํ•œ ๊ทธ๋ฆผ์ž ๋ Œ๋”๋ง ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Two-Sided Geometry ๊ทธ๋ฆผ์ž ๋ฌธ์ œ

์–‘๋ฉด ๋ฉ”์‹œ์—์„œ ๊ทธ๋ฆผ์ž ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ

r.Raytracing.Shadows.EnableTwoSidedGeometry 0

์–‘๋ฉด ๊ทธ๋ฆผ์ž ๊ณ„์‚ฐ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

Foliage ๊ด€๋ จ ์ด์Šˆ

Non-Nanite ํด๋ฆฌ์ง€ ๊ทธ๋ฆผ์ž ํ’ˆ์งˆ ํ–ฅ์ƒ

r.Shadow.Virtual.NonNanite.IncludeInCoarsePages 0

Coarse Page ํฌํ•จ์„ ์ œ๊ฑฐํ•ด ๋ถˆํ•„์š”ํ•œ ํ•ด์ƒ๋„ ๋‚ญ๋น„๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆผ์ž ๊ฑฐ๋ฆฌ ํ™•์žฅ

ํด๋ฆฌ์ง€ ๊ทธ๋ฆผ์ž์˜ ์œ ์ง€ ๊ฑฐ๋ฆฌ๋ฅผ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 5๋กœ ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์—์„œ 5๋ฐฐ ๋” ๋จผ ๊ฑฐ๋ฆฌ๊นŒ์ง€ ๊ทธ๋ฆผ์ž๊ฐ€ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

foliage.LODDistanceScale 5

๋‹จ, Draw Call ์ฆ๊ฐ€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•

๋ทฐํฌํŠธ ๋ฉ”๋‰ด์—์„œ ํ‘œ์‹œ(Show) โ†’ Virtual Shadow Maps โ†’ Cached Pages๋ฅผ ์„ ํƒํ•˜๋ฉด VSM์˜ ์บ์‹œ ์ƒํƒœ๋ฅผ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ”ด ๋นจ๊ฐ•์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ์˜์—ญ: ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋˜๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ์›”๋“œ ํฌ์ง€์…˜ ์˜คํ”„์…‹์ด ์ ์šฉ๋œ ํด๋ฆฌ์ง€๊ฐ€ ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ๐ŸŸข ๋…น์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ์˜์—ญ: ์บ์‹œ๊ฐ€ ์œ ํšจํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค.

Virtual Shadow Map ๊ฑฐ๋ฆฌ ๋ฐ ํ’ˆ์งˆ ๊ฐœ์„ 

Contact Shadow ๊ธธ์ด ์กฐ์ •

์—”์ง„ ๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ฝ˜์†” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

5.0~5.1 ๋ฒ„์ „:

r.Shadow.Virtual.ContactShadowLength 0.01

(๊ธฐ๋ณธ๊ฐ’: 0.02)

5.3 ์ด์ƒ ๋ฒ„์ „:

r.Shadow.RadiusThreshold 0.01

(๊ธฐ๋ณธ๊ฐ’: 0.03)

๊ฐ’์„ ์ค„์ด๋ฉด ์ž‘์€ ์˜ค๋ธŒ์ ํŠธ์˜ ๊ทธ๋ฆผ์ž ์œ ์ง€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค.

Shadow Culling ๋น„ํ™œ์„ฑํ™”

์—”์ง„์—์„œ ์ž๋™์œผ๋กœ ์ ์šฉ๋˜๋Š” Shadow Culling ์ตœ์ ํ™”๋ฅผ ์™„์ „ํžˆ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์—”์ง„์—์„œ ๋‹ค๋ฃจ๋Š” ๊ทธ๋ฆผ์ž ์œ ์ง€ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ์— ๊ด€ํ•œ ์ œํ•œ์ด ํ•ด์ œ๋˜์ง€๋งŒ, ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

r.RayTracing.Culling 0

Virtual Shadow Map Bug ์ˆ˜์ •

Fix Shadow Bugs

r.Shadow.Virtual.MaxPhysicalPages=8192
r.Shadow.Virtual.ResolutionLodBiasLocal -2
r.Shadow.Virtual.OnePassProjection.MaxLightsPerPixel 32

์ฐธ๊ณ ์ž๋ฃŒ: Fixing virtual shadow bugs in Unreal Engine 5 and Lumen

์ตœ์ข… ๋ Œ๋”๋ง ํ’ˆ์งˆ ํ–ฅ์ƒ

Directional Light ๊ทธ๋ฆผ์ž ํ’ˆ์งˆ

๋””๋ ‰์…”๋„ ๋ผ์ดํŠธ์˜ ๊ทธ๋ฆผ์ž ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. SMRT(Shadow Map Raytracing)์˜ ๋ ˆ์ด ๊ฐœ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ๋” ๋ถ€๋“œ๋Ÿฝ๊ณ  ์ •ํ™•ํ•œ ๊ทธ๋ฆผ์ž๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

r.Shadow.Virtual.SMRT.RaycountDirectional 4

๋ฌด๋น„ ๋ Œ๋” ํ์—์„œ์˜ ๋…ธ์ด์ฆˆ ๋ฌธ์ œ

Virtual Shadow Map ๋˜๋Š” Ray-Traced Shadow ์‚ฌ์šฉ ์‹œ ๋ฌด๋น„ ๋ Œ๋” ํ์—์„œ ๋…ธ์ด์ฆˆ๊ฐ€ ์ฆํญ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ฌด๋น„ ๋ Œ๋” ํ ์„ค์ •์—์„œ ์•ˆํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ ํ•ญ๋ชฉ์„ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • Temporal AA (TAA): ํ‘œ์ค€ ์‹œ๊ฐ„์  ์•ˆํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ
  • Temporal Super-Resolution (TSR): ๋” ๋†’์€ ํ’ˆ์งˆ์˜ ์—…์Šค์ผ€์ผ๋ง๊ณผ ์•ˆํ‹ฐ ์•จ๋ฆฌ์–ด์‹ฑ์„ ์ œ๊ณตํ•˜๋Š” UE5์˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ 

TSR์€ TAA๋ณด๋‹ค ๋” ์„ ๋ช…ํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ์ตœ์ข… ๋ Œ๋”๋ง์—์„œ๋Š” TSR ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.


์ฐธ๊ณ ์ž๋ฃŒ -ย Virtual Shadow Maps