※ Source Engine ※             目次

 08/11/29


 Source EngineはValveの開発したゲーム製作用のエンジンであり、2004年以降幾つかのゲームで使用されている。

A: 初期版のソース・エンジンで動作するゲームの一例

*Half-Life 2
*Half-Life 2: Episode One
*Counter Strike: Source
*Day of Defeat: Source
*SiN Episodes

B: 2007年版の新しいバージョンのソース・エンジンで動作するゲーム。最低動作環境が上がっているので注意

*Half-Life 2: Episode Two
*Portal
*Team Fortress 2


C: 別会社がライセンスして制作したゲームで、エンジンを独自に改造している等で最低動作環境が異なる物

*Dark Messiah of Might and Magic
*Vampire: The Masquerade - Bloodlines





 使用しているゲームが多くなれば、また売れているほどそれに比例してトラブルが増える可能性が高まるのは仕方がない事なのだが、それにしても同エンジンを使用したゲームに於いては様々な問題が報告されているという状況なので、専用に対策用の頁を設ける事にした。

  Steamの公式サポート頁


 自動診断用のツールも用意されており、Steamに接続可能な環境において動作させると、問題となっている可能性のある箇所を診断してくれる。具体的にはSteam側で問題視しているソフトウェアやサービスが動作していないかのチェックになる。結果はデスクトップに貼り付けられる。

  Steam Performance Test




 同じくSteamのサポート担当から非公式ながらQS Toolkitが提供されている。動作にはMicrosoft .NET Framework 1.1or 2.0 が必要。現在ではほとんどのマシンにインストールはされていると思うが、まだならばWindows Updateからインストール可能。コントロールパネル→プログラムの追加と削除から有無を確認出来る。

 このプログラムはウインドウズのシステム関連全般のユーティリティへの起動ショートカットを集めた物だが、ここで関係があるのはSteam System Scanのボタンとなる。これを押すと上記のオンラインテストよりも詳細な分析が行われ、特にネットワーク系のポートの開放状況や、悪影響を及ぼすと思われる常駐プロセスを検出してくれる。赤字で表記された箇所から障害の原因分析を行ってみると良いだろう。


              ☆コマンドライン・パラメーター

 ソースエンジンではゲームが起動しない・不安定という場合に、パラメータを指定して動作モードを変更してのテストが可能になっている。なおゲームによっては多少指定可能なテスト項目が異なっている可能性がある。

 コマンドライン・パラメータの指定の仕方は、Steamからゲームを起動している場合には、「マイゲーム」タブ内の該当ゲームのプロパティを開いてから、一般タブ内の起動設定をクリック。出て来た欄内にパラメータを書き込む。もし複数のパラメータを書き込む際には、各パラメータの間は半角空ける必要が有る。

 Steamではなくデスクトップのショートカットから起動している場合には、ショートカットを右クリック→プロパティ→リンク先の欄のパス指定の後に半角空けて付け加える。

 例) " ...\Dark Messiah\Dark Messiah Demo\mm.exe" -autoconfig


 なおValve側ではセーフモードとして以下の様なパラメータ指定を設定している。起動しない、不安定というケースで以下の設定を欄内にコピーし、これで変化が見られるのならば以後は原因の切り分けに移る。これでもダメなら必要動作環境を満たしていないと言う可能性が強くなる。或いはソースエンジン以前の根本的な部分での問題。最新のドライバを入れていない、DirectXが最新ではない等。



旧ソースエンジンのゲーム用:     -nosound -window -dxlevel 70 +mat_forcehardwaresync 0
Orange Box以降の新バージョン用:  -nosound -window -dxlevel 81 +mat_forcehardwaresync 0

 いずれもサウンド無し・ウインドウモードで動作する。


 以下は具体的な指定パラメータの解説

-autoconfig  初回起動時に行われる自動ハードウェアの性能テストを再度強制的に行わせるコマンド。内部の設定がリセットされる。今まで動いていたのに突然動かなくなった時等に使う。成功したらその後削除しないと常に設定がリセットされてしまうので注意。
-window  フルスクリーンではなくウインドウモードで起動させるコマンド。これなら起動するのなら、リフレッシュレートの設定や、解像度の指定を変更してみる。
+map_background none  ソース・エンジンでは起動メニューに3Dエンジンを用いた背景を表示させるゲームが多く、ビデオカード側に問題が有る場合にはメニューにさえ到達出来ないという事が起きる。それを防ぐ為に背景の動画表示を停止させるパラメータ。付けるのは"-"ではなく"+"なのに注意。
-novid  起動時のムービーをキャンセルする。コーデックの問題等でムービー再生が上手く行かないのが原因で、メニューまで到達出来ていないのかどうかを切り分けるのに使用する。
-nosound  サウンド処理を一切カットするコマンド。これで治るのならばサウンド関連に問題があるという事になる。基本的にはサウンドカードのドライバの更新が第一。

 ドライバが最新ならば、ファイル名を指定して実行からDirectX診断(dxdiag)を起動してやり、サウンドタブのハードウェア・アクセラレーションを左端に下げる。これで動作するなら段階的に右へと移していって、トラブルが発生しない場所で止める。
