プロフィール

Na-7

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


アクセスカウンター


最新記事


最新コメント


最新トラックバック


月別アーカイブ


カテゴリ


DATE: CATEGORY:スポンサー広告
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
DATE: CATEGORY:三国志軍記開発
面法線加算方式
面法線加算方式による自作地形
サンプルと同じ法線の値を設定することに成功したが、見た目はサンプルと同様にならなかった。



前々回のテーマ「法線」の続きです。法線シリーズ決着編!


◎新しい計算式

前々回で、自作地形とサンプル地形の法線が異なることを認識し、サンプル地形の法線式を求めようと試みましたが、果たせませんでした。

その後、seb2008さんから、コメントで法線の計算コードを紹介して頂きました。そのコードをXNAに移植しても計算結果は一致しなかったのですが、その時に新しい発見がありました。

私は今まで「右の頂点へのベクトル」と「上の頂点へのベクトル」を元に計算していたのですが、そのコードは「左の頂点から右の頂点へのベクトル」と「下の頂点から上の頂点へのベクトル」を元に計算していました。
なるほど、注目頂点を中心とする法線ですね!



◎一致しません

早速改修して新計算式を試そうとしたのですが…改修中に「あ、この方法はサンプルと一致しないな」と気付きました。
一通り修正して結果を確認すると…やはり一致しませんでした。

一致しない理由は、次のように推測できます。
「サンプルはModelProcessorという部品(ブラックボックス)の中で法線を計算しているが、この部品は一般モデルを対象に汎用的に作られている。今回の計算式は、地形モデル専用の計算式であり、他の一般モデルでは通用しない。よって、ModelProcessorは別の計算式で法線を算出しているはずである」



◎ちょっと待てよ?

一般モデルにも通用する法線の求め方と言ったら、やはりその頂点を含む全ての面法線から算出するしか無いのでは?
でもそれは以前試したけど一致しなかったんだよなぁ…何か間違えたのか?

そう思ってExcelを見直すと…重大なミスに気付きました!
頂点の向きを間違えていたのです!!

ポリゴンの向き

上図を見ればわかると思いますが、1つの頂点に隣接するポリゴンは、8個ではなく6個でした。



◎一致しました!

というわけで、修正版は以下の通りです。
(ポリゴンの向きによって、2パターンあります)

隣接する全ての面法線を求め、頂点の法線を算出する(修正版パターンA)(PDF形式)

隣接する全ての面法線を求め、頂点の法線を算出する(修正版パターンB)(PDF形式)

やりました!パターンBがついにサンプルの値と一致しました!散々頭を悩ませてきたので、数値が一致したのを見た瞬間、思わず感動してしまいました(笑)

「結果から計算式を逆算するというプロセス自体に問題があるのでは?」と不安になったりしましたが、結果が出せて良かったです。きっかけを作って下さったseb2008さん、どうもありがとうございました!



◎見た目は変わらず

サンプルの法線計算式が解明できたので、自作地形に適用しました。(冒頭参照)
…あれ?見た目変わらないですね。どっか間違えたかな?法線の値を出力して確認しましょう。

自作地形の頂点データ(面法線加算方式)(PDF形式)


…出力した法線の値が、サンプルと一致しました。正しくプログラムできています。

法線の値が一致するのに、見た目が違うってことは…エフェクトですね?私にはもうそれしか考えられません。



◎次回予告

結局「見た目の違いは法線によるものではない」という確認にしかなりませんでした。でもまあ、原因を1つ絞り込めたわけですし、私自身のスキルアップに繋がったので、良かったと思います。
もう法線なんて恐くない!(笑)

ちょっと前後しますが、次回は前回の続きになります。

スポンサーサイト

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

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントありがとうございます

非公開コメントを頂いたのですが、
返信コメントは非公開設定にできないので、
公開コメントで少しだけ返信させて頂きます。

>XNAはZ値が手前で増加する右手座標系 だったのですね、directxと同じ左手座標系と思っていました。

はい、私もよく混乱します。
同じマイクロソフトで何故座標系が違うのか解りませんが、XNAはDirectXの上で動いているので、余計混乱します。


>今回法線の計算の仕方がはっきりとわかりました。
>ありがとうございます。

おお、素晴らしい!
私も今回レベルアップできたので、お互い良かったですね!
今後ともよろしくお願いします。

コメントの投稿


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

トラックバック


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



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