シェーダー定数(GLSL)


ボーンの行列60個

どこかのブログでボーン用マトリックスパレットが60個くらいまでしか使えなかったと見たので、その理由を書いてみます。
実はその制限は単純なもので、ShaderModel3系までだと、シェーダー定数は256個のレジスタが使えることになっています。
マトリックスだとfloatの16個分なので、float4に換算すると4つ使うことになります。

そして、Matrixが60個の場合 240個の定数レジスタを使ってしまうことになります。
頂点変換用のViewやProjectionのマトリックスも使うことを考えると、
この時点で250個くらいは使っていることになるので、約60個までボーン使えたという結果に合致していると思います。

ずいぶん前の記事だったようで、もうすでに解決しているかもしれません。

GLSLとHLSLとの違いで嵌った

DirectX(HLSL)の行列型は実はfloat4の設定APIを呼んでも設定が可能だったりします。
しかしながらOpenGL(GLSL)の行列型はそのような設定を許さないようです。それぞれで共通のシェーダーを作る場合には、この部分に注意が必要そうです。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする