可能であれば計算の実行は 1 回だけにする

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 万回評価されることになってしまいます。

前のヒント

ライン全体を取得できる場合は単一ピクセルを取得しない

次のヒント

頻繁に使用する関数とオブジェクトをキャッシュする