W grach materiały często wpływają tylko na wygląd obiektów. Wygląd zewnętrzny jest realizowany przez shadery. Czy w związku z terminologią istnieje różnica między materiałami a modułami cieniującymi? Czy powinieneś napisać jeden moduł cieniujący dla jednego materiału?
shaders
terminology
materials
danijar
źródło
źródło
Odpowiedzi:
Materiał to kombinacja atrybutów opisujących, jak powinna wyglądać powierzchnia danego materiału.
Niektóre silniki używają różnych shaderów dla różnych materiałów, w którym to przypadku definicja materiału może wyglądać następująco:
Inne silniki używają jednego modułu cieniującego dla wszystkich obiektów (a raczej silniki decydują o tym, który moduł cieniujący należy użyć w zależności od parametrów, możliwości GPU i innych czynników, takich jak odległość), w którym to przypadku materiał wyglądałby bardziej tak:
źródło
A materialne określa sposób obiekt reaguje na światło.
Istnieje kilka typowych parametrów:
Teraz powiedz, że masz trójkąt renderowany za pomocą materiału
M
.M
ma Kd = (1,0,0) (czerwona odpowiedź rozproszona), Ks = (1,1,1) (biała reakcja zwierciadlana), Ns = 25 (wyróżnienie zwierciadlane będzie dość ostre i nie rozmywane) i nie ma map_Kd ( bez tekstury).Zadaniem modułu cieniującego jest użycie matematyki do ustalenia pozycji wierzchołka trójkąta , położenia światła, wartości koloru materiału i określenia, jaki kolor powinien mieć trójkąt. Moduł cieniujący wierzchołek wykonuje to „obliczenia cieniowania” jeden raz dla każdego wierzchołka i interpoluje kolor w trójkącie.
Częstą operacją w module cieniującym do obliczania odpowiedzi rozproszonej w wierzchołku jest:
źródło
Materiał jest tym, co stosuje się do geometrii, aby nadać jej kolor i wzór. Tekstura jest składnikiem materiału.
Moduł cieniujący to mały program, który umożliwia renderowanie tego materiału w czasie wykonywania. Zaletą shaderów jest to, że możesz zrobić wszystko, od zwykłego renderowania materiału, poprzez dodawanie dynamicznych efektów, takich jak odblaski i odbicia aż po niezwykle sprytne rzeczy, takie jak renderowanie fałszywych dziur przez ściany, w które trafiła kula.
więc w odpowiedzi na twoje pytanie - tak, jest różnica, istnieje również pewne nakładanie się - możesz albo zrobić czerwony materiał lub napisać moduł cieniujący, aby renderować rzeczy jako czerwone, ale oba pozwalają ci na wiele rzeczy, które możesz nie mógł z drugim.
i nie, nie potrzebujesz jednego modułu cieniującego na materiał. chociaż materiał wymaga renderowania modułu cieniującego, możesz mieć go dla wszystkich materiałów, jeśli chcesz. robią określone rzeczy, więc jeśli na przykład chcesz, aby wszystko było lśniące, możesz po prostu napisać jedną.
Dobrym przykładem shaderów jest sprzęt wojenny. istnieje jeden zestaw materiałów do sceny, ale gdy naciśniesz przycisk, aby przejść do widoku taktycznego, moduły cieniujące, które renderują te materiały, zmieniają się, aby wyglądały na zarysowane i ogólnie inne. To samo dzieje się w Batmanie: „tryb detektywa” arkhama.
źródło
Chociaż jest późno, istnieje „oszustwo”, które może pomóc Ci lepiej zrozumieć.
Materiał to wszystko, co jest dołączone do określonego modułu cieniującego dla tego wywołania losowania.
Na przykład w powyższej odpowiedzi masz następujący materiał: [Materiał] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png
co tłumaczy, że będziesz renderować za pomocą modułu cieniującego, który wykonuje normalną mapę i obliczenia zwierciadlane, i użyje 3 tekstur wewnątrz tego modułu cieniującego.
Później możesz ponownie użyć tego samego modułu cieniującego, z różnymi innymi 3 teksturami (np. Car, carNormal i carSpecular), wykonasz inne wywołanie losowania z innym materiałem, tylko dlatego, że zmieniłeś parametry modułu cieniującego.
Podsumowując, materiał to wszystko, co jednoznacznie tworzy wywołanie losowania przy użyciu tego samego modułu cieniującego o tych samych parametrach (tekstury, mundury, atrybuty).
Mam nadzieję, że to pomoże lepiej to zwizualizować
źródło