2009年8月アーカイブ

Broken SteelとPoint Lookoutがパッケージ販売されました。最後のDLCのMothership Zetaはこれだけ単品でパッケージ売りするとも考えにくいので、GOTY editionとかで全部まとめて出るのかなあ。確かそんなアナウンスがされてたような気もするし、重複してでも買うだろうなあ。1と2やってると3というには疑問符がつくながらも普通に良いゲームなので。

ということPoint Lookoutは高レベルプレイヤー向けらしいのでBroken Steelからやってみる。Broken Steelはメインクエストクリアが開始条件なので、クリアしにCitadelへと歩いていく。今回のDLCでは特定区域を拡張するだけではなくてwanderingなmobやらitemも追加があるっぽく、名前と細部が微妙に違うクソ強い敵が混じってたりそいつが強い武器持ってたり。

で、Citadelに行く最中に脇道逸れてみたら、まだまだ行ったことのない場所だらけでつい探索したり。結局Citadelに着くまでに相当時間がかかったので今日はここまでに。まだ始まってすらない。

4章突入。

メインクエストはサイドクエストを飛ばしてプレイする人を考慮した難易度設定になってるのか、寄り道しまくってると簡単ですね。

むしろサイドクエストだと低レベルだとマジックウェポン&クリティカルしかダメージが通らない強い敵がでたりしてやりがいはある。

だが、サイドなので簡単なのから一筋縄ではいかない難易度が揃ってるのはいいのだが、2人がギリギリすれ違える程度の細い通路のみで構成された迷路は勘弁願いたい。普通に移動させると前回書いたような移動の問題の所為で、もの凄い勢いでバラバラに動き回ってまともに動けずに予期せぬ敵とエンカウントを起こすわ、そこエリアの敵が何故か他のエリアよりも沸きまくってクリアリングが意味ないわで大変すぎる。結局1,2人ずつチマチマと動かしまくって探索したのだが、コボルトしか出てこないにも関わらず前述の強敵よりも疲れた。

これをデザインしたやつは移動に問題があることを知りつつ嫌がらせで作ったのか、知らないで作ってテストしてみたらまずいと分かったけどめんどくさくてそのままにしたのか、検証とテストをロクにしなかったのかどれなのか気になるなあ。

Mass Effect 2ではそういうレベルデザインの手法をかなり改善して開発をしているようなので、やっぱそれまでは適当にデザイナが作ったやつなのかなあ。

あと、ロングソード系優遇されすぎ。いつものことだから修正されないね。
ハルバードが好きなんだけどなあ。Mount and Bladeのポールアームは、圧倒的なリーチを生かした戦いが出来て各武器にそれなりに棲み分けが出来ていて良かった(でもやっぱり大剣最強だが)。

はじめました。今回はちゃんとポートレートも用意。IWDは放置中...

追われているはずなのになんで地元の事件を調べているんだろう感があったのが、3章に入って事件の繋がりが見え始めて面白くなってきたかなというところ。

難しいとは聞いていたのですが、IWDに比べてまだ随分易しいような気がするのは序盤だからなんでしょうか。ズノメイさんのような凶悪なのもいなかったし...かのドリッズドとEさんとアイツくらい?強いて言うのなら、毒などの状態異常に対抗する手段が少ないことと(蜘蛛退治で何故か解毒剤もらえなかった)、低レベル帯のゲームなので弓とスリングの地味な戦闘なくらい。

