Przezroczystość: Różnice pomiędzy wersjami

Z MaSzyna
Skocz do: nawigacja, szukaj
(Kolejność renderowania przezroczystości =)
(Kolejność renderowania przezroczystości)
 
(Nie pokazano 39 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
'''Przezroczystość''' tekstur w symulatorze jest dość skomplikowanym aspektem. Niniejszy artykuł stara się kompleksowo wyjaśnić zawiłości obsługi przezroczystości.
+
Obsługa '''przezroczystości''' tekstur w symulatorze jest dość nietypowa w porównaniu z innymi silnikami graficznymi. Niniejszy artykuł stara się kompleksowo wyjaśnić zawiłości tego aspektu.
  
  
== Fazy renderowania ==
+
== Kanał alfa ==
 +
Tekstura może zawierać opcjonalny kanał z informacją o przezroczystości piksela. Kanał ten jest nazywany '''kanałem alfa'''.
  
Renderowanie obiektów (w tym przypadku submodeli i terenu) może odbywać się w fazie ''nieprzezroczystych'' lub fazie ''przezroczystych''. Odpowiednia konfiguracja fazy renderowania zapewnia prawidłowe wyświetlanie przezroczystych tekstur, dlatego kluczowe jest ich zrozumienie na samym początku.
+
Alfa może być przedstawiana jako liczba w zakresie 0-1, gdzie 0 oznacza całkowitą przezroczystość, a 1 brak przezroczystości.
  
Renderowanie odbywa się w dwóch przebiegach. Parametr materiału opacity definiuje, czy dany obiekt będzie renderowany w przebiegu przezroczystych opacity: 0. Wtedy wyświetlane jego półprzezroczystości, ale sortowanie wielu planów półprzezroczystych kuleje i część takowych obiektów może nie być wyświetlana. Dla opacity: 100 przezroczystość ucinana jest do binarnej (w najnowszych exe dla alfy 50%) i nie ma problemu z sortowaniem.
+
Piksele o wartościach alfy między 0 a 1 nazywane są '''półprzezroczystymi'''.
 +
 
 +
== Tryby renderowania ==
 +
 
 +
Istnieją dwa tryby renderowania obiektów:
 +
* '''tryb nieprzezroczysty''' - w tym trybie powinny być renderowane tylko te geometrie, które nie wymagają renderowania pikseli półprzezroczystych. Piksele przezroczyste o wartości alfy mniejszej niż 0.5 uznawane za całkowicie przezroczyste, a te o wartości większej - za nieprzezroczyste.
 +
* '''tryb półprzezroczysty''' - tzw. ''alpha blending''. W tym trybie powinny być renderowane tylko te geometrie, które wymagają renderowania pikseli półprzezroczystych (np. woda, szyby).
 +
 
 +
To, w którym trybie renderowany będzie obiekt, zależy od:
 +
* właściwości Opacity (tylko dla submodeli) - wartość 1 oznacza tryb nieprzezroczysty, wartości mniejsze od 1 - tryb półprzezroczysty.
 +
* użytego materiału (tylko dla trójkątów terenu) - jeżeli pierwsza tekstura materiału ma nazwę rozpoczynającą się od znaku ''@'', to użyty będzie tryb półprzezroczysty.
  
 
== Progowanie ==
 
== Progowanie ==
Wartość opacity w materiale oznacza próg renderowania. Na geometrii nieprzezroczystej (opacity 100) wyświetlone będą piksele o wartości alfy większej od zadanego progu. Na geometrii przezroczystej (opacity 0) będą renderowane piksele o wartości alfy mniejszej od zadanego progu.
+
Wartość ''opacity'' w [[Materiały - Pliki .mat|materiale]] oznacza próg wyświetlania pikseli. Jego działanie różni się w zależności od trybu:
 +
* tryb nieprzezroczysty - wyświetlone będą piksele o wartości alfy '''większej''' od zadanego progu.  
 +
* tryb półprzezroczysty - wyświetlone będą piksele o wartości alfy '''mniejszej''' od zadanego progu.
 +
 
 +
[[Plik:alpha_threshold.jpg|300px]]
  
 
== Kolejność renderowania przezroczystości ==
 
== Kolejność renderowania przezroczystości ==
Trójkąty w fazie przezroczystych (alfa blend; opacity 0) muszą być rysowane od najdalszych kamery do najbliższych.
+
W przypadku fazy półprzezroczystej mogą wystąpić błędy renderowania, objawiające się wyświetlaniem obiektów dalszych od obserwatora przed obiektami stojącymi bliżej niego.
 +
 
 +
Błędy sortowania nie są aż tak częste na nowym rendererze, ale uwidaczniają się na starym. Zawsze więc warto testować swój model na obu z nich. Jeżeli ginie gdzieś podświetlenie/szyby lub obiekty wyświetlają się w błędnej kolejności, to prawdopodobnie ma pomieszane fazy renderowania albo kolejność obiektów w modelu.
 +
 
 +
Trójkąty w fazie półprzezroczystych muszą być rysowane od najdalszych kamery do najbliższych.
 +
 
 +
[[Plik:Plany2.png|400px]]
  
 
Najdalsze od kamery muszą być u dołu pliku t3d, najbliższe kamery u góry. Tyczy się to zarówno trójkątów w ramach jednego submodelu (szyby wiaty, hali dworca, itp) jak i różnych submodeli (podświetlenia i szybki mierników w kabinie).
 
Najdalsze od kamery muszą być u dołu pliku t3d, najbliższe kamery u góry. Tyczy się to zarówno trójkątów w ramach jednego submodelu (szyby wiaty, hali dworca, itp) jak i różnych submodeli (podświetlenia i szybki mierników w kabinie).
  
Dzieci niższego stopnia są rysowane po rodzicu. Więc jeśli plan3 znajduje się technicznie pod planem2 w t3d, ale jego rodzic jest nad planem2 to i tak zostanie namalowany w złej kolejności.
+
[[Plik:Plany3.png|400px]]
  
 +
Dzieci niższego stopnia są rysowane po rodzicu. Więc jeśli plan3 znajduje się technicznie pod planem2 w pliku T3D, ale jego rodzic jest nad planem2 to i tak zostanie namalowany w złej kolejności.
  
Sortowanie tak nie boli nowego renderera, ale wyłazi na legacy. Zawsze więc warto swoje dzieło przejrzeć na obu. Do testerów też się to odnosi. Jak gdzieś ginie podświetlenie/szybki, to na 90% ma pomieszane fazy renderowania albo kolejność obiektów w modelu.
+
[[Plik:Plany1.png|400px]]

Aktualna wersja na dzień 17:52, 20 sty 2023

Obsługa przezroczystości tekstur w symulatorze jest dość nietypowa w porównaniu z innymi silnikami graficznymi. Niniejszy artykuł stara się kompleksowo wyjaśnić zawiłości tego aspektu.


Kanał alfa

Tekstura może zawierać opcjonalny kanał z informacją o przezroczystości piksela. Kanał ten jest nazywany kanałem alfa.

Alfa może być przedstawiana jako liczba w zakresie 0-1, gdzie 0 oznacza całkowitą przezroczystość, a 1 brak przezroczystości.

Piksele o wartościach alfy między 0 a 1 nazywane są półprzezroczystymi.

Tryby renderowania

Istnieją dwa tryby renderowania obiektów:

  • tryb nieprzezroczysty - w tym trybie powinny być renderowane tylko te geometrie, które nie wymagają renderowania pikseli półprzezroczystych. Piksele przezroczyste o wartości alfy mniejszej niż 0.5 są uznawane za całkowicie przezroczyste, a te o wartości większej - za nieprzezroczyste.
  • tryb półprzezroczysty - tzw. alpha blending. W tym trybie powinny być renderowane tylko te geometrie, które wymagają renderowania pikseli półprzezroczystych (np. woda, szyby).

To, w którym trybie renderowany będzie obiekt, zależy od:

  • właściwości Opacity (tylko dla submodeli) - wartość 1 oznacza tryb nieprzezroczysty, wartości mniejsze od 1 - tryb półprzezroczysty.
  • użytego materiału (tylko dla trójkątów terenu) - jeżeli pierwsza tekstura materiału ma nazwę rozpoczynającą się od znaku @, to użyty będzie tryb półprzezroczysty.

Progowanie

Wartość opacity w materiale oznacza próg wyświetlania pikseli. Jego działanie różni się w zależności od trybu:

  • tryb nieprzezroczysty - wyświetlone będą piksele o wartości alfy większej od zadanego progu.
  • tryb półprzezroczysty - wyświetlone będą piksele o wartości alfy mniejszej od zadanego progu.

Alpha threshold.jpg

Kolejność renderowania przezroczystości

W przypadku fazy półprzezroczystej mogą wystąpić błędy renderowania, objawiające się wyświetlaniem obiektów dalszych od obserwatora przed obiektami stojącymi bliżej niego.

Błędy sortowania nie są aż tak częste na nowym rendererze, ale uwidaczniają się na starym. Zawsze więc warto testować swój model na obu z nich. Jeżeli ginie gdzieś podświetlenie/szyby lub obiekty wyświetlają się w błędnej kolejności, to prawdopodobnie ma pomieszane fazy renderowania albo kolejność obiektów w modelu.

Trójkąty w fazie półprzezroczystych muszą być rysowane od najdalszych kamery do najbliższych.

Plany2.png

Najdalsze od kamery muszą być u dołu pliku t3d, najbliższe kamery u góry. Tyczy się to zarówno trójkątów w ramach jednego submodelu (szyby wiaty, hali dworca, itp) jak i różnych submodeli (podświetlenia i szybki mierników w kabinie).

Plany3.png

Dzieci niższego stopnia są rysowane po rodzicu. Więc jeśli plan3 znajduje się technicznie pod planem2 w pliku T3D, ale jego rodzic jest nad planem2 to i tak zostanie namalowany w złej kolejności.

Plany1.png