Więcej niż łatka tekstur? (Część 3)


Więcej niż łatka tekstur? (Część 3)

ThielHater | 2 kwi 2021 Tłumaczenie Damianut

W tej części serii zajmiemy się bardziej szczegółowo tym, jak opisywany jest kolor piksela i jak przezroczyste piksele są rysowane w Gothicu, jak również tym, co nie działa za dobrze.

Przede wszystkim kolor piksela można opisać w kilku modelach. Najpowszechniejszym jest model kolorów RGB, w którym czerwony, zielony i niebieski są używane jako kolory podstawowe. Te składowe koloru są również określane jako kanały. Kolory są mieszane sumarycznie, co oznacza, że wszystkie razem dają kolor biały. Znasz już ten rodzaj mieszania kolorów ze światła na lekcjach fizyki. Nawiasem mówiąc, pudełko z farbą z zajęć plastycznych działa z odejmującym mieszaniem kolorów, w którym wszystkie kolory razem dają kolor czarny.

W komputerze używany jest 1 bajt na kanał koloru, który składa się z 8 bitów. Skoro każdy bit może mieć wartości 0 lub 1, bajt może mieć 28 = 256 różnych wartości. Ponieważ mamy 3 kanały kolorów, każdy o 1 bajcie, możemy zatem opisać 2563 = 16,777,216 różnych kolorów.

Do zilustrowania wszystkich kolorów, które mogą być opisane, użyłem kostki z tylną i przednią stroną pokazaną jednokrotnie. Jeśli chcesz, możesz również obejrzeć kostkę w 3D dzięki Scott Anderson i Ellen Hildrethauch z Wellesley College.

W każdym razie, aby renderować roślinność jak liście na gałęzi, potrzebujemy również przezroczystych pikseli. Do tego służy inny komponent koloru zwany kanałem alfa. Idealnie do tego celu jest używany również 1 bajt, umożliwiając 256 różnych poziomów od przezroczystego do nieprzezroczystego. Jednakże, gdy tekstury są skompresowane, zazwyczaj tylko 4 lub nawet 1 bit jest dostępny dla kanału alfa. Dzięki gradientom można natychmiast zobaczyć różnice. Z drugiej strony w przypadku liści nie ma prawie żadnej różnicy między 8 a 4 bitami, podczas gdy przy 1 bicie wyraźnie widać twarde krawędzie.

Aby narysować powierzchnie z teksturami alfa, istnieją dwa tryby w grafice komputerowej, zwane mieszaniem alfa i testowaniem alfa. W testowaniu alfa jest sformułowany test lub raczej warunek, który decyduje czy piksel jest rysowany, czy nie. Zazwyczaj wykonuje się to poprzez porównanie wartości kanału alfa z wartością progową. Mieszanie alfa, z drugiej strony, rysuje każdy piksel i miesza to z już narysowanym obrazem. Jest kilka trybów mieszania dla różnych celów. W naszym przypadku jednakże moglibyśmy po prostu narysować piksel taki, jaki jest. Zasadniczo, obie techniki mają swoje zalety i wady, takie jak błędy w renderowaniu. W przypadku testowania alfa piksele spełniające warunek są zawsze rysowane jako nieprzezroczyste, chociaż mogą być półprzezroczyste. W przypadku mieszania alfa, przecinające się powierzchnie prowadzą do błędów w renderowaniu, ale zazwyczaj nie są one aż tak zauważalne.

Niestety, Gothic używa tylko jednego bitu dla kanału alfa i konsekwentnie rysuje tekstury z testowaniem alfa, co czyni niemożliwym wyświetlenie gradientu przezroczystości i miękkich krawędzi.

Na szczęście, w rzeczy samej Gothic może czytać skompresowane tekstury z 4-bitową alfą. Dlatego spędziłem trochę czasu, próbując nauczyć Gothic jak robić mieszanie alfa. Ku mojemu ubolewaniu, te wysiłki były bezowocne. Jednakże w trakcie moich badań przebrnąłem przez ten artykuł na blogu autorstwa Shawna Hargeavesa, który opisuje dwuetapowy proces w ostatnim paragrafie.

Głównie nieprzezroczyste piksele tekstury będą rysowane najpierw z testowaniem alfa, a pozostałe z mieszaniem alfa. Zaadoptowałem opisane podejście i zoptymalizowałem wartość progową w celu redukcji błędów w renderowaniu. Sztuczka polega na tym, że bufor Z (Z-buffer) jest dezaktywowany w drugim przebiegu. Odpowiada to za przetwarzanie informacji o głębi, dzięki czemu powierzchnie znajdujące się bliżej kamery przesłaniają te, które znajdują się dalej za nimi. Dezaktywując bufor Z, musimy upewnić się, że powierzchnie są rysowane w poprawnej kolejności, od tyłu do przodu. Ponieważ jednak gałąź i liście zostały już narysowane w tym momencie, a my chcemy tylko narysować miękkie krawędzie, nie stanowi to problemu.

Rezultat jest przyzwoity, ale zmniejsza liczbę klatek na sekundę (FPS) o około jedną piątą, ponieważ wiele obiektów w świecie jest rysowanych podwójnie. Odkąd Gothic 2 może poprawnie obsługiwać mieszanie alfa, mam nadzieję, że pewnego dnia ta funkcja będzie działać w Gothic 1.

W czwartej części, zrobi się mgliście, ciemno i trochę strasznie. Jednak nie martw się, Innos będzie nad nami czuwał!