Copyright by Kekenken, All rights reserved. CurveIndexedFaceSet

標準の VRML2.0 では Spline や NURBS などの曲面データには対応していません。  このため3Dモデリングツールなどで滑らかな曲面のモデルを VRML で出力すると、ファイルサイズは大きくなりがちでした。  blaxxun Contact 3D や Cortona VRML Client は Spline や NURBS のモデルを表示するためのノードを独自に追加していますが、そのノードを使ったVRML作品はそのブラウザー専用となり Cosmo Player など他のブラウザーでは見ることができません。

プロトタイプ CurveIndexedFaceSet は主立ったVRML2.0対応ブラウザーに対して隔たりなく曲面表示を実現します。

What's New

2006.8.3

updated 2003.3.20 first released 2002.6.12 Download

CurveIndexedFaceSet PROTO Version 1.01 ( 6kB )
リンク上で右クリックし、対象をファイルに保存してください。

概要

標準のVRML2.0で細分割曲面(subdivision surface)を表現する為のプロトタイプです。

種別

フリーソフトウェア

特徴

動作環境

Windows PCにインストールされた以下のVRMLブラウザーで動作を確認しました。 VRMLブラウザーにより初期化時間が異なります。  上記のブラウザーの中では blaxxun Contact と BS Contact VRML が速く初期化を行います。  モデルや分割数、PCのスペックにより前後しますが、blaxxun Contact 5.1 と比べて Cosmo Player 2.1 は約2倍、Cortona VRML Client 4.1 は約3〜4倍の初期化時間がかかります。

使い方

  1. IndexedFaceSet ノードが使われているVRML作品を用意してください。 CurveIndexedFaceSet プロトタイプ(ファイル名 cifs.wrl)をそのVRML作品と同じフォルダに置いてください。
  2. VRML の2行目以降の出来るだけ上の位置に下テキストエリア内の EXTERNPROTO を追加してください。
    • 使わないフィールドは削除していただいて結構です。 何のことか分からない場合はこのまま使ってください。
    • cifs.wrl をこのVRML作品とは異なるフォルダに置く場合、一番下の行を変更しパスを指定してください。
  3. 曲面表示を行う IndexedFaceSet を CurveIndexedFaceSet に置換してください。

最も簡単な使用例

曲面化された立方体 (1KB + PROTO 6kB) 球状に表示されます。

仕様

プロトタイプ名
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フィールドはありません。

division2 | 4 | 8
辺の分割数を設定します。 2 か 4 か 8 を指定してください。 2未満ならば分割を行いません。  分割数が大きいほど初期化に時間がかかります。  また、分割数が大きいほど滑らかな曲面になりますが、面数が増えるためフレームレイトは小さくなります。
sharpness0 〜 1.0
どの程度オリジナルの形を維持するかを設定します。 0 から 1 の間の実数を指定してください。 1 に近づくほどオリジナルに近い形になります。
edgeFinish"LINEAR" | "CURVE"
モデルの端にある頂点を移動しないか、曲線状に移動するかを指定します。  "CURVE" を指定すると、端にある頂点が曲線状に移動します。
normal, normalIndex, normalPerVertex
normal 関係のフィールドは機能しません。 オリジナルのIndexedFaceSetから削除する手間を省く為だけに存在します。
edgeFinishによる曲面化の違いを確認できます。  "LINEAR" の場合、モデルの端の形はできるだけ維持される為、隣り合ったモデル同士の隙間はできにくくなりますが、必ずしもそれがベターとは限りません。
左が CurveIndexedFaceSet を使っていないオリジナルのモデル、中央がedgeFinish "LINEAR"、右がedgeFinish "CURVE"を指定して曲面化したモデルです。
Original LINEAR CURVE
Original LINEAR CURVE
Original LINEAR CURVE
Original LINEAR CURVE
creaseAngleによる曲面化の違いを確認できます。  CurveIndexedFaceSetはオリジナルモデルに鋭い稜線があるならば、そのイメージを残すように曲面化します。
1番上が CurveIndexedFaceSet を使っていないオリジナルのモデルであり、creaseAngle 0.785を指定しています。  2〜4番目がそれを曲面化したモデルであり、creaseAngle以外は全て共通です。
game pad Original creaseAngle 0.785 (6kB)
Curved creaseAngle 0 (6kB + PROTO 6kB)
Curved creaseAngle 0.785 (6kB + PROTO 6kB)
Curved creaseAngle 3.142 (6kB + PROTO 6kB)
creaseAngle 0ならば面の分割は行いますが曲面化は行いません。  creaseAngle 3.142ならば稜線角度に関わらず全ての稜線を滑らかに曲面化します。

注意事項

免責とお断り

著作権

ローカルのディスク上でご覧になる場合は、作品とプロトタイプを同じフォルダに入れてください。

ダウンロード対応VRMLプラグイン
Cortona 3.1 / 4.2 / 5.1 Contact 5.3 / 6.1 / 7.0 Cosmo Player 2.1 Pivoron Player 1.0

first released 2002.6.12 作品例 1

flowers and vase 花と花瓶です。 曲面化する前のオリジナルモデルと2分割、4分割で曲面化したモデルを用意しました。  4分割の初期化時間は PentiumIII 800MHz + Cosmo Player 2.1 で 約5秒です。  4分割はPentiumIII + GeForce or RADEON 以上でないと重すぎるかもしれません。

first released 2003.3.20 作品例 2

plane 大海原を飛ぶプロペラ機です。 曲面化されていないオリジナルモデルと六角大王Super3で曲面化したモデルとCurveIndexedFaceSetプロトタイプで曲面化したモデルを用意しました。  曲面化はどちらも8分割で行っています。  プロトタイプを使って曲面化した場合は PentiumIII 800MHz + Cosmo Player 2.1 で 初期化に約3秒かかりますが、モデリングツールの出力と比べてファイルサイズはとても小さく済みます。