Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Three.jsでの整数頂点バッファの扱いについて

Three.jsでの整数頂点バッファの扱いについて教えて下さい。r144を使用しています。
現在BufferGeometryとRawShaderMaterialを使った描画テストをしています。頂点データは型付配列Uint8ClampedArrayで保持しています(諸般の事情です)。
今まではあまり何も考えず以下のようにしていました。

geometry.setAttribute( 'position',
  new THREE.BufferGeometry( vertices, 4 )
);

もともとUint8ClampedArrayだったものを小数として渡すほうがGPU側のメモリ消費量が大きいのではないかと考えました(実際の挙動はわかりませんが)。

1つ目の質問

上記の考え方は正しいでしょうか。シェーダ内で都度floatに変換する必要は生じますが、メモリ使用量が少なければ、頂点数が多いときには使えるのかなと思った次第です。

2つ目の質問

geometry.setAttribute( 'position',
  new THREE.Uint8ClampedBufferAttribute( vertices, 4 )
);

上記のコードで頂点データを送ってみたところFirefoxのコンソールで以下のようなエラーが出ました。

WebGL warning: drawArraysInstanced:
Vertex attrib 0 requires data of type INT,
but is being supplied with type FLOAT.

しかし以下のように変更すると動きました。

geometry.setAttribute( 'position',
  new THREE.Int32BufferAttribute( vertices, 4 )
);

「THREE.Uint8ClampedBufferAttribute」では頂点データを送ることができない(小数として送ってしまう)のでしょうか。GLSL内では以下のように受け取っています。

in ivec4 position;

自分で試したこと

以下のいずれを使った場合でも上記のエラーが出ました。

  • Int16BufferAttribute
  • Uint16BufferAttribute
  • Int8BufferAttribute
  • Uint8BufferAttribute
  • Uint8ClampedBufferAttribute

「Uint32BufferAttribute」を使った場合は少しエラーが変わりました。

WebGL warning: drawArraysInstanced:
Vertex attrib 0 requires data of type INT,
but is being supplied with type UINT.

素人質問で恐縮です。識者の方、よろしくお願いします。

0

No Answers yet.

Your answer might help someone💌