Pythonでabsolute shape keyを操作
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
6件表示
(全6件)
すべてのコメント一覧へ
投稿ツリー
-
Pythonでabsolute shape keyを操作
(Alex, 2009/12/4 23:04)
-
Re: Pythonでabsolute shape keyを操作
(yamyam, 2009/12/7 13:42)
-
Re: Pythonでabsolute shape keyを操作
(Alex, 2009/12/7 14:17)
-
Re: Pythonでabsolute shape keyを操作
(T.K., 2009/12/8 6:55)
-
Re: Pythonでabsolute shape keyを操作
(Alex, 2009/12/8 7:19)
-
Re: Pythonでabsolute shape keyを操作
(yamyam, 2009/12/8 17:52)
Pythonでabsolute shape keyを操作
msg# 1
Alex
投稿数: 14
はじめまして。
Pythonを使って、データを読み込んで、コンター図を作っています。値をz値で与えて、全体にグラデーションのテクスチャを与えることで、コンターを表現しています。これにさらに、時系列の複数のデータを使って、absolute vertex keyでアニメーションを作りたいんですが、これって可能でしょうか?Pythonのマニュアルのようなものを見ていると、absolute vertex keyの各keyでそれぞれのvertexにアクセスする方法が無いように思えるんですが...。
漠然とした質問ですみませんが、何かご存知の方がいらっしゃればよろしくお願いします。
Pythonを使って、データを読み込んで、コンター図を作っています。値をz値で与えて、全体にグラデーションのテクスチャを与えることで、コンターを表現しています。これにさらに、時系列の複数のデータを使って、absolute vertex keyでアニメーションを作りたいんですが、これって可能でしょうか?Pythonのマニュアルのようなものを見ていると、absolute vertex keyの各keyでそれぞれのvertexにアクセスする方法が無いように思えるんですが...。
漠然とした質問ですみませんが、何かご存知の方がいらっしゃればよろしくお願いします。
投票数:3
平均点:10.00
Re: Pythonでabsolute shape keyを操作
msg# 1.1
yamyam
居住地: そうや、うちはおおさかやー
投稿数: 4405
はじめまして。フレームごとにそれぞれのデータを形状に反映し、それをなめらかにアニメーションしたいというわけですか?
恐らく自分でフレーム毎に補間してMeshに出力された方が早いと思います。
恐らく自分でフレーム毎に補間してMeshに出力された方が早いと思います。
投票数:7
平均点:2.86
Re: Pythonでabsolute shape keyを操作
msg# 1.1.1
Alex
投稿数: 14
アドバイスありがとうございます。
>はじめまして。フレームごとにそれぞれのデータを形状に反映し、それをなめらかにアニメーションしたいというわけですか?
そうです。その通りです。
>恐らく自分でフレーム毎に補間してMeshに出力された方が早いと思います。
ちょっと私の勉強不足のせいか、上記の方法はよく分かりません(というか、私の説明が不足しており、相互理解がうまく行っていない?)。各時間のデータは、csv形式で作って、32×6の値をもっており、手打ちでデータ入力はちょっと不可な気がします...。そこで、absolute shape keyの各キーにそれぞれの時間におけるデータ値を自動的に割り当てようと思っているんですが。
例えば、absolute shape key各キーの作成はマニュアルでやるとして、各キーごとにメッシュのz座標値をpython scriptで読み込み割り当てる、という半自動の方法でもいいんですが。
お手透きの時にでもよろしくお願いします。
>はじめまして。フレームごとにそれぞれのデータを形状に反映し、それをなめらかにアニメーションしたいというわけですか?
そうです。その通りです。
>恐らく自分でフレーム毎に補間してMeshに出力された方が早いと思います。
ちょっと私の勉強不足のせいか、上記の方法はよく分かりません(というか、私の説明が不足しており、相互理解がうまく行っていない?)。各時間のデータは、csv形式で作って、32×6の値をもっており、手打ちでデータ入力はちょっと不可な気がします...。そこで、absolute shape keyの各キーにそれぞれの時間におけるデータ値を自動的に割り当てようと思っているんですが。
例えば、absolute shape key各キーの作成はマニュアルでやるとして、各キーごとにメッシュのz座標値をpython scriptで読み込み割り当てる、という半自動の方法でもいいんですが。
お手透きの時にでもよろしくお願いします。
投票数:9
平均点:4.44
Re: Pythonでabsolute shape keyを操作
msg# 1.1.1.1
T.K.
投稿数: 10
もしシェープキーを使わなくてもいいのでしたら、Script Links を利用すれば目的を達せられるのではと思います。
参考までに以前作った Script Links 用のスクリプトを示します。やっていることは、
1.特定の名前(ここでは "El Topo")のメッシュオブジェクトを探す(予め作っておかないと NG)。
2.フレーム番号の付いた連番ファイルのうち、現在のフレーム番号に対応するデータファイルから頂点のリストと面のリストを読み込む。
3.1.のメッシュオブジェクトの頂点と面を総入れ替えする。
上記のようなスクリプトを Script タブ内の Scene Script link に追加して実行条件となるイベントを FrameChanged に設定します。これでフレーム番号が変わるたびにスクリプトが実行されるようになります。毎回ファイルを読み直すので非効率的(かなりの力技)ですが、小さなデータファイルであれば問題ないと思います。
シェープキーのありがたいところはフレーム間で頂点位置を補完してくれるところですね。例えばフレーム番号1と11の頂点位置を指定しておけば、途中のフレーム番号2〜10の頂点位置は Blender が自動的に補ってくれます。手持ちのデータファイルが大き目の時間ステップ幅で生成されていて(例えばフレーム番号1と11のデータしかなくて)、可視化の際になめらかに(つまりフレーム番号2〜10のデータを補完して)表示したいのであれば、シェープキーを使うのは確かにひとつの手だと思います。
しかし補完のためだけに苦労して Python でシェープキーを扱うくらいなら(別途単独で動作するプログラムを書くなどして)ふたつのデータファイルの間を補完するデータファイルを追加作成するのが手っ取り早いのではないか、というのが yamyam さんのご指摘だと思います。
参考までに以前作った Script Links 用のスクリプトを示します。やっていることは、
1.特定の名前(ここでは "El Topo")のメッシュオブジェクトを探す(予め作っておかないと NG)。
2.フレーム番号の付いた連番ファイルのうち、現在のフレーム番号に対応するデータファイルから頂点のリストと面のリストを読み込む。
3.1.のメッシュオブジェクトの頂点と面を総入れ替えする。
import Blender
import Blender.Window
import Blender.Mesh
import sys
def read_file(filename):
# 省略
def main():
# Find a placeholder mesh object
me = Blender.Mesh.Get("El Topo")
if me is None:
sys.stderr.write("Error: Mesh \"El Topo\" not found\n")
return
# Read a .bin file corresponding to the current frame number
frameno = Blender.Get("curframe")
try:
verts, tris = read_file("C:/tmp/suzanne/track%04d.bin" % frameno)
except IOError, e:
sys.stderr.write("Error: %s\n" % str(e))
return
# Replace the vertices and faces of the placeholder mesh object
editmode = Blender.Window.EditMode()
if editmode:
Blender.Window.EditMode(0)
me.verts.delete(range(len(me.verts)))
me.verts.extend(verts)
me.faces.extend(tris)
for fa in me.faces:
fa.smooth = 1
me.recalcNormals()
if editmode:
Blender.Window.EditMode(1)
if __name__ == "__main__":
main()
上記のようなスクリプトを Script タブ内の Scene Script link に追加して実行条件となるイベントを FrameChanged に設定します。これでフレーム番号が変わるたびにスクリプトが実行されるようになります。毎回ファイルを読み直すので非効率的(かなりの力技)ですが、小さなデータファイルであれば問題ないと思います。
シェープキーのありがたいところはフレーム間で頂点位置を補完してくれるところですね。例えばフレーム番号1と11の頂点位置を指定しておけば、途中のフレーム番号2〜10の頂点位置は Blender が自動的に補ってくれます。手持ちのデータファイルが大き目の時間ステップ幅で生成されていて(例えばフレーム番号1と11のデータしかなくて)、可視化の際になめらかに(つまりフレーム番号2〜10のデータを補完して)表示したいのであれば、シェープキーを使うのは確かにひとつの手だと思います。
しかし補完のためだけに苦労して Python でシェープキーを扱うくらいなら(別途単独で動作するプログラムを書くなどして)ふたつのデータファイルの間を補完するデータファイルを追加作成するのが手っ取り早いのではないか、というのが yamyam さんのご指摘だと思います。
投票数:5
平均点:6.00
Re: Pythonでabsolute shape keyを操作
msg# 1.1.1.1.1
Alex
投稿数: 14
T.K.さん、ありがとうございます。
今、出先なので、家に帰ったら早速試してみます。
yamyamさんの言われているところも理解しました。確かにそれもひとつの手ですね。
今、出先なので、家に帰ったら早速試してみます。
yamyamさんの言われているところも理解しました。確かにそれもひとつの手ですね。
投票数:6
平均点:5.00
Re: Pythonでabsolute shape keyを操作
msg# 1.1.1.1.1.1
yamyam
居住地: そうや、うちはおおさかやー
投稿数: 4405
@T.K.さん
フォローありがとうございます。Script Link のことぐらいは書けばよかったと反省しています。
@Alexさん
頂点数と対応するパラメータが固定であれば、頂点のz値を動かすだけで済むかもしれません(例:各計測値の平面上の位置が Mesh のグリッドと対応しているなど)。あるサンプル値のあるフレームでの値と、次のサンプル値のあるフレームでの値の差をとって、あとは間のフレームで値を線形補間し、対応する頂点のZ値を変更、代入してやればアニメーションできると思います。クラスについては下記を参照してみて下さい。
http://www.geocities.co.jp/SiliconValley-Cupertino/2019/blender/PythonDocJpn/Mesh.MVertSeq-class.html
フォローありがとうございます。Script Link のことぐらいは書けばよかったと反省しています。
@Alexさん
頂点数と対応するパラメータが固定であれば、頂点のz値を動かすだけで済むかもしれません(例:各計測値の平面上の位置が Mesh のグリッドと対応しているなど)。あるサンプル値のあるフレームでの値と、次のサンプル値のあるフレームでの値の差をとって、あとは間のフレームで値を線形補間し、対応する頂点のZ値を変更、代入してやればアニメーションできると思います。クラスについては下記を参照してみて下さい。
http://www.geocities.co.jp/SiliconValley-Cupertino/2019/blender/PythonDocJpn/Mesh.MVertSeq-class.html
投票数:6
平均点:5.00
6件表示
(全0件)
すべてのコメント一覧へ
ログイン
クイックリンク
2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)
●ニュース(英文)
BlenderNation
●Blenderコミュニティ
blenderartists.org
●Blender Q&A
- Blender Stack Exchange
●テストビルド
Buildbot(自動生成)
●開発関連
公式開発サイト
Blender開発blog
Blender Wiki