Blender で視点依存リグ(View Dependent Rig)
セルルックのキャラクターを斜めから見たときの造形をシェイプキーで補正することはよくある。これはカメラのZ軸回転量とメッシュのZ軸回転量との差を計算して、シェイプキーの影響力に変換すればいい。シェイプキーは時計回り用と反時計回り用とふたつシェイプキーを用意する。
ワールドZ回転量をドライバーで取得する単純な方法ならば実装は簡単だ。しかしこの方法はオブジェクトにほかの軸の回転が含まれているとうまくいかない。メッシュとカメラとの相対的な回転量を計算するにはカメラの回転行列をメッシュの回転行列で変換する必要がある。
単純にワールドZ回転量をドライバーで取得する方法
メッシュとカメラとの相対的な回転量を計算する方法
カメラのワールド回転行列にメッシュのワールド回転逆行列を掛けると、メッシュの回転の逆回転をカメラに掛けられる。あとはカメラの回転行列をオイラー回転に変換すれば、各軸の回転量を取得できる。
計算式
回転行列は逆行列と転置行列とが一致するので、計算負荷の低い転置行列を使っている。
時計回り
-(ow.to_3x3().transposed() @ cw.to_3x3()).to_euler()[2]
反時計回り
(ow.to_3x3().transposed() @ cw.to_3x3()).to_euler()[2]
.blend ファイルダウンロード(2.81)。このファイルには VRoid Studio で作成したメッシュとテクスチャとが含まれている。それらのライセンスについては VRoid Studioの商用利用は可能ですか? を参照。
シェーダで透過率を変える場合
今更だけど、FGOアーケードのキャラモデルは髪が目を透過するのですが、単に透過するのではなく、角度に合わせて不透明にもしてますよね。
— たからっきょ@サイバーコネクトツー (@otakara_cc2) October 4, 2020
これ良い。常時透過は煩いんですよね。
あと、キャラ毎に髪の透過率変えてるのかな。
キャラデザが複数人担当されてる作品ならではなのかも。#FGO #FGOAC pic.twitter.com/z0tg6wxj38
上記の動画はおそらく不透明な目と髪とを描画した後で、透過の目を描画している。
外部リンク
ちょっと技術的な話を!
— ぽぷりか (@POPREQ) July 30, 2021
■Monark OP tips1
キャラの顔だけをカメラから見た方向に対して押しつぶす処理を入れています。
広角レンズで近距離から撮った顔は、頭の球体である以上前後が出すぎてバランスが良くない場合が多く、それを強制的に補正します。
顔だけに望遠レンズを使うような処理ですね。 pic.twitter.com/lkdSIOzk3y