Skip to content

GLSL performance

最終更新日時: 2025年08月25日 12:57

  • nothing

Uniforms, Texture, Buffer Object の比較

Section titled “Uniforms, Texture, Buffer Object の比較”
特性/用途UniformsTextureBuffer Object
データ格納領域ユニフォーム専用メモリ(小容量)テクスチャ専用メモリ(大容量、圧縮/フィルタリング可能)頂点バッファメモリ(頂点データ向けに最適化)
参照方式全体で一定値として共有sampler2Dでピクセル単位で参照(ランダムアクセス可能)頂点シェーダーでattributeとして参照
更新頻度高頻度(フレームごとに更新)中〜高頻度(フレームごとのrenderTargetも含む)低〜中頻度(ジオメトリ変更時のみ)
利用頻度低〜中頻度(全体の定数値として参照される)高頻度(ピクセル単位でのサンプリングが可能)高頻度(頂点単位でアクセス)
1フレーム内の参照回数1回Npixel×p×フレーム数N_{pixel} \times p \times \text{フレーム数}Nvertex×フレーム数N_{vertex} \times \text{フレーム数}
用途例- 時間、ライト位置、カメラ情報- ノイズマップ、ディスプレイスメント、renderTarget- 頂点変形、インスタンシング、インデックス情報
容量制限制限あり(数百個のvec4程度)大容量(GPUのテクスチャメモリ制限に依存)大容量(数十万頂点分を効率的に扱える)
特性簡素で軽量、動的な小規模データの更新に適する大規模データのランダムアクセスが可能頂点データの効率的な管理と描画に特化
renderTarget対応不適(大規模データ管理に不向き)適している(フレームごとのデータ更新に対応可能)不適(頂点データの管理専用)

WebGLとThree.jsのリソース制限一覧

Section titled “WebGLとThree.jsのリソース制限一覧”
パラメータ名Three.jsプロパティ名説明例(値)
gl.MAX_TEXTURE_SIZEcapabilities.maxTextureSize最大テクスチャの幅または高さ8192
gl.MAX_CUBE_MAP_TEXTURE_SIZEcapabilities.maxCubeMapSize最大キューブマップテクスチャサイズ8192
gl.MAX_TEXTURE_IMAGE_UNITScapabilities.maxTexturesフラグメントシェーダーで利用可能なテクスチャ数16
gl.MAX_VERTEX_TEXTURE_IMAGE_UNITScapabilities.maxVertexTextures頂点シェーダーで利用可能なテクスチャ数16
gl.MAX_COMBINED_TEXTURE_IMAGE_UNITScapabilities.maxCombinedTextures頂点/フラグメントシェーダーで合計利用可能なテクスチャ数32

パラメータ名Three.jsプロパティ名説明例(値)
gl.MAX_VERTEX_ATTRIBScapabilities.maxAttributes頂点シェーダーで使用可能な属性の最大数16
gl.MAX_VERTEX_UNIFORM_VECTORScapabilities.maxVertexUniforms頂点シェーダーで使用可能なユニフォーム数1024
gl.MAX_FRAGMENT_UNIFORM_VECTORScapabilities.maxFragmentUniformsフラグメントシェーダーで使用可能なユニフォーム数224
gl.MAX_VARYING_VECTORScapabilities.maxVaryings頂点シェーダーとフラグメントシェーダー間で共有可能な変数数30

パラメータ名Three.jsプロパティ名説明例(値)
gl.MAX_UNIFORM_BLOCK_SIZEcapabilities.maxUniformBlockSizeユニフォームブロックの最大サイズ(バイト単位)16KB
gl.MAX_UNIFORM_BUFFER_BINDINGScapabilities.maxUniformBufferBindings使用可能なユニフォームバッファの最大数24

以下のコードを使用すると、Three.jsで全ての制限を確認できます。

const renderer = new THREE.WebGLRenderer();
const capabilities = renderer.capabilities;
console.log({
maxTextureSize: capabilities.maxTextureSize,
maxCubeMapSize: capabilities.maxCubeMapSize,
maxTextures: capabilities.maxTextures,
maxVertexTextures: capabilities.maxVertexTextures,
maxCombinedTextures: capabilities.maxCombinedTextures,
maxAttributes: capabilities.maxAttributes,
maxVertexUniforms: capabilities.maxVertexUniforms,
maxFragmentUniforms: capabilities.maxFragmentUniforms,
maxVaryings: capabilities.maxVaryings,
maxUniformBlockSize: capabilities.maxUniformBlockSize,
maxUniformBufferBindings: capabilities.maxUniformBufferBindings,
});
種類参照対象頻度式
Uniformsシェーダー全体(一定値として共有)フレームごとに1回ライトの色、カメラ位置、時間
TextureフラグメントシェーダーNpixel×p×フレーム数N_{pixel} \times p \times \text{フレーム数}ノイズマップ、ディスプレイスメントマップ
Buffer Object頂点シェーダーNvertex×c×フレーム数N_{vertex} \times c \times \text{フレーム数}頂点の位置、条件に合致する頂点(例: 特定の高さ以上)
  • NvertexN_{vertex}: 頂点数。
  • NpixelN_{pixel}: 解像度によるピクセル数。
  • pp: 条件に合致する割合(フラグメント)。
  • cc: 条件に合致する割合(頂点)。