移動で詰まったり変な方向に行ったりするのは、挙動を見た感じだと経路探索自体のアルゴリズムや探索ノード数が問題ではなくて、キャラクターがキャラクターを押し退けられないのが問題になってるっぽいですねえ。キャラクターにルートをふさがれて最短ルートが断たれた場合、行けるところまで行った後にしばらく立ち止まって障害となっている要因が動いたりしてルートが確保されないか待つようです。反応が鈍く感じるのはこの所為。
これでも駄目な場合は次に距離が短いルートを選択するのですが、ここで問題になるのは、少し回り込めば回避できそうなケースとは真逆の、どうやっても到達出来なかったり、人間の感覚的には遠回り過ぎると感じたりするルートが選択されてしまうこと。それしか第二の最短ルートは用意されてないのだから選択せざるを得ず仕方ないのですが、結果として明後日の方向に突っ込んで行ってしまうようです。
結局のところこの問題を回避す るには、まず押し退けが可能であること、次に最短ルートと比較してあまりにも距離の長いルートは選択せずにその場に待機するようにすること、というのが必要になりそうです。これでも1,2人ずつ動かさないとどん詰まりになる可能性は生じるので、欲を言うならば詰まった場合は移動PCを同時に動かそうとせずに、移動PCの中でも移動距離が短いPCから順次移動させたり、本当にどうしようにもない場合にプレイヤーにそれを通知したりする手段が欲しいところです(あまりよくない通知例ではThe Simsの詰まったときに怒るやつ)。
他にも、ぶつかっった時にしばらく立ち止まるタイムアウトの時間を短くするというのが考えられますが、別ルートを選択するケースが頻発する可能性があるので、チューニング次第でしょう。
ということで、その辺は普通はプレイヤーが改善できない範疇なので、弄れる範囲内だと探索数を増やしてもむしろ効果は薄く、適度に少ない方がBGにおいては距離の長いルートを選択しにくくなるのかもしれません。当然少なすぎても逆効果のはずですが。要検証。
ちなみにIWDで割とまともになってるのは、PC間での押し退けが可能になっているからです。細い通路などの押し退けでも通過できないケースは存在するので、依然としてあり得ないルートが選択されることはあるようですが。

まあ、10年前のメジャーゲームなのでこんなのは誰かがとっくに解き明かしてるだろうし、調べれば最適経路探索ノード数も求められてるのかなあ。BG2を使うtutu系だとマシになってるはずだし。

ちょっと前にSteamにFallout 1, 2, Tactics, Collectionがきて、単品は$9.99から$8.99に期間限定で値引きもしてる。

だけど、gogで買う方が$5.99で安いんだよねえ。それでも売り上げランキング上位に食い込んでくるあたりはFallout 3効果なんだろうけど。

2はまだクリアしてないや。大分前に詰まってたNavarroはロード地獄の果てに殲滅してクエストアイテムを取れました。取ったら例の組織で(今回は全然人がいなくて小さくてがっかり)クソ強い武器をゲットできたのですが、Navarro行く前にくれよという次第で。サンフランシスコやらタンカーやらのクエストを進める前に奪ったアイテムを各地に売るついでに弱くて行けなかった場所や放置してたクエストをやってみてる途中でまた止まってたり。お金はカンストして車に分けて持つようになったんだけど、もう買うものがほとんど無い。消耗品を買い占めて恐らくきついであろうラストに備える。

Inferred LightingとはSIGGRAPH2009で出たやつ。念のため下記の内容は個人的要約に基づくものであって正当性は保証しません。あしからず。

名前の通りDeferred Shadingの亜種というか、Light Pre-Pass Rendering(Deferred Lightingとも)の発展系にあたるのかな。基本的になパスはLight Pre-Passと同じ。

Light Pre-PassではDeferred Shadingでのメモリ帯域へのコストを減らせる代わりに1パス追加されました。この追加パス分のコストを取り戻したいのでInferred LightingではDSFバッファなるものをGバッファ描き出し時に追加で描き出しておいて仕込んでおく。DSFバッファの内約は線形深度とオブジェクトIDとグループID。このあたりの発想はSTALKERのGバッファ構成が元ですね。

で、Lightingパスで縮小レンダリングを行ってパフォーマンスを稼ぐわけですが、普通に縮小レンダリングしたものをアップスケーリングして、Albedoやらの要素を等倍でレンダリングしたテクスチャと合成すると、当然エッジ付近でピクセルの不一致が発生してチラチラとアーティファクトが出てしまう。特にMSAAを使うとこのエラーは酷くなる。これをDSFバッファとCentroid(これは遅延レンダリング系特有の手法ではないが)で解決していくのがミソらしい。

