V3,9.0-Alpha
๐ 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 (ํ์ค) |
|---|---|
![]() |
![]() |
| ACES_FILMIC_HILL | ACES_FILMIC_NARKOWICZ |
![]() |
![]() |
ABeautifulGame._.RedGPU.-.Chrome.2026-01-14.20-12-49.mp4
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 - Glass Vase with Flowers
โ ๏ธ Alpha ๋ฒ์ ์ฃผ์ ์ฌํญ ๋ฐ ํฅํ ๊ณํ
์ด๋ฒ V3.9.0-Alpha ๋ฒ์ ์ ์๊ฐ์ ํ์ง ํฅ์์ ์ํด ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ํต์ฌ ๊ตฌ์กฐ๋ฅผ ๋ํญ ๋ณ๊ฒฝํ์์ต๋๋ค. ์ด์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฐธ๊ณ ์ฌํญ์ด ์์ต๋๋ค.
1. ์๊ณต๊ฐ ํ์ฅ ๋ฐ ์ ๋ฐ๋ ๊ด๋ จ ์ด์
- ๋ณตํฉ ์ฌ์ง์์์ ์ํฐํฉํธ: ํฌ๋ช ๋(Transmission)๋ ๊ตด์ ์ด ํฌํจ๋ ๋ณต์กํ ์ฌ์ง์์ ํน์ ๊ฐ๋๋ ์กฐ๋ช ๊ฐ์ ๋ฐ๋ผ ํฝ์ ๋ ธ์ด์ฆ๊ฐ ๊ด์ฐฐ๋ ์ ์์ผ๋ฉฐ, ์ด๋ ํ์ฌ ์ต์ ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐ ์ค์ ๋๋ค.
- ํ๋์จ์ด๋ณ ํธ์ฐจ: WebGPU๋ฅผ ์ง์ํ๋ ํ๋์จ์ด ์ ์กฐ์ฌ ๋ฐ ๋๋ผ์ด๋ฒ ๋ฒ์ ์ ๋ฐ๋ผ ์์ ์ ๋ฐ๋ ํํ์ด ๋ฏธ์ธํ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค.



