プロフィール

Na-7

Author:Na-7
SE(システムエンジニア)として約15年間システム系ソフト会社を勤めあげ、2008年3月退社。現在、ゲーム制作会社設立を目指して活動中。


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
山岳地帯の索敵範囲の表示問題08
開発中のメイン画面
山の反対側の索敵範囲が表示されない問題が解消された。いかなるテクが使われたのか?



◎シャドウボリューム

前回保留にした

『地形モデル(平面モデル)のうち、球モデルの内側全域のステンシルバッファをオンにする』

に関して、yohさんから「シャドウボリュームという技術の応用で何とかならないでしょうか。」とヒントを頂きました。
yohさん、いつもありがとうございます!^^

シャドウボリュームがどんなものか調べると、こちらにとてもわかりやすい説明がありました。
…なるほど、これは使えるかも!

しかしこちらの記事を読むと…あれ?記事内の‘ステンシルシャドウボリューム’と、前述の‘シャドウボリューム’は、同じ技法なの??

…ああ、同じ技法ですね。前述の記事は表面と裏面の描き分けまで説明してますが、後述の記事は細かい説明を省いているので、別物の印象を受けてしまいました(^^;



◎サンプル作成

本来のシャドウボリューム技法は

『3Dオブジェクトの輪郭となる頂点を光源方向に引き延ばして「シャドウボリューム」(影領域)を生成』

する所から始めるそうですが、今回はシャドウボリュームを固定化して負荷を軽減します。

というわけで、まず2種類の八角柱モデルを作成します。

八角柱の表面モデル   八角柱の裏面モデル

側面表側8面+上面のモデル(上左図)と、側面裏側8面のモデル(上右図)を作成しました。続いてサンプルプロジェクトを作成します

シャドウボリュームサンプルの表面モデル描画テスト   シャドウボリュームサンプルの裏面モデル描画テスト

左上図が表面モデル、右上図が裏面モデルの描画テストです。これを
表面モデルをStencilOperation.IncrementSaturation、
裏面モデルをStencilOperation.DecrementSaturationで
ステンシル領域に描画します。

シャドウボリュームサンプルの描画テスト

八角形になりました。地形が平面モデルなのでわかりにくいかもしれませんが、成功です。



◎実装

サンプルコードをメインプログラムに実装します。まずは深度バッファを無効で試してみましょう。

シャドウボリューム実装01

八角形の索敵範囲が描画されました。シャドウボリュームのコードは正常に実装されたようですね。

では、山の反対側の索敵範囲が表示されないようにするために、深度バッファを有効にします。

シャドウボリューム実装02

山の反対側の索敵範囲が表示されなくなりましたが、地形モデルの起伏と八角柱モデルの接合部分だけが明るく表示されました。

これでは前回の方式と同じです。ガーン!!

何故内側が塗り潰されないのか、こちらの記事を確認すると

『フレームバッファやZバッファには何も操作しません。』

…肝心な記述を見落としてました(泣)



◎ちょっと待てよ?

深度バッファ操作(書込)禁止の記述はありますが、参照禁止の記述はありません。よく考えたら、深度バッファを参照し、書込のみ禁止すれば良いのでは?

GraphicsDevice.RenderState.DepthBufferEnable = true;
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;


山岳地帯の索敵範囲の表示問題06

おお!山の反対側の索敵範囲が表示されなくなりました!
これで山岳地帯の表示もバッチリです!

ということは、前回方式と今回方式どちらでもOKということです。前回方式の方がステンシルへの書き込みが1回で済むので、前回方式に戻しましょう。

山岳地帯の索敵範囲の表示問題07

ふむぅ…。前回方式は、索敵範囲の円系が若干潰れるというか、球状になりますね。球モデルだから当然ですが^^;
今回方式の方が歪みが少なくて綺麗な気がしますが、この程度なら速度優先でやはり前回方式がいいかな?



というわけで、結果的には前回方式にDepthBufferWriteEnableを追加しただけで解決しました。

でも今回はいい勉強になりましたよ!^^



◎次回予告

山岳地帯の問題が解消出来たので、心置きなく新年を迎えることができます。

次回は「12月の総括と1月の目標」です。


yohさん、ブログ読者の皆さん、一年間ありがとうございました!

皆さんもよいお年をお迎えください^^

スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック


この記事にトラックバックする(FC2ブログユーザー)



copyright © ゲーム制作の舞台裏 all rights reserved.Powered by FC2ブログ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。