[リストへもどる]
一括表示
タイトルFBXエクスポータ 法線の数
記事No383
投稿日: 2009/09/09(Wed) 16:13:43
投稿者てぃあの
勘違いや知識不足であった場合はお許し下さい。

FBX Exporter Ver1.2.1で出力したデータにおいて
1つのメッシュのデータを取得したとき
頂点数と法線数の数が合いません。
そのかわり
頂点インデックスの数と法線数が一緒で困惑しています。

1頂点座標につき、1法線…と信じてプログラムを組んできましたが、違うのでしょうか?

タイトルRe: FBXエクスポータ 法線の数
記事No385
投稿日: 2009/09/10(Thu) 00:28:46
投稿者koi
てぃあのさん、はじめまして。

メッシュの法線の考え方は3種類あります。
・面法線
・頂点法線
・面ごとの頂点法線
FBXエクスポーターでは3番目の「面ごとの頂点法線」を出力しています。
たとえば、立方体の場合を考えると、
頂点数:8
四角形ポリゴン数:6
法線の数:6 x 4 = 24
となります。

メッシュに法線やテクスチャUVがどのように設定されているかは、
KFbxLayerElement::GetMappingMode()
で取得することができます。
・eBY_CONTROL_POINT
 頂点ごとに設定
・eBY_POLYGON_VERTEX
 面ごとの頂点に設定
・eBY_POLYGON
 面ごとに設定
などです。

タイトルRe^2: FBXエクスポータ 法線の数
記事No387
投稿日: 2009/09/10(Thu) 01:54:29
投稿者てぃあの
なるほど…となると、取り扱いに困ってます。
ヒントいただけないでしょうか?

たとえば立方体の場合、1頂点座標は3面からなる共有頂点になると思います。
ですが、立方体の法線はグローシェーディングをかけるわけではないので面法線を使いたい…はずです。

ワンスキンモデルのようなメッシュの場合、グローシェーディングをかけたいので頂点法線(もしくは同座標頂点の面ごとの頂点法線が同じ方向を向くベクトル)を使いたい…はず。

滑らかにシェーディングしたい場合、共有頂点の法線は各面法線を加算して正規化すればいい…はず。

使い分けたいなら「スムージング角度」を見てとかになると思うのですが…。

ということで新たな質問が

1.FBXエクスポーターの面ごとの頂点法線には
A.面法線と同じ法線が入っている
B.滑らかなシェーディングをおこなえるような法線が入っている

2.Aだった場合「スムージング角度」みたいなデータはどこかにあったりしますでしょうか?

3.Bだった場合、面ごとの頂点法線が
共有頂点で同一ベクトルだった場合->共有頂点を分ける必要なし
そうじゃなかった場合->共有頂点を法線数分分ける
…とかになるんでしょうか?

4.せっかく面の構成をインデックスで取り扱っているので同一頂点座標であるなら頂点数は増やしたくない…と考えるのがいけないんでしょうか?
DirectXで描画してるんですが、頂点座標数 == 法線数 と思ってるんですが、もしかしてそんなことなく描画できる…とか?
※drawIndexedPrimitive

無知なのは罪…なのは重々承知してます。
どうか定石みたいなものがありましたらご教授下さい。
よろしくお願いいたします。

タイトルRe^3: FBXエクスポータ 法線の数
記事No390
投稿日: 2009/09/11(Fri) 01:54:35
投稿者koi
答えとしましては、AとBが混じっている状態です。
ある面の頂点では面法線の値、ある頂点では頂点法線の値というような状態です。
共有頂点で同じ法線だったとしても、個別に出力しています。
同じ法線をまとめて法線の情報を圧縮する方が容量的に効率は良いのですが、
FBXエクスポーターではそのような処理は行っていません。
ですので、てぃあのさんの考えていることは間違っていないと思います。

※ちなみに、法線の計算はメタセコイアのプラグインSDK内のプログラムを用いています。
 ですので、メタセコイアで見えているのと同じ法線が出力されているはずです。

また、4の「同一頂点であるなら頂点数を増やしたくない」というのはごもっともだと思います。
しかしながら、立方体など同一頂点であっても複数の頂点に分けなければならない場合はあります。
また、法線だけではなく、テクスチャUVのことまで考えていくと、
頂点列のセットアップだけで大変な作業になるかと思われます。
一度、ポリゴンごとに頂点を展開しDrawPrimitiveで描画を行ってみてはどうでしょうか?
もし、それでどうしても速度的、容量的に満足いかないというのであれば、
その時に頂点情報を圧縮するような処理を入れみるというのはいかがでしょうか。

タイトルRe^4: FBXエクスポータ 法線の数
記事No391
投稿日: 2009/09/11(Fri) 05:51:42
投稿者てぃあの
かしこまりました。

とりあえずインデックスにしたがって頂点座標を展開してしまってDrawPrimitiveで描画してしまいます。

時間ができたときに、自前でインデックスを作り直して同一頂点をまとめてみたいと思います。
たしかに最近はUVも1つではなくなってきましたし(法線マップ用とか)大変な作業ですよね。

いろいろありがとうございました。
また何かありましたら、よろしくお願いいたします。