【ゲーム制作】No.9: シャドウマッピング①

シャドウマッピングによる影生成の整備を行っています。

ただしシャドウマッピングはDirect3D9時代に作ったソースが既にありますので、作業はそれの移植がメインになります。

今はUniformShadowmap_Spotlightのシャドウマッピングは完成済で、PerspectiveShadowmap_Spotlightの移植を行っていますが、影の品質があまりよくありません。

PerspectiveShadowmapって論文で言うような高品質になるケースは少なくて大抵はUniformShadowmapの方が綺麗なんですよね。

問題点ばかりで実際には使い物になるのか?って感じです。

シャドウマッピング構築は時間がかかると思いますのでちょこちょこ進めていければと思います。

 

  • PerspectiveShadowmapの場合。あ、粗いです。

f:id:houz12345:20211013171618p:plain

 

  • UniformShadowmapの場合。解像度2048x2048ということもありとても綺麗です。

f:id:houz12345:20211013171624p:plain

 

【日記】2021年10月8日

今日は、 脳神経外科へ外来受診の日でした。

  • 次回入院して行う手術の内容を説明して頂きました。腫瘍の除去を行う手術だが言語に関わる箇所が腫瘍に沿うように存在する為、適当に取ると言語機能に障害が残る可能性がある。そのリスクを下げる為、意識を覚醒したまま脳機能のテストを行いなら腫瘍の除去を行う覚醒下手術を行う、とのことでした。

  • 気紛れで病院から徒歩で帰ったのですが(13kmほど)、途中で足の裏が痛くてギブアップ、結局電車で帰りました。

【ゲーム制作】No.8: 動的環境マッピング⑤

PMD/PMXモデルでの動的キューブ環境マッピングに対応しました。

屈折モデルへの対応などやるべき課題はまだいろいろありますが環境マップ対応は今回で終了にしたいと思います。

次回からは別課題への対応を行います。

 

f:id:houz12345:20211007202317p:plain

 

【ゲーム制作】No.7: 動的環境マッピング④

今日はPMD/PMXモデルを動的キューブ環境マップに表示する機能を追加しました。

残りはPMD/PMXモデルを反射モデルにするパターンぐらいですかね。

今回は作っていて処理の重さが気になりました。メッシュもそれほど表示してないのに30FPS切っていてこれではまともなゲームは作れそうにありません。一応処理に無駄になる箇所は入れないように気を使っているのですが、メモリの使用量はまったく気にせずSTLコンテナなどは使いまくっています。これが影響しているのかわかりませんが・・

 

こちらは物理演算を無効化した場合、

f:id:houz12345:20211006180907p:plain

 

こちらは物理演算を有効化した場合です。物理演算が無視出来ないほど重いです。

f:id:houz12345:20211006181013p:plain

 

【ゲーム制作】No.6: 動的環境マッピング③

とりあえずキューブ環境マップを表示することが出来ました。

左の球が動的キューブ環境マップ、右のその他のオブジェクトは静的キューブ環境マップになります。

 

  • 以前、動的キューブ環境マップはボックスに設定して表示すると書きましたが、その認識は誤っていました。キューブ環境マップというのは球の反射を模倣するものでボックスの反射はキューブマップではない別な手法で行う必要があるようです。それに気づいてから、まずはその方法を実装しようかとも考えましたが反射する箱を作ってもあまり使い道がないと思いましたので、標準である球によるキューブ環境マップで作る方針に切り替えました。

  • PMD/PMXはまだ動的キューブ環境マップに対応していません。これから検討します。

  • DDSファイル読み込みはDirectXTexで行っているのですが、動作がいろいろおかしい・・。これも後々検討します・・。

  • 制作途中なのでFPS表示などが消えてるなどいろいろ中途半端な状態です。後で直さなければ・・

 

f:id:houz12345:20211005122349p:plain

 

【ゲーム制作】No.5: OMSetRenderTargets()のワーニング

一応環境マッピングの作成はちゃんと進んでいるのですが

以下のワーニングが出て作業が止まっている状態です。

 

D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM DepthStencil is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD]

D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing PS shader resource slot 0 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD]

 

レンダーターゲットやデブスステンシルに設定したリソースが

シェーダーリソースとして使われてもいて衝突してるよ!ってことなんでしょうが

リソースは使い終わったらちゃんとリリースしているんですよね・・

わからない・・もうDirect3D嫌いです・・

 

その後調査を続けた結果、原因がわかったっぽいです。

私はEffect11をDirect3D11の管理に使用しているのですが、リソースの解放手続きに

不足がありちゃんと解放されていませんでした。

テクスチャを例にとると、

 

    ID3DX11EffectShaderResourceVariable*        m_h_texture;

    ....

    // Effect11オブジェクトにテクスチャを登録する

    //(この時点ではdirect3Dオブジェクトには登録されていない)

    m_h_texture->SetResource(m_p_srv_diffuse_map);

 

    ID3DX11EffectTechnique* h_tech = m_h_technique;
    D3DX11_TECHNIQUE_DESC    tech_desc;
    h_tech->GetDesc(&tech_desc);
     for (uint_t p = 0; p < tech_desc.Passes; ++p)
     {
            // このApply()によってテクスチャがdirect3Dオブジェクトに登録される                            h_tech->GetPassByIndex(p)->Apply(0, device_context);

            ~メッシュを描画する~
     }

     // Effect11オブジェクトからテクスチャを解放する

    //(この時点ではテクスチャはdirect3Dオブジェクトに登録されたまま

    // 今まではここまでしかやっていなかった

     m_h_texture->SetResource(NULL); 

                                                               

    // direct3Dオブジェクトから解放する為にはこのコードが必要だった

    h_tech->GetPassByIndex(0)->Apply(0, device_context); 

 

最後のApply()は空打ちのようでかっこ悪いのですが、代替え案もないので

修正はこれで行こうと思います。

【ゲーム制作】No.4: 動的環境マッピング②

前回に引き続き、細かい環境構築を行いました。

加えて、動的環境マッピング用のカメラボックスを作りました。

このカメラボックスを用いて次回から環境マッピングの実装に入る予定です。

 

f:id:houz12345:20211001204828p:plain