さらにアルファのポリゴンもこのレンダリングラインに乗せれるらしいのだが、どうやるかというとアルファポリゴンはライティング時に2x2ピクセルをインターバルに点を打つらしい。で、アップスケーリング時のバイリニアフィルタでうまく混ざるらしい。2x2ピクセルだと4レイヤーまで、4x4ピクセルだと16レイヤーまでアルファを解決できるが、当然解像度は低下していく。

さて個人的にはちょっと使えないかなとは思う。

まず、ライティング部分だけとはいえ縮小してるので当然精度は荒くなる。特に法線マッピングでのディティールは著しく潰れるだろう。まあ、コンシューマ機だと性能が足りなくて、レンダリング解像度は大抵縮小されてるゲームが多いので他と比較しても遜色は無さそうだし、むしろマテリアルパスでのAlbedoなんかの解像度は等倍なので見栄えは良いかもしれない。この辺はクオリティとトレードオフなのでLight Pre-Passのパフォーマンス向上を狙って取り入れる分にはありか。

アルファは確かに使えるとは言っても、透明度25%の倍数で4レイヤーまでなので、実際にはどうしようもなく使えないだろう。ムービー見ると透明度が変化してるようにも見える気がするけど、自力でサンプリングしてブレンド係数変えると実現できるのかな?一応Albedoでの透明度はそのままなのでちょっと妙だと感じる程度にまで抑えれる気がするけど、これだったら別ラインにはなるが普通にForward Renderingでやった方がフレキシブルで良さそう。16レイヤーになっても、ライティングの解像度が余計に酷くなるし透明度が倍数固定な以上、半透明が出てくる頻度にもよるが実用的ではないと思う。

 

余談。SIGGRAPH2009とLight Pre-Passつながりしかないけど、CryEngine 3のリアルタイムGIの手法も発表されて当然見てみました。アホの私には詳細な実装の仕方が頭に描けず、概要を把握するだけで一杯一杯でしたが、重そうなのによく3~5msまでに抑えれてるなあと。Volume Textureの解像度は相当低くて十分っぽいので(32^3)、これで計算回数が激減されてるのかな。

以前のお話から相当経過しておりますが、整理が割と進んできたので再公開。ドキュメント更新とか言っておきながらやってません。代わりにここで書くともいう。

Download : imitation CoD4 NightVision Shader Replacement 1.0 

NightEyeのエフェクトをCall of Duty 4のナイトビジョン風味に変更するOblivion用のModです。シェーダの差し替えなのでOBMM0.9.1以降必須です。09年8月18日現在最新のOBMM1.1.12でも動作を確認しました。ビデオカードの性能でピクセルシェーダ2.0以上が必要ですが、Oldvionなどのvanilla以下の設定で遊んでいない限りは問題ないはずです。

使い方は7zを解凍後、中に含まれているomodをOBMMでLoadした後、このModをアクティブにしてください。その際、アスペクト比について問うダイアログが出るので、自身の環境に近い方を選択してください。
16:10の場合は用意しておりませんので適当に選択してください。スコープの円形が真円にならないだけです。

 

dark.jpg neye.jpg
左:通常の暗闇 右:本Mod適用後のNightEye使用時

 

オリジナルのCoD4のやつとの差違が気になる方は、アーカイブに含まれているreadme.txtを参照してください。グレアに関しては、現在はScreenEffectというModがあるので、これをカスタマイズして併用することで再現できるようになるかもしれませんが、未検証です。NightEyeエフェクト時はグレアのテクスチャがレジスタに割り当てられないし、この後にグレアのパスを通過してない雰囲気なので、今回のような単純な手法では無理そうです。

 

その他、リリース後の既知の情報。

非HDR時の動作検証したかどうか覚えてない。

