SoftBodyを使って、ぬいぐるみを再現しみます。SoftBodyのポリゴン数に制限があるようなので、ローポリモデルをソフトボディーで動かし、その動きをハイポリモデルに反映するという方法を採用します。これでSoftBodyの制限回避と計算負荷を軽減しつつ、見た目の良いハイポリモデルを動かすことが可能になります。
今回、解説動画を作成しました。大まかな説明は動画で行って、ここではローポリとハイポリモデルの連動について解説します。

プログラミングに関する話題
Visual Studio 2013でBullet Physicsをビルド、環境構築してみます。それと、デバッグ表示(OpenGL)をDirectX11での表示に変更してみる。
新バージョンの使い方 Bullet Physicsを使ってみる⇒(Bullet2.86 VS2017 DirectX11)
VisualStudio2013でDirectX11プログラミングをしてみる。必要なのはVisualStudio2013のインストールのみ!
使用するVSのバージョンは”Visual Studio Express 2013 for Windows Desktop”。
コンパイル結果をバイナリデータに、コンパイラをオフラインツールにしてVisualStudioに組み込みます。バイナリデータは、ファイル出力とC++ソースコード(配列データ)の2形式で出力できるようにする。VSの組み込みはカスタムビルド。
とりあえず、これで完成。これまでで得られたもの、シェーダの知識(変数、コンパイル)、字句解析処理、カスタムビルドの方法など。
DirectX11プログラムでシェーダのコンパイルを行っているとexeファイルを起動時に”D3DCOMPILER_xx.dllがない”というエラーが発生して起動できません。VisualStudio2012のデバッガで実行した場合は起動できます。単純にdllをインストールすればいいといわけではなさそうなので調査してみる。
コンパイルしたシェーダバイナリコードから使用されている変数の情報を取得します。ただしEffects11のような複雑(詳細)な情報ではなく必要最小限の情報のみ扱います。
FXファイルのコンパイラを作成します。ただし一部の仕様のみに対応した簡易コンパイラです。複雑な構文解析は行わないので、文字列によって処理を分岐させる程度のプログラムになります。
DirectX11ではEffect関連の機能が削除されていて、使用するには別途公開されているEffects11ソースコードが必要なります。しかし、その説明には古いコードの移植支援とあるため、あまり推奨されているものではないようです。
そこで、EffectのFXファイルを使用した独自のエフェクトシステムを作成してみます。
まず最初はFXファイル(HLSL)の字句解析と構文解析を行い必要な情報を取得できるようにします。
スクリプトやテキストデータを記述する際、Cプリプロセッサの機能があればかなり便利になります。しかし、それを実装するのは大変です。コンパイラ付属のプリプロセッサは入出力がファイルなので使い勝手がわるい。何かないか探していたところDirectxのシェーダコンパイラ関連の関数にD3DPreprocessというものを発見、使ってみる。