BS Contact 6.0 - Node Extensions

 




Introduction

This document provides information about implementation notes for specific VRML 97, supported nodes from MPEG-4, and Bitmanagment/blaxxun extensions nodes.

For compatibility with the VRML97 specification Annex F these extensions should not be used until really required for a specific problem solution. Often scripting code can be made compatible by using extensions only in javascript code branches checking first for Browser.getName() & parseFloat(Browser.getVersion()).

Extensions nodes are native implemented EXTERNPROTO's. For VRML 97 conformance, a PROTO definition for the extension node should be added in the following way (using the MenuSensor node as an example):

EXTERNPROTO MenuSensor[
exposedField SFBool enabled
exposedField SFString title
exposedField MFInt32 choices
exposedField MFString descriptions
exposedField SFString position
eventOut SFBool isActive
eventOut SFInt32 choice ] ["urn:inet:bitmanagement.de:node:MenuSensor", "http://www.bitmanagement.de/vrml/protos/nodes.wrl#MenuSensor"]

If possible most nodes have an usefull fallback implementation. Also writing a custom fallback proto is possible.

All built-in nodes can be referenced using the EXTERNPROTO URN syntax "urn:inet:bitmanagement.de:node:NodeType", the interface of the native node is used, not the interface of the EXTERNPROTO statement. For compatibilty with BS Contact 4 and 5, the urn prefix urn:inet:blaxxun.com:node: is also recognized and supported.

Resources



 

Extensions for VRML 97 Nodes

FontStyle / Text

Texture Text

Per default BS Contact computes a 3D representation for VRML Text nodes by getting True-Type outlines for each character and tessellates these into a set of triangles. This gives high quality text, but performance suffers due to the tessellation step and the high amount of triangles produced. VRML authors expressed the need for more flexible Font performance handling.

In BS Contact 4.3 there is the option of creating a textured rectangle for each character. The user first must supply a special Font texture in an ImageTexture node and sets the fontstyle family attribute to "TEXTURE".

In BS Contact 6.0 such a texture can be rendered on the fly. This way the texture is no more limitted to fixed width fonts and there is done some anialiasing to improve readability.

Using an ImageTexture for the font:

Shape { 
    appearance Appearance {
        texture DEF FONTT ImageTexture {
            url "font512tr.gif"
            repeatS FALSE repeatT FALSE 
        }
        material Material { diffuseColor 1 1 1 }
    }
    geometry Text {
        string [ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ]
        fontStyle FontStyle {
        family ["TEXTURE"]
            justify "LEFT
        }
    }
}

The Text attributes length and maxExtent, the FontStyle attributes size, spacing, leftToRight, topToBottom, justify and style = PLANE or ITALIC are implemented for TEXTURE text. The square texture map is divided into 16*16 cells for 256 different characters, the character 0 start in the upper left corner of the pixel image. The character width is scaled by 0.8. The Appearance node or Texture node should be reused between different text strings for speed. For special effects or fonts the texture map can be tuned. Using textures with alpha (or a transparent GIF) can give a transparent background. Using grayscale or black & white textures allows color changes using the Material diffuseColor.

Test Examples:

To further optimize the Text texture resolution and layout custom layout settings can be specified with up to 7 numbers after the family "TEXTURE" string. The format is "TEXTURE minChar maxChar cols rows aspect extraSpace shift"

minChar minimal character code - default 0
maxChar maximal character code - default 255
cols number of characters per texture horizontal - 16
rows number of character rows vertical - 16
aspect float, default 0.8 - width scaling factor
extraSpace float, default 0.0 extra spacing between characters
shift float default 0, italic shift factor for top of character box

If an application only needs a certain continous range of characters, the texture can be optimized for higher resolution characters (or sprites).

The standard polygonal Text has been changed in the following ways: The default resolution for Text size 1.0 has been reduced. Text size 0.1 produces a coarse Font contour approximation, 10.0 a higher approximation.

The FontStyle attribute "OUTLINE" produces only fast lineset outline characters. This option can be only enabled for BS Contact 4.3 and might cause an exception in Versions prior to BS Contact 4.3.

The FontStyle attribute "EXTRUDE" produces extruded 3D Text with a depth of 1.0. Please beware of the high Triangle count possibly produced. (e.g. use the size 0.1 option for a coarser outline tesselation.)