-dxlevel  強制的に指定したDirectXのレベルで動作させるコマンド。-dxlevel 70 の様に指定する。初代のソース・エンジンを使っているゲームならば70, 80, 81, 90等が使えるが、Orange Box以後の新エンジンでは-dxlevel 81以上しか使えない。また他社制作のゲームではその都度変わってくる可能性も有る。

 第一に自動認識ではDX90等と認識しているのに、それでは正常動作しない際にレベルを落としてテストする時に使う。(ビデオカードのドライバが古い時に発生する事が多い)。或いは重い時に強制的に描画レベルを落として軽くするのにも使える。
 逆にDX9レベルのカードを持っているのに何故かDX80等と低く認識されてしまう際に、強制的にDX90へと切り替えるのにも使える。
-width  800, 1024, 1280等の解像度の幅を指定するコマンド。値に合わせて高さは自動的に決まる。
-refresh  強制的に特定のリフレッシュレートで起動させる。-refresh 60 が代表例。LCDモニターを使用している場合、自動検出の値がサポート外になって画面がブラックアウトという可能性が有るので、これで対応している値に変更してみる。
-console  起動時にコンソールを表示させる。ゲームが起動可能な状態ならば、開発者用のコンソールを表示可能にするというオプションと同じ意味なので、キーボードの設定画面から指定しても良い。起動後にチルダキー(半角・全角キー)押下でアクセス可能になる。
-32bit  64bitのOSを使用している際に、ゲームを強制的に32bitモードで動作させるコマンド。ただし64bitモードに対応しているゲームは少ない。

 その他の切り分け用のテストを幾つか。

*デスクトップを800*600か1024*768、カラーを16か32bitに切り替えてみてテスト(計4通り)
*画面のプロパティから、リフレッシュレートの設定を固定値ではなく自動(Default)にしてみる
*DirectX診断にてディスプレイのタブで、AGP Textureのアクセラレーションを無効にしてみる
*デバイス・マネージャにてモニターの認識が”不明”になっていないかを確認。不明ならばメーカーからINFファイルを手に入れる。


                                  ☆一般的な障害への対策


 以下は多くのトラブルに共通する原因とされるチェック項目となる。

Windows Updateにて必須の重要なアップデートが全て適用済みかを確認(Service Pack等)
*サウンドカードを使用している場合、オンボードのサウンド機能がちゃんとDisable(停止)になっているかをBIOSにて確認
*サウンドカードをPCIスロットのSlot3以降に挿していると問題が発生する事がある。出来るだけ若い番号のPCIスロットに挿し直す。
*USB接続のサウンドデバイスが接続されていると問題発生の可能性有り。ヘッドフォン・マイク・オーディオプレイヤーを含む全てが対象。
*ファイアウォールやルータの設定がゲームのアクセスを認可しているかを確認
DEP(Data Execute Prevention)の機能をOFFにしてみる(XP SP2以降)
 コントロールパネル→システム→[詳細設定]タブ>[パフォーマンス]を開いて、[データ実行防止]タブの中で「次に選択するのものを除くすべてのプログラムおよびサービスについてDEP を有効にする」にチェックを入れてやり、そこに該当ゲームとSteamの実行ファイルを適用除外として登録する。


サウンドがループした状態でデスクトップに落ちる

Failed to lock index buffer in CMeshDX8::LockIndexBuffer エラー
*作業切り替えを行って最小化した後、ゲームに戻ろうとした時点でハングアップ
*Steam.exeのCPU使用量が100%になってしまう

 HL2: EP1が登場した時に頻発して騒がれたトラブル。Orange Box以降の新バージョンのエンジンでは対策が行われているようだが、完全な解決にはなっていないようだ。逆にエンジンの構造上の問題なのか、旧バージョンのエンジンだと根本的な修正パッチは作れない模様。

 調査の結果、主な原因は十分なPaged pool memoryが確保出来ない為と結論付けている。これはOS側がDirect3D等のワークエリアとして確保する特殊なメモリエリアの名称。足りなくなるとDirect3Dを使っているアプリケーションがクラッシュする。

 その大きな原因として名前を挙げているのが、AVG(無料アンチウイルス), ノートンのアンチウイルス, ESET NOD32 Anti-Virus。これ等のソフトはこのpaged pool memoryを大きく確保するようになっており、その為にソースエンジンのゲームが更にそこを使うと上記の様なエラーとなってしまう。非常に厄介なのが、このエリアの確保を解除させるにはそのソフトをアンインストールするしかなく(自動起動を停止させただけではダメらしい)、そうなると困った事になるのは目に見えている。Valve側ではこれらのソフトウェアの制作会社に修正をお願いしているらしいが、今後どうなるのかは見えない状況である。

 以下はこのpaged pool memoryが原因でクラッシュしているのかどうかをテストする方法

