
Ostatnio zastnawiałem się czy w przypadku silnika 3D model HSL nie sprawdziłby się lepiej niż RGB. Przecież to czysty zysk!
- realizacja wielu efektów graficznych w HSL jest o niebo prostsza. Zmiana kolorów (chociażby efekt sepii)?
- można zrealizować fajne systemy cząsteczkowe wykorzystujące HSL do różnicowania poszczególnych cząsteczek (np. małe odchylenia od barwy)
- a przede wszystkim, w HSL można bardzo tanio zrealizować HDR!
Warstwa barwy (Hue) nie potrzebuje dokładności większej niż 8 bitów. Warstwę nasycenia można zreduować z 256 do 32 kolorów bez zauważalnej straty jakości (5 bitów). Pozostałe 3 bity możemy przeznaczyć na kanał jasności, który w HDR ma kluczowe znaczenie. Możemy ewentualnie zrezygnować z kanału alfa (albo zmniejszyć jego dokładność) tym samym jeszcze zwiększając precyzję jasności.
Koszta przygotowań: niewielkie. Wszystkie tekstury trzeba przekonwertować z RGB do HSL (np. przed spakowaniem ich do VFS). Co z modelem oświetlenia? Nasz stary dobry NdotL zostaje bez zmian. Jedyna różnica jest we wpływie światła na barwę i nasycenie. Kwestia dobrania dobrego wzoru*. No i na koniec końcową scenę trzeba potraktować pixel shaderem, który przekonwertuje nam obraz z HSL do RGB. Nie jest on trywialny, fakt, ale dla dzisiejszych kart nie jest też jakimś problemem.
PS. Obrazek pochodzi z gry GRID. Od kilku dni gram w demo i mam ochotę kupić nie tylko pełną wersję, ale i jakąś wypasioną kierownicę do komputera. :P
* PS2. OK, magic works here. Trzeba by się nad tym zastanowić. Ale ponownie, wydaje mi się, że daje to większe możliwości niż banalne materialRGB * lightRGB.
Comments:
-
Reg:
Ale w takiej przestrzeni kolorystycznej nie zrobisz blendingu, np. dla cząsteczek.
28.12.2008 14:43:51