プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
自作地形10
自作地形モデル
自作地形モデルの最新状態。HeightmapCollisionに近付いてきたが、まだ表面の質感が違う。



◎テクスチャの継ぎ目

テクスチャの継ぎ目(タイル張りの境界)がおかしい問題は、テクスチャ座標の問題でした。

「テクスチャ座標は0~1で指定する」という基本に従って、わざわざ整数部分を除外していたのですが、この除外処理をやめたら境界も綺麗に表示されました。

TextureAddressModeが関係しているのかと思いましたが、今回はデフォルト(設定無し)でタイル張りになりました。



◎エフェクトの追加

テクスチャが設定できるようになったので、エフェクト設定を追加したら、実行時に例外エラーで落ちました。予め設定しても、表示時に設定しても、同じ現象になります。

何か他の描画処理とバッティングしてるのかと思って、ACLやSpriteBatchなどを片っ端からコメント化してみましたが、現象は変わりませんでした。何なんだよ一体…。

そんなこんなで丸1日唸ってましたが、ソーサリーフォースを見直してようやく気付きました。ライトを追加する場合は、頂点データに法線(方向)を追加する必要があるのです。

アルゴリズム参考元のHeightmapCollisionでは、ブラックボックス(ModelProcessor)の中で処理されているらしく、表記上それらしいコードが無いので、なかなか気付けませんでした。



◎法線の問題

というわけで、頂点データに法線を追加し、ライトやフォグを設定しました。

自作地形04

あれ?全然綺麗じゃないですね。HeightmapCollisionと同じエフェクト設定をしたつもりなんですけど、何が違うのでしょうか?

…どうやら、法線の問題らしいです。ネットで地形作成の記事を見ると「法線マップ」という単語が目に付きます。
そうか~全部真上に向けただけじゃダメなのね(爆)



◎法線って何?

「法線」を検索すると、「ある平面に垂直な直線」とあります。しかし、XNAでは法線を頂点データに設定します。頂点の法線って何?

今回は1つの頂点につき8つの面が接合してるから、8つの法線の共有値を設定しろってことかなぁ…うわ~面倒くさ~ブツブツ…

…ん?これって周囲8つの頂点ベクトルを足して単位ベクトルに直せば良いのでは?

自作地形06   自作地形07

あちゃ~、ダメダメですね。
法線が逆転して面の向きが逆転してしまったのが左図、それを強引に補正したのが右図です。(影をわかりやすくするため、白いテクスチャに差し替えています)

法線によって見た目が変化することはよく分かりましたが、計算式の求め方は根本から間違ってる気がします。



◎法線の設定

というわけで、こちらの記事(後半にDirectX用法線マップ計算式の解説があります)を参考に、法線の計算式を作り直しました。
2つのベクトルの外積だけでいいって本当かな~?そもそも外積って何?(爆)

自作地形08   自作地形09

おお!綺麗に表示されました!理屈はいまいち理解できていませんが…。

ちなみに、左図は右頂点と上頂点へのベクトル、右図は右頂点と下頂点へのベクトルで計算したものです。
法線を変えただけで色まで変化するなんて不思議ですね。
光の反射角度によって色が変化するということでしょうか?



◎次回予告

法線って意外と奥が深いですね。見た目がこんなに変わるとは思いませんでした。

ともかくこれでHeightmapCollision完全再現だ~!
…と思ったのですが、テクスチャを貼り直したら、地表の質感が違うことに気付きました(冒頭図)。
まだ何かあるのか~!

次回こそは完全再現を果たして、川モデルの作成に進みたい所ですが…何が違うのかなぁ?

スポンサーサイト

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

コメント

コメントの投稿


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

トラックバック


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



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