プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
HLSL描画による自作地形(法線処理後)
HLSLによる自作地形表示
複数テクスチャ化を目指してHLSLの導入を開始。第一段階として、単数テクスチャによる実装を試みた。



◎2つの方式

前回の調査を踏まえて、自作地形を複数テクスチャ化する方法を考えると、2つの方式が思い付きました。

A案
適用するテクスチャ毎に頂点データを分割して地形モデルを作成する。表示時は、分割された頂点データ郡にテクスチャを適用する。(前回の「◎メタセコイアのマテリアル」で推測した方式に近い)

地形作成時のコードは煩雑かつ大幅な改修が必要だが、表示時のコードはシンプル。カスタムエフェクト不要。

B案
頂点データフォーマットにテクスチャ情報を追加し、表示時はその情報を参照しながらテクスチャを適用する。

地形作成時のコードは小幅な改修程度だが、表示時はカスタムエフェクト(HLSL)の作成が必要。



◎選択

A案B案、どちらにすべきか検討します。

改修量:同等?
改修難易度:A案優位
描画速度:A案が僅かに優位?
拡張性、メンテナンス性:B案優位

・描画速度について
B案は「何のテクスチャを貼るか?」をポリゴン毎に確認しながら描画するため、A案に比べると若干遅くなりそうです。但し、全体の描画処理量から察すると、気にすべきレベルではなさそうな気がします。

・拡張性について
例えば「森」地形で火計が使用されて「森の焼け跡」地形に変形する場合、その場所(ポリゴン)だけテクスチャを変更したいのですが、A案の場合、かなり複雑なコードを組むか、地形モデルを再構築する必要があります。
B案の場合、比較的シンプルなコードになります。地形モデル再構築の要否は不明です。(頂点データの値を変更しただけでテクスチャ表示に反映されれば不要)

う~ん…拡張する度にややこしいコードが増えるのは嫌なので、B案にすべきかなぁ?(微妙ですけど)



◎具体化

B案の手順をもう少し具体化すると、

1.カスタム頂点フォーマットを作成し、
  テクスチャ情報(サンプラデータ)を追加する
2.表示時にカスタムエフェクトを呼び出し、
  エフェクトテクニックを指定する
3.HLSLでエフェクトテクニックを記述し、
  指定されたテクスチャで描画する

こんな感じですかね~。

機能的には(HLSLを使わずとも)XNAだけで実現できそうですが、1ポリゴン単位でテクスチャを切り替えるため、速度は著しく低下しそうです。
速度向上のため、HLSLから頂点データ内のサンプラ情報を直接取得して、テクスチャを切り替えます。



◎技術的な課題

技術的には「HLSLからカスタム頂点内のサンプラデータを取得する」ことと、「サンプラデータで指定されたテクスチャを描画する」ことが課題になりそうです。

後者に関しては、前回参考記事内のHLSLのサンプラを増やせば、複数テクスチャに対応できそうな気がします。

問題は前者です。VertexElementUsage.Sampleを使用したサンプルを探そうとしたのですが、全然見つかりません。
B案なんて普通やらないのかなぁ…すごく不安になってきました(ーー;



◎まずは基礎勉強

まずは基礎固めということで、先の「かんたんXNA HLSL編」を「その1」から「その7」まで一通り勉強させて頂きました。

これまで「多分こうだろう」と思っていたことが確信できるようになったり、新たに学んだことも多く、予想以上に良い勉強になりました。これでHLSLも恐くない!…気がするw



◎とりあえずやってみる

まずはカスタム頂点をVertexPositionNormalTextureと同様に作成して、とりあえず1つのテクスチャを表示するHLSLを作成して…あれ?法線はHLSLでどう処理すれば良いのでしょう??
…とりあえず、最初は法線も無視してやってみます。

HLSL描画による自作地形(法線未処理)

おお!とりあえず最初の表示はできましたね!
でも、影が無いので、立体感はありませんね。



◎法線の反映

こちらのHLSLコードを参考に、BasicEffectの環境光(AmbientLight)と平行光源(DirectionalLight)の再現を試みました。

(冒頭図参照)

ふむぅ…地形の形状に沿って影が付いたので、法線がきちんと取得できたことは間違いありませんね。ひとまず成功と言えるでしょう。

BasicEffectに比べるとかなり暗いのですが、鏡面反射光(SpecularColor)などを再現すれば近付くかもしれません。それと、画面全体に細い横線が入っているのが気になりますが、これを解消するのは大変そうなので、当面は無視します。

MapEffect.fx(HLSLサンプル)
(ライトの計算は自信ありませんので御承知おきください)



◎次回予告

BasicEffectの完全再現は大変そうなので、先に複数テクスチャの貼り付けを試みます。
…果たして、このままB案でいけるでしょうか??

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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