Skip to content

V3,9.0-Alpha

Choose a tag to compare

@redcamel redcamel released this 14 Jan 11:46
· 1758 commits to master since this release

๐Ÿš€ RedGPU V3.9.0-Alpha Release Notes

์ด๋ฒˆ V3.9.0-Alpha ์—…๋ฐ์ดํŠธ์—์„œ๋Š” ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๋ฌผ์˜ ์‹œ๊ฐ์  ์™„์„ฑ๋„๋ฅผ ๊ฒฐ์ •์ง“๋Š” ํ†ค ๋งคํ•‘(Tone Mapping) ์‹œ์Šคํ…œ์ด ๊ณต์‹ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๊ณ ํ•ด์ƒ๋„ HDR ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์ค€ ๋””์Šคํ”Œ๋ ˆ์ด์— ๋งž์ถฐ ์ตœ์ ํ™”ํ•˜๊ณ , ๋…ธ์ถœ ๋ฐ ๋Œ€๋น„ ๋“ฑ์„ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ToneMappingManager๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๐ŸŒŸ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ

1. ToneMappingManager๋ฅผ ํ†ตํ•œ ์†์‰ฌ์šด ๊ด€๋ฆฌ

(View instance).toneMappingManager๋ฅผ ํ†ตํ•ด ์”ฌ์˜ ์ตœ์ข… ๋ฃฉ(Look)์„ ์ง๊ด€์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์—…๊ณ„ ํ‘œ์ค€์ธ Khronos PBR Neutral์„ ํฌํ•จํ•œ 4๊ฐ€์ง€ ํ•ต์‹ฌ ๋ชจ๋“œ๋ฅผ ๊ธฐ๋ณธ ์ œ๊ณตํ•˜์—ฌ, ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์ˆ˜์ •๋งŒ์œผ๋กœ๋„ ํ”„๋กœ์ ํŠธ์— ์ตœ์ ํ™”๋œ ์‹œ๊ฐ์  ๊ฒฐ๊ณผ๋ฌผ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๋ชจ๋“œ (TONE_MAPPING_MODE)

๊ฐ ๋ชจ๋“œ๋Š” HDR ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋ฏ€๋กœ, ํ”„๋กœ์ ํŠธ์˜ ์˜๋„์— ๋งž๋Š” ๋ชจ๋“œ๋ฅผ ์„ ํƒํ•˜์„ธ์š”.

LINEAR (์›๋ณธ) KHRONOS_PBR_NEUTRAL (ํ‘œ์ค€)
Linear Mode Khronos Mode
ACES_FILMIC_HILL ACES_FILMIC_NARKOWICZ
ACES Hill ACES Narkowicz
ABeautifulGame._.RedGPU.-.Chrome.2026-01-14.20-12-49.mp4

live - ABeautifulGame


  • KHRONOS_PBR_NEUTRAL (Default): ์ƒ‰์ƒ ์™œ๊ณก์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ํ•˜์ด๋ผ์ดํŠธ์˜ ์„ธ๋ฐ€ํ•œ ๋””ํ…Œ์ผ์„ ๋ณด์กดํ•ด ์ฃผ๋Š” ์ตœ์‹  ํ‘œ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
  • ACES_FILMIC_HILL: ACES ํ‘œ์ค€์˜ Hill ๊ทผ์‚ฌ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ’๋ถ€ํ•œ ๊ณ„์กฐ์™€ ํ•จ๊ป˜ ๋ถ€๋“œ๋Ÿฝ๊ณ  ๊ณ ๊ธ‰์Šค๋Ÿฌ์šด ์‹œ๋„ค๋งˆํ‹ฑ ๊ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ACES_FILMIC_NARKOWICZ: ์—…๊ณ„์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ACES ๊ทผ์‚ฌ์‹์œผ๋กœ, ๊ฐ•๋ ฌํ•œ ๋Œ€๋น„์™€ ์„ธ๋ จ๋œ ์˜ํ™”์  ์งˆ๊ฐ์„ ์ฆ‰๊ฐ์ ์œผ๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • LINEAR: ์–ด๋– ํ•œ ํ†ค ๋ณด์ •๋„ ๊ฑฐ์น˜์ง€ ์•Š์€ ์›๋ณธ ๋ Œ๋”๋ง ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ธฐ๋ณธ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค.

