Próbuję zaimplementować wykres sceny i we wszystkich artykułach, które napotkałem, jest mowa o sortowaniu obiektów. Aby na przykład posortować obiekty według „materiału”. Teraz, dopóki nie usiadłem i nie zacząłem go wdrażać, uznałem to za coś oczywistego, ponieważ miało to sens. Ale teraz zastanawiam się, co tak naprawdę zmienia sortowanie?
W moim silniku mam menedżera UBO, używam tych do przechowywania danych, które będą współdzielone między programami, w tej chwili, które dotyczą tylko czasu, matryc kamery i projekcji oraz świateł (nie martwię się o zarządzanie, które światła wpływają które obiekty ATM).
Teraz dla każdego modelu muszę zmienić model na mundur macierzy światowej, żadne sortowanie tego nie zmieni. Czy zatem przejście od zmiany tej macierzy do ustawienia materiału dla każdego obiektu jest tak złe?
I niejasno pamiętam czytanie gdzieś, że za każdym razem gdy coś zmienić w rurociągu, to musi się zaczerwieniona i może powodować problemy z wydajnością. Ale dla każdego wezwania do rysowania i tak tworzę model macierzy światowej, więc jaki sens ma kiedykolwiek martwienie się tym?
BTW jest jakaś informacja o tym, czy zmiana munduru i wywołanie glBufferSubData jest droższe (czy mniej).
źródło
Odpowiedzi:
Zdecydowanie chcesz posortować materiały razem. Jeśli możesz, możesz również użyć instancji, aby zgrupować geometrię (np. Jeśli masz X takich samych obiektów).
Sortowanie według głębokości ma również wartość. Musisz sortować od tyłu do przodu w poszukiwaniu obiektów przezroczystych (ignorując kilka zaawansowanych technik, które usuwają tę potrzebę, w ograniczonych okolicznościach).
Wartościowe jest również sortowanie nieprzezroczystych obiektów od przodu do tyłu, ponieważ pozwala to wczesnemu Z na znaczne zmniejszenie narzutu fragmentu sceny.
źródło
Sortowanie obiektów według głębokości ma ogromną wartość, szczególnie w przypadku architektury binowania lub architektury renderowania sąsiadująco.
Sortuj ciała stałe od przodu do tyłu, folie od tyłu do przodu.
Podczas renderowania rzeczy najbliższe do kamery i bryły są renderowane jako pierwsze, a wszystko, co zajmuje tę samą przestrzeń, zostanie odrzucone przez wczesne sprawdzenie bufora Z.
Jeśli architektura graficzna ma jakiś bufor hierarchiczny lub bufor o niskiej rozdzielczości, geometria może zostać wyzerowana, nawet zanim cokolwiek zostanie renderowane.
źródło