1. MSのツール Process Explorer を入手する(日本語化も可能な様だ)
2.起動後に CTRL + i でシステム情報のウインドウを開く
3.-window パラメータを付けてウインドウモードでゲームを起動する

 その後はゲームを実際にプレイしながら、System Information > Kernel Memory (K) > Paged Physical value をモニターする。もしこれが150MBを越えるようならば、この値が多過ぎるのが原因と見て間違いない。以後はプロセスを一つずつ止めながら、値が大きく減少する物を見付ける。もしそれが停止可能なアプリケーションに関連する物ならば、それを止めてからプレイすれば良い事になる。

 PCによってはpaged pool memoryをロックしている物が有り、これは以下の方法で確認出来る。ただし修正を行う際には十分に注意して自己責任で行う事。システムの記述を変更するので、PC全体の安定性に影響する危険性もある。
 ファイル名を指定して実行から msconfig を起動。BOOT.INIタブの中に /3GB /Userva=2900 というラインが有るなら、それが起動時に確保を行っている。次にC:の中の boot.ini ファイルを検索。その中の /3GB /Userva=2900 の記述を削除してからリブートする。

 その他では以下の様な物が原因となっているケースも報告されている。

*ビデオカードのドライバが古い
*複数のビデオカード用のドライバがインストールされていないかを確認(ドライバクリーナー等で綺麗にする)
*複数のビデオカードを使用している場合、片方をデバイスマネージャから停止させる
-nosound パラメータを付けると治るのならば純粋にサウンドカード系に問題がある


サウンドがループする・遅れる
 これは主に初期に発生していた物で、サウンドが遅れて再生されたり、酷い場合にはデスクトップには落ちずにそのままでハングアップするというタイプのエラー。こちらはその後エンジン内部のサウンドデータのキャッシュ方法での修正も行われており、それ以外だと上の多くのトラブルに共通する原因とされるチェック項目が原因と言うケースが多い。


GCF Cache Filesのトラブル

*キャラクタモデルや各種オブジェクトが消えて(壊れて)見える。
materials/console/background0#.vtf エラー
Map Version is 0, expecting 19 エラー
Engine Error - Too many verts for a Dynamic Vertex Buffer エラー
*ゲームが特定の箇所で落ちる


 以上の様なトラブルが発生する場合には、ローカルに保存されたキャッシュファイルが破損している可能性がある。

 Steamを起動後に該当ゲームのプロパティから[ローカルファイル]タブを選択して、「ゲームキャッシュの整合性を確認」を実行する。これはサーバー側に保存されているオリジナルのGCFファイルを使い、ユーザー側のHDに保存されている物が壊れていないかを比較検証するテストである。ゲームのファイルサイズ及び回線速度によっては長い時間が掛かる可能性がある。
 なおテストを行う前に、それが現在既にプレイ途中のシングルプレイ用ゲームだった場合には、念の為にセーブデータのバックアップを取っておいた方が良い。以下の様に辿って行くとその中の何所かにSAVEフォルダが有る筈である。

 \Steam\steamapps\<アカウント名>\<ゲーム名>\.....


 異常が無かった場合にはそのまま検証は終了するが、異常が発見された場合には上書き確認のメッセージと解凍フォルダの指定が出る。(見た事が無いので具体的には分からない)。ここで上記のパスを辿って元のゲームのフォルダを指定するか、或いは別にフォルダを作成しても良い。起動時に解凍処理が行われる。


