Odroczone naklejki normalny problem

11

Pracowałem nad odroczonym systemem kalkomanii. Do tej pory ukończyłem część projekcji, co oznacza, że ​​mogę kliknąć coś w scenie, a to poprawnie wyświetli naklejkę na powierzchni obiektu.

Jest jeszcze kilka rzeczy, które chciałbym dodać do tego systemu: normalne przycinanie i normalne odwzorowane naklejki. Normalne obcinanie ma miejsce, gdy odrzucam fragmenty rozciągnięte pod ostrym kątem. Widziałem tutaj . Sposobem na rozwiązanie tego jest odrzucenie fragmentów, które mają dużą różnicę między normalną w Buforze G a normalną kalkomanii. Wymagałoby to odczytania normalnej tekstury bufora G.

Aby wykonać normalne mapowanie kalkomanii, muszę połączyć normalną kalkomanię (z normalnej mapy) z normalną buforem G. Wymaga zapisu do normalnej tekstury bufora G.

Mam nadzieję, że jest jasne, że aby wesprzeć te dwie funkcje, muszę czytać i pisać na normalnej teksturze w tym samym przebiegu cieniowania. Niestety jest to niezdefiniowane zachowanie, więc zastanawiam się, czy istnieje jakiś inny sposób na wdrożenie tych funkcji.

Ian
źródło

Odpowiedzi:

1

Z jakiego systemu renderowania korzystasz? Poniższe informacje powinny być poprawne dla wszystkich systemów renderujących, ale w DX11 lub nowszych wersjach OpenGL może być lepsze rozwiązanie przy użyciu UAV.

-

Będziesz musiał skopiować normalny bufor przed każdym przejściem. Dopóki wiesz, że kalkomanie nie modyfikują tych samych fragmentów przestrzeni ekranu, nie musisz aktualizować kopii.

Możesz również przekształcić wszystkie naklejki w osobne bufory i wykonać tylko jedno przejście mieszania do normalnego bufora za pomocą jednej normalnej kopii bufora. Skalowałoby to znacznie lepiej z ilością naklejek.

Dopóki nie napiszesz normalnego bufora, np. Wykonujesz tylko normalne obcinanie, jak go nazywasz, możesz po prostu próbkować oryginalny normalny bufor, ale nie możesz go powiązać jako celu renderowania.

W DX9 odkryłem, że czytanie i zapisywanie na tej samej teksturze daje oczekiwany wynik, o ile korzystasz tylko z filtrowania najbliższego punktu i nigdy nie odczytujesz innego piksela niż ten, do którego obecnie piszesz, ALE! ponieważ jest to niezdefiniowane zachowanie, mogą istnieć sterowniki i karty graficzne, które nie zachowują się w ten sposób. DX10 uniemożliwi ci to, rozpinając tekstury obecnie powiązane jako cele renderowania.

Archia
źródło