Three.js, współdzielenie ShaderMaterial między siatkami, ale z różnymi zestawami jednolitymi

Jak mówi tytuł, chciałbym ponownie użyć danego ShaderMaterial dla różnych siatek, ale z innym zestawem mundurów dla każdej siatki (w rzeczywistości niektóre mundury mogą się różnić w zależności od siatki, ale niekoniecznie wszystkie): czy to możliwe?

Wydaje mi się, że muszę zmarnować zasoby, aby stworzyć pełną ShaderMaterial dla każdej siatki w tej sytuacji, pomysłem jest posiadanie pojedynczego programu cieniującego wierzchołki / fragmenty, ale konfigurowanie go za pomocą różnych mundurów, których wartości zmieniają się w zależności od siatki . Jeśli utworzę nowy ShaderMaterial dla każdej siatki, otrzymam wiele duplikacji (programy wierzchołków + fragmentów + wszystkie inne elementy danych klas Material / ShaderMaterial).

Jeśli silnik był w stanie wywołać wywołanie zwrotne przed narysowaniem siatki, mógłbym zmienić mundury i osiągnąć to, co chcę zrobić. Inną możliwością byłoby posiadanie „LiteShaderMaterial”, który trzymałby wskaźnik do współdzielonego ShaderMaterial + tylko określone mundury dla mojej siatki.

Zauważ, że moje pytanie jest związane z tymWiele siatek o tej samej geometrii i materiale, czy mogę zmienić ich kolory? ale nadal jest inny, ponieważ martwię się głównie o marnotrawstwo zasobów - pod względem wydajności nie sądzę, by było znacznie inaczej w przypadku posiadania wielu ShaderMaterial lub jednego, ponieważ silnik powinien być wystarczająco inteligentny, aby zauważyć, że wszystko materiały mają te same programy i nie wysyłają ich ponownie na kartę gfx.

Dzięki

questionAnswers(1)

yourAnswerToTheQuestion