Realistyczny metalowy shader

13

Jak stworzyć dobry metalowy shader?

Dla różnych metali i powiedzmy mniej więcej erodowane / zardzewiałe i tak dalej.

Wiem, że jedna różnica w porównaniu ze zwykłymi materiałami polega na tym, że metal powinien „zabarwić” światło zwierciadlane, ale kiedy robię to na przykład ze złotem, po prostu wygląda „żółty”, a nie metaliczny.

Każda pomoc doceniona!

Valmond
źródło
1
Twoje pytanie brzmi jak coś prostego i konkretnego, ale tak naprawdę nie jest. Nie można odtworzyć metalicznego wyglądu za pomocą samego modułu cieniującego. Wymaga to odpowiednich tekstur, więc potrzebujesz błyszczącej tekstury, prawdopodobnie nierównej mapy, jeśli metal jest w ogóle nieregularny itp. Jeśli metal jest wypolerowany w jakimkolwiek stopniu, musisz odzwierciedlić otoczenie (lub jego karykaturę), ponieważ dobrze. To nie jest proste zagadnienie „oto kod metalowego modułu cieniującego”.
Nicol Bolas,
Spójrz także na temat odbić anizotropowych, zjawiska zwykle obserwowanego w szczotkowanych metalach.
David Gouveia,
@David: To wygląda naprawdę fajnie, może to dla mnie trochę przesada, ale zdecydowanie to sprawdzam i używam, jeśli mogę :-)
Valmond 30.01.12
@Nicol Dzięki za komentarz, jestem całkowicie w porządku z teksturami, mój „normalny” moduł cieniujący składa się z 3: rozproszonego, blasku i mapy
kontrolnej, w
Szybkie wyszukiwanie ujawnia wiele różnych metalowych shaderów i prosto z pyska konia: developer.download.nvidia.com/shaderlibrary/webpages/…
Patrick Hughes

Odpowiedzi:

4

Niedawno stworzyłem shadery dla czystych i szczotkowanych metali dla mojej gry w toku i jestem całkiem zadowolony z rezultatów.

Czysty metal: Najważniejszą cechą moich eksperymentów były odbicia środowiska z mapami kostek. Wdrożyłem je w środowiskach renderowania w czasie rzeczywistym, ale także obrazy statyczne często dają dobre wyniki i łatwiej je rozmazać. Drugą najważniejszą cechą był efekt Fresnela, który poprawia silhuette obiektów. Daje to na przykład okrągły wygląd kulek. Oświetlenie zwierciadlane niekoniecznie jest potrzebne, ponieważ mapa kostki może bezpośrednio podświetlać. Renderowanie HDR jest również ważne, aby odbicia mapy kostki wyglądały dobrze.

Szczotkowanego metalu: Dla metali szczotkowane uzyskać dobre rezultaty dość łatwo za pomocą tekstury pędzla, coś jak towraz z oświetleniem anizotropowym. W przypadku oświetlenia anizotropowego można znaleźć samouczki z Internetu, ale zaimplementowałem własne, używając bazy blinn-phong jako podstawy, ale z pół-wektora wyeliminowałem 80% kierunku stycznej. Oznacza to, że oprócz normalnych w swoich modelach potrzebujesz stycznych lub bitangentów. Odbicia otoczenia są trudne dla szczotkowanego metalu. Możesz próbkować z wielu kierunków z mapy sześcianu na podstawie kierunków stycznych / bitangentów, ale możesz potrzebować wielu próbek, aby uzyskać dobre wyniki. Nie jest to jednak konieczne, ponieważ tekstura i anizotropowe oświetlenie z wieloma źródłami światła już wygląda całkiem ładnie. Wynik końcowy w moim przypadku wygląda następująco:

Szczotkowany materiał metalowy

sprzedać
źródło
6

Jak powiedział Nicol w swoim komentarzu, w wysokiej jakości metalowym shaderze jest wiele rzeczy. Aby uzyskać najlepsze wyniki, Twój renderer musi być poprawny pod względem gamma i korzystać z fizycznych modeli cieniowania (zobacz w szczególności dwa artykuły Naty Hoffman pod tym linkiem).

Biorąc to pod uwagę, typowym sposobem na wykonanie materiału metalowego jest uzyskanie bardzo niskiego lub nieistniejącego rozproszonego koloru i wysokiego współczynnika odbicia światła w zakresie od 50% do 100% (w liniowej przestrzeni kolorów). Jak zauważyłeś, w przypadku niektórych metali lusterko będzie zabarwione.

Ponieważ wygląd metalu jest całkowicie lustrzany, z niewielkim rozproszeniem lub bez rozproszenia, odbicie będzie niezwykle ważne. Jeśli tylko w szczególny sposób odbija światła punktowe, uzyskasz wygląd czarnego materiału, ponieważ brakuje reszty otoczenia (nawet bardzo szorstki metal odbije zamazany obraz swojego otoczenia). Typowym sposobem na uzyskanie większej refleksji jest użycie mapy sześciennej. Realistyczne odbicie w grafice w czasie rzeczywistym jest jednak ogromnym tematem i istnieje wiele różnych podejść.

Nathan Reed
źródło
Dzięki, właśnie tego szukałem! Kiedy robię odbicia z mapą sześcianu, może powinienem użyć pewnego rodzaju oświetlenia środowiskowego jako bardzo wysokiego oświetlenia lustrzanego?
Valmond,
@Valmond Nie jestem pewien, co masz na myśli, mówiąc: „użyj pewnego rodzaju oświetlenia środowiskowego jako bardzo wysokiego oświetlenia lustrzanego”. Chodziło mi tylko o to, że odbicie lustrzane powinno obejmować zarówno źródła światła, jak i wszystko inne w otoczeniu (dodane razem), przy czym część „wszystko inne” można zaimplementować jako mapę przestrzenną. Typowym sposobem jest wygenerowanie kilku rozmytych map sześciennych dla różnych chropowatości, jak pokazano tutaj .
Nathan Reed