面整理・影取に関する覚書
YSFSの機体製作における面整理と影取の意味とその私的手順の解説。文章は固いけど内容的には、初心者向けかも。
はじめに
以下の文章は、あくまでも筆者の私的見解・私的手順を紹介したものであり、これがすべてではありません。
もっと良い方法があったらぜひご教授下さい。
なお、途中登場するPerlスクリプトはすべてF22愛好会氏が、製作・公開なされているものです。このような便利な数々のスクリプトを提供してくださっている同氏に感謝しております。
スクリプトの使い方はここでは解説しません。スクリプト付属の説明書が詳しいですのでそれをよくお読みになってください。また、スクリプトの導入方法や使用法に関するご質問にもお受けできませんのでご注意下さい。
途中登場する単語のうち、特殊な単語や一般的な意味とは違った使われ方をする単語
についてはYSFSモデリング用語集Wikiへのリンクを設置してあります。
- update log
- 2006-03-07:表記ゆれ、誤字脱字などの修正。
- 2005-09-04:一部単語にYSFSモデリング用語集Wikiへのリンクを設置。
- 2005-07-05:面整理時の注意点に言及。
- 2005-03-10:GepolyXTipsに項目追加。
- 2004-12-23:MergePolygonへの言及を追加。
- 2004-12-12:初出。
面整理手順
Surfの特徴の一つとして超多角形のサポートがあげられる。そのメリットとしては、描画する面の数を減らすことによるデータサイズの軽減や、GepolyXのワイヤーフレーム表示での編集をやりやすくするといったようなものがある。
しかしながら、最近YSの機体製作でも多く用いられるようになってきたモデラーMetasequoiaではこの超多角形を扱うことが出来ない。最大で四角形面である。
そのため、Metasequoia独自形式".mqo"からSurf形式".srf"に変換した後に、この(ほぼ)同一法線をもつ面同士を結合(張り直し)て、超多角形を生成するということを行う。その操作のことを"面整理"と呼ぶことにする。これによりデータ読み込み時のメモリ消費を軽減したり、データサイズを軽減したりすることが可能となる。
しかし、ここで注意しておかねばならないことがある。それは凹型ポリゴンを作らないようにするということである。
というのは、凹型ポリゴンはそのまま表示することはできず、表示される際にはプログラム側で分割処理が施されてから表示される−つまり表示速度が遅くなるためである。
いくらデータサイズが軽くても肝心の表示速度が遅くては元も子もない。面整理時には整理後のポリゴンが常に凸であるように気を付けるようにしたい。
F22愛好会氏の凹形ポリゴンの表示負荷という記事に非常におもしろい実験結果が掲載されているので、是非参照しておきたい。
面整理にはYS純正(?)モデラーであるGepolyXを使うことが多い。Gepolyでも出来るだろうが、使い方がわからない(使ったことがない)のでここではGepolyXを使った方法を紹介することにする。
では、具体的な手順を追っていこう。
GepolyXを起動し、Surfを開く
とりあえず"Delete Same Vertex/Delete None Used Vertex"を実行。
法線がほぼ同一と思われる面同士に対して"Blend Polygon"を実行。
再度"Delete Same Vertex"を実行。こうすることで面貼り時の頂点の二重選択も解消できる。
面整理が完了したら一度保存し、SurfViewOで確認。このとき面の張り忘れも合わせて確認する。見られなかったらVertexLimitを実行。
影取作業へ。
なお、BlendPolygonは便利であるが多くの斜めを向いているポリゴンには使えない。"その場合は、その部分の面を張り直すことになる。詳しい手順は下記参照のこと。
昨日(2004-12-22)付けで、MergePolygonがリリースされました。多くの場合、張り直し作業はこれを使った方が簡単です。
- Merge利用
-
- MergePolygon実行準備のため、張り直したい面に色と自己発光("Set self Lighting")を設定。
- MergePolygonを実行
- 面が正常に結合されているかを確認し、万一おかしくなっていた場合は手動張り直し手順に移行。
- "Paint Polygon"で元の色に戻す。
- 手動張り直し
-
- "Pick Up Color"で張り直す面の色をあらかじめ取得
- "Delete Polygon"で元の面を消去(これは後でも良い)
- "Insert Polygon"で面を生成(このときに頂点の選択忘れが無いように)
- "Set Normal of Selected Polygon"で法線設定
影取手順
影はOpenGL版のみに発生する現象で、モデルが部分的に黒ずんでしまうなどモデルの美観を損なう一大因子である。この影の出来る原因について筆者は詳しくはないが、鋭角に面同士が接している箇所−−翼端やフラップ、ラダーなど−−に丸め設定が加わっていると発生しやすい傾向にあるようだ。
この影を取り除く操作を"影取"と呼ぶことにする。
影取には"丸め解除法"と"頂点分割法"の二種類の方法がある。ここでは便宜上そのように定義する。
前者は、影の発生している頂点の丸め指定(Surfの頂点指定行末尾のR)を外すという方法、後者は、影の発生している頂点を境に部品を分割して再結合し頂点を二重にするという方法である。
前者には、操作が簡単・サイズ変動はほぼ0という利点があるが、頂点の丸め指定が解除されるためその部分で角張ってしまうという欠点がある。
後者では、丸め指定が解除されないため角張ってしまうことはないが、頂点を二重にするなど作業が多少面倒であったり、サイズが増加してしまうといった欠点がある。
このように、両者ともに一長一短があるので、影取の際はどちらの方法をとるのが望ましいかを考えて行うこととなる。
ではこの両者の場合について具体的に手順を追っていこう。
なお、頂点分割法の影取についてはいささか面倒なので(面整理が必要ない場合であれば)Metasequoiaレベルで処理しておいたほうが楽である。
- 丸め解除法
-
Unshadowを使用する。or Surfをテキストエディタで開き目的頂点の行から"R"を削除する。
SurfViewOで確認する。
- 頂点分割法
-
他にない色を"Select Color"で選択し、分割したいポリゴンを"Paint Polygon"で塗る。
ColorDeleteを用いて、その色のポリゴンだけを切り出す。切り出された状態のSurfも生成しておく。(最終的に結合するため)
必要ならこの時点で切り出したポリゴンに丸め解除法で影取を施す。
SurfMergeを用いて切り出したSurfと切り出されたSurfを結合する。(切り出したものを元に戻す感覚)
変更した色を元の色に戻す。
SurfViewOで確認する。
GepolyX:Tips
今まで述べてきたとおり、機体製作においてはやはりGepolyXでの編集が必要となる局面が多々ある。
その際に知っておくと役に立ちそうな事項を羅列してみることとする。特に「どういうことをすると落ちるのか」ということはGepolyXと付き合う上で知っておくべきだろう。もっとも、そんなこと関係なし強制終了することもあるが・・・
SurfViewにも当てはまるが二バイト文字(いわゆる全角文字など)を含むフォルダ内からは呼び出すことができない。最初から何も開けないときはまずこれを疑う。
面整理後保存したはずのSurfが見られない場合は、VertexLimitを使用することで見られるようになる場合が多い。
必ずバックアップをこまめに取りながら行うこと。GepolyXは不安定でよく落ちる。特に、法線設定などで落ちることが多い。
バックアップ時はなるべく"別名保存"し"上書きを避ける"ようにすること。保存中にエラーが発生するとすべてデータが消滅することがある。この挫折感の回復は相当難しい。
面整理は影取の前に行っておくこと。頂点分割法の影取を行う場合、あとからその頂点を含む面を張り直しては意味が無くなってしまう。そのため、あらかじめ面整理を終えた状態で最後に影をとるのが効率が良いと考えられる。
同一法線かどうか微妙なときもとりあえず張り直してみた方がよい。もしポリ欠けなど発生するならば"Devide Polygon"ですぐに分割できる。
"Devide Polygon"後は法線方向が乱れることがあるので、"Recal Normal"もしくはRecalcSrfを用いて法線の再計算をすることが望ましい。
特に"Set Normal of Selected Polygon"は落ちやすいので注意が必要。法線設定矢印を表示させたままだと落ちることが多いので、保存前には"Clear Interface Object"を実行すべきである。
面が小さく作業がしにくいときは10倍程度に拡大してから再度縮小する方法をとるとよい。
GepolyXで保存された頂点などの精度は小数点以下三桁までなので、Surf出力時にあらかじめ10倍程度にしておくと精度を保ったまま作業が出来る。
色をRGB色形式で指定したSurfをGepolyXやSurfViewOで開くと正常な色で表示されない(青系統の色で表示される)。このときGepolyXで保存すると、そのまま保存されてしまうので注意。
凹型ポリゴンを分割するときには"Convexnize"コマンドが有効である。