非常に明るいところに行くと(晴れの屋外とか)、スキャンラインが消えてしまう現象を確認しています。恐らくHDR時のみ。saturateしているにも関わらず何故か1を超えてしまうようで(トーンマップとかレンジ変換のたぐい?)、スキャンラインの乗算の影響が薄いようです。

改変おkとかreadmeに書いておきながら、中身はコンパイル済みのバイナリでどうしろというものだったので、以下にシェーダコード掲載。コメントアウトは文字コードの都合上ASCIIだったので適当に書き直しました。

-----

sampler decal;

float4 Main( float2 Tex : TEXCOORD0 ) : COLOR0 {

    static const float2 frameSize = { 1024.0f, 768.0f }; // 4:3用width, height
    //static const float2 frameSize = { 1280.0f, 720.0f }; // 16:9用width, height
    static const float3 luminance = { 0.29891f, 0.58661f, 0.11448f}; // 輝度変換
    static const float blueShift = 0.125f; // ブルーシフト量
    static const float overShoot = 0.6f; // オーバーシュート閾値
    static const float scaling = 2.0f; // ナイトビジョンとしてのスケーリング値
    static const float fixedHeight = 400.0f; // スキャンラインバイアス値
    static const float2 scanLine = {3.0f, 1.0f}; // スキャンライン間隔
    static const float lineContrast = 0.75f; // スキャンライン太さ
    static const float aspect = frameSize.y / frameSize.x;
    static const float2 fade = {0.35f, 0.5f}; // スコープのフェード値
    static const float2 pixelSize = { 1.0f/frameSize.x, 1.0f/frameSize.y };

    // カラー取得
    float4 color = tex2D( decal, Tex );
   
    // 輝度計算
    float l = luminance.x * color.x + luminance.y * color.y + luminance.z * color.z;
   
    // グレアっぽいなにかの計算
    float v = max( max(color.x, color.y), color.z);
    // 閾値を超えた場合は値を増大させて白飛びを狙う
    v = max(v - overShoot, 0); // threshold level
    l += v * scaling; // scaling
    
    // カラー変換
    float4 output = 0;
    output.yz = l; // CoD4のNVは大体緑なので緑と青に1
    output.z *= blueShift; // 青はブルーシフトとして利用
    output += exp(l) - 1; // 輝度を増幅させる
    output = saturate(output);

    // modとstepでスキャンラインの作成
    float n = fmod( Tex.y * fixedHeight, scanLine.x);
    float m = 1.0f - (1.0f - lineContrast) * step(scanLine.x - scanLine.y, n);
    output *= m;

    // スコープ円の作成
    float2 t = Tex - 0.5f; // UVずらし
    t.y *= aspect; // アスペクト補正 (ただしオリジナルは16:9版のみ)
    float len = length(t);
    len = smoothstep(fade.x, fade.y, len); // フェード
    output *= 1.0f - len;

    return output;
}

-----

今見直してみるともうちょっといい感じに書けるんじゃないかなあ。少なくとも輝度計算は内積で出せるなあ。

あと、blogじゃないstaticな方にもページを作ろうと思ったんですが、Firefoxで見ると表示がおかしいのでその辺直して気が向いたらで。

Fallout1,2,3とMorrowindやらその他諸々の復旧は割とすぐだったが、Oblivionは流石に洒落にならない量だった。obmmのディレクトリを移してアクティブしなおしだと、データが古いままだとか管理上の問題をひきずったままだとかで後で大変なことになるのが分かってたので再構築。

古いmodで使いそうなやつの更新が数日かけてあらかた終わって、最近のmodを少し試している最中。Coblを入れてみたが、マージしないと駄目な方のespはその辺の解説を見てもスルーされてるのが気になる。従ってコア部分以外は入れてみたけどまた外した。

さらに今後も絶望的に貯まっているダウンロードだけしたmodの処理がまだまだ待っているのだが、既にesp/esm数が200超えだと。もうそろそろやばいな。

とりあえずちゃんと動いてはいるが、時折のCTDと最早定番の終了時のCTDが気になる。

