ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

2017年4月29日土曜日

[Blender] マテリアルのテクスチャ画像をまとめてUVに割り当てるスクリプト

Python script to link image to UV/Image Editor for Blender

3次元CG編集ソフト Blender はFBXファイルなどをインポートすると、テクスチャマッピングされた画像がUV/Image Editorにリンクされません。
そこで、マテリアルの1スロット目に設定されたテクスチャ画像を UV/Image Editor にリンクさせるPythonスクリプトを作ってみました。
シェーダーノードを使ったマテリアルは非対応です。
blog.fujiu.jp [Blender] マテリアルのテクスチャ画像をまとめてUVに割り当てるスクリプト


環境

  • Windows 10
  • Blender 2.78c


このような問題を解決できる

TF3DM からフリーでダウンロードできる Plant Model (3icl82ea6itc-Plant.zip) のFBXファイルをサンプルとして説明します。
http://tf3dm.com/3d-model/plant-model-352.html

インポートするとメッシュごとにテクスチャ画像が設定されています。

UV/Image Editor を開くとUVに画像がリンクされてません。

このモデルの各メッシュのUVにマテリアルの1番目のテクスチャ画像をリンクさせるまでを目標とします。


スクリプトのソース




スクリプトの使い方

どこでもいいのでビューを Python Console に切り替えます。

Propertiesビューでモデルのルート (このモデルでは Plant_Model) を選択します。

Python Console に上のソースをコピー・ペーストすればメッシュごとのUVに画像がリンクされます。


スクリプトのを実行したけど画像がUVマッピングされない場合

Propertiesビューでモデルのルート (このモデルでは Plant_Model) を選択してからスクリプトをコピー・ペーストしてください。


参考にしたコンテンツ

scripting - How can I set the image to use the UV Map using the python api - Blender Stack Exchange
http://blender.stackexchange.com/questions/7855/how-can-i-set-the-image-to-use-the-uv-map-using-the-python-api


関連ブログ

MakeHumanでCLIP STUDIO用3Dキャラクターを作る方法
[Blender] CLIP STUDIOにUnity3DやMMDのキャラクターを移植する方法
BlenderのモデルデータをMMDに変換する方法
[Blender] ボーンを削除したらメッシュが動かないときの直し方
[Blender] Pythonスクリプトで頂点グループをまとめて選択する方法


2016年10月29日土曜日

[Blender] Pythonスクリプトで頂点グループをまとめて選択する方法

How to select multiple vertex groups

過去のブログ CLIP STUDIOにUnity3DやMMDのキャラクターを移植する方法 で書いたとおり、3DキャラクターをCLIP STUDIOへ移植するにはスカート部には専用のマテリアルが割り当てられている必要があります。
「サファイアートちゃん」のように誰でも利用できるスカート着用の3Dキャラクターモデルはたくさん公開されていますが、そのほとんどがスカートと衣服に共通のマテリアルが設定されています。
しかし、スカート部に割り当てられた頂点グループに別のマテリアルを割り当てれば解決します。
とはいえ、たくさんの頂点グループを選択する操作が必要なので手間がかかります。
そこで、複数の頂点グループをスクリプトで一括選択する方法をまとめました。
blog.fujiu.jp [Blender] Pythonスクリプトで頂点グループをまとめて選択する方法
© SAPPHIART CHAN


環境

  • Windows 10
  • Blender 2.78


頂点グループを一括選択するPythonスクリプト

スカートの頂点グループは Skirt という文字列が含まれている場合次のようになります。


「オブジェクト名」の文字列はモデルに応じて変更します。
3D ViewをEdit Modeにし、Python Consoleに次のように入力またはコピー・ペーストします。
サファイアートちゃんの上着は ClothOuter というオブジェクト名なので次のようになります。




どんなときに役立つか

複数の頂点グループをまとめて編集したいときに役立ちます。
下の画像は「Imagine GIrls・R1N4(リナ)」の3DモデルをBlenderにインポートしたものです。
スカートの頂点グループが100個近くあるので手作業で選択するのは気の遠くなる作業ですが、スクリプトなら一瞬で済みます。