ゲームの途中でHDDへのアクセスが発生して短時間止まる
 Half Lifeシリーズはプレイ感覚の連続性を重視してマップ単位でぶつ切りにしないという基本方針で制作されており、プレイヤーが移動中に切れ目無く次のマップへと切り替わるというパターンが多い。その為にストリーミングの様なデータ読み込み方式を採用しており、突然移動中にロードで止まったりする仕様である。これが製作側が切り替え地点として設定している箇所でのロードやオートセーブならば異常ではないのだが、現在のHDへのアクセスがその意図されたタイミングでの物なのかがちょっと分かり難いという面は持っている。ただ敵と対戦している時に発生したりするのは明らかに予定外。

 初期のエンジンでは搭載メモリの容量に対する最適化が上手く行っておらず、このアクセスが短いインターバルで発生したりしていた。現在では最適化が進んでおり、当時の様な問題は解消されているとしている。ただしこれは搭載メモリ(ビデオカードのVRAM&メインメモリ)の容量と、オプションでの設定による使用データ量との比率で決まるので、メモリ搭載量が少ないのに設定を無闇に上げれば当然ロード回数は多くなる。
 プレイ中に頻繁にロードで止まるのならば各種設定を下げて軽くしてみる。具体的にはAdvanced設定にて自動判定された*印が付いた設定よりも上にはしないようにする。充分にメモリは搭載しているはずという場合には、コマンドライン・パラメータの欄に -heapsize 512000 の様に書いて強制的にメモリを確保する事で改善されるケースがある。(この場合には512MBをキャッシュ用に確保の意味。この設定値は搭載メインメモリの半分以下に抑えること)。


The Instruction at 0x####### referenced memory at 0x#######. The memory could not be 'read'
 この問題は非常にいろいろな可能性が考えられるとして、チェックすべきとされている項目は相当多岐に渡っている。

バックグラウンドで動いているアプリケーションやプロセスとのバッティング(このケースが最も多いそうだ)
*Windows Updateがちゃんと実施されているか
*DirectX は最新か
*マザーボードのBIOS更新(特にASUS)
*オーバークロックの停止
*リフレッシュレートを強制的に書き換えるプログラムの停止
*K-Lite pack等のサードパーティー製のコーデックの停止
*ページングファイル(仮想メモリ)のサイズをOS任せにせず、自分で搭載メモリの1-2倍程度に設定する
*ビデオカード側のユーティリティによる上書き設定を行っているなら切る(ATIならCatalyst AI等)

 その他実際にメモリの問題という可能性も有る。メモリモジュールが複数枚有るなら減らして試す。またはBIOSからCASを変更したりメモリ用電圧を上げる。或いはMemtest等の負荷の大きな診断プログラムでメモリモジュール自体に問題が無いかをテストしてみる。


パフォーマンスが悪い
 ロード時間が長い。サウンドが途切れる。重そうな場所でも無いのに時々カクカクとするといった問題。まず自動的に判定されたオプションの値でも問題が起きるのかをテストしてみる。またデュアルコアのCPUの場合には片方を止めて変化が有るかをテスト。後はプロパティ→[ローカルファイル]タブ内の「キャッシュファイルのデフラグ」を試す。


Intelのオンボード系グラフィックスの問題
 グラフィックスにインテルのチップを使用しているPCにて、Half-Life 2は正常動作するのだが、Orange boxで新規に加わったPortal, Team Fortress 2, Half-Life 2: Episode Twoが、フリーズやクラッシュで安定して動かないというトラブル。インテルのドライバに問題が有るそうだが、対応ドライバが出るまでの暫定的な対策。

 第一にコマンドラインに +mat_bumpmap 0 +mat_picmip 2 を追加してテストを行う。これでも治らないのならば、
\Steam\steamapps\<アカウント名>\portal\portal\cfg の中の config.cfg を開いて、
その中に mat_max_worldmesh_vertices 1024 の行を追加してみる。


Failed to create D3D device
 Direct3Dに対応したビデオカードが無いか、エラーになっているというメッセージ。ドライバが古いというのが一番の原因。或いは必要環境に達していないビデオカードを使っている時も発生する。HL2やEP1は動いたのにEP2が動かないという場合には最低動作環境を確認。

 対策としては旧バージョンのゲームならば -dxlevel 70 等で起動するかを試す。Orange Box以降ならば -dxlevel 81 以上しか使えない。


Internal driver error in IDirect3DDevice9:: present()
 ドライバが古いか壊れている。または各種Advanced Optionの設定が正常に実行出来ていないという時にも発生する。アンチエイリアスやHDR、Shader等の設定を下げて試してみる。ファイアウォールに認可されていない時に発生する事も有るようだ。


Engine Error: unable to init shader system
 ドライバが古いというのが一番の原因。或いはShaderの設定が高過ぎてビデオカードが処理出来ていない。それと二画面表示のビデオカードを使っている場合には、片方を止めないと問題になる可能性がある。


not enough disk space to run steam
 管理者権限を持っているかを確認。Vista使用時なら、右クリックして「管理者として実行」を使う。


セーブゲームが破損してしまった
 コンソールを開いて sv_cheats 1 を入れてEnter。その後 sv_unlockedchapters 15 を実行。これでNew Gamからチャプター単位でなら開始出来るようになる。



    目次