- Symulator MaSzyna -
Symulator EU07 (i nie tylko) => Symulator => Wątek zaczęty przez: youBy w 07 Sierpnia 2009, 11:37:50
-
Ważne ogłoszenie:
ze względu na sposób wczytywania modeli do symulatora należy unikać zbyt dużych submodeli. Jest to najprawdopodobniej związane z liczeniem wektorów normalnych powierzchni i wierzchołków. Czas tej operacji jest proporcjonalny do kwadratu liczby wierzchołków. Jeden submodel wielkości kilkudziesięciu tysięcy trójkątów jest w stanie skutecznie zablokować proces wczytywania na kilka-kilkanaście minut.
Zalecam nieprzekraczanie 5 tysięcy trójkątów i ustalenie limitu na 10 tysięcy.
-
Chodzi o samo wczytywanie, czy ma to również wpływ na renderowanie?
Jeśli te obliczenia są jednorazowe dla modelu, to może dałoby się wyniki zapisać?
-
Raczej tylko na wczytywanie. Nie wiem, czy w skryptach można dostać się do wektora normalnego danego wierzchołka. Jeśli tak, można by napisać nowy format zawierający te wektory.
-
Można by to skutecznie przyspieszyć robiąc najprostszą binakrę z samymi normalnymi. Nadać jej nazwę obiektu i inne rozszrzenie (np. *.norm)
Wczytując obiekt sprawdzane by było istnienie pliku z tą samą nazwą i rozszerzeniem *.norm, jeśli tak to wczytuje z binarki jesli nie - liczy normalne standardowo i zapisuje w pliku *.norm.
Miało by to zaletę, że tych plików nie musiało by być w paczkach, nie było by ingerencji w format (zwiększanie tekstowych formatów nie ma sensu bo to następne spowolnienie). Po modernizacji geometrii obiektu kasowało by się plik z normalnymi i ok. Można by też zrobić "refresh" całości wyszukując w katalogu z Maszyną pliki *.norm i kasując hurtem.
To tylko luźna propozycja, ale pół godziny nad kodem szybko by się zwróciło przy odpalaniu Maszyny. A co najważniejsze dotychczasowe modele były by z tym w 100% kompatybilne.
-
Według stan na sierpień 2011, zostało uruchomione wczytywanie modeli z plików binarnych (E3D). Plik E3D jest tworzony jednorazowo z pliku T3D, podczas jego wczytywania. Teoretycznie istnieje również możliwość zapisania pliku E3D bezpośrednio z edytora 3D (potrzebny jest odpowiednie skrypt albo wtyczka).
W związku z powyższym limit ilości trójkątów nie obowiązuje, gdyż wektory normalne dla modelu z pliku T3D liczone są jednorazowo, a następnie zapisywane w E3D. Nawet jeśli by to miało trwać kilkanaście minut, nie ma to potem wpływu na czas wczytania pliku E3D.
Z drugiej strony wspomnę, iż wąskim gardłem dla wydajności (FPS) jest nadmierna ilość submodeli. Jeśli to tylko możliwe (czyli gdy nie ma animacji ani zapalania świateł), należy łączyć submodele w jeden duży. A zamiast tekstur uniwersalnych używać jednej tekstury, na którą zostaną przeniesione potrzebne wzory. Jest to opłacalne nawet kosztem większej ilości trójkątów. Dla obecnych kart graficznych różnica rzędu ±1000 trójkątów w jednym submodelu jest praktycznie niezauważalna.