Bump na lustrze jednak sprawia, że wygląda to trochę jak pionowa tafla lodu. Wiadomo - lustra nie muszą być idealne, ale rama raczej sugeruję perfekcję wykończenie. Jak już, dodałbym bump dla oddania lekkiego pofalowania powierzchni - czyli w skali makro, a nie mikro.
A, widzisz, nie ma to jak druga para oczu
Wiedziałem że jeszcze coś miałem zrobić z normalką dla tafli lustra, ale zapomniałem!
To prawda, że takie zadrapania na lustrze w skali mikro nie są aż tak powszechne, zresztą przy jakimkolwiek zmniejszeniu tych tekstur w ramach optymalizacji takie rzeczy zwyczajnie znikną. Natomiast efekt niedoskonałości samej tafli i krzywizna podobna do fali wody byłaby jak najbardziej na miejscu
Czy te odbicia 'realtime'owe' to też z silnika? To jakiś nowy feature czy zawsze były, tyle że nie używane? Wyglądają dobrze.
Okazuje się, że były zawsze (pamiętasz tę scenę w łazience na początku D3?), natomiast chyba nikt nie próbował ich porządnie rozpracować. Odbicia można stosować za pomocą dwóch parametrów:
Mirror (global) i
mirrorRenderMap (image stage). Pierwsze słówko po prostu zamienia cały materiał w idealnie czyste lustro, niezależnie od tego co zawrzesz w kodzie shadera.
Drugi parametr działa tak samo jak słówko
map przy podawaniu ścieżki do tekstury, tyle że tu nic oczywiście nie musisz podawać
W oryginalnym D3 można było jeszcze określić rozdzielczość odbić, natomiast w TDM to nie działa. Zawsze jest rozdzielczość wybrana w menu gry. Przypuszczam, że ktoś coś po drodze zepsuł i nie zauważył
Oczywiście w tym przykładzie używam
renderMirrorMap, bo tylko tak mogę nałożyć odbicie na wszystkie pozostałe właściwości powierzchni.
Tym niemniej ta technika jest bardzo ograniczona. To chyba rodzaj jakiejś płaskiej projekcji, bo kompletnie nie działa na wypukłych czy wklęsłych powierzchniach. Czyli nie można jej np. stosować wymiennie z cubemapką. Musiałem to rozbić na dwa materiały, jeden dla płaskiej tafli lustra i osobny dla ramy, bo nie dało się uzyskać odbicia na całym modelu.
Kolejnym ograniczeniem jest jakaś optymalizacja tego silnika, która polega na wyłączaniu realtimowych odbić dla więcej niż jednego obiektu w polu widzenia. Jeżeli umieszczę dwa takie lustra obok siebie na ścianie, to jedno z nich będzie czarne. Natomiast można patrzeć w jedno lustro z bliska i widzieć w nim odbicie z innego lustra, np. gdzieś na innej ścianie
Jako trzecie ograniczenie dodałbym wydajność i kwestie zdroworozsądkowe
Trzeba pamiętać, że silnik ponosi wszystkie "koszty" związane z obiektami odbijającymi się w takim lustrze, wraz z drawcallsami, pamięcią na tekstury, koniecznością odświeżania takiego widoku w aktualnej liczbie fpsów, itd. Zasadniczo to jest trochę tak, jakbyśmy sobie nagle zrobili małego split screen coopa i widok z dwóch kamer
Z tego co widziałem najbardziej rośnie chyba ilość zajętego VRamu, nawet gdy otoczenie jest dosyć ubogie w detale.
Generalnie nie polecam regularnego stosowania tej techniki. Może gdzieś w małych pomieszczeniach, gdzie naprzeciwko lustra nie ma otwierających się visportali (czyli np. okna i drzwi odpadają). No i dobrze by było, żeby to służyło czemuś konkretnemu, jakiemuś aspektowi rozgrywki. Gdzie realtime jest faktycznie potrzebny, żeby gracz coś zrobił bądź zauważył. Jeżeli chcemy mieć efekt czysto dekoracyjny, zwykła statyczna cubemapka w zupełności wystarczy, a cały model będzie znacznie bardziej przyjazny silnikowi pod kątem wydajności.
A drugie - z czego wynika "efekt ducha" z postacią?
To wyłącznie kwestia montażu, ot nagrałem dwa przejazdy kamery. Gdy nagrywałem ten pierwszy, jeszcze bez AI, to pomyślałem że przydałoby się jakoś minimalnie pokazać, że to odbicia w czasie rzeczywistym. Dlatego przy drugim podejściu wstawiłem spacerującą postać. Pomysł z duchem wyszedł w trakcie zabawy ze ścieżkami