takeyohのおぼえがき

気になったこと、試したことの記録です。

SRPで画面がブレブレになる!(SRP0.9.3PTB2)

本件は、CSPの一時的な機能バグの可能性もあり、今後改善される可能性があります。
現時点でテストしたのはCSPの0.2.3および0.2.4preview1です。

今回は、上の画の様に、走ってないのに超高速で移動しているかのような画面のブレが発生する症状についてです。

最近SRP0.9.3PTB2が公開されて、その際CSPの設定で以下が推奨されています。
CSPの設定でGENERAL PATCH SETTINGタブにあるCPU optimizations,experimentalで、Chunks optimizationをAdvancedに設定するというものです。

私が作成したカスタムレイアウトをお使いの方から、この設定をすると、上の様なブレブレな絵になってしまうというご連絡を頂いて調査しました。
ちなみに、この項目をBasicに設定すると、このブレは出ません。Advancedに設定したときのみ発生します。

結論から言うと、これはextensionの中で、MODEL_REPLACEMENTを使って、kn5を追加している場合に発生する事象でした。
私のカスタムレイアウトは飛行機、船、飛行船、ヘリコプタ、その他もろもろたくさんのkn5をMODEL_REPLACEMENTを使って挿入していました。
それが原因でブレが出てしまうというものです。

このため、カスタムレイアウト側の対応としては、MODEL_REPLACEMENTで追加しているkn5をすべてmodel_XXX.ini側に設定することでtrack起動時に一緒にkn5を読み込み、その後で、読み込んだkn5に対する設定をextensionで行うように修正しました。
この対応で、Advancedに設定しても画面がぶれることは無くなりました。

ただ私のmodに限らず、trackでMODEL_REPLACEMENTを使ってオブジェクトを追加する処理は良く行われていると考えます。
SRPのtrackフォルダ直下のextension内に追加するものや、skinフォルダ内のextensionに追加するものもあります。
結構広い範囲に影響が出るような気がしており、CSP側での改善に期待したいところです・・・。(Advancedはexperiment(実験中)ってなっているし…)

ちなみに、car mod内で使われているMODEL_REPLACEMENTはこの影響を受けません。

なんが画面がぶっ飛んでる~!という状態になった時、上記の点を一通りチェックしてみてもらえると良いかなと思います。
どうしても追加のmodを使いたいけど画面が…という方は、Chunks optimizationをBasicを選択していただくのが良いかと思います。

追伸)
ブレずにkn5を挿入する方法として、lua scriptから追加する方法があります。
たとえば、gate.kn5を追加したいとすれば、lua scirptと同じフォルダにgate.kn5を入れて、
サンプルとしてkn5insert.luaというスクリプトファイルに以下を記述。

local gate = ac.findNodes("sceneRoot:yes"):loadKN5("gate.kn5")

ext_config.iniに以下を追記

[SCRIPT_...]
SCRIPT = kn5insert.lua

これで追加されたkn5はゲーム内に追加されますが、画面がぶれることは無さそうです。
ただオブジェクトを追加するだけならこれでOKですが、MODEL_REPLACEMENTで追加したオブジェクトにアニメーションや音源、ライトの設定などを行っていた場合、これらの機能もすべてlua script上で実現しなければいけません。MODEL_REPLACMENT部分だけをSCRIPTセクションに置き換えて一旦kn5を追加し、他の設定はもともとある設定を適用するという実装はできませんでした。
もう一点、trackでlua scriptを有効にするには、当該レイアウトのdataフォルダ内にあるsurfaces.iniでextendの有効化とscriptの有効化を設定する必要があります。

[_SCRIPTING_PHYSICS]
ALLOW_TRACK_SCRIPTS=1    ; choose ones that you need
ALLOW_DISPLAY_SCRIPTS=0
ALLOW_NEW_MODE_SCRIPTS=0
ALLOW_TOOLS=0
ALLOW_TRACK_SCRIPTS_DYNAMIC_OBJECTS=1

[SURFACE_0]
KEY=ROAD
FRICTION=1
DAMPING=0
WAV=
;WAV_PITCH=0
WAV_PITCH=extended-0
...

冒頭のALLOW_TRACK_SCRIPTS=1とSURFACE_0にあるWAV_PITCH=extended-0の2つです。
しかし、こちらもオンラインサーバで使用するレイアウトの場合、このsurfaces.iniの照合が行われ、設定が異なるとキック(BAN)されてしまいます。
lua scriptによる追加の場合は、オンラインサーバで使用しないレイアウトでの利用に限られますのでご注意ください。

/* -----codeの行番号----- */