It is also possible to provide a Windows True Type font name in the family setting.

In BS Contact 6 text node strings need to be encoded in UTF8.

In BS Contact 4.4 the following Windows specific language codes are recognized : ANSI, DEFAULT, SYMBOL, SHIFTJIS, HANGEUL, HANGUL, GB2312, CHINESEBIG, OEM, JOHAB, HEBREW, ARABIC, GREEK, TURKISH, VIETNAMESE, THAI, EASTEUROPE, RUSSIAN, MAC, BALTIC

Example Hebrew

Example Symbol

 

The FontStyle attribute "WEIGHT#number" allows to fine tune the font weight, typical values are 0.. 1000 where bold is 700.

 

Using on the fly rendering of the texture

When on-the-fly generation of the font texture is turned on, BS Contact creates an alpha channel texture that contains a bitmap of each possible letter. Each letter is represented by a rectangular face that references the characters cell in the texture. Besides the gain in performance and readability compared to polygonal text rendering, clicking the text becomes easier because of the rectangular cell for each letter. Nevertheless, due to the use of an alpha channel the background scene can be seen between the letters.

To activate on-the-fly texture generation as a world author, append "USE_TEXTURE" to the style field of the FontStyle node.

Shape { 
    appearance Appearance {
        material Material { diffuseColor 1 1 1 }
    }
    geometry Text {
        string [ "abcdefghijklmnopqrstuvwxyz" ]
        fontStyle FontStyle {
            family ["Verdana" "Helvetica" "SANS"]
            justify "LEFT"
            style "PLAIN USE_TEXTURE"
        }
    }
}

The user can activate this feature as a default for all FontStyle nodes by checking "Use Textures for Text" in the "Performance options" tab of the Preferences dialog.

Example Scene
Select a font and a style on the left side. Use the mouse to rotate the text in the center and the mouse wheel to zoom in and out. The page up and page down keys select between predefined viewpoints.

 

Material

Material transparency is blended with transparent textures or transparent gif's. This is not VRML compliant, but was a demand from content developers. See also the MultiTexture node for the option of blending Material color with Textures.

MovieTexture

eventOut SFTime mediaTime - reports the current media time play time

eventOut SFVec2f imageSize - reports the current media video image size

 

Inline

Additonal fields for low level access :

Inline {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFString url []

.. extended fields :
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   eventOut SFBool isLoaded # TRUE if loaded & parsed sucessfully

   eventIn SFBool set_unload # send TRUE to unload Inline from memory
}

ImageTexture

ImageTexture {

... standard fields

eventOut SFBool isLoaded # TRUE if media loaded, FALSE if can't be loaded
eventIn SFBool set_unload # , send TRUE to unload from memory
exposedField MFString parameter [] # optional format conversion parameters. (6.0)
}

PixelTexture

PixelTexture {

... standard fields

exposedField MFString parameter [] # optional format conversion parameters. (6.0)
}

Script

see scripting.

NavigationInfo

{

... standard fields

.. extended fields :

exposedField MFFloat avatarSize [0.25, 1.6, 0.75] # optionally append the center of rotation for EXAMINE mode. (6.0)
}

When avatarSize contains at least 6 numbers, the 4th, 5th and 6th of them specify the center of rotation of the EXAMINE navigation mode. As with all other parameters of the NavigationInfo node, they are interpreted in the coordinate system of the currently bound Viewpoint node.

If no center of rotation is specified in the avatarSize field, BS Contact uses its default strategy to find a center of rotation. This is the center of the worlds bounding box if the current viewpoint is outside of that bounding box and is the point on the geometry where the user clicked at when he/she began a movement.

 

 

MPEG-4 Nodes

Layer3D

Layer3D enables to render subscene in a rectangular area. The background can be a solid color or transparent.

Layer3D is usefull for scene composition and VRML user interfaces. Many problems with the current HUD practice are solved with Layer3D.

More discussion and examples are provided here.

2D Nodes

A set of 2D MPEG-4 nodes provides easier UI design.

Layer2D, Transform2D, Bitmap, Rectangle, Material2D, CoordinateInterpolator2D, PositionInterpolator2D

3D Nodes

