Poly to Poly
Main/History
GraphiX
LScript
Plugin
Knowledge
Blog

 [ 仕様面 八苦 9.2対策 9.3対策 9.3.1対策 ]

◇Lightwave9.3のバグや問題点と対応策を思いつくままだらだらとメモしとく(07/12/13更新)。
 W2K、ATI RADEON 800GT/Catalyst6.2での話。

 Catmull-Clarkが色々問題抱えてるのは相変わらず。 何も改善されてないと言っても過言では無い状態。

○モデラ

●SmoothShift
 四角ポリゴンの法線の状態によっては正常に機能しない。
 LW9.3から法線計算が変わったみたいで、LW9.3以前で問題の出ないデータでもLW9.3/9.3.1では破綻する。
 基本的にLW9.3での法線表示がされない状態のポリゴンで問題が出る。
 三角や「く」の字状態になってる四角ポリゴンがあるとNGって感じ。 それがトリガーになって周囲にも影響するのが味噌。
 対策としては法線表示が出るようにポリゴンを構成する頂点順をLW9.3の計算に都合の良いように組み替えるか、三角分割してからSmoothShiftする。かな。
(9.3.1でもそのまま。)

●頂点選択状態とRevertCurrentObject(再読込み)
 オブジェクトにある程度の頂点数(データ量?)があり、幾ばくかの頂点選択がある状態で実行すると落ちる。
 遡ったらLW8.5でも落ちた。
 LW9.2の時の問題と同じ根を持つかも。LW9.2の時は頂点追加の影響で顕著化してただけとか。
 球を三角分割20とかで作り(約4000頂点)保存した物に数点の移動と100〜1000程度の点選択した状態でRevert実行すると落ちる。
 600頂点程度のモデルでも数点の選択をした状態でRevertを数回すると落ちる。
 オブジェクトの頂点数が多い程落ちる確率が高い?
 対策用のLS LSだけじゃ選択モードを維持して各モードの選択を解除出来ないので拙作の選択解除プラグイン(DeSelectsAll)が必要(;・з・)
 InvertHide対策とRevert対策を1ファイルに纏めたプラグイン版(DeSelectsAll不要)。
(9.3.1でもそのまま。)

●SetCC/Face/Subpatch
 ModelerTools.pとModeling_Pack.pの両方に入ってる。どちらが登録されるかは環境依存(自動/手動登録etc)。
 どちらが正式(メンテ対象)なのかは不明だけど、Toolsの方がServerTagが多く、また初期設定もToolsのSet〜なので、本命はToolsの方かも。
 何か問題が出たら差し替えて(プラグイン登録し直して)確認してみるのがよさげ。
(9.3.1でもそのまま。)

●Catmull-Clarkとモーフ
 Catmull-ClarkでFreeze Curve&Patchesするとモーフが消える。
 解決策無し。
(9.3.1でもそのまま。)

●BGConform
 モデルファイルを跨いで実行すると落ちる。
 同一ファイル内であれば大丈夫。(ファイルを跨いでても8.5では問題なく処理され、9.0では落ちないが処理は行われない。)
 モデルA(1Layer)を作成&保存。 そのままモデルB(1Layer)として別名保存。 Aを読み込み。
 A,BをFG/BGに配してBGConformを実行すると無言で即落ち。
 モデルA,Bを読み込み。 同様に配して実行するとWindowsのアプリケーションエラーダイアログを出して落ち。
 モデルA,Bを新規に作成(未保存)。 同様に配して実行するとWindowsのアプリケーションエラーダイアログを出して落ち。
 対応策はファイルを跨ぐな。 使うな?(゜д゜)
 運用スタイルにもよるけど、レイヤ内データの有無変化に対応出来てないHUBによるアイテム無限増殖問題と衝突するから、数珠繋ぎにコレへの対策も必要。
(9.3.1でもそのまま。)

●ユーザコマンド
 相変わらずLW9から壊れたまま放置。
 モデラのSaveCommandListで取れるリストの各項目のパラメータ部は文字化けしてる。レイアウトは問題無し。
 対応策無し。 無い物と思うしかなさげ。
 LScriptのCommandInputで使えるのはリスト内の上からclose_all(aboutの上)迄(多分メニューのExecuteCommandでも同じ)。
 メニューのUserCommandは外部プラグイン+meshedit迄しか出ない。
(9.3.1でもそのまま。)