2. ํ†ตํ•ฉ ์ด๋ฏธ์ง€ ์ œ์–ด ๊ธฐ๋Šฅ

ํ†ค ๋งคํ•‘ ๋ชจ๋“œ์™€ ํ•จ๊ป˜ ๋‹ค์Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด์˜ ํ†ค์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ๋…ธ์ถœ (exposure): ์”ฌ์˜ ์ „์ฒด์ ์ธ ๋น›์˜ ์„ธ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค (0 ์ด์ƒ์˜ ๊ฐ’).
  • ๋Œ€๋น„ (contrast): ๋ช…์•” ์ฐจ์ด๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์„ ๋ช…๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค (0 ~ 2 ๋ฒ”์œ„).
  • ๋ฐ๊ธฐ (brightness): ์ตœ์ข… ์ถœ๋ ฅ์˜ ๋ฐ๊ธฐ๋ฅผ ๋ฏธ์„ธ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค (-1 ~ 1 ๋ฒ”์œ„).

๐Ÿ›  ์‚ฌ์šฉ ๋ฐฉ๋ฒ• (Example)

View3D์˜ toneMappingManager๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์„ค์ •์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ํ†ค ๋งคํ•‘ ๋ชจ๋“œ ๋ณ€๊ฒฝ
view.toneMappingManager.mode = TONE_MAPPING_MODE.KHRONOS_PBR_NEUTRAL;

// ์ด๋ฏธ์ง€ ์„ธ๋ถ€ ์กฐ์ •
view.toneMappingManager.exposure = 1.2;
view.toneMappingManager.contrast = 1.1;
view.toneMappingManager.brightness = 0.05;

2. ๋ Œ๋” ํƒ€๊ฒŸ ๋ฐ ์กฐ๋ช… ์‹œ์Šคํ…œ ๊ณ ๋„ํ™” ๐Ÿš€

ํ†ค ๋งคํ•‘์˜ ํšจ๊ณผ๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ํ•˜๋“œ์›จ์–ด ์ˆ˜์ค€์—์„œ ์ •ํ™•ํ•œ ์ƒ‰์ƒ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ํฌ๋งท๊ณผ ์กฐ๋ช… ํŒŒ์ดํ”„๋ผ์ธ์ด ๋Œ€ํญ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ’Ž RGBA16Float ๋ Œ๋” ํƒ€๊ฒŸ
    ๋‚ด๋ถ€ ๋ Œ๋” ํƒ€๊ฒŸ์˜ ํฌ๋งท์ด ๊ธฐ์กด 8๋น„ํŠธ ๊ตฌ์กฐ์—์„œ RGBA16Float๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ฐ€๋„๊ฐ€ ๋‚ฎ์€ ๊ธฐ์กด ํฌ๋งท ๋Œ€๋น„ ํ›จ์”ฌ ๋” ๋„“์€ ๋ฒ”์œ„์˜ ๋ฐ๊ธฐ์™€ ์ƒ‰์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด ์ƒ‰์ƒ ์†์‹ค(Color Crushing) ๊ณผ ๋ฐด๋”ฉ ํ˜„์ƒ(Banding) ์ด ํš๊ธฐ์ ์œผ๋กœ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ๐ŸŒˆ Bitmap ํ…์Šค์ฒ˜ sRGB ํฌ๋งท ์ ์šฉ
    ๊ธฐ๋ณธ ๋น„ํŠธ๋งต ์ด๋ฏธ์ง€๋“ค์˜ GPUTextureFormat์ด ๊ธฐ์กด navigator.gpu.getPreferredCanvasFormat()์—์„œ ${navigator.gpu.getPreferredCanvasFormat()}-srgb๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ๋งˆ ๋ณด์ •์ด ์ ์šฉ๋œ sRGB ํ…์Šค์ฒ˜๋ฅผ GPU ํ•˜๋“œ์›จ์–ด ๋ ˆ๋ฒจ์—์„œ ์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋”์šฑ ์ผ๊ด€๋œ ์ƒ‰๊ฐ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๐Ÿ’ก IBL ์‹œ์Šคํ…œ ๊ณ ๋„ํ™” (Prefiltered LUT ์ ์šฉ)
    ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ์กฐ๋ช…(IBL) ์ฒ˜๋ฆฌ๊ฐ€ ๋”์šฑ ์ •๊ตํ•ด์กŒ์Šต๋‹ˆ๋‹ค. iblTexture๊ฐ€ ๋‹จ์ˆœ ํ™˜๊ฒฝ ๋งต ๋ฐฉ์‹์—์„œ ํ”„๋ฆฌํ•„ํ„ฐ๋“œ ๋ฃฉ์—… ํ…Œ์ด๋ธ”(Prefiltered Look-Up Table) ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์žฌ์งˆ์˜ ๊ฑฐ์น ๊ธฐ(Roughness) ์— ๋”ฐ๋ผ ๋น›์ด ๋ฐ˜์‚ฌ๋˜๋Š” ๋ฌผ๋ฆฌ ํ˜„์ƒ์„ ์ •ํ™•ํ•˜๊ฒŒ ์žฌํ˜„ํ•˜๋ฉฐ, ํŠนํžˆ ๊ธˆ์† ์žฌ์งˆ์—์„œ ๋”์šฑ ๊นŠ์ด ์žˆ๊ณ  ์‚ฌ์‹ค์ ์ธ ๊ด‘ํƒ์„ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š ์ฃผ์š” ๋ฐ์ดํ„ฐ ํฌ๋งท ๋ณ€ํ™” ์š”์•ฝ