CompositeTexture3D

 

Parser extensions

Contact parses PROTO ROUTES EXTERNPROTO in all places a node value is expected.

IS mapping rules are relaxed, e.g. you can IS map from an exposedField to a field.

NURBS Technology

As part of our development efforts for Pentium?/sup> III support, we have implemented NURBS technology in BS Contact 4.1. With NURBS, complex 3D curves can be represented with a minimum of data, allowing a new level of visual display and animation quality for Internet-delivered 3D graphics.

To learn about Contact's NURBS development, including NURBS-related settings in Contact, sample content, project results and our proposed NURBS extension for VRML97, see the NURBS project overview and the VRML NURBS proposal.

Trimmed NURBS extension nodes : Contour, Polyline2D, NurbsCurve2D, TrimmedSurface, Conversion utility from OpenIventor NURBS format to VRML, see NURBS project page for details. Trimmed NURBS support is not available in BS Contact 5.0.

The Nurbs extension are added to a VRML 97 amendment.

 

Multi Texturing

With most modern 3D boards 2 textures can be combined per object in a single path.

MultiTexturing documentation

Particle Systems

Particle Systems are allowing to create a variety of high polygonal rendering effects specified & controlled using a few parameters.

Particles documentation

BSP Tree (Binary Space Partitioning Tree)

BS Contact supports a BspTree node for optimal rendering performance of large worlds. For technical information see the BSP-Tree information.
 

Cell & Portals

Cells & Portals allows the visibility management of complex indoor enviroonments.

Cell & Portals documentation


Generic Input handling

With a set of new nodes the world builder can handle device events from mouse, keyboard, drag & drop. With the help of these nodes and an extended Viewpoint control node a world builder can implement customized navigation and user interface.

UI customizing documentation

 

Raw Mouse & Keyboard input

Beginning with Contact 4.1, raw mouse and keyboard input can be intercepted from javascript or an EAI eventOutObserver.

In Contact 5.0 this functionalitz is supperceeded with the DeviceSensor and KeyboardSensor.

Events are reported via an SFNode Event node.

   
Event
{
           eventOut SFString               type
           eventOut SFBool                 cancelBubble
           eventOut SFBool                 returnValue
           
           eventOut SFVec2f                screen
           eventOut SFVec2f 		   client
           eventOut SFVec2f 		   position


           eventOut SFBool		   altKey
           eventOut SFBool                 ctrlKey
           eventOut SFBool                 shiftKey
           eventOut SFInt32                keyCode

           eventOut SFInt32                button
}

Attributes
type
The type property represents the event name as a string property.
cancelBubble
The cancelBubble property is used to control the bubbling phase of event flow. If the property is set to true, the event will cease bubbling at the current level. If the property is set to false, the event will bubble up to its parent. The default value of this property is determined by the event type.
returnValue
If an event is cancellable, the returnValue property is checked by the DOM implementation after the event has been processed by its event handlers. If the returnValue is false, the DOM implementation does not execute any default actions associated with the event.
screen
screen.x indicates the horizontal coordinate at which the event occurred relative to the origin of the screen coordinate system. screen.y indicates the vertical coordinate at which the event occurred relative to the origin of the screen coordinate system.
client
client.x indicates the horizontal coordinate at which the event occurred relative to the DOM implementation's client area.
client.y indicates the vertical coordinate at which the event occurred relative to the DOM implementation's client area.
position
position.x indicates the horizontal coordinate at which the event occurred relative to the DOM implementation's normalized client area.
position.y indicates the vertical coordinate at which the event occurred relative to the DOM implementation's normalized client area.
altKey
altKey indicates whether the 'Alt' key was depressed during the firing of the event.
ctrlKey
ctrlKey indicates whether the 'Ctrl' key was depressed during the firing of the event.
shiftKey
shiftKey indicates whether the shift key was depressed during the firing of the event.
keyCode
The value of keyCode holds the virtual key code value of the key which was depressed if the event is a key event. Otherwise, the value is zero. Currently the raw Win32 keycode is reported.
button
During mouse events caused by the depression or release of a mouse button, button is used to indicate which mouse button changed state. This is a bitmask with the values 1 for left button, 2 for right and 4 for middle. During a buttonup event, the mask of the button causing the event is reported.

