TAG
tutorial
MoGraphの複製数を増やした時,新しいクローンをニョキっと生やす
タイトルわかりづらいですが…
MoGraphの複製数を増やした時に,いきなりクローンが現れるのではなく,徐々に大きくなりながら現れて欲しい時のためのスクリプトです.今やってる制作で作りました.
import c4d
from c4d.modules import mograph as mo
prevCnt = 0
def main():
global prevCnt
md = mo.GeGetMoData(op)
if md==None: return False
cnt = md.GetCount()
marr = md.GetArray( c4d.MODATA_MATRIX )
if prevCnt < cnt :
for i in xrange( prevCnt, cnt ) :
marr[i].Scale( 0.001 )
md.SetArray( c4d.MODATA_MATRIX, marr, True )
prevCnt = cnt
return True
ディレイエフェクタは,スケールが0からの補間の場合変な挙動をするのですが,現在のフレームで新しく登場したクローンのスケールを1フレームだけごく小さな数に設定する事で,補完が上手く効くようになります.
上の動画みたいな単純な例なら複製数を変えずにボリュームエフェクタでマスクをかけるような感覚でスケール -0.999 を適用したほうが早い気もしますが,頂点数の変わるポリゴンやマトリクスに配置した場合,例えばThinking Particlesと併用した時や,伸長するスプラインに配置した時などに使えそうです.
最近C4DのPythonイジってないからかなり忘れてる…
MoGraphのクローンにオブジェクトを追従させる
Thinking Particlesでストレンジ・アトラクタ
Thinking Particlesを使ってストレンジ・アトラクタをシミュレーションするサンプルです.
Xpressoの中身をみるとわかりますが,Pythonノードで一括で座標の更新をしています.
def lorenz_attractor(p, a, b, c, dt):
c /= 10
dx = -a*p.x + a*p.y
dy = -p.x*p.z + b*p.x - p.y
dz = p.x*p.y - c*p.z
p.x += dx * dt
p.y += dy * dt
p.z += dz * dt
コードを簡略化するために,オイラー法を使っています.
要するに,現在のパーティクルの座標をもとにパーティクルにかかる力を計算し,その分だけ座標をずらしている話なので,ローレンツアトラクタに限らず,汎用性は高いです.バネのような動きを作ったり,渦巻きを描かせたりなんてことも出来ます.