●全フォントリスト強制取得
 LW9.3からOSにインストールされてるフォントのリストを起動毎に取得するのが仕様になった。
 LW上のフォント登録/管理機能は無意味になった。
 LWの起動速度の低下といった弊害があるが、9/9.2の様に設定ファイルへは書き出さないので無駄な処理は最小限になってる模様。

●表示オプション/レガシーGL表示のON/OFF
 設定を記録しないので毎回パネルを開いて設定し直さないといけない。
 対応策無し。
(9.3.1でもそのまま。)

●新GL表示
 論外。 9.2から変わらず。

●新GL表示&SortByPolygon?
 テクスチャ表示時にファイルを跨いだレイヤ選択をすると落ち事がある(ATI X800GT/Cata6.2)。
 条件不明。
 GLのバッファやビデオカードのメモリの残量等によるかも?(LW多重起動時のパネル描画問題に類する感じで)
 APSL(VMAD)やVMPA、Node等を持たない旧来型データを読んだ際に内部データに問題が出てるかも?(単に動作確認に9型データより7/8型データを多用してるせいで目立つだけかもしれないけど)
 LegacyGLやGL表示オプションを切り替えた時に何かしらの問題がおきてるかも?(パースビュー上のモデルにカメラ投影のような形でマッピング設定とは関係無しにテクスチャ画像が加味されて表示される事があった)
 何かの拍子でGameModeに入ったか、偶然GameModeだった?(以前はGameMode+GLSLという段階で即落ちしたから可能性は低いか)

●モーフ表示(新GL表示)
 同一モーフを持つレイヤ/ファイルが複数あり、いずれかのレイヤを表示中にモーフ選択状態(右下やVMapWindow)を変更した場合、非表示だったレイヤを表示対象にした際に不正な表示になる。
 対応策は、まともな表示になるまでモーフ選択のOn/Offを繰り返す。
 VBOで駄目ならStreamに切り替えてみる。
(9.3.1でも変わらず。nVidia&VBOでの動作状況が知りたい所。)

●UV FreeMove
 不連続UVの値が 値n<=0.0 や 値n=>1.0 の個所等に対して、ポリゴン選択とFreeMove+Dragを使い頂点に触ると、VMAD側頂点がVMAP側頂点座標に強制的にスナップされる。
 発生条件に多少の御幣あり。 シリンダ/スフィアでUV作成した時などによく問題になる。
 △分割の球を作り、円柱でUV作成する。上の方の△の羅列をポリゴン選択し、UVの-X側にはみ出てる三角の左端頂点をクリックすると+X(右側)にすっ飛んでいく。
 対応策は「そうするな」って感じか。 やっちゃっても取り返しはつくから我慢してね、と。
(9.3.1でもそのまま。)

 ポリゴン選択で選択した状態でFreeMove ONで編集すると、選択範囲と非選択の境界部が不連続UV化される。
 これ自体にはデータの肥大化以外の害は無いけどね。
 FreeMove+ポリ選択は禁じ手。 ポイント選択で凌げ。
(9.3.1でもそのまま。)

●Transform UV(UV値変換)
 UVマップが選択されていないとオブジェクト形状自体が変形される。
 対応策はUVマップを選択し忘れないで下さい、ってとこか。
 UVマップが空であっても選択さえされてれば形状に干渉はしない模様。
(9.3.1でもそのまま。)

●UV補間とUVビューの描画
 UV補間モードがLinear以外の時、UVビュー上でクリック(Mouse Down)を受けている間は全ビューでLinear補間として表示される。
 ドラッグ中は曲線補間の描画(UV線画、プレビュ)を見る事が出来ない。 また、表示が逐次切り替わる為に操作しづらい上、クリック頻度によっては脈動してるみたい見えて気持ち悪い。
 これにより補間モードを変更している場合は実質的に役に立たない状態。
 対応策無し。
(9.3.1でもそのまま。)

●VMAP名を変更した時の問題
 名の先頭文字列を変えた場合VMAP関係の処理で挙動不審になる。
 種明かし的には内部のVMAPリストの更新(ソート)が正しくされてなかったのが原因らしい。
(9.3.1で解消。)

●内部動作
 editBegin(,OPSEL_D/U);〜done(,EDERR_NONE,n);内で何もしなくてもUndoを消費するようになった?
 選択頂点数の取得の為だけにeditBeginするような場合、出来るだけ明示的にUSERABORTさせるのがよさげ。
 で、これのせいで事前に状況走査してからパネルを出すタイプの内蔵機能でキャンセルをしてもundoバッファが消費されたり、LScriptに影響したりするわけと。