This extension is modeled after the W3C DOM Events.

Event types
click
The click event occurs when the pointing device button is clicked over an element. This attribute may be used with most elements.
dblclick
The dblclick event occurs when the pointing device button is double-clicked over an element. This attribute may be used with most elements.
mousedown
The mousedown event occurs when the pointing device button is pressed over an element.
mouseup
The mouseup event occurs when the pointing device button is released over an element.
mouseover
The mouseover event occurs when the pointing device is moved onto an element.
mousemove
The mousemove event occurs when the pointing device is moved while it is over an element.
mouseout
The mouseout event occurs when the pointing device is moved away from an element.
keypress
The keypress event occurs when a key is pressed and released.
keydown
The keydown event occurs when a key is pressed down.
keyup
The keyup event occurs when a key is released.
resize
The resize event occurs when a document is resized.

 

Setting an observer requires the addition of a route or an eventOutObserver to the browser's SFNode eventOut event_changed. This is a code fragment for adding the event observer:

function initialize() {
	// tell what events 
	m=Browser.eventMask; 
	oldMask=m;    
	m =  m |(1<<4) | 1; // mouse up & down 
	Browser.eventMask = m;    
	// add event observer 
	Browser.addRoute(Browser,'event_changed',inputHandler,'onEvent');    
}

The following are the supported mask values:

mousedown = 1
mousemove = 1<<1
mouseout = 1<<2
mouseover = 1<<3
mouseup = 1<<4
keydown = 1<<5
keyup = 1<<6
keypress = 1<<7
click = 1<<8,
dblclick = 1<<9


This is a code fragment for the event callback handler:

DEF inputHandler Script { 
eventIn SFNode onEvent 
url "javascript: 
function    onEvent(e,t) { 
if (e.type == 'mousemove' && e.button == 0) {
	 return; // to    many prints 
} 

print('Event type='+e.type+' at='+t); 
print(' button='+e.button+'    shiftKey='+e.shiftKey+' ctrlKey='+e.ctrlKey+' altKey='+e.altKey); 
print(' position='+e.position+'    keyCode='+e.keyCode+' ctrlKey='+e.ctrlKey+' altKey='+e.altKey); 

if (e.type ==    'mouseup' && e.button == 2) { // test we want to handle rbutton menu 
	e.returnValue    = 0; 
} 
} " 
} 

All input event properties are reported using only one Event node. The default Browser eventHandling for that event can be turned off by setting the returnValue to 0. The event types keypress, click, mouseover, and mouseout are currently not supported.

Test Example: Mouse / Keyboard Input Test




Controlling download
BS Contact fetches URL objects and EXTERNPROTO's  in the order encountered during scene graph traversal, in the order top to bottom of file, depth first. Currently not needed objects, because not "visible" due to a Switch, LOD or BspTree node are only retreived if they become part of the visible scene graph.

Loading of Textures in the appearance node of a shape max be delayed until the shape's geometry becomes visible.

In order to preload currently unneeded objects, ImageTexture / MovieTexture / AudioClip nodes can be directly specified as children of Groups. The ordering of the nodes with url controls the download sequencing of the assets. The Appearance / Sound node references the asset by USE.

The BspTree or BspGroup node traverses child nodes nearer to the viewer first. This would mean Inline parts nearer to the viewer are earlier loaded then further away parts. Bsp - tree Parts outside the visibilityLimit (the viewing pyramid) are not fetched. The drawback is that once a new section of the world becomes visible there is some halting due to the decoding of image texture from harddisk to video memory.

The LOD node display lower levels if the requested level is an Inline node, currently not loaded.

A common request from content developers is to have more control over Resource loading notification and unloading capabilities.

The inline nodes behaves as a group-node, the children field is exposed to access the nodes of the inline. By observing children_changed a notification is sent, once an Inline node is loaded and processed.
The additional eventOut SFBool isLoaded indicates loading success, TRUE is sent if the inline node is loaded and children are loaded, FALSE is sent if the inline node's url couldn't be retreived or there was some other problem with the data. In addition set_unload can be used to unload an Node from memory, however the application should normally use this if its shure that the node is currentlly not part of the visible node subsets (i.e. out of viewfrustrum, not in traversed scene graph etc.)

