Assimp と独自の OpenGL レンダラーを使用して、Collada ファイルの GPU スキニングを実装しました。これはうまくいっています。
これで、私のアプリケーションでは、サード パーティの頂点シェーダーとフラグメント シェーダーを指定できるようになり、スキニングと連携して動作するはずです。
ユース ケースの例としては、この外部シェーダが Y 軸を中心に空間を曲げ、シーンにフォグを追加するなどがあります。
GPU スキニングの使用中に可能ですか?
可能?はい。しかし、単純ではありません。
これを行うための最も簡単な方法は、シェーダーに複数の文字列を提供できることを利用することです。「スキニング シェーダー」を頂点のカメラ空間位置を返す関数にします。この関数のバリエーションが複数ある場合もあります。1 つは位置を返すバージョン、もう 1 つは位置と法線を返すバージョン、もう 1 つは位置と TBN 接空間基底マトリックスを返すバージョンです。
ユーザー提供のシェーダーは、この関数を呼び出すだけで、カメラ空間の位置/法線を取得できます。シェーダをコンパイルするときは、 への呼び出しでシェーダの前にスキニング シェーダ文字列を配置するだけglShaderSource
です。