(9.3.1でもそのまま。新仕様として押し切り?)

●LScript2.11
 一部のコマンドで不適切な値を返すのを直したみたいだけど、今更やられてもなぁ。
 hypot()は死んだまま。
 weldaverage()は死んだまま。
 @versionは文字列、@行内で使うversionは小数。LWのバージョンによって分岐させる方法がLWのバージョンに依存しててぐちゃぐちゃに・・・。
 無闇やたらとUndoバッファを浪費するようになった。
 SDK APIに変えた組んだ時、editBegin〜doneを使うような状況がundoバッファを消費させてるっぽい。

●内部コマンド selhide
 selhideで局所的にポリゴンを隠す処理をするとポリゴンは隠れるが選択マーカーが出たままになる(対称モードでの選択問題と同様)。
 ポリゴン選択では非表示ポリゴンを対象に出来ないので選択状態を解く事は出来ない。
 move等の別ツールでビューポート上をクリックすると不正なマーカーを消せる(表示の適正化のみを目的とする場合は何も無い所をクリックしないと駄目)。
 この状態はLScriptやプラグイン/コマンドに選択有りとして渡される模様。
 LScriptでは選択として認識されるが(不可視属性ゆえに?)存在しないとしてエラーになるみたい( selhide(SELECTED); selpolygon(CLEAR)の二行CodeでNG )。
 選択状態のみを見てる機能は隠れているポリゴンに対して通常の処理を行うっぽい(Deleteとかetc)
 モデラ自体のコマンドHide Selectedであれば上記現象は出ない。 LW9/2.8でも問題ない。
 LScriptのselhide()、CommandInput(〜selhide〜)、コマンドシーケンスプラグイン(DLL)でのexecute(〜SEL_HIDE〜)全てでNG。
 LScriptの場合、問題が発症している状態でmove()等を捨て実行(移動量0等)する事で回復出来るが、Undoバッファを消費する。
 バッファを消費させない為にselhide→move→undo→終了とすると、不正な状態に戻してから終了するので意味がない。バッファ消費は妥協するしかなさげ。
 SDKのSEL_系では解除不可。 MeshEditOpで一つ一つフラグを変更すれば恐らく解除可能(標準のDeselect Allのエッジへの処理では可能だった)。
(9.3.1でもそのまま。)

●コマンド Hide Selected(9.2から)
 頂点選択状態を破棄する。エッジ選択状態は保持される。
(9.3.1でもそのまま。)

●対称モードでの選択
 隠しているポリゴンも選択される。
 左右対称の箱作って片方を隠して、残った片方を選択すると、隠してる方も選択される、と。
 LScriptのselhide()と似た状態が出来る。 但しこちらは選択状態を変更しなければ選択解除用機能で解除は可能。
 それ以外ではselhide()と同じ。
(9.3.1でもそのまま。)

●Invert Hidden(反転)(9.2から)
 Invert Hiddenで隠れる事になる点、ポリ、エッジに付いていた選択マーカーが残る。
 selhide、対象モードでの非表示ポリゴン選択問題に類する問題。
 対策用のLS LSだけじゃ選択モードを維持して各モードの選択を解除出来ないので拙作の選択解除プラグイン(DeSelectsAll)が必要(;・з・)
 InvertHide対策とRevert対策を1ファイルに纏めたプラグイン版(DeSelectsAll不要)。
(9.3.1でもそのまま。)

●LWSを直接参照する機能/プラグイン
 Lightwave 9.2 ネイティブのLWS4を扱えない物。 LWS3としてエクスポートした物は可能。
 VertexPaint(vtxPaint.p)のVertexLoader(3.5.6)。
 MMRenamer.p。


○レイアウト