This extened Inline version is described by the following prototype :

Inline {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFString url []
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   eventOut SFBool isLoaded # TRUE if loaded & parsed sucessfully

   eventIn SFBool set_unload # new in 4.1, send TRUE to unload Inline from memory
}

ImageTexture {

... standard fields

eventOut SFBool isLoaded # new in 4.1
eventIn SFBool set_unload # new in 4.1, send TRUE to unload from memory
}

This node extension is not VRML97 compatbile, so it should be used with care.
It is possible to add an proper Externproto definition or using script code checking the browser version :

EXTERNPROTO Inline2[
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFString url []
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   eventOut SFBool isLoaded
   eventIn SFBool set_unload

] ["urn:inet:bitmanagement.de:node:Inline","nodes.wrl#Inline2"]

For textures one method is to use a MovieTexture and observe the duration_changed eventOut. Oberving the "last" asset, in file order can give a hint of a world completely loaded event. A new method in Version 4.1 is the additional eventOut SFBool isLoaded for ImageTexture. See also the new Browser.prefetch function in the Script section.

Extension Nodes Protos:

List of Nodes:

Discussed in BspTree section :


BspTree  {
 exposedField SFRotation plane 0 0 1 0  
 field SFNode front NULL
 field SFNode overlap NULL
 field SFNode back NULL
}

BspGroup { # new BS Contact 3.051
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   eventOut SFNode bspTree
}

Occlusion {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField SFBool enabled TRUE
   exposedField SFNode proxy NULL
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   eventOut SFBool isActive
   eventOut SFTime enterTime
   eventOut SFTime exitTime
}

Inclusion {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField SFBool enabled TRUE
   exposedField SFNode proxy NULL
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   eventOut SFBool isActive
   eventOut SFTime enterTime
   eventOut SFTime exitTime
}
 

MenuSensor displays a VRML defined Menu in the BS Contact right mouse button popup menu
on activation of a menu entry, the corresponding choice value will be sent as eventOut choice
a choices value of -1 indicated a menu separator

MenuSensor {
 exposedField SFBool enabled TRUE    # TRUE menu enabled, FALSE disabled
 exposedField SFString title ""      # title for submenu entry
 exposedField MFInt32 choices []     # list of numbers
 exposedField MFString descriptions []    # description for each menu entry
 exposedField SFString position "" # "TOP" menu appears at the top of the BS Contact menu
 eventOut SFBool isActive
 eventOut SFInt32 choice             # associated choices number for user selected menu entry
}

Example : menutest.wrl

New Nodes in version 3.051

Cullgroup is a group with an automatic bounding box computation for the children scene graph. Usefull for early render culling of complex scene graphs (e.g. Avatars)

CullGroup {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
}

Fog2

Fog2 is like fog with the additional parameter visiblityStart for linear fog. Direct3D can not do exponential fog, linear fog starts per default at 0 in VRML causing often a too early blending with the fog color.

Fog2 {
 exposedField SFColor color 1 1 1
 exposedField SFString fogType "LINEAR"
 exposedField SFFloat visibilityRange 0
 exposedField SFFloat visibilityStart 0
 exposedField SFFloat density 1
 eventIn SFBool set_bind
 eventOut SFBool isBound
}
 

HUD

HUD {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
}

This node equivalent to a VRML HUD construct using a Transform, ProximitySensor, and Collision { collide FALSE }.
Children are displayed relative to the viewer and not relative to the avatar position in 3rd person viewing mode.


Selection {
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField SFBool collide TRUE # as in Collision node
   exposedField SFBool select TRUE # if false, children are not existing for Anchor / dragsensor  selection
   exposedField SFNode proxy NULL # proxy used for selection processing as well
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
}

Similar to a Collision node this node allows to give a mouse selection proxy (e.g. large Rectangle for Text, bigger box for a fine detailed geometry) or to turn off selection completely (e.g. in order to pick through transparent shapes).

Layer3D

