MAXScript ではコードが最適化されません。自分で最適化する必要があります。
同じ計算を複数回実行したり、同じノードの同じ値を複数回参照したりしなでください。
テスト ケース:
fn test4a inVal = ( local res = 0 for i = 1 to 100 do res += ((inVal * 10) + i) res ) --show the same nice black-red gradient
fn test4b inVal = ( local res = 0 local temp = inVal * 10 for i = 1 to 100 do res += (temp + i) res )
100,000 回の繰り返しの場合
test4a 0 -- 20562 msec. test4b 0 -- 17797 msec.
できるだけ高速に処理したいスクリプトの典型的な例としてはパーティクル フローの Script オペレータもあります。通常のスクリプト オペレータでは、現在のイベントのパーティクル コンテナ内のすべてのパーティクルを巡回し、それぞれに対して何らかの処理を行います。
典型的な Proceed ハンドラは次のようになります。
良いコード
on Proceed pCont do ( count = pCont.NumParticles() for i in 1 to count do ( pCont.particleIndex = i pCont.particleVector = pCont.ParticlePosition ) )
処理するパーティクルの数を含む「count」変数が 1 回だけ評価された後、i ループの上限として使用されていることに注目してください。
これは次のように記述することもできます。
悪いコード
on Proceed pCont do ( for i in 1 to pCont.NumParticles() do ( pCont.particleIndex = i pCont.particleVector = pCont.ParticlePosition ) )
しかし、このように書くことはお勧めできません。パーティクルが 100 万個ある場合、pCont.NumParticles()
は 1 回だけではなく、100 万回評価されることになってしまいます。
前のヒント
次のヒント