●TargetItem時のRotate
 アイテムを任意目標にターゲットした後、アイテムを移動させた直後はRotate値が適切に取得されず正しいキーが打てない。
 ターゲット→直後のRotate値更新(*1)→移動(RefreshするまでRotate値は*1のまま)→強制Refresh(*2)
 Rotateを正しく取得出来るのは(*1、*2)の時。
 対応策はショートカットキーにRefreshNow()を割り当てて連打(w。
 PiviotRotateに対応してないのもそのまま。 対応する気があるのかは謎。
(9.3.1でもそのまま。)

●RenderGlobalのMultiplier(解像度の倍数)指定
 Multiplierを変更してもパネル上のWidth/Height値に反映されない。
 resolution(解像度)プルダウンに触る事で再描画される。
 見た目だけの問題でレンダリングには影響無し(レンダリング後のUI再描画で適切な値になる)。
(9.3.1でもそのまま。)

●GL表示
 頂点カラーが効かない。 頂点カラーを使う人には致命的。
 それ以外の点に関しては良くも悪くもないってない模様。
 Transparencyにイメージや基本値以外の動的な値を使ってる場合は基本値に0以上(0.0001等)が必要(ATI/nVidia)
 Specular+Transparencyのサーフェスに他サーフェスのパラメータが干渉する(ATI)。
(9.3.1で悪化。)

●グラフエディター
 Track Item Selections(トラックアイテム選択)はSelectItemコマンドしか捕捉しない。
 標準で矢印キーに割り当てられてるのはnext/Pre〜だから捕捉されない、新シーンエディタはAdd&Removeなんていう変な事やってるから捕捉されない、と。
 仕様と言えば仕様だけど、仕様バグというか開発者の思考バグ。
(9.3.1でNext/Pre Itemは補足するようになった。)

●カメラビュー時の常時MotionBlur
 カメラビュー使用時にビュー枠のプルダウンからMotionBlurの常時プレビューが選択出来るようになった。
 但し、常にRefreshを掛けつづけるので、その間はAutoKey OFFによる未確定型(要キー打ち)のモーション編集が出来ない。
 移動/回転操作→Refreshが掛かってキャンセルの無限ループとなる。
 対応策はAutoKey ONで使え。
(9.3.1でもそのまま。仕様化?)

●プレビュー作成
 1フレーム目が適切に処理されずゴミデータになる。
 バッファをOpenGLのバックサーフェスにしている場合、1フレーム目でジオメトリが描画されない(サブパッチケージは表示される)。
 フロントの場合、表示されていた物(現在時の状態)が1フレーム目としてキャプチャされる。
 別項目をDirectDrawにする事でバッファにDirectDrawを指定する事も出来るが論外な結果になった(GPUやOS、ドライバに依存する可能性はある)。
 対応策はバッファをフロントにし、プレビュー作成を開始する際に現在時をその先頭フレームにしておく事で擬似的に正常な状態を得る。
 左右にゴミが残ったりするけどね。
(9.3.1で悪化。)

●MotionMixerとExtendedChannel(MorphMixer)
 LW9〜LW9.3ではCreateMotionでMorphMixerのChannelのキーを適切に取得/操作出来ない。 また不正終了のトリガーにもなる。
 LW8.5では問題なし。
 例として、1)モーフ付きオブジェを読み込む。 2)MorphMixerを適用。 3)そのチャンネルの10フレームにキーを打つ 4)MotionMixerを適用。 5)CreateActor>ActiveActor OFF 6)CreateMotion(0-10frame、DelKey) 7)AddMotion>ActiveActor ON。
 LW9〜9.3では(6)において10フレームだけではなく0フレームのキーも消える。 LW8.5では0フレームのキーは残る。
 LW9〜9.3ではモーフチャンネルのキーが取得出来ていないので(7)迄済ませても適切なアニメーションを得られない。 LW8.5では問題無し。
 ClearSceneした後、同じ工程を繰り返すと、LW9〜9.3では(6)の段階で不正落ちする。 LW8.5では問題無し。
 既存のシーンを読み込む分にはLW9.0でも使えるらしい(再生のみ?未確認)。
 対応策は(6)でDeleteKeyをOFFにし、キーをそのまま残す(どうせ上書きされる)か別途手動で消す。
 但し、不正終了のトリガーがDeleteKey動作に依るものなのか、MotionMixer全体に依るものなのか不明なので、使う時は覚悟して使う必要がありそう。
(9.3.1で解消。)

●LoadFromSceneと新SceneEditor
 新SceneEditorの付いたシーンをLoadFromSceneで追加すると落ちる(らしい)。
 SpreadSeet/SceneEditorは信頼以前に信用して無いから、間違えてアタッチしたら速攻でテキストエディタを使って消す習慣がついてるので遭遇した事は無い秘密。
(9.3.1で解消したらしい。未確認。)

●アドバンスドカメラ
 アドバンスドカメラで標準のセルエッジ等が出ないのは仕様。


○スクリーマネット


○その他