Layer3D {
   exposedField SFVec3f bboxSize -1 -1 -1
   exposedField SFVec3f bboxCenter 0 0 0 
   eventIn MFNode addChildrenLayer
   eventIn MFNode removeChildrenLayer
   exposedField MFNode childrenLayer []
   exposedField SFVec2f translation 0 0
   exposedField SFInt32 depth 0
   exposedField SFVec2f size -1 -1
   exposedField SFNode background NULL
   exposedField SFNode fog NULL
   exposedField SFNode navigationInfo NULL
   exposedField SFNode viewpoint NULL
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
}

See Layer pages for details.

CullGroup{
   field SFVec3f bboxSize -1 -1 -1
   field SFVec3f bboxCenter 0 0 0
   exposedField MFNode children []
   eventIn MFNode addChildren
   eventIn MFNode removeChildren
   # 4.3
   exposedField SFBool lod FALSE 
   exposedField MFNode level [] #unlike LOD level 0 is already the children content
   exposedField MFFloat range [] # same length as level
}

Instructs browser to do a cull checking operation on the scene graph, the bounding box will be computed from children. Optionally if lod = TRUE lod levels can be given, lod geometry is automatically scaled to the proper bounding box of children.

4.4 Nodes

DrawGroup

DrawGroup[
	exposedField SFVec3f bboxSize -1 -1 -1
	exposedField SFVec3f bboxCenter	0 0 0
	exposedField SFBool sortedAlpha	TRUE
	exposedField MFNode drawOp []
	exposedField MFNode children []
	eventIn MFNode addChildren
	eventIn MFNode removeChildren
]

DrawGroup is way for the content author to influence transparency processing. Wrapping a set of geometry into DrawGroup { sortedAlpha FALSE children ...} will process any geometry even transparent ones in the exact order given by children. This can be used for mirror like effects or turn off delayed alpha blending for sets of geometry with f bi-level transparency only. drawOp is not yet supported and is intended in the future for certain drawing effects.

Cell & Portals

see Cell & Portal proposal

Cell {
	exposedField SFVec3f bboxSize -1 -1 -1
	exposedField SFVec3f bboxCenter	0 0 0
	exposedField MFNode children []
	eventIn MFNode addChildren
	eventIn MFNode removeChildren
	exposedField MFNode portals	[]
}

Portal {
	exposedField SFBool enabled TRUE
	exposedField SFBool ccw	TRUE
	exposedField SFNode coord NULL
	exposedField SFNode cell NULL
}



CellGroup {
	exposedField SFVec3f bboxSize -1 -1 -1
	exposedField SFVec3f bboxCenter 0 0 0
	exposedField SFInt32 range -50
	exposedField MFNode cells []
	exposedField MFNode children []
	eventIn MFNode addChildren
	eventIn MFNode removeChildren
	eventOut MFNode activeCells
}




Particles

see see particles system page

PROTO Particles {
	exposedField SFVec3f bboxSize -1 -1 -1
	exposedField SFVec3f bboxCenter 0 0 0
	exposedField SFFloat lodRange 100
	exposedField SFBool enabled TRUE
	exposedField SFFloat particleRadius 0.1
	exposedField SFFloat particleRadiusVariation 0
	exposedField SFFloat particleRadiusRate	0
	exposedField SFNode geometry NULL
	exposedField SFVec3f emitterPosition 0 3 0
	exposedField SFFloat emitterRadius 0
	exposedField SFFloat emitterSpread 0.25
	exposedField SFVec3f emitVelocity 2.5 5 2.5
	exposedField SFFloat emitVelocityVariation 0.5
	exposedField SFRotation emitterOrientation 0 1 0 0
	exposedField SFFloat creationRate 500
	exposedField SFFloat creationRateVariation 0
	exposedField SFInt32 maxParticles 500
	exposedField SFTime maxLifeTime	5
	exposedField SFFloat maxLifeTimeVariation 0
	exposedField SFVec3f gravity  0 -9.8 0
	exposedField SFVec3f acceleration 0 0 0
	exposedField SFColor emitColor 1 1 1
	exposedField SFColor fadeColor 0.25 0.25 0.25
	exposedField SFFloat fadeAlpha 1.0
	exposedField SFFloat fadeRate  0.25
	exposedField SFInt32 numTrails 0
	exposedField SFInt32 numSparks 0
	exposedField SFVec3f sparkGravity 0 -5 0
	exposedField SFColor sparkFadeColor 0 0 0
}

Related links:

VRML 97 Specification