昔はShaderMaterial使ってた、今はInstancedBufferAttribute
各マテリアルには2種類のシェーダーを指定できます。
シェーダーの変数には、ユニフォーム、アトリビュート、バリアリングの3種類があります
・ユニフォームとは、すべての頂点で同じ値を持つ変数のことで、ライティング、フォグ、シャドウマップなどがユニフォームに格納されるデータの例です。ユニフォームは、バーテックスシェーダとフラグメントシェーダの両方からアクセスできます。
・アトリビュートは各頂点に関連する変数で、例えば、頂点の位置、面の法線、頂点の色などがアトリビュートに格納されるデータの例です。アトリビュートは、バーテックスシェーダ内でのみアクセス可能です。
・Varyingsは、バーテックスシェーダからフラグメントシェーダに渡される変数です。各フラグメントでは、各バリアリングの値は、隣接する頂点の値からスムーズに補間されます。
https://threejs.org/docs/#api/en/materials/ShaderMaterial