Rozdział 9 zakładał, że każdy wierzchołek ma sensowne UV. Terrain wygenerowany proceduralnie, wynik operacji boolean, siatka z voxel meshingu — żadne z nich nie mają UV, które nie byłoby pocięte na strzępy albo rozciągnięte do nieużywalności. Triplanar całkowicie omija UV.
Cała maszyneria z Rozdziału 9 — interpolacja barycentryczna UV, filtrowanie, mipmapy — zakłada, że ktoś (artysta w edytorze UV albo automatyczny unwrapper) już wcześniej „rozłożył” siatkę na płaski obraz w sposób sensowny: bez rozciągnięć, bez nachodzących na siebie trójkątów, bez szwów w widocznych miejscach. To działa świetnie dla modelowanej ręcznie postaci czy rekwizytu. Zawodzi całkowicie dla geometrii, która nie jest modelowana ręcznie: terrain z generatora szumu, wynik CSG (boolean subtract/union), powierzchnia wyciągnięta z pola voxelowego (marching cubes). Taka geometria zmienia się przy każdej regeneracji — UV policzone raz stają się nieaktualne, a przeliczanie ich w locie, w czasie rzeczywistym, dla zmieniającej się siatki jest zwyczajnie za drogie.
Triplanar mapping odpowiada na to inaczej: zamiast szukać dobrego UV, w ogóle z niego rezygnuje. Teksturuje bezpośrednio na podstawie pozycji punktu w przestrzeni świata — czegoś, co istnieje zawsze, niezależnie od tego, jak bardzo pogięta czy proceduralna jest siatka.
Algorytm rzutuje tę samą teksturę z trzech kierunków — wzdłuż osi X, Y i Z — traktując dwie pozostałe współrzędne pozycji świata jako zwykłe UV zwykłego, planarnego mapowania z Rozdziału 9:
Trzy próbki tekstury (color_x, color_y, color_z — jedna na projekcję) miesza się wagami opartymi na tym, jak bardzo normalna N w tym punkcie jest zwrócona wzdłuż każdej osi:
Rezultat: projekcja X przy tej normalnej wnosi tylko 3% końcowego koloru — normalna prawie nie wskazuje wzdłuż X, więc ta projekcja i tak byłaby mocno „rozciągnięta” (patrzysz na powierzchnię niemal stycznie do niej). Wyższe k robi z tego niemal zero, ostrzej wybierając dominującą oś.
Tam, gdzie normalna leży dokładnie między dwiema osiami (krawędź skały pod 45°, gdzie N wskazuje jednakowo wzdłuż dwóch kierunków), dwie projekcje mieszają się mniej więcej po połowie. Problem: to dwie niezależne próbki tego samego wzoru tekstury, w różnej orientacji i przesunięciu — ich nałożenie nie daje spójnego wzoru, tylko widoczne, „podwójne” rozmycie, jakby dwie różne tekstury prześwitywały jedna przez drugą.
Nie ma darmowego wyjścia: mniejsze k rozmywa szew na szerszym obszarze (mniej widoczny, ale tekstura w tym obszarze wygląda „papkowato”), większe k ścieśnia go do wąskiego pasa (reszta powierzchni czysta, ale w tym pasie granica jest bardziej gwałtowna). Produkcyjne wartości k mieszczą się zwykle między 4 a 8 — kompromis wypracowany empirycznie, nie z żadnego wzoru.
Biplanar mapping to optymalizacja: skoro projekcja z najmniejszą wagą i tak wnosi niewiele (3% w przykładzie wyżej), po co ją w ogóle liczyć? Biplanar dynamicznie wybiera dwie projekcje o największych wagach (odrzucając oś, wzdłuż której normalna wskazuje najsłabiej) i miesza tylko je, renormalizując wagi do sumy 1. Oszczędza jeden odczyt tekstury na trzy — kosztem widocznego, choć zwykle drobnego, przeskoku w miejscu, gdzie zmienia się, która oś jest odrzucana.
Normal mapping w triplanarze to osobny, częściej pomijany problem: każda z trzech projekcji patrzy z innego kierunku, więc normal mapa odczytana z tekstury (zawsze zdefiniowana w lokalnej przestrzeni stycznej tej projekcji) musi zostać obrócona tak, żeby pasowała do rzeczywistej orientacji powierzchni w tym miejscu, nie do sztucznego układu współrzędnych projekcji. Pominięcie tego kroku daje efekt „wgnieceń w złą stronę” dokładnie w strefach mieszania między projekcjami — działa poprawnie tylko tam, gdzie jedna projekcja dominuje w 100%.
Typowy materiał metallic-roughness ma trzy mapy: Base Color, ORM (occlusion/roughness/metallic spakowane w jeden obraz) i Normal. Ze zwykłym UV to trzy odczyty tekstury na trafienie. Pełny triplanar (trzy projekcje) mnoży to razy trzy:
Biplanar sprowadza to do 6 odczytów zamiast 9 — wciąż dwa razy drożej niż UV, ale zauważalnie taniej niż pełny triplanar. W scenach, gdzie tylko część geometrii (terrain, wygenerowane skały) potrzebuje triplanaru, a reszta ma normalne UV, koszt jest lokalny — płacisz go tylko tam, gdzie faktycznie musisz.
„Triplanar Mapping” w Blenderze (node w Shader Editorze), „World Aligned Texture” w Unrealu i podobne węzły w Houdinim czy Substance Designerze to dosłownie ten algorytm — parametr „Blend” albo „Blend Sharpness” w tych node’ach to k z tego dodatku. Terrain w grach i VFX niemal zawsze używa triplanaru właśnie dlatego, że jest generowany proceduralnie i nigdy nie miałby stabilnego UV.
Dodatek AB wraca do Rozdziałów 10–11 i Dodatku A: co się dzieje, gdy zamiast analitycznego modelu BRDF sięgasz po dane zmierzone z prawdziwego materiału — i dlaczego „Roughness = 0,3” nie zawsze znaczy to samo w dwóch różnych silnikach.