- Symulator MaSzyna -
Symulator EU07 (i nie tylko) => Bieżące Symulatorowe => Wątek zaczęty przez: Stele w 28 Czerwca 2017, 21:43:17
-
Specular: właściwość materiału, odpowiadająca za stopień odbijania światła. Dla 0 obiekt absorbuje całe światło, dla 1 (255) odbija całość. Zgodnie z prawem odbicia, odbija się pod takim samym kątem względem wektora normalnego płaszczyzny jak pada, a intensywność odbieranego światła zależy od iloczynu wektorowego między kątem odbicia a kątem kamery.
Jako, że zaczynamy wprowadzać je do exe, trzeba się wziąć za modele.
Ma ktoś sensowną tabelkę z wartościami dla danych materiałów? Znalazłem tylko wytyczne dla konfiguracji shaderów w unity gdzie sugerują 40-75 dla niemetali i 155-255 dla metali. Nie za wysoko?
Będziemy potrzebować toola, który we wszystkich t3d i triangles ustawi na początek ten parametr na jakąś niska wartość. Uwaga, część triagles nie ma tej składowej materiału jawnie zdefiniowanej. Różna wartość na podstawie opacity, tak jak exe to teraz opcjonalnie robi, to dobry klucz dla masówki na początek również.
Potrzebny jest też tool do masowego wymnażania transformów w t3d. Bez jednostkowych normalnych, możemy pomarzyć o ładnym oświetleniu. Klikanie w rainstedzie masowo odpada.
-
Mogę rozkminić jakiś algorytm, co to hurtowo zrobi. W sumie to dość prosta rzecz. Dobrze, że T3D ma fajną opisową składnię i nie trzeba tego jakoś specjalnie parsować...
EDIT: Chodzi oczywiście o ustawianie specularów. Mnożenie transformów to już dla mnie wyższa szkoła jazdy.
-
Znalazłem tylko wytyczne dla konfiguracji shaderów w unity gdzie sugerują 40-75 dla niemetali i 155-255 dla metali. Nie za wysoko?
W wersji testowej z automatycznym skalowaniem mamy 0.25 * 150 =~38 dla nieprzezroczystych i 1.5 * 150 = 225 dla szkla ktore zblizone jest pod tym wzgledem do polerowanego metalu, wiec mniej wiecej to samo co tam sugeruja, czyli brzmi sensownie :> Chociaz 60-75 to juz moze byc dosc wysokii wspolczynnik dla niemetalu; chyba ze to jakas bardzo gladka powierzchnia.
-
Jakiś prosty model do edycji specular na TD by się przydał, na wstępne szacowanie wyników (wyglądu, bo chyba o to chodzi). Sześcian zestawiony z różnych materiałów, metal, szkło, może drewno i beton. No chyba, że takie eksperymenty to przerost formy nad treścią.
-
Zanim zaczniecie zmieniać, to weźcie pod uwagę że istotne jest jeszcze to że oprócz liniowego mnożnika wartości specular są podnoszone do potęgi wykładnika błyszczenia. Albo to można wpisać na stałe, albo też przypisywać do materiału. I jeszcze działanie tych wartości błyszczenia jest zależne od tego czy używa się modelu Phong (pow(max(dot(viewDir, reflectDir), 0.0), shininess)) czy też lekko zmodyfikowanego Blinn-Phong (pow(max(dot(normal, halfwayDir), 0.0), shininess)) (w Blinn-Phong trzeba dawać kilka razy więcej). Nie wiem jakiego używa exe tmj, w moim shaderowym exe jest blinn-phong.
-
Blinn-Phong jest standardowy w starym openGL a ze exe uzywa wlasnie niego zakladam ze z nim mamy do czynienia :> Exponent ustawilem na sztywno na 15 bo wiekszosc elementow jest pokryta farba albo czyms innym, wiec rozblyski nie sa zbyt skupione, a nie mamy w parametrach metody jego definiowania.
-
W takim razie jak ma działać ten automat?
Ja to widzę tak, że lecimy hurtowo po wszystkich plikach i w przypadku znalezienia trójkąta/submodelu wypisuje się nazwa tekstury. Wtedy wpisujemy wartości specular i program zapamiętuje parę tekstura: wartość_specular w słowniku. W przypadku natrafienia później na tę samą teksturę wartości w pliku podmienią się automatycznie.
Są jakieś inne koncepcje?
-
Koncepcja dobra, byleby program wyświetlił teksturę której specular mamy nadać.
-
I wszystkiego nie rozwiąże, bo w takich pojazdach przykładowo, brudne wózki i błyszczące pudło są na jednej teksturze. Ale dobry początek.
Pytanie do programistów, jak ma się materiałowa wartość specular do mapy gdy tą wprowadzimy? Jest ignorowana? Robi za mnożnik, jak teraz diffuse?
-
No właśnie dlatego w wątku o exe powiedziałem, że specular powinna trzymać tekstura, albo coś innego dopinanego do tektury tak, żeby np. zasymlować błyszczącego loka zaraz po rewizyjnej.
-
Pytanie do programistów, jak ma się materiałowa wartość specular do mapy gdy tą wprowadzimy? Jest ignorowana? Robi za mnożnik, jak teraz diffuse?
Moze byc i tak, i tak, zalezy od tego co sie wpisze do kodu shadera. Sensowniejsze imo byloby w takiej sytuacji ignorowanie wartosci stalej i pobieranie tylko wartosci tekstury, bo w odroznieniu od diffuse wartosc specular bedzie zazwyczaj sporo nizsza niz 1.0 wiec wartosci mapy bylyby 'na wejsciu' znacznie przyciemniane, w porownaniu do wartosci zdefiniowanej parametrem. Tzn jesli wpisana jest wartosc specular 0.5, to przy mnozeniu punkt na mapie o wartosci 0.5 dawalby tylko wartosc 0.25, a model mialby odblaski o znacznie roznej sile z mapa i bez niej.
-
Mam już dość spory kawałek algorytmu. Teraz pytanie, jaki ustawić specular dla replacableskin? Zostawić taki, jaki jest, ustawić niebłyszczący, czy dać wybór użytkownikowi?
-
Dać wybór. Z tym, że repl replowi nierówny. Jest opcja by statyki i dynamiki traktował osobno, oraz rozróżniał pierwszego i czwartego repla? W statykach to zazwyczaj dach, a dynamikach karoseria. Czwórka to tabliczka, ale też raz ekran ledowy, a raz kawał pleksy.
-
Mam pytanie, mianowicie, czy dobrze zrozumialem, iz dla optymalizacji ladowania/renderowania w exe, najlepiej, aby wszystkie submodele w t3d, transformy mialy jedynke po przekatnej i oczywiscie przeliczanie wierzcholkow trojkatow pod przeksztacenia z czegos tam, na macierz jednostkowa (1 po przekatnej)?
-
Tak. Wszystkie nieanimowane obiekty powinny mieć macierz transformacji jednostkową.
A absolutnie wszystkie jedynki po przekątnej, czyli wymnożone skalowanie. Bez tego będzie zakłamane oświetlenie, bo wektory normalne też są poddawane skalowaniu transformem.
Edit: I dlatego nie powinienem się mądrzyć. ;) Myślałem, że obrót jest po bokach przekątnej.
-
Tutaj uwaga, bo "jedynki po przekatnej" sa wtedy, gdy wyzerowane jest zarowno skalowanie jak i obrot, a sam obrot jest w wielu przypadkach uzasadniony (wszelkiego rodzaju przelaczniki w kabinie itp) Do wylapania skalowania technicznie rzecz biorac sprawdza sie dlugosc wektorow tworzacych (dla openGL) kolumny sub-macierzy 3x3 macierzy transformacji, co pozwala okreslic skalowanie indywidualnie wzgledem osi, lub w wersji uproszczonej sprawdza sie wyznacznik macierzy transformacji.
-
Ok, to pierwsza działająca wersja. Działanie programu jest banalnie proste, ale niezbyt user-friendly. W konsoli wyświetla się nazwa tekstury, której możemy przypisać określony specular (dla jednej tekstury robimy to tylko raz - program pamięta nasze ustawienia i automatycznie ustawi odpowiednie wartości specular w przypadku znalezienia innego submodelu z tą samą teksturą). Zmodyfikowane pliki t3d trafiają do katalogu SPECULARS_FIXED. Dorobię jeszcze zapis ustawień do pliku i walidację danych wejściowych, przy okazji zrefaktoryzuję kod. Testujcie i podawajcie propozycje.
Program wypakować do głównego katalogu MaSzyny. Uwaga! Do uruchomienia potrzebny jest Python w wersji 3.6. Być może na wersji 2.7, czyli tej używanej przez symka również będzie działać.
-
Na pythonie 2.7 wysypuje. Na 3.4 śmiga.
Akceptuje wartość bez wszystkich składowych rgb.
Nie tworzy struktury katalogowej po przetworzeniu.
Jeśli dorobisz do niego jakieś gui, to fajne będą presety dla kilku materiałów by nie wklepywać liczb co rusz.
-
Spróbuję zatem dorobić GUI w PyQt i skompilować to do exeka.
Nie tworzy struktury katalogowej po przetworzeniu.
Nie rozumiem za bardzo o co chodzi. Każdy model trafia do tej samej ścieżki, co oryginał, tylko nie względem głównego folderu, lecz względem katalogu SPECULARS_FIXED.
Teraz spostrzegłem, że program wykonuje się tylko do pewnego momentu - sprawdza tylko 2 podkatalogi, potem się wyłącza. Więc jednak nie wszystko hula jak powinno. Na dniach wleci kolejna wersja.
-
Mi jakieś słupy trakcyjne zrobił na początek i wrzucił je do głównego folderu bez robienia podkatalogów.
-
Jak się nazywają te słupy? Możesz wrzucić plik specularFixer.log? Obejrzę.
-
Fałszywy alarm, to jakieś bramki z roota. Może sygnałowe albo co. Nie miałem cierpliwości klepać aż by doszedł do podfolderów.
-
Mam pytanie, czy w miarę rozwoju exe zaistnieje potrzeba masowej zmiany innych właściwości niż specular w modelach? Jeśli tak, to zrobię coś bardziej kompleksowego. Na pewno będzie jeszcze potrzeba wymnożenia transformów we wszystkich t3d. Czy przewidujecie że będą w przyszłości konieczne kolejne masowe poprawki jak teraz?
-
Wymnażacz tyko dla anim:false i dla dynamic musi parsować mmd i nie tykać obiektów z kluczami animacji.
Może kiedyś emission mapy się dorobimy, ale to i tak w materiale się zaweźmie. Mglista przyszłość jest. :) Trzymaj kod, najwyżej będzie potrzeba rozwoju w przyszłości.