Copyright by Kekenken, All rights reserved. EnvironmentIndexedFaceSet

環境マッピング ( environment mapping ) は金属やガラスなどの物体に鏡の如く遠景が映り込んでいる様子を表現するためのテクスチャーの使い方の一種です。  最新のビデオゲームやPCゲームは言うに及ばず携帯電話の3Dでもこれに対応していますが、標準の VRML2.0 では対応されていません。  blaxxun Contact 3D や Cortona VRML Client は環境マッピングを行うためのノードを独自に追加して対応していますが、そのノードを使ったVRML作品はそのブラウザー専用となり Cosmo Player など他のブラウザーでは見ることができません。

プロトタイプ EnvironmentIndexedFaceSet は 主立ったVRML2.0対応ブラウザーに対して隔たりなく環境マッピングを実現します。

What's New

2006.8.3

updated 2006.8.2 first released 2002.5.6 Download

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

概要

標準のVRML2.0で環境マッピングを表現する為のプロトタイプです。

種別

フリーソフトウェア

特徴

動作環境

Windows PCにインストールされた以下のVRMLブラウザーで動作を確認しました。 VRMLブラウザーにより動作速度が異なります。 blaxxun Contact と BS Contact VRML が高速です。
GLView 4.4 はグラフィックチップに関わらずテクスチャーが荒く表示されます。

Corotna VRML Client 5.0 Beta release 128 ではこのプロトタイプは動作しませんが、 Beta 2 では動作することを確認しました。

使い方

  1. IndexedFaceSetノードが使われているVRML作品と、遠景の画像ファイルを用意してください。  EnvironmentIndexedFaceSet プロトタイプ(ファイル名 eifs.wrl)をそのVRML作品と同じフォルダに置いてください。
  2. VRML作品の2行目以降の出来るだけ上の位置に下記の EXTERNPROTO を追加してください。
    • 使わないフィールドは削除していただいて結構です。 何のことか分からない場合はこのまま使ってください。
    • eifs.wrl をこのVRML作品とは異なるフォルダに置く場合、一番下の行を変更しパスを指定してください。
  3. 環境マッピングを行う IndexedFaceSet ノードに texCoord と texCoordIndex フィールドが使われているならば、それを削除してください。
  4. 環境マッピングを行う IndexedFaceSet ノードを 以下のように書き換えてください。
    変更前 geometry IndexedFaceSet
    変更後 geometry DEF EIFS EnvironmentIndexedFaceSet
    • DEF の後の定義名(この場合EIFS )は任意に名付けていただいて結構です。
    • 複数の IndexedFaceSet に環境マッピングを施す場合は、それぞれ別の名前で定義してください。
    • DEF による定義は必ず必要です。 既に定義されている場合はそのままそれを使っていただいて構いません。
  5. EnvironmentIndexedFaceSet の外観(Appearance)に 遠景の画像ファイルをテクスチャーとして書き足してください。
    画像ファイル名が foo.jpg である場合の例

    Shape {
    appearance Appearance {
    texture ImageTexture { url "foo.jpg" }
    }
    geometry DEF EIFS EnvironmentIndexedFaceSet {
    ・・・・・
    }
    }
  6. VRMLの最終行に ProximitySensor ノードと、 ROUTE文を書き足してください。  ProximitySensor は1個でかまいませんが、ROUTE文は EnvironmentIndexedFaceSet 1個につき2行必要です。
    EnvironmentIndexedFaceSet を EIFSで定義している場合の例

    DEF PrS ProximitySensor { size 1000 1000 1000 }
    ROUTE PrS.position_changed TO EIFS.set_position
    ROUTE PrS.orientation_changed TO EIFS.set_orientation
    2個の EnvironmentIndexedFaceSet を使っている場合の例

    DEF PrS ProximitySensor { size 1000 1000 1000 }
    ROUTE PrS.position_changed TO EIFS1.set_position
    ROUTE PrS.orientation_changed TO EIFS1.set_orientation
    ROUTE PrS.position_changed TO EIFS2.set_position
    ROUTE PrS.orientation_changed TO EIFS2.set_orientation
    • ProximitySensor のDEF定義名は任意で結構です。
    • ProximitySensor の size は任意で結構ですが十分大きくしてください。
    • ROUTE の TO の後の定義名は各 EnvironmentIndexedFaceSet で定義した名前に合わせて変えてください。
    • ProximitySensor の size が小さい場合、または ROUTE が無い場合、マッピングが変化しません。
EnvironmentIndexedFaceSet が Transformノードの子ノードである場合の使い方