さておき、Customisable HUD componentsメモ。日本ではサバイバルModの中でHTS with CookingがCobl系とか元祖のよりもまだまだ使われているような気がする(自分が愛用してるだけとも)のでこの手の情報を表示させてみる。espのスクリプトを見れば分かるのだが、毎回毎度の人々が同じものを調べるのは面倒なので。

前段階の注意点。

  • OBSE入れる
  • OBSEのプラグインのPluggyを入れる
    1. data/obse/pluginsにOBSE_Elys_Pluggy.dllをコピー
    2. OBSE_Elys_Pluggy.dllをOBSE_Elys_Pluggy_HUD.dllにリネームする
    3. OBSE_Elys_Pluggy.dlxもコピーする
  • 普通のmodと同様にインストールしたらdata/iniのkuerteeCustomisableHUDComponents default.iniをkuerteeCustomisableHUDComponents.iniにリネームorコピーする

ここから本題。

  • はらへり値
    • 現在値:vEnergy + 5000
    • 最大値:3600 * vcalmult + 5000
    • 備考:+5000してるのは下限が-5000まで存在しているため。逆に上限の3600 * vcalmultを超えると太る。
  • のどの渇き値
    • 現在値:vWater + 40
    • 最大値:20 + 40
    • 備考:+40しているのは下限が-40まで存在しているため。上限は実際には40まであるのだが、通常水を飲んで得られる上限は20で、これを超えるためには相当無理して飲まないと達成できないようだ。
  • 疲労値
    • 現在値:vSleep + 30
    • 最大値:32 + 30
    • 備考:例によって+30は下限が-30のため。上限の32は比較的容易に達成可能なのでそのまま。

いずれも下限値は死亡とか酷い幻覚とかの生命維持的なラインなので、好みで日常的に限界なラインにまで引き上げてやるのもよいかと。

あとは、iniのコメントアウトなんぞを見て好きにカスタマイズ。HUDは控えめな方が好きなんだけど、色んなmodとの絡みでちゃんと動いてるのかどうか怪しかったりするので、確認用としても便利だと思う。一応HTSCの場合はコンソール開くとこれらの値を見ることが出来るけど。

1.5出てDVD要求されなくなったので気軽にやりやすくなったのはいいね。ということで2週目やってます。ちょっと前にハードでやってたのですが、chapter.1の犬すらポーション使わないと駄目なのが面倒に感じたのでノーマルでやり直し。

大局的には3ルートですが、なんだかんだで細かい分岐が非常に多いので1周目とは違った展開になることもしばしば。意外にリプレイ性があって面白いです。日本語化のお陰でクエストに関わってない斜め読みしてた部分も分かるようになってるので、いろいろ発見もあってよいです。感謝。

Memtest86+を寝てる間にまわしてみたら微妙なエラーがでとる。

12周中の4周目のみの特定テストのみでOS認識領域のギリギリ(3.xGあたり)に24個だけ。追試でエラーが出たテストだけを20周ほどかけてみたが、当然エラー無し。

推測だと負荷が蓄積されていく高周回になるほどエラーが出やすくなるはずなんだけど、たった1回だけってのが気になるなあ。再現性が全く無いってのが動きにくいし判断しにくいわけで、ここ数日地震が起きてたので、テスト中に地震が発生して偶々電力供給にムラが出てエラーがでたんじゃないかと憶測してみる。(5時の地震の時点では起きてたのでテスト中ではなかった)

ちなみに相性保証がついてきてたやつなので、換えてくれるのかもしれないが(自分が店員なら交換するかどうかはは悩ましくとりあえず様子見させるか)、わざわざ秋葉原まで行って、ごねて、交換して、再テストってのは面倒だ。しばらく様子見か。いっそエラーだだもれか、エラー無しがいいのに。

とりあえず仮復旧。入れ直ししなきゃならないソフトはまだ山盛りですが。

結局とQ9650とGTX285のOC版にしました。まだi7高かったし。

