チリペヂィア

リンクフリー。サンプルコードなどは関連記事内でライセンスについて明示されない限り商用利用なども自由に行って構いませんが、自己責任でお願いします。またこれら日記内容の著作権自体は放棄していません。引用部分については引用元の権利に従ってください。

Gradientの制御点は8個までらしい

Gradient.SetKeysにセットできる制御点の個数はアルファもカラーも8個が限度みたいです。GradientEditorを使ってて「アレレ?」と思い、試しにスクリプトから無理やり制御点をセットしてみると、こんな例外が。

Max number of color keys is 8 (given 99)

Max number of alpha keys is 8 (given 99)

自由長に対応するのもコード量自体はそれほどたいしたことないはずなのに、ちょっち予想外。こういう処理はいかにも要素数に線形で処理負荷が増えるもんだと思っていたのですが、それより単に実行速度を重視したんだろうと勝手に解釈します(*1)。しかしドキュメントに「Note that the alpha and colors keys will be automatically sorted by time value and that it is ensured to always have a minimum of 2 color keys and 2 alpha keys.」って書くくらいだったらついでに「Keys are limited to up to 8 keys.」とかも書いておくれよぅ、という感じ。ドキュメントって、イケてない実装もそれならそれでキッパリ書いた方が、より文書化の意味があると思うんです。

*1:仮にEvaluate処理を自作するとなると、time以下の最大のキーポイントとその次のキーポイントを探索する処理が必要になるはず(前後の二点間で線形補間するため)。配列数を完全自由長の仕様にして線形探査をベタ書きするすると、timeが検索後半の場合に結構アレな処理コストになる可能性があります。SetKeysメソッドがあって、ソートしてると言うのだから二分探査してるんでしょうけど。しかしそうなると今度は構造体を初期化するたびにソート処理を長々フックするのか、という問題ががが。ぶっちゃけ個人的には、そのへんの実行処理コストはしょうがない、どうしてもかかるだろう、くらいのつもりでしたが、まさかの個数制限仕様でした。