【Blender】 いらないシェイプキーをまとめて削除する

使わないシェイプキー(Maya, Unity で言うブレンドシェイプ)が大量にあってファイルサイズが無駄に肥大化している場合、Python スクリプトで一括削除すると便利です。

シェイプキーが大量にある例
いらないシェイプキーが大量にある……

シェイプキーが設定されているメッシュが m_avg オブジェクトにあり、Basis シェイプキー以外を削除したい場合は以下のようなスクリプトを実行します。

f:id:arcturu:20201228184532p:plain
m_avg オブジェクト内のメッシュのシェイプキーを消したい

import bpy

# 消したいシェイプキーが存在するメッシュのオブジェクト名
target_name = "m_avg"

# 当該オブジェクトを選択する
bpy.data.objects[target_name].select_set(True)

# シェイプキーのリストを取得する
shape_keys = bpy.data.objects[target_name].data.shape_keys.key_blocks

# シェイプキーのリストを逆順に舐める
# (先頭から消すとインデックスがずれるので後ろから消す)
for i, shape_key in reversed(list(enumerate(shape_keys))):
    # 消したくないシェイプキーは除外する
    if shape_key.name != "Basis":
        # シェイプキーを選択して、削除
        bpy.context.active_object.active_shape_key_index = i
        bpy.ops.object.shape_key_remove()

参考

tangent がないモデルに法線マップを貼る

キーポイント

tangent space 法線マップを貼る際には、法線マップを作ったときの接空間を頂点ごとに復元する必要があります。一般には DCC ツールからのエクスポート時やゲームエンジンへのインポート時に tangent を計算してモデルの頂点属性に tangent を追加することが多いですが、頂点属性に tangent を入れずにフラグメントシェーダーで tangent を動的に計算することで接空間を復元することもできます。

tangent 再計算のためのキーとなるのが GLSL の dFdx() / dFdy() 関数(HLSL では ddx() / ddy() 関数)です。tangent を計算するには UV 座標とピクセルの位置座標の偏微分が必要ですが、dFdx() / dFdy() を使えばそれが求められます。(ただし、この関数で計算できるのはスクリーン座標系での偏微分なので適宜座標系を変換する必要があります。)

詳細

VFX of 2020.04

ツイッターで見たかっこいいエフェクト / 3DCG のまとめ 2020.04

 

 

VFX of 2020.03

ツイッターで見たかっこいいエフェクト / 3DCG のまとめ 2020.03

 Mitsuba 2 のソースコード公開

 汎用的なアイデアな気がする

 汎用的なアイデアな気がする(2)

VFX of 2020.02

ツイッターで見たかっこいいエフェクト / 3DCG のまとめ 2020.02

解説:Create nice and feasible volumetric cloud in Unreal Engine 4 | Asher.GG