Re: Pythonでabsolute shape keyを操作

投稿ツリー


このトピックの投稿一覧へ

通常 Re: Pythonでabsolute shape keyを操作

msg# 1.1.1.1
depth:
3
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009/12/8 6:55
T.K.  新米   投稿数: 10
もしシェープキーを使わなくてもいいのでしたら、Script Links を利用すれば目的を達せられるのではと思います。

参考までに以前作った 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

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki