Oblivionの最近のブログ記事

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

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使用時

 

オリジナル版との差違が気になる方アーカイブに含まれている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.f, 768.f }; // 4:3用width, height
    //static const float2 frameSize = { 1280.f, 720.f }; // 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.f; // ナイトビジョンとしてのスケーリング値
    static const float fixedHeight = 400; // スキャンラインバイアス値
    static const float2 scanLine = {3.f, 1.f}; // スキャンライン間隔
    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.f/frameSize.x, 1.f/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.f - (1.f - 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.f - 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月あたりにOblivionの小さなModを某所に公開して、その時のログを某所2に掲載して頂いていたのだが、そこが消えてしまったぽいのでこのサイトに置く予定。

アス比16:9なんてテストしていなかったのだが、とりあえず動いてるようなので一安心。

リリース後に使ってて気がついたobのシステム的に回避しようがない問題点とかもあったのでドキュメント更新しないと。

アーカイブ