© ImagineVR Inc.
スクリプトの Skirt を別の文字列に置き換えれば名前にその文字列を含む頂点グループを一括選択できます。
また、select() を deselect() に書き換えれば選択状態を一括解除するスクリプトになります。


関連ブログ

[Blender] 複数のShape keyを一つにまとめる方法
CLIP STUDIOにUnity3DやMMDのキャラクターを移植する方法
[Blender] Pythonで複数の設定を一瞬で編集する方法
[Blender] ボーンを削除したらメッシュが動かないときの直し方
[Blender] ボーンを曲げてもメッシュが曲がらない原因と修正方法
BlenderのモデルデータをMMDに変換する方法

以上、参考になれば幸いです。

2016年10月1日土曜日

[Blender] ボーンを削除したらメッシュが動かないときの直し方

How to duplicate vertex weight

3DキャラクターをBlenderにインポートし、ボーンを削除したらそのボーンに割り当てられていた肌(スキニングされていたメッシュ)が動かなくなり、関節を曲げると肌が餅のように伸びてしまいました。
blog.fujiu.jp [Blender] ボーンを削除するとメッシュが動かなくなるときの直し方
© SAPPHIART CHAN

ボーンを消す前に頂点ウェイト(ボーンと肌の関連度)を親ボーンにコピーしたら解決したのでその方法をまとめました。


環境

  • Windows 10
  • Blender 2.77


ボーンを削除すると起きる問題

株式会社サファイアートがUnityアセットとして公開している「サファイアートちゃん」を例に挙げます。
UnityアセットのFBXファイルとテクスチャ画像ファイルをコピーしてBlenderにインポートしました。
サファイアートちゃんは両腕に手首を捻らせるための ForearmTwist ボーンがあります。

これらの捻りボーンを削除して腕を動かすと下の画像のように手首が伸びてしまいます。

サファイアートちゃんの腕の各頂点は複数の頂点グループを共有し、どの頂点グループの影響をどれくらい受けるかという「頂点ウェイト」が設定されています。
頂点ウェイトに影響を与えるボーンを削除したため、動かなくなってしまったわけです。


Modifierで頂点ウェイトを親ボーンにコピーする方法

ボーンを削除する前に削除したいボーンの頂点ウェイトを親ボーンにコピーすれば解決します。
しかし頂点ウェイトは無数の頂点ごとに0.0から1.0までの数値を指定するため、手作業でコピーするのは現実的ではありません。
頂点ウェイトをコピーするには Modifier を使うと簡単です。
Modifierの設定方法は次の通りです。

(ドロップダウンメニュー) VertesWeightMix
Vertex Group A: 削除したいボーンの親ボーン (の頂点グループ)
Vertex Group B: 削除したいボーン (の頂点グループ)
Mix Mode: Add
Mix Set: VGroup B

Modifier で VertesWeightMix を設定するときはWeight Paint画面にしてボーン名を表示すると変化がわかりやすくなります。

Modifierが正しく設定できたらApplyボタンをクリックし、ボーンを削除します。
下の画像は左手首のみ捻りボーン (ForearmTwist_L) の頂点グループを親ボーンにコピーしてから左右の手首捻りボーンを削除した結果です。


ModifierをPythonスクリプトで実行する方法

ModifierはPythonスクリプトでも実行できます。
下のスクリプトの日本語で書いた部分を個別に修正すればコピー・ペーストで実行できるサンプルです。




どんなときに役立つか

UnityアセットやMMDモデルなど、ボーンの数や構成はそれぞれ異なりますです。
多くの人型モデルの指は3本のボーンで構成されることが多いですが、下の画像のように4本の指で構成するモデル作者もいらっしゃいます。

マンガ・CG動画の作成ソフト CLIP STUDIO では3Dキャラクターの各指のボーンは3本と決められているため4本ボーンのキャラクターを登録した場合、手を握りしめるポーズが下の画像のようになります。
これでは手に見えません。

