標準の VRML2.0 では Spline や NURBS などの曲面データには対応していません。
このため3Dモデリングツールなどで滑らかな曲面のモデルを VRML で出力すると、ファイルサイズは大きくなりがちでした。
blaxxun Contact 3D や Cortona VRML Client は Spline や NURBS のモデルを表示するためのノードを独自に追加していますが、そのノードを使ったVRML作品はそのブラウザー専用となり Cosmo Player など他のブラウザーでは見ることができません。
プロトタイプ CurveIndexedFaceSet は主立ったVRML2.0対応ブラウザーに対して隔たりなく曲面表示を実現します。
updated 2003.3.20 first released 2002.6.12
Download
標準のVRML2.0で細分割曲面(subdivision surface)を表現する為のプロトタイプです。
フリーソフトウェア
- 特定のVRMLブラウザーに依存しません。
JavaScript ( VRMLScript ) に十分対応しているVRML2.0ブラウザーならば、このプロトタイプを使うことができます。
- 初期化時のみ計算を行います。
より滑らかな曲面を表示さようとするほど初期化に時間がかかりますが、一度表示されるとこのプロトタイプは計算を行いません。
- 既存のVRML作品に少々手を加えるだけで対応できます。
このプロトタイプのフィールドは一部を除き IndexedFaceSet ノードと共通です。
曲面化されたモデルは元と比べて一回り小さくなります。
3D CAD や 3Dモデリングツールで作成した Spline や NURBS などの曲面データには対応していません。
Windows PCにインストールされた以下の
VRMLブラウザーで動作を確認しました。
- Cosmo Player 2.1
- Cortona VRML Client 3.1 / 4.1 / 4.2 / 5.0
- blaxxun Contact 5.1 / 5.3
- BS Contact VRML 6.1 / 6.2 / 7.0
- Octaga Player 2.0
- Pivoron Player 1.0
- GLView 4.4
VRMLブラウザーにより初期化時間が異なります。
上記のブラウザーの中では blaxxun Contact と BS Contact VRML が速く初期化を行います。
モデルや分割数、PCのスペックにより前後しますが、blaxxun Contact 5.1 と比べて Cosmo Player 2.1 は約2倍、Cortona VRML Client 4.1 は約3〜4倍の初期化時間がかかります。
- IndexedFaceSet ノードが使われているVRML作品を用意してください。
CurveIndexedFaceSet プロトタイプ(ファイル名 cifs.wrl)をそのVRML作品と同じフォルダに置いてください。
- VRML の2行目以降の出来るだけ上の位置に下テキストエリア内の EXTERNPROTO を追加してください。
- 使わないフィールドは削除していただいて結構です。 何のことか分からない場合はこのまま使ってください。
- cifs.wrl をこのVRML作品とは異なるフォルダに置く場合、一番下の行を変更しパスを指定してください。
- 曲面表示を行う IndexedFaceSet を CurveIndexedFaceSet に置換してください。
プロトタイプ名
CurveIndexedFaceSet
フィールド
ピンク色の行のフィールドはこのプロトタイプオリジナルです。
白色の行のフィールドは IndexedFaceSet ノードとほぼ同じ仕様です。
入出力タイプ |
フィールド型 |
フィールド名 |
初期値 |
field |
SFInt32 |
division |
2 |
field |
SFFloat |
sharpness |
0 |
field |
SFString |
edgeFinish |
"LINEAR" |
exposedField |
SFNode |
coord |
NULL |
field |
MFInt32 |
coordIndex |
[] |
field |
SFFloat |
creaseAngle |
0 |
field |
SFBool |
ccw |
TRUE |
field |
SFBool |
convex |
TRUE |
field |
SFBool |
solid |
TRUE |
exposedField |
SFNode |
color |
NULL |
field |
MFInt32 |
colorIndex |
[] |
field |
SFBool |
colorPerVertex |
TRUE |
exposedField |
SFNode |
texCoord |
NULL |
field |
MFInt32 |
texCoordIndex |
[] |
exposedField |
SFNode |
normal |
NULL |
field |
MFInt32 |
normalIndex |
[] |
field |
SFBool |
normalPerVertex |
TRUE |
set_coordIndex, set_colorIndex, set_texCoordIndex, set_normalIndex
フィールドはありません。
division
2 | 4 | 8
- 辺の分割数を設定します。 2 か 4 か 8 を指定してください。 2未満ならば分割を行いません。
分割数が大きいほど初期化に時間がかかります。
また、分割数が大きいほど滑らかな曲面になりますが、面数が増えるためフレームレイトは小さくなります。
sharpness
0 〜 1.0
- どの程度オリジナルの形を維持するかを設定します。 0 から 1 の間の実数を指定してください。 1 に近づくほどオリジナルに近い形になります。
edgeFinish
"LINEAR" | "CURVE"
- モデルの端にある頂点を移動しないか、曲線状に移動するかを指定します。
"CURVE"
を指定すると、端にある頂点が曲線状に移動します。
normal, normalIndex, normalPerVertex
- normal 関係のフィールドは機能しません。 オリジナルのIndexedFaceSetから削除する手間を省く為だけに存在します。
edgeFinish
による曲面化の違いを確認できます。
"LINEAR"
の場合、モデルの端の形はできるだけ維持される為、隣り合ったモデル同士の隙間はできにくくなりますが、必ずしもそれがベターとは限りません。
左が CurveIndexedFaceSet を使っていないオリジナルのモデル、中央が
edgeFinish "LINEAR"
、右が
edgeFinish "CURVE"
を指定して曲面化したモデルです。
creaseAngle
による曲面化の違いを確認できます。
CurveIndexedFaceSetはオリジナルモデルに鋭い稜線があるならば、そのイメージを残すように曲面化します。
1番上が CurveIndexedFaceSet を使っていないオリジナルのモデルであり、
creaseAngle 0.785
を指定しています。
2〜4番目がそれを曲面化したモデルであり、
creaseAngle
以外は全て共通です。
creaseAngle 0
ならば面の分割は行いますが曲面化は行いません。
creaseAngle 3.142
ならば稜線角度に関わらず全ての稜線を滑らかに曲面化します。
- CoordinateInterpolator などによるモーフィングアニメには対応していないので、行わないようにしてください。
coord, color, texCoord, normal
フィールドにROUTE文などで値を入れても反映されません。
division, sharpness, edgeFinish
フィールドは exposedField ではありません。
ROUTE制御出来ないので注意してください。
texCoord
フィールドを使っている場合、テクスチャーが歪んで貼られてしまうなどオリジナルからかけ離れたイメージになる場合があります。
- 形状に3面稜線が含まれている場合、
division
に4
以上を指定しても無効となります。
この場合、division 2
が適応されます。
- このプロトタイプは営利非営利に関わらず断りなくご自由に使用していただいて構いません。
- このプロトタイプは外部ファイルとして配布されていますが、作品内にPROTOとして組み込んでいただいても構いません。
- このプロトタイプはご自由に改造していただいて構いません。 また、改造されたプロトタイプとそれを使用した作品を公開していただいても構いません。
- このプロトタイプを使用、改造することにより如何なる損害が生じても、制作者(けけんけん)は責任を追いかねます。
- このプロトタイプは今後のバージョンアップに従い、予告無く仕様が変更される場合もあります。
- このプロトタイプはhttp://www.ceres.dti.ne.jp/~kekenken/main/download/curve/cifs.wrlに設置しています。
EXTERNPROTO の url をこの場所に設定していただいても構いませんが、今後予告無く削除もしくは移動する場合があります。
- CurveIndexedFaceSetプロトタイプの著作権は けけんけん が有します。
- CurveIndexedFaceSetプロトタイプを使った作品の著作権は、プロトタイプが作品内に組み込まれた場合を含めて、その作品の著作者が有します。