Three.js, compartilhando ShaderMaterial entre malhas, mas com conjuntos diferentes de uniformes

Como o título diz, eu gostaria de reutilizar um determinado ShaderMaterial para diferentes malhas, mas com um conjunto diferente de uniformes para cada malha (na verdade, alguns uniformes podem variar entre malhas, mas não necessariamente todos eles): é possível?

Parece-me um desperdício de recursos ter que criar um ShaderMaterial completo para cada malha nesta circunstância, a ideia é ter um único programa de shader de vértice / fragmento mas configurá-lo através de diferentes uniformes, cujos valores mudariam dependendo da malha. . Se eu criar um novo ShaderMaterial para cada malha, acabarei com muitas duplicações (programas de vértice + fragmento + todos os outros membros de dados das classes Material / ShaderMaterial).

Se o mecanismo fosse capaz de chamar um callback antes de desenhar uma malha, eu poderia mudar os uniformes e conseguir o que quero fazer. Outra possibilidade seria ter um "LiteShaderMaterial" que manteria um ponteiro para o ShaderMaterial compartilhado + apenas os uniformes específicos para a minha malha.

Note que a minha pergunta está relacionada com estaMuitas malhas com a mesma geometria e material, posso mudar suas cores? mas ainda é diferente, como eu estou principalmente preocupado com o desperdício de recursos - desempenho sábio eu não acho que seria muito diferente entre ter vários ShaderMaterial ou um único, já que o mecanismo deve ser inteligente o suficiente para notar que todos os materiais têm os mesmos programas e não os reenviam para o cartão gfx.

obrigado

questionAnswers(1)

yourAnswerToTheQuestion