プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
自作地形16
開発中の自作地形
サンプル地形をやめて全て自作地形に置き換えたが、地表の滑らかさは維持している。



◎似てる?

複数テクスチャファイルの実現に向けて調査していたら、こんな記事を見付けました。

この記事では、サンプラでフィルターを指定することによって、テクスチャのギザギザを滑らかにしています。

これって、サンプル地形と自作地形の見た目の違いに似てるような気がしませんか??

自作地形04の参考元   自作地形04
サンプル地形(左図)と自作地形(右図)


◎違う?

この記事ではHLSLで実装していますが、XNAのマニュアルを見ると、テクスチャフィルタに関する記述があるので、XNAでも実装できそうです。

サンプルコードを探したら、こちらの記事を見付けました。

そこで、このコードを参考に、いろいろ試してみたのですが…どうやっても自作地形の見た目が変化しません。何かやり方が違うのか?それとも、全然関係無い話だったのか?



◎BasicEffectのクローン

試行錯誤を繰り返していたら、ふとある事に気付きました。

「BasicEffectって、クローン作成できるじゃん!」

ということは、サンプル地形のBasicEffectクローンを作成して、自作地形に適用すると…うりゃっ!

自作地形15
自作地形

やりました!自作地形の地表がサンプル地形と同様に滑らかになりました!

これで「サンプル地形と自作地形の見た目の違いは、BasicEffectの違いが原因」ということが証明されました!



◎パラメータの特定

こうなったら、あとはサンプル地形と自作地形のBasicEffectパラメータの値を比較チェックすれば、見た目が違っていた原因が特定できるはずです。
気になる箇所にアタリを付けて探っていくと…あるパラメータに辿り着きました。

this.basicEffect.Texture.GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.Linear;

自作地形にサンプル地形のBasicEffectクローンを適用すると、見た目滑らかになります。この状態で、上記パラメータをTextureFilter.Noneとすると、見た目ギザギザになります。

ところが、自作地形にサンプル地形のBasicEffectクローンを適用しない状態で、上記パラメータをいろいろ変えても、見た目変化しません。何故~!?



◎ミップマップの生成

この謎を解くため、テクスチャフィルタについて調べていくと、ある仮説が思い付きました。

「自作地形はミップマップが用意されていないので、テクスチャフィルタの効果が表れないのではないか?」

その真偽を確認すべく、メモリ内のミップマップデータにアクセスする方法を調べたのですが、なかなか見つかりません。

そこでミップマップを作成する方法について調べると、コンテントパイプライン内でコードを記述する方法と、コンテントプロセッサのプロパティで指定する方法がありました。

後者の方法で、テクスチャファイルのプロパティ → Content Processor → Generate Mipmaps を True に設定すると…自作地形が滑らかに!

やった!ついにサンプル地形の地表を再現できました!



◎衝撃の事実

この後コードを整理する段階で気付いたのですが、どうやらテクスチャフィルタのデフォルト設定はLinearらしいです。

つまり、今回追加したコードは一切不要だったのです。全部削っても問題無く動きました。ガーン!!

これまで苦労して辿り着いた答えが「プロパティ設定をTrueにするだけ」とは…私にとって衝撃的な事実です…ぐはっ!



◎余談

自作地形にサンプル地形のBasicEffectクローンを適用した状態(滑らか状態)で、

A:this.basicEffect.Texture.GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.None;

B:this.basicEffect.GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.None;

C:graphics.GraphicsDevice.SamplerStates[0].MipFilter = TextureFilter.None;

ABCどの設定も全てギザギザ状態になりました。参照先は同じっぽいです。



◎次回予告

というわけで、地表、川、道の3モデル全て自作地形になりました。(冒頭参照)

残る課題「複数のテクスチャファイルを貼り付ける」をクリアすれば、地形モデルを1つに統合できます。あと一息~!

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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