loose usage about hardOps (hops sort tests)
- 主旨
- ソートルール実験
- テストケース1:全部のせパターン(昇順)
- テストパターン2:全部のせパターン(降順)
- テストパターン3:Arrayのみソート(昇順)
- テストパターン4:Arrayのみソート(降順)
- テストパターン5:Arrayのみソートで Sort Lastはしない(昇順)
- テストパターン6:Arrayのみソートで Sort Lastはしない(降順)
- テストパターン7:全てのモディファイアをソートし、 全てのモディファイアのSort Lastはしない(昇順)
- テストパターン8:Sort 設定の奇数は On、偶数は Offにする、全てのモディファイアのSort Lastはしない(昇順)
- テストパターン9:全てのモディファイアをソートし、 全てのモディファイアのSort Lastはしない(順不同)
- テストパターン10:Sort Modifier を Offにした上で全てのモディファイアをSort 設定をonにし、 全てのモディファイアのSort LastをOnにする(昇順)
- テストパターン11:Sort Modifier を Offにした上で全てのモディファイアをSort 設定をoffにし、 全てのモディファイアのSort LastをOffにする(昇順)
- テストパターン12:全てのモディファイアが必ず複数個存在し、全てのモディファイアをソートし、 全てのモディファイアのSort Lastをする(昇順)
- ソートルール実験
主旨
hardOps の hops sort 機能の挙動が気になったのでテストしてみた結果の記事です。
本編はこっち
ソートルール実験
読んでもルールが分からないので、観察してみることに。
観察方法は パターン網羅
で行う。
全て off の場合はソートなしと同じなので、まずは当然のように全ての条件を on にする。
テストケース1:全部のせパターン(昇順)
まずは全てのモディファイアを、 オプション設定の順序に沿って
積み上げる
処理前後のスタック部分だけ抜粋。
上の結果から確実に判明した部分だけを記載すると、以下の通り。
- Cast モディファイアは
HardOps経由のboolean
を実行すると、最初に実行する - boolean モディファイアは Cast モディファイアよりも後に実行する
- Sort と Sort Lastに指定したモディファイアは、boolean モディファイアの後へとソートされている
- Weight Normal モディファイアは最後に実行する
その他にはソートや Last Sortの On / Offで変わる可能性はあるが、全部のせからは判断できない。
テストパターン2:全部のせパターン(降順)
次は全てのモディファイアを、 オプション設定とは逆の順序に沿って
積み上げる。
処理前後の比較
上の結果から確実に判明した部分だけを記載すると、以下の通り。
- Cast モディファイアは
HardOps経由のboolean
を実行すると、最初に実行する - boolean モディファイアは Cast モディファイアよりも後に実行する
- Sort と Sort Lastに指定したモディファイアは、boolean モディファイアの後へとソートされている
- Weight Normal モディファイアは最後に実行する
テストパターン3:Arrayのみソート(昇順)
まずは Sort Modifier のみ確認していく。
array のソートについては以下の法則が記述されている。
sort array - ensures array is last so it shows booleans in all subparts
では実験
処理前後から確実に分かる内容は以下の通り
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - Array モディファイアは Sort と Sort Last の影響を受けて 後ろにソートされた
- Sort Last を選択したモディファイアであっても、必ず最後になるわけではない
- Weight Normal モディファイアは最後に実行する
テストパターン4:Arrayのみソート(降順)
テストパターン3とはモディファイアの順序を逆にして実行する。
処理前後から確実に分かる内容は以下の通り
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - Array モディファイアは Sort と Sort Last の影響を受けて 後ろにソートされた
- Sort Last を選択したモディファイアであっても、必ず最後になるわけではない
- Weight Normal モディファイアは最後に実行する
テストパターン5:Arrayのみソートで Sort Lastはしない(昇順)
次は Sort Last を外して Sort Modifier だけの状態にした Array モディファイアを確認していく。
処理前後から確実に分かる内容は以下の通り
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - Weight Normal モディファイアは最後に実行する
挙動から不明な点が一つ
- Sort Last を選択していないにも関わらず、 Sort 対象となった Array モディファイアが後ろにソートされた
- HardOpsの Array ソートルールに従えばあっているようにも見えるが・・・?
テストパターン6:Arrayのみソートで Sort Lastはしない(降順)
次は テストパターン5の逆パターン。
処理前後から確実に分かる内容は以下の通り(テストパターン5と同じ)
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - Weight Normal モディファイアは最後に実行する
挙動から不明な点が一つ(テストパターン5と同じ)
- Sort Last を選択していないにも関わらず、 Sort 対象となった Array モディファイアが後ろにソートされた
- HardOpsの Array ソートルールに従えばあっているようにも見えるが・・・?
テストパターン7:全てのモディファイアをソートし、 全てのモディファイアのSort Lastはしない(昇順)
テストパターン5およびテストパターン6で発生した不明点の確認ケース。
全てのモディファイアをソートする条件下でもArray モディファイアがWeigh Normal を除いた最後へと配置されるのかテスト。
処理前後から確実に分かる内容は以下の通り(テストパターン6と同じ)
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - ソートを選択したモディファイアは全て後ろにソートされた
- Weight Normal モディファイアは最後に実行する
ここまでから推測できる内容は以下の通り
- boolean を実行すると、 booleanモディファイアを一番最後に配置する
- これはblenderの通常仕様と同等なので、仕様通り
- boolean を実行した際、 Cast モディファイアがあればそれをbooleanの直前へ並び替える
- これは HardOps のソートルール通り
- Sort Modifier でソートを On にしているモディファイアは、 boolean の後へと回される
- テストパターン5、テストパターン6、テストパターン7の結果から判断
- ソート対象とした場合とそうでない場合で boolean 実行後の並び順が変わったため
テストパターン8:Sort 設定の奇数は On、偶数は Offにする、全てのモディファイアのSort Lastはしない(昇順)
テストパターン7から、ソートは モディファイアに関係なく Onならば booleanの後、Offならば移動なし となるのではないかと推測したためテスト。
ちなみに奇数をOn にしたのは、Weight Normalが偶数番号の設定だったため。 これをoff に含めた場合も順番はそのままか見たかった。
処理前後から確実に分かる内容は以下の通り(テストパターン6と同じ)
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - ソートを選択したモディファイアは全て後ろにソートされた
- このことから、 Sortで選択したモディファイアは、 boolean モディファイアの後へソートされる と分かる
- Weight Normal モディファイアは最後に実行する
- Sort の選択 On / Off には関わらない
テストパターン9:全てのモディファイアをソートし、 全てのモディファイアのSort Lastはしない(順不同)
これまでのテストから、ソートを on にしたモディファイアは boolean 実行後、 boolean モディファイアの後ろにソートされるのが分かっている。
しかし、複数の対象が存在する状態でソートを実行した時に、モディファイアの並び順は実行前と同じであるかは観察できていない。
このテストパターンでは、それを確認する。
処理前後から確実に分かる内容は以下の通り
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - ソートを選択したモディファイアは全て後ろにソートされた
- このことから、 Sortで選択したモディファイアは、 boolean モディファイアの後へソートされる と分かる
- Weight Normal モディファイアは最後に実行する
- Sort の選択 On / Off には関わらない
- Cast, Weight Normal といった特殊なルールに従うモディファイアを除き、ソートを選択したモディファイアはソート前の順序を守っている
- このことから、パネルの並びと実際のモディファイアの並びに関連性はないことが分かる
テストパターン10:Sort Modifier を Offにした上で全てのモディファイアをSort 設定をonにし、 全てのモディファイアのSort LastをOnにする(昇順)
ここまでのテストで、 Weight Normal モディファイアはソートの On / Off に関わらず、boolean 実行後は最後にソートされる ことが分かっている。
しかしこれまでは ソートの Off はパネルのみで実行してきた。
ソートを Off にする方法は Sort Modifier のチェックボックスを Off にすることでも選択できる。
このテストパターンでは、 Sort Modifier のチェックボックスを Off にした状態を観察する。
ただし、通常のUI設計から考えれば親元の sort modifiers の on にしなければ 詳細設定は参照しないはずなので、詳細設定側は全て On にする。
設定から考えれば、チェックボックス Off でもWeight Normal がソートされた場合はバグに近いわけだけど・・・
処理前後から確実に分かる内容は以下の通り
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - 詳細設定で全て ON にしていたソートは、 一部の例外を除いて Sort Modifiers をOff にすると実行されない
- sort modifiers の選択 On / Off には関わらず、Weight Normal モディファイアは最後に実行する
テストパターン11:Sort Modifier を Offにした上で全てのモディファイアをSort 設定をoffにし、 全てのモディファイアのSort LastをOffにする(昇順)
テストパターン10の結果が予想と大きく異なっているため、それの確認を行うテスト。
UI設計的には親の設定の On / Off があれば子の設定はそれに影響を受ける。
しかし、Cast および Weight Normal モディファイアは Sort Modifiers の設定に関わらずソートが発生した。
ここでのテストは、子の設定も全て off にしても上記2つのモディファイアはソートが発生するかの確認を行うためのテストとなる。
処理前後から確実に分かる内容は以下の通り
- Cast モディファイアは Sort に関わらず
HardOps経由のboolean
の前に配置された - 詳細設定で全て Off にしていたソートは、 一部の例外を除いて Sort Modifiers をOff にすると実行されない
- sort modifiers の選択 On / Off には関わらず、Weight Normal モディファイアは最後に実行する
テストパターン12:全てのモディファイアが必ず複数個存在し、全てのモディファイアをソートし、 全てのモディファイアのSort Lastをする(昇順)
ここからは別パターンのテスト。
ソートの対象となるモディファイアが複数個存在した場合、ソートはどのような挙動をするかのテスト。
処理前後から確実に分かる内容は以下の通り
- 多重化しているモディファイアは、一つだけがソートの対象となる
- sort modifiers の選択 On / Off には関わらず、Weight Normal モディファイアは最後に実行する
- このモディファイアのみ、多重化は関係ない。 存在する全ての Weight Normal モディファイアは最後に回される
もしかすると、モディファイアのスタック内に同一種が複数あることは想定していない?