SPIS TREŚCI:
Wygląd tekstury na powierzchni obiektu to nie tylko kwestia kolorów. Na jego powierzchnię wpływa także materiał i powiązany z nim shader. Materiał to całokształt atrybutów, które określają sposób reagowania na światło (cieniowanie – shading). Składowe materiału to shadery, czyli zestawy instrukcji, które możemy łączyć w rozbudowane drzewa atrybutów.
Shader
Za nim tekstura zostanie wyświetlona na obiekcie musimy poinstruować program o tym, w jaki sposób powierzchnia obiektu powinna reagować na to, co go otacza. Czy obiekt ma rozpraszać, odbijać czy absorbować światło; a może ma być przezroczysty i załamywać promienie jak szkło? Atrybutów jest bardzo dużo i są powiązane z konkretnymi typami shaderów – przykładowo shader odpowiedzialny za szkło, za skórę itd. (trudno oddzielić cieniowanie od teksturowania chociażby dlatego, że tekstury podpinamy do shaderów, a te, są elementami danego materiału).
W przyrodzie stykamy się z różnymi materiałami, dlatego istnieje konieczność posługiwania się ogromną liczbą atrybutów, które pomagają odwzorować tą różnorodność. W ten sposób biblioteka shaderów zaczęła rosnąć. Pojawiły się shadery wykorzystywane w bardzo rzadkich sytuacjach oraz o szerokim spektrum zastosowania. Shadery są także „pisane” na zmówienie – pod konkretne zastosowanie – jest to programowanie shaderów, czyli pole popisu dla programistów interesujących się grafiką.
Mapowanie atrybutów
Atrybuty shaderów są zazwyczaj wyrażane przez wartości liczbowe, krzywe lub kolory RGB. Często jednak, te same atrybuty możemy kontrolować dzięki teksturze, jest to tzw. mapowanie atrybutów. W ten sposób dany atrybut wpływa na powierzchnię obiektu opierając się na zawartości obrazka, który jest do niego podpięty.
Mapowanie odbić
Rozważmy przykład. Chcielibyśmy kontrolować odbicie światła w wybranych miejscach. Możemy przyjąć, że jest to ludzka skóra. Z obserwacji wiemy, że światło najlepiej odbija się od gładkiej powierzchni, ale nie w zagłębieniach.
Jeśli chcemy osiągnąć ten cel, to musimy przygotować teksturę w skali szarości, która będzie odwzorowywała fakturę skóry. W zależności od wykorzystywanego programu 3d i metody interpretacji takiej tekstury, białe obszary tekstury mogą w 100% odbijać światło, a czarne w 100% absorbować. Tak przygotowaną teksturę podpinamy do shadera, a dokładnie do atrybutu, który kontroluje natężenie odbitego światła. Podpięcie pod wybrany atrybut tekstury powoduje, że nie jest on kontrolowany przez liczby, ale przez obrazek. Mapowanie atrybutów często oznacza, że musimy przygotować o wiele więcej tekstur niż tylko kolor obiektu.
Rozproszenie światła pod powierzchnią
Obserwując skórę w dziennym świetle możemy zauważyć, że:
- światło odbija się od powierzchni,
- jest rozpraszane
- oraz częściowo absorbowane i rozpraszane pod powierzchnią skóry.
Widzimy to wyraźnie spoglądając na skórę pod światło. Zjawisko rozproszenia światła pod skórą wymagało od programistów napisania dedykowanego shadera, który potrafi taki fenomen odwzorować. W ten sposób powstał popularny shader SSS (Subsurface scattering), który umożliwia warstwową kontrolę rozproszenia światła.
To jeszcze nie koniec. A co ze wszystkimi detalami, które pojawiają się na skórze, czyli brodawki, zmarszczki, pory skórne itd.? Przecież one są tak małe, że ich uzyskanie na poziomie siatki jest prawie niemożliwe, gdyż wymagałoby to ogromnej liczby polygonów i absurdalnego stopnia zagęszczenia siatki. Cóż, tutaj także z pomocą przychodzą odpowiednie tekstury i shadery, ale o tym opowiemy sobie już przy innej okazji.