Reading mcx part1

Maya nParticleのキャッシュファイルを自前で作成したくなって、まずは読み込みから。

Devkitの中に「cacheFileExample.py」が入ってますが間違ってる箇所が多いので、必要のないものをバッサリ削って、整理して。で、いちから書きました。

One File/One file per object なmcxファイルの読み込みテストです。PythonスクリプトはTest for Reading mcx file[GitLab]へ置きました。

読み込み結果は長いので別ページ。

続きを読む “Reading mcx part1”

nParticleの初期状態の保存とAgeアトリビュート

MayaのnParticleで、ある程度シミュレーションして初期状態を作成する時、困ったことが起こります。

「Fields/Solvers > Initial State > Set for Selected」(日本語のメニューは知らん!)を実行し初期状態を保存したのちアニメーション開始フレームに戻ると、位置などは保たれたままですが、ageアトリビュートにおかしな数値が入った状態になります。

2016.5、2017、2018で確認しましたがどれもこの現象が発生します。ageを正しく保持できないという事は初期パーティクルに関して、LifeSpanで消滅させたり、ArrayMapperによる評価が正しくできません。僕だけの問題?ネット検索しても引っかからないんですけど。

以下その検証と解決方法です。

検証用のパーティクルシステム一式の作成は以下のスクリプトです。

import pymel.core as pm
myemitter = pm.emitter(pos=(0,0,0),type="omni",r=10,sro=0,nuv=0,cye="none",cyi=1,spd=1,srn=0,nsp=1,tsp=0,mxd=0,mnd=0,dx=1,dy=0,dz=0,sp=0)
npList = pm.nParticle()
np = npList[1]
pm.connectDynamic(np,em=myemitter)
np.ignoreSolverWind.set(True)
np.ignoreSolverGravity.set(True)

毎秒10個パーティクルを発生させる単純なエミッタです。パーティクルはソルバのWindとGravityの影響を受けません。これを30フレーム分シミュレーションすると以下のような状態になります。ちなみにシーンの開始フレームは1、終了を30としています、フレームレートはntsc、つまり毎秒30フレームです。

ageアトリビュートを表示した状態です。この状態(タイムスライダが30フレームの位置)でinitial stateを保存します。そして開始フレーム(1フレーム目)に巻き戻すと次のようになります。

なんかageが増えました。期待する値は初期状態を保存した時の値です。変わってもらっては困りますよね。

なぜこの値になったか、推測するに以下のような式になっているように見えます。 続きを読む “nParticleの初期状態の保存とAgeアトリビュート”