Bocznica, zgodnie z prośbą.
@MaciejM.Szanowni Państwo,
myślę że nadszedł właściwy czas, cobym przedstawił swoją gałązkę skupioną przede wszystkim wokół zmian w rendererze gl3.3 i shaderach:
https://github.com/MichauSto/maszyna/tree/sim.
Aktualne zmiany obejmują:
- Wczytywanie tekstur:
- obsługę tekstur DDS z grupy BC4-5(RGTC) i BPTC, oraz bitmapowych half float dla których nie jest dostępna kompresja sprzętowa
- wczytywanie cubemap
- Wczytywanie modeli t3d:
- Poprawiona transformacja układu współrzędnych która zachowuje ortogonalny tangent-space
- Shadery:
- Obliczanie macierzy TBN na etapie fragment-shadera (zachowanie ujednolicone z silnikami gier oraz innym oprogramowaniem 3D traktowanym jako "industry standard")
- Fragment shadery (mat_phys, mat_normalmap_phys) z oświetleniem PBR oraz ambientem rozszerzonym o IBL (image-based lighting) dla uzyskania fotorealistycznego efektu; formuły adaptowane są z Godot Engine, opensourcowego silnika gier na licencji MIT
- Pipeline 3.3:
- Dodany globalny efekt Bloom, zaimplementowany w oparciu o rozwiązanie z Call of Duty: Advanced Warfare, zaprezentowane na SIGGRAPH 2014 (dokładne źródło zakomentowane w includzie)
- DynObj
- Prototyp nowego systemu animacji w oparciu o keyframe'y; ich użycie jest opcjonalne i nie wyklucza się wzajemnie z dotychczasowymi animacjami w mmd
Znane ograniczenia:
- Dodatkowe skompresowane formaty DDS są dostępne na poziomie gl3.3 jedynie w formie rozszerzeń (ich obsługa jest aktualnie obecna u obu wiodących vendorów, i stanowi część standardu OpenGL od specyfikacji 4.2 wzwyż). Znacząca przewaga nad DXT objawia się w braku widocznych artefaktów kompresji blokowej, i zaleca się przyjęcie tego formatu przynajmniej dla assetów najwyższej jakości i obowiązkowo tych korzystających z oświetlenia PBR, gdzie widoczne przy użyciu DXT artefakty często są spotęgowane przez kontrastową plamkę specular.
- Cubemapy IBL oraz lut dla dystrybucji BRDF dla fizycznego shadera nie są przypisane globalnie dla sceny i wymagają każdorazowego dopisania w .mat. Zachowanie to zostanie naprawione przed złożeniem PR.
Przykładowy asset:
https://eu07.pl/userfiles/27213/wls50_v1.7zKanały tekstury params (mat_phys, mat_normalmap_phys):
R = Metal;
G = Gloss;
B = AO
Prezentacja shadera: załączniki
eu07.exe: