background

スポンサーサイト

--年--月--日(--)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


法線といふもの。

2005年09月09日(Fri)

今回の内容は長文な上、いまいち精神衛生上よろしくないかも知れない。と、前置き。
 
既に棚上げしつつ進行しているのだが、作成中のブツはまだ別の問題を抱えている。
Shade上で作成した形状をPoserへ読み込むと、一部に沁みができてしまうのである。
 
060909-1

ポリゴンが裏向いているんじゃないの?とお思いのアナタ、私もそう考えたのだが、
そもそも裏向きのポリゴンはプレビューでは描画されないのだ。
さらに、この通りShade上では法線はすべて外向きに揃っているのである。
 
050909-2

Shade側のOBJ出力時には、法線情報を含めるか否かのオプションがある。
この情報が上手く反映されていないのかと、何度か設定を変えて出力を繰り返し、
しまいには形状そのものを作成し直したのだが、はやり結果は変わらない。
どうもPoserは最初から法線情報を使用していないような気がするのだ。
さらに、出力の度に沁みができる部分が異なっている。
 
……ここで途方に暮れる。
 
しかしこの沁み、よく見ると面の中の一点だけが妙になっているように思える。
問題の点だけ削除してもう一度面を貼り直そうとしたが、
ンな事をするとShadeはUVを破棄してしまうのであった。最初からやり直し。
 
……ここで怒りに震える。
 
まぁテクスチャを貼れば多少は誤魔化せるか……と諦めていたとき、
モデラーズギルドのチャットで、頂点にも法線があるということを教えていただいた。
法線というのは「面に垂直な方向」のことだ。なら頂点の法線とはなんぞや?
と不可解なままネットを徘徊すると、Wavefront OBJ形式の仕様書を発見。
無論英語である。PDFで78ページある。
 
……ここで眩暈を覚える。
 
が、ざっとナナメ読みしたところで驚いた。そもそも普通に法線と呼ばれているvnは、
"Vertex normals"つまり「頂点の法線」と記述されているではないか。
そんなわけで部分的な翻訳を試みてみた。以下が引用である。
~・~・~・~・~・~・~・~・~・~・~
[vn i j k]
 
Polygonal and free-form geometry statement. Specifies a normal vector with components i, j, and k.
 
Vertex normals affect the smooth-shading and rendering of geometry. For polygons, vertex normals are used in place of the actual facet normals. For surfaces, vertex normals are interpolated over the entire surface and replace the actual analytic surface normal.
 
When vertex normals are present, they supersede smoothing groups.
 
i j k are the i, j, and k coordinates for the vertex normal. They are floating point numbers.
~・~・~・~・~・~・~・~・~・~・~
(試訳)点法線vn i j k
ポリゴン形状と自由型形状のステートメント。i・j・kの成分で垂直なベクトルを指定する。
 
点法線は形状のレンダリングとスムースシェーディングに影響する。
ポリゴンにおいては、点法線は実際の面法線の代わりに使用される。
自由型形状の表面においては、点法線は全ての面にわたって補完され、
実際の解析による面法線を置き換える。
 
点法線が記述されていると、スムージンググループは使用されない。
 
i・j・kは点法線のためのijk座標系であり、浮動小数点数である。
~・~・~・~・~・~・~・~・~・~・~
[f v1(/(vt1)/(vn1)) v2(/(vt2)/(vn2)) v3(/(vt3)/(vn3)) . . .]
 
Polygonal geometry statement. Specifies a face element and its vertex reference number. You can optionally include the texture vertex and vertex normal reference numbers.
 
The reference numbers for the vertices, texture vertices, and vertex normals must be separated by slashes (/). There is no space between the number and the slash.
 
v is the reference number for a vertex in the face element. A minimum of three vertices are required.
vt is an optional argument. vt is the reference number for a texture vertex in the face element. It always follows the first slash.
vn is an optional argument. vn is the reference number for a vertex normal in the face element. It must always follow the second slash.
 
Face elements use surface normals to indicate their orientation. If vertices are ordered counterclockwise around the face, both the face and the normal will point toward the viewer. If the vertex ordering is clockwise, both will point away from the viewer. If vertex normals are assigned, they should point in the general direction of the surface normal, otherwise unpredictable results may occur.
 
If a face has a texture map assigned to it and no texture vertices are assigned in the f statement, the texture map is ignored when the element is rendered.
~・~・~・~・~・~・~・~・~・~・~
(試訳)面要素f v1(/(vt1)/(vn1)) v2(/(vt2)/(vn2)) v3(/(vt3)/(vn3)) . . .
ポリゴン形状のステートメントである。面要素とその頂点の参照番号を指定する。
任意でuv頂点と点法線の参照番号を含むことができる。
 
頂点とuv頂点、点法線の参照番号はスラッシュ(/)で区切られなければならない。
参照番号とスラッシュの間にスペースは入れない。
 
vは面要素中の頂点の参照番号である。最低三つの頂点が必要である。
vtは任意である。vtは面要素中のuv頂点の参照番号であり、常に最初のスラッシュの後に続く。
vnは任意である。vnは面要素中の点法線の参照番号であり、常に二つ目のスラッシュの後に続く。
 
面要素はその向きを示すために面法線を使用する。
頂点が反時計回りに並んでいる場合、面と法線は視点に向かう方向を指す。
時計回りに並んでいる場合は、視点から遠ざかる向きを指す。
もし点法線が割り当てられていると、点法線は面法線の一般的な方向を指し示す。
そうでなければ、予測不可能な結果が起こるかもしれない。
 
面がテクスチャマップを割り当てられ、かつfステートメントの中でuv頂点が割り当てられていない場合、要素がレンダリングされるとテクスチャマップは無視される。
~・~・~・~・~・~・~・~・~・~・~
以上。引用おわり。
 
肝心の"Specifies a normal vector with components i, j, and k"と"they should point in the general direction of the surface normal"がどうにも訳し切れない。
なので点法線がどうやって算出されるのか、どういう影響をおよぼすのかがわからない。
分かったことは、
 
・点法線はスムースシェーディング時に、頂点近辺の向きを示すために使用される。
・面の表裏は単純に、見た目頂点が時計回りに並んでいるか否かで決定される。
・点法線が面法線とぜんぜん違う方向を向いてたら、よー知らん。
 
ということぐらい。そして、点法線を持たないオブジェクトでもスムースシェーディングをかけることができるということは、そもそもPoserは全く別の算出方法で法線を決定しているということだ。
結局のところ、UVを貼って法線を抜いた形状で、沁みができる現状に変わりはない。
 
……ここで無力感に苛まれる。
 
徒労に終わってしまったわけだが、折角なので翻訳文をUPすることにした。
いつの日かこんな知識も役に立つ時が……来るかな。
 
050909-3

……ねぇ?
 
■頂いたコメント■
スポンサーサイト




Menu

Profile

Kyotaro

確定名:Kyotaro
ネタを探しているらしい。

Categories

Calendar

08 | 2005/09 | 10
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -

Comments

Archives

Track back

RSS feed

Links

Search

※2011年4月6日のサーバ障害の為、エントリのアドレスが以前のものからズレています。当Blogのエントリにリンクを張っておられた方は、お手数ですがアドレスのご確認をお願い致します。

※Internet Explorer非推奨。


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。