最も簡単な使用例

環境マッピングを施された立方体 (1KB + PROTO 4kB + texture 14kB)

仕様

プロトタイプ名
EnvironmentIndexedFaceSet
フィールド

ピンク色の行のフィールドはこのプロトタイプオリジナルです。  白色の行のフィールドは IndexedFaceSet ノードとほぼ同じ仕様です。

入出力タイプ フィールド型 フィールド名 初期値
eventIn SFVec3f set_position
eventIn SFRotation set_orientation
exposedField MFString mode "NORMAL"
exposedField SFBool realTime TRUE
exposedField SFTime mappingInterval 1
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
eventIn MFInt32 set_colorIndex
exposedField SFNode normal NULL
field MFInt32 normalIndex []
field SFBool normalPerVertex TRUE
eventIn MFInt32 set_normalIndex
exposedField SFVec3f translation 0 0 0
exposedField SFRotation rotation 0 0 1 0
exposedField SFVec3f scale 1 1 1
exposedField SFRotation scaleOrientation 0 0 1 0
exposedField SFVec3f center 0 0 0

texCoord, texCoordIndex, set_texCoordIndex, set_coordIndex フィールドはありません。

set_position
アバターの視点の位置( ProximitySensor の position_changed )をルートしてください。
set_orientation
アバターの視線の向き( ProximitySensor の orientation_changed )をルートしてください。
mode"NORMAL" | "CAMERASPACEREFLECTIONVECTOR"
環境マッピングのタイプを設定します。  "CAMERASPACEREFLECTIONVECTOR" ならば blaxxun Contact 3D 専用ノードの
texCoord TextureCoordGen { mode "CAMERASPACEREFLECTIONVECTOR" }
と同様のマッピングを行います。  "CAMERASPACEREFLECTIONVECTOR" の方が初期値 "NORMAL" よりも若干高速です。
realTimeTRUE | FALSE
テクスチャーコード計算の頻度を設定します。  FALSEならば計算頻度をTRUEの半分にして、画質を犠牲にしつつ全体の処理を速くします。
mappingInterval
廃止されました。 Version 1.1 以上では機能しません。
solidTRUE | FALSE
TRUEに設定すると裏面の描画とテクスチャーコード計算が行わなわれない為、処理が速くなります。
color
普通の IndexedFaceSet でも同様ですが、color フィールドを使う場合、VRMLブラウザーにより表示内容が異なる場合があります。
  • Cosmo Player, Cortona VRML Client, Pivoron Player の場合
     テクスチャーがカラーならば、そのままテクスチャーで使われている色で表示され colorフィールドは無視されます。
     テクスチャーがモノクロならば、colorフィールドの色がテクスチャーの白黒階調に合わせてブレンドされます。
  • balxxun Contact 3D, GLView の場合
     テクスチャーがカラーかモノクロかに関わらず、colorフィールドの色がテクスチャーにブレンドされます。
normal, normalIndex, normalPerVertex, set_normalIndex
normal 関係のフィールドはマッピングに影響しません。
translation, rotation, scale, scaleOrientation, center
Transformノードの子ノードである場合、Transformノードのフィールドと同じ値を指定もしくはルートしてください。  詳しい使い方はTransformノードの子ノードである場合を参照してください。  これらのフィールドは Version 1.2 で追加されました。
modeによるマッピングの違いを確認できます。
NORMAL CAMERASPACEREFLECTIONVECTOR Viewpointを変更することにより、mode を選択できます。
mode change (10kB + PROTO 4kB + texture 8kB)
参考までに、下は blaxxun Contact 3D 専用ノードを使っている場合です。
Contact only (9kB + texture 8kB)
creaseAngleによるマッピングと処理速度の違いを確認できます。
creaseAngle 0 creaseAngle 1 下の2つのVRMLは creaseAngle 以外全て共通です。
creaseAngle 0 (10kB + PROTO 4kB + texture 7kB)
creaseAngle 1 (10kB + PROTO 4kB + texture 7kB)
モデルにもよりますが、creaseAngle が大きい(滑らかな稜線が多い)ほど処理が速くなります。

Transformノードの子ノードである場合

初期値の指定
Transformノードのフィールドに初期値を設定している場合、子ノードのEnvironmentIndexedFaceSetにも同じ値を指定してください。
(例)
Transform {
translation 2 5 10
rotation 0 1 0 3.141
children [
Shape {
geometry DEF EIFS EnvironmentIndexedFaceSet {
translation 2 5 10
rotation 0 1 0 3.141
coord Coordinate {・・・}
coordIndex ・・・・・・・
}
}
]
}