295は推奨電力750Wに微妙に足りてなかったのと、コストパフォーマンスが微妙ってのと、マルチコアということでコーディングで妙な現象に悩まされる可能性がありそうということで見送り。OC版にしたのは単に比較的安かったからということなんですが、なんでメーカー差で結構値段差があるのかと思ってたのですが、帰って開封して把握。パーツコストやら、マニュアルなどのサポートの違いなんですね。妙に安っぽい外観だし、マニュアルが英語のみで285でもなんでもない汎用的なビデオカードの扱い方だけという。おかげで電源指すプラグの横にあるファンコンと思われる2ピンがどこに刺すのか何の効果があるのかさっぱり分からん。適当に刺す場所も見あたらないので放置してるけどとりあえず問題は無さそう。以前の8800Ultraを買ったメーカーは割高だったんだけどその辺はしっかりしてたなあ。あと285ですら8800Ultraより小さいんですね。295なんかのマルチコアは分からんのですが、8800Ultraはシングルで一番大きかったんじゃないんだろうか。

M/Bは悩みまくったのですが、P5Q PROに。ちょうど1年前に買ったP5Q Deluxeはあまりのレイアウトの糞っぷりに1回通電してお蔵入りなってたのですが、P5Q PROは同じP5Q系とは思えないほど良いレイアウトだったのが決め手でした。P5Q Deluxeの糞っぷりを列挙するならば、ビデオカード刺すとSATAが塞がるわファン端子刺しにくくなるわ、オーディオカード刺すとコンデンサと干渉して刺さらんわ、無理に刺すとビデオカードのファンを塞いで窒息するわで、作ったやつはPCを自作したことないんじゃないかというような代物でした。P5Q PROはSATA端子はどこも干渉しない位置にあるし、IDEも上に向いてるので刺しやすいし、ビデオカードとメモリが干渉しないし、ファン端子も並んでいるのでまとめやすかったです。この差はなんなんだろう。でも、OS入れ終わって気がついたんですが、ASUSそのものがダウンロードで専用ダウンロードマネージャ入れろというのが果てしなくうざくなってますね。んなもん入れたくないしどうしろと。

とか書いてて、今朝になって嫌な予感がしたのでデータのバックアップ取って、帰ってきたらクラッシュしてるわ、プラグアンドプレイだわ青筋はしりまくりだわでグラボが瀕死でした。一晩限りでもいいから復旧できないかとドライバ入れたら何も映らなくなってクラッシュ。死亡確認。間一髪。

285にするか295にするか迷うなあ。CPUは今はなにがいいんだろう。i7のバグは直ったんですかね。メモリも今は何が良いんだろう。オーディオカードと電源は使い回せそう。ケースも使い回したいが、微妙にエアフローに問題あるんだよなあ。サイズも大きめのやつだが2xx系のが収まるか心配だ。

最近GPUに負担かけるようなこと(要するに重い3D処理とか)やると、時々青いノイズが走ってクラッシュするなあ。GPUがお亡くなりの兆候な気がしてならないが、酷使はけっこうしてきたはずなのでしょうがないのかも。それでも丁度2年保証がきれたあたりなんでもうちょっともって欲しかったかな。ドライバ不具合だといいんだけどね。ビデオカードは買い換えてもいいんだけど、確実にCPUが足引っ張るのでこれも換えてたらM/Bから全換えになるので気が重いのです。

そんなことよりも、同人でゲームを作るに当たっての面子というのはどうやって集まるのかが気になるこの頃。なにせ私の細い人脈を過去に遡っても、開発するにあたっての諸々の条件をクリアしている人はほぼ皆無なので。特に、アートとサウンド。コード書ける人は沢山いるのだが、畑が違うし。余所様を羨ましがってもどうにもならないので、結局またペンと鍵盤と弦を手に取るのかと覚悟はしてるのだが、プログラマ個人でというのは相当きつそうだなあ。実際に触ってもらえないと評価すらされないわけだし。良いか悪いかはともかく見てくれは大事すぎる。ということでやるなら今度は生半可じゃ駄目だな。