ํ•ญ๋ชฉ ๊ธฐ์กด (Previous) ๋ณ€๊ฒฝ (New)
๋ Œ๋” ํƒ€๊ฒŸ ํฌ๋งท 8-bit (RGBA8Unorm) 16-bit (RGBA16Float)
๋น„ํŠธ๋งต ํ…์Šค์ฒ˜ Canvas Format ๊ธฐ๋ฐ˜ sRGB ํ•˜๋“œ์›จ์–ด ๋ณด์ • ์ ์šฉ
IBL ๊ด‘ํƒ ์ฒ˜๋ฆฌ ๋‹จ์ˆœ ํ™˜๊ฒฝ ๋งต ์ฐธ์กฐ Prefiltered LUT ๊ธฐ๋ฐ˜ ๋ฐ˜์‚ฌ

3. Rendering Showcase

live - compareMetallic

image

live - compareRoughness

image

live

image

live - iridescenceLamp

image

live - Glass Vase with Flowers

image

live - transmissionTest

image

live - dragonAttenuation

image

โš ๏ธ Alpha ๋ฒ„์ „ ์ฃผ์˜ ์‚ฌํ•ญ ๋ฐ ํ–ฅํ›„ ๊ณ„ํš

์ด๋ฒˆ V3.9.0-Alpha ๋ฒ„์ „์€ ์‹œ๊ฐ์  ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ๋ฅผ ๋Œ€ํญ ๋ณ€๊ฒฝํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์  ์ฐธ๊ณ  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ƒ‰๊ณต๊ฐ„ ํ™•์žฅ ๋ฐ ์ •๋ฐ€๋„ ๊ด€๋ จ ์ด์Šˆ

  • ๋ณตํ•ฉ ์žฌ์งˆ์—์„œ์˜ ์•„ํ‹ฐํŒฉํŠธ: ํˆฌ๋ช…๋„(Transmission)๋‚˜ ๊ตด์ ˆ์ด ํฌํ•จ๋œ ๋ณต์žกํ•œ ์žฌ์งˆ์—์„œ ํŠน์ • ๊ฐ๋„๋‚˜ ์กฐ๋ช… ๊ฐ’์— ๋”ฐ๋ผ ํ”ฝ์…€ ๋…ธ์ด์ฆˆ๊ฐ€ ๊ด€์ฐฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ˜„์žฌ ์ตœ์ ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋“œ์›จ์–ด๋ณ„ ํŽธ์ฐจ: WebGPU๋ฅผ ์ง€์›ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด ์ œ์กฐ์‚ฌ ๋ฐ ๋“œ๋ผ์ด๋ฒ„ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ƒ‰์ƒ ์ •๋ฐ€๋„ ํ‘œํ˜„์ด ๋ฏธ์„ธํ•˜๊ฒŒ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.