CLIP STUDIOの仕様に合せて各指のボーンを3本に減らす必要がありますが、前述の通りボーンを削除するだけでは肌が伸びてしまいます。
4本目のボーンの頂点グループを親ボーンにコピーしてから4本目のボーンを削除し、手を握りしめるポーズをとった結果が下の画像です。
期待通りの表現になりました。

モデルデータを他のアプリケーションに移植する際にボーンを削除する必要があるかもしれません。
そんなときに知っていると便利です。


関連ブログ

[Blender] ボーンを曲げてもメッシュが曲がらない原因と修正方法
BlenderのモデルデータをMMDに変換する方法
Blenderで作ったアニメーションがUnity3Dで違う動きをする原因と直し方
[Blender] Pythonで複数の設定を一瞬で編集する方法
MakeHumanでCLIP STUDIO用3Dキャラクターを作る方法
Metasequoia EX の FBXファイルの互換性を試してみました
Shade3D の FBXファイルの互換性を試してみました

以上、参考になれば幸いです。

2016年2月6日土曜日

[Blender] Pythonで複数の設定を一瞬で編集する方法

How to automate editing in Blender

3次元CG編集ソフトBlenderはPython言語で機能拡張やバッチ処理をすることができます。
マイクロソフトOfficeシリーズがVisual Basic Application言語でマクロを実行できるのに似ています。
Pythonのスクリプトを使ったら無数のボーンの設定をもれなく一瞬で編集出来たのでその方法をまとめてみました。


環境

  • Windows 8.1
  • Blender 2.75a


Python言語の特徴

Pythonを他のプログラミング言語に比べた場合、特に次の2点が気になりました。
  • 変数名の宣言が不要
    変数名のタイプミスに気付きにくいです。
  • if文やfor文の入れ子はインデント(段落)で記述する必要がある
    見やすさのためではなく仕様です。
オブジェクト指向やラムダ式なども採用されているのでC#やJavaやVB.NETの経験者ならすぐに扱えると思います。


入門編・全てボーンの名前を表示してみる

ここからBlenderを使った説明です。
どのエリアでもいいので Python Console を開きます。

上の画面に映っているキャラクターはポケットクエリーズのクエリちゃんです。
3D ViewのObject Modeでボーンを選択した状態で Python Console に次のコードをコピーペーストします。
※改行やインデントのスペースは省略できません。


青い文字でボーンの名前が全て表示されました。


実用編・ボーンを移動禁止に一括編集する

下の画像はモデルデータを編集中の画面です。
Pose Editorでクエリちゃんの頭のボーンを間違って移動させたらこんなことになってしまいました。

人型モデルにポーズをつけるときはボーンの移動を禁止したほうが安全に操作できると思います。
移動禁止にするにはTransformのLocationのX・Y・Zそれぞれをロックします。

モデルによっては40個以上もあるボーンを一つずつ移動禁止にするのは骨の折れる作業です。
Pythonスクリプトを使えばこのような作業は一瞬で済みます。

3D ViewのObject Modeでボーンを選択した状態で Python Console に次のコードをコピーペーストします。
※改行やインデントのスペースは省略できません。


これで選択したボーンが全て移動禁止になりました。


オブジェクトやプロパティはツールチップに表示される

入力欄にマウスポインターを補バーさせるとオブジェクトやプロパティがツールチップに表示されます。
スクリプトで変更したいプロパティ名はこの方法で調べられます。



関連ブログ

BlenderのモデルデータをMMDに変換する方法
[Blender] ボーンを曲げてもメッシュが曲がらない原因と修正方法
3次元CGソフト・Blenderの脱初心者を目指す
クエリちゃんMMDモデル更新
[Unity3D] 画面表示を左右反転させる方法
[Unity3D] 二つのscene(シーン)を一つにまとめる方法
[Unity3D] サイドバイサイドで立体視できるゲームを作るには
[Blender] obj2opengl.plをJava用に改造する
[Unity3D] Blender could not be found.を解決するには
[Unity3D] Unity4からUnity5へのバージョンアップでの変化

以上、参考になれば幸いです。