ROUTE制御
Transformノードをルート制御している場合、子ノードのEnvironmentIndexedFaceSetにも同じ制御を行ってください。
(例)
DEF Tf Transform {
children [
Shape {
geometry DEF EIFS EnvironmentIndexedFaceSet {
coord Coordinate {・・・}
coordIndex ・・・・・・・
}
}
]
}

DEF TiS TimeSensor {・・・}
DEF PI PositionInterpolator {・・・}

ROUTE TiS.fraction_changed TO PI.set_fraction
ROUTE PI.value_changed TO Tf.translation
ROUTE PI.value_changed TO EIFS.translation
star 下に並んでいる球をクリックすると星が5秒間アニメーションします。
● 星が平行移動します。 ● 星がY軸を中心に回転します。 ● 星が縮小拡大します。 ● 星がZ軸を中心に傾き(?)ます。 + の組み合わせ以外は同時に実行できます。
■をドラッグすると、半透明の紫色の球が移動します。  その球の中心が拡大縮小、回転の中心となります。 紫色の球は初期状態では星の内側に隠れています。
Star Animation (7kB + PROTO 4kB + texture 4kB)
複数のTransformノードが入れ子になっている場合
多関節など Transform ノードが複数の入れ子になっている場合、子ノードのEnvironmentIndexedFaceSetには各Transformノードのフィールド値を加算もしくは掛け算した合計を入れてください。(centerフィールドは除く)
(例)
Transform {
translation 0 5 0
rotation 0 1 0 1.571
scale 2 2 1
center 0 5 0
children [
Transform {
translation 0 0 10
rotation 1 0 0 1.571
scale 2 0.5 0.5
center 0 8 0
children [
Shape {
geometry DEF EIFS EnvironmentIndexedFaceSet {
translation 0 5 10
rotation 0.5773 0.5773 -0.5774 2.0946
scale 4 1 0.5
center 0 8 0
coord Coordinate {・・・}
coordIndex ・・・・・・・
}
}
]
}
]
}
arm 黄色の球を始点とした多関節のアームです。  繋がった各パーツをドラッグすると、球の部分を関節にして回転します。  一番下の黄色いパーツをドラッグするとアーム全体が平行移動します。
(殆ど検証をしてませんので、もしかしたらそれっぽく見えているだけかもしれません・・・。)
Arm with joints (8kB + PROTO 4kB + texture 14kB)

注意事項

免責とお断り

著作権

関連リンク

blaxxun DeveloperNet
反射ベクトルを求める式はここのドキュメントを参考にしています。

* Studio GoGoGo *
作品例自動車のテクスチャーの切り替え及び、猫鏡のテクスチャー画像のbase64コード化については、ここの * VRML Studies * を参考にしています。

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

updated 2002.10.23 first released 2002.5.6 作品例 1

car0car1 車体をクリックすると夕方と夜が切り替わります。 それに伴い車体の色が変化します。  PentiumIII 800MHz の場合のフレームレイトは Cosmo Player 2.1 で 12fps 前後、blaxxun Contact 5.1 で 35fps 前後です。  グラフィックチップが 3D に対応していない場合その半分ぐらいになるでしょう。  6番目のViewpoint "not real time" を選択すると、画質が若干悪くなる代わりにフレームレイトが向上します。
4WD Car (36kB + PROTO 4kB + texture 18kB)
ダウンロード対応VRMLプラグイン
Cortona 3.1 / 4.2 / 5.1 Contact 5.3 / 6.1 / 7.0 Cosmo Player 2.1 Pivoron Player 1.0
テクスチャー cloud0.jpg cloud1.jpg nightcity0.jpg nightcity1.jpg

moved 2003.3.20 first released 2002.5.6 作品例 2

shitenrin0shitenrin1 この作品はバーチャル七梨家のバーチャル・アイテムに移しました。

first released 2002.11.2 作品例 3

neko mirror この鏡を覗いた者は猫になってしまうにゃー! え? あれ? 枠しかにゃい?!
魔鏡?! 猫鏡 (29kB + PROTO 4kB)
ダウンロード対応VRMLプラグイン
Cortona 3.1 / 4.2 / 5.1 Cosmo Player 2.1 Pivoron Player 1.0
この作品のテクスチャー画像は外部ファイルではなくbase64コードにてVRMLに記述しています。  その為、それに対応していない blaxxun Contact、BS Contact VRML 及び GLView ではテクスチャーが表示されません。