プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
地形モデル透過テスト02
地形モデル透過テスト
地形モデルの透過合成テスト。地表モデルの一部が透けて、下側の川モデルが表示されている。



前々回の続きです。

◎HLSLのswitch

HLSLのif文をswitch文に変更してみましたが、私の環境ではsyntaxエラーになりました。vs3.0&ps3.0で試しても現象変わらず。Direct3D10でないと使えないのかもしれません。
まったく…マニュアルにサポートバージョンぐらい明記して欲しいですね…ブツブツ…。

HLSLスキルが未熟なためか、状況を打開するアイデアが浮かばないので、案は諦めて別の方法を検討します。



◎遅延対策案の再検討

3/27の記事のラストで、遅延対策案の優先順位を以下のように決めました。

A > B > E > C1 > C2 > D

案:ループを改善したが、DrawIndexedPrimitivesの
   呼び出し回数が多すぎて目標未達成

案:サンプラを効率的に管理できず断念


案と案がダメだったので、次の予定は案です。ですが、今は新たなアイデアがあるので、それらを含めて優先順位を再検討します。



◎新規対策案

F1案:
現在512×512のパターンテクスチャを2048×2048に集約し、マテリアル数を1/16とする。

F2案:
現在512×512のパターンテクスチャを128×128に落とした上で、2048×2048に集約し、マテリアル数を1/256とする。

案:
アルファ値を利用して複数の地形モデルを透過合成する。パターンテクスチャは、地形種別数×16種類のみ用意する。(2種類以上の複合テクスチャ廃止)

案:
F1案と案を両方実施する。



◎新規対策案のポイント解説

F1案は、テクスチャアトラスによるコンテンツ最適化です。
DrawIndexedPrimitives呼び出し回数:446→28
となるので、それなりの効果が期待できますが、ソースコードは複雑化します。コンテンツ管理方式を変更するので、パターンテクスチャ自動作成ツールの修正も必要です。また、今後地形種別が増えることを考慮すると、これだけでは効果不十分かもしれません。

F2案は、F1案の強化版です。
DrawIndexedPrimitives呼び出し回数:446→2
となるので、かなりの効果が期待できます。
反面、画質は確実に劣化しますし、コンテンツ管理やソースコードの複雑さは相当シビアになります。テクスチャを手描き修正する際の煩雑さを思うと、ちょっと気後れします。

案は、アルファ値を利用して地形モデルを透過合成し、2種類以上の複合テクスチャを廃止して、パターン数を減らします。
DrawIndexedPrimitives呼び出し回数:446→80
となるので、それなりの効果が期待できますが、これだけでは効果不十分かもしれません。尚、この案を採用する前に、アルファ値による透過可否を事前に検証すべきでしょう。

案は、
DrawIndexedPrimitives呼び出し回数:446→5
となるので、かなりの効果が期待できますが、F1案と案のデメリットも継承します。F2案と比べると、速度は若干劣りますが、画質は劣化しません。



◎透過可否の検証

地形モデルを重ね合わせた際、テクスチャの一部を透過して下側の地形モデルが表示されるか検証し、案の実現可否を判定します。


まず、2種類のテクスチャを貼り付けた2つの地形モデルを用意します。

地表テクスチャ(一部透過)   地表モデル
地表テクスチャ(左図:中央部透過)と地表モデル(右図)

川テクスチャ   川モデル
川テクスチャ(左図:透過なし)と川モデル(右図)

次に、川モデルを普通に配置します。
最後に、地表モデルを少し上方に配置します。この時、レンダリングステートを変更して、透過処理を施します。

GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.SourceBlend = Blend.One;
GraphicsDevice.RenderState.DestinationBlend = Blend.One;

地形モデル透過テスト01

う~ん…色が混ざってますね。期待した結果とは違いますが、レンダリングステートの設定をうまくやれば、透過処理はできそうです。
レンダリングステートのパラメータは沢山あって、どれをどうすれば目的通りになるのか、まだよく知らないんですよね。
(「森のくまさん」のラストシーンは、思考錯誤に丸1日かかりました。ちゃんと理解してる人なら5分でできるかも…(^^;)


…で、半日ほど試行錯誤の後、何とか目的通り表示できました。(冒頭図参照)

GraphicsDevice.RenderState.AlphaTestEnable = true;
GraphicsDevice.RenderState.ReferenceAlpha = 0;
GraphicsDevice.RenderState.AlphaFunction = CompareFunction.NotEqual;

昔はマスキングと呼んでいましたが、XNAでは「アルファ抜き」と呼ぶようですね。アルファ抜きはアルファテストで実装するということを、ようやく理解しました(^^;


これで案は実現可能と思います。尚、モデルが複数になると描画速度が低下しますが、これは最後にマテリアルバッチの技法で改善します。



◎優先順位の検討

新規対策案を含めた新しい優先順位は以下の通りです。

G > F1 > H > F2 > E > C1 > C2 > D

最優先は案。デメリットが一番少ないので。

続いてF1案。デメリットが比較的少いので。
(状況次第では、そのまま案に移行します)

案でもダメな場合はF2案。なるべく避けたいですね~。

案には独特の魅力を感じますが、「画質も速度もデザイナー次第」なので、3D担当者未定の現状では、他の案を優先すべきと判断しました。



◎次回予告

次回は案を実装します。

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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