<div dir="ltr"><div dir="ltr"><p class="MsoNormal">Here's a diary rant I did this morning to try and iron out my own confusion on EnvironmentLight and how it relates. Feedback welcome.</p><p class="MsoNormal"><br></p><p class="MsoNormal">-Doug</p><p class="MsoNormal"><br></p><p class="MsoNormal">CUBEMAP CONCEPTUAL<span></span></p>

<p class="MsoNormal">cubemaps are textures and should be treated as such:<span></span></p>

<p class="MsoNormal">- multitexturing<span></span></p>

<p class="MsoNormal">- texture transforms, including multitexture transforms
(imagine clouds and stars rotating at different speeds)<span></span></p>

<p class="MsoNormal">- SphericalMapBackground : BackgroundNode, SphericalMap  {}<span></span></p>

<p class="MsoNormal">What's different about Cubemaps: they use vertex normals as
their texture coordinates by default<span></span></p>

<p class="MsoNormal">- any texture transform is a textureCoordinate transform<span></span></p>

<p class="MsoNormal">- texture transforms for spherical maps would be 3D and
could be defined as a rotation axis-angle, routed to as such<span></span></p>

<p class="MsoNormal">--browser internal would do inverse transpose, so scene
designer doesnt have to<span></span></p>

<p class="MsoNormal">EnvironmentMap are similar - can take a cubemap<span></span></p>

<p class="MsoNormal">And spherical harmonics are a single-channel spherical map<span></span></p>

<p class="MsoNormal">SphericalHarmonicMap : SphericalMap<span></span></p>

<p class="MsoNormal">CubeMap : SphericalMap<span></span></p>

<p class="MsoNormal">EnvironmentMap/Light : SphericalMap, Light<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">Q. what's the difference between an environmentLight and a
PointProjector?<span></span></p>

<p class="MsoNormal">A. PointProjector the texture/light is going outward, like PointLight<span></span></p>

<p class="MsoNormal">EnvironmentProjector - texture is coming inward, like a
cubemap<span></span></p>

<p class="MsoNormal">Projectors use implicit method of texture mapping - mathematical
formulas instead of texture coordinates.<span></span></p>

<p class="MsoNormal">Projectors use shape frag vertex coordinates for texture
lookup<span></span></p>

<p class="MsoNormal">Spherical maps use frag normals for texture lookup<span></span></p>

<p class="MsoNormal">2D textures use frag texture2D coordinates for texture
lookup<span></span></p>

<p class="MsoNormal">                    <span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">                    Texture                                       Light<span></span></p>

<p class="MsoNormal">Spherical       Cubemap,
TBackground, SH          EnvironmentLight,
PointProjector, SH<span></span></p>

<p class="MsoNormal">2D                Texture2D                                   Projector<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">Q. what's the difference between a Light and a Texture?<span></span></p>

<p class="MsoNormal">A. <span></span></p>

<p class="MsoNormal">1. its what the receiving Shape/Appearance does with the
sample<span></span></p>

<p class="MsoNormal">a) uses it as a diffuse material<span></span></p>

<p class="MsoNormal">b) uses reflective light math on it<span></span></p>

<p class="MsoNormal">and <span></span></p>

<p class="MsoNormal">2. where declared<span></span></p>

<p class="MsoNormal">a) scene level above the Shape, ::childNode - same texture
applies to all shapes as a 'light', has a location/orientation specified and
some math to get from shape to texture<span></span></p>

<p class="MsoNormal">b) in Appearance - its a 'texture' applied to one shape, and
with an implicit location, orientation relative to shape<span></span></p>

<p class="MsoNormal">Q. could we have a generic childer node:<span></span></p>

<p class="MsoNormal">- converts any non-child node into a child equivalent by
locating it, so it can apply to/affect peers/siblings or globally<span></span></p>

<p class="MsoNormal">X3DChilder : X3DChildNode, X3DLocator, X3DAffector<span></span></p>

<p class="MsoNormal">{<span></span></p>

<p class="MsoNormal">SFBool global TRUE<span></span></p>

<p class="MsoNormal">SFVec3f location        
 //when affecting siblings
(global=FALSE), node this node must be at same level as<span></span></p>

<p class="MsoNormal">SFRotation orientation 
//..peers it is to affect, so can't be wrapped in a Transform<span></span></p>

<p class="MsoNormal">SFNode node<span></span></p>

<p class="MsoNormal">}<span></span></p>

<p class="MsoNormal">Q. what is a Background - Texture or Light?<span></span></p>

<p class="MsoNormal">A. Neither. Its a Shape, showing a texture. Not providing a
diffuse texture (projection) nor light to other shapes.<span></span></p>

<p class="MsoNormal">- but if there was a checkbox/boolean field for light, then
it could become an environment light<span></span></p>

<p class="MsoNormal">- and in theory there can be a a boolean global field, and
when off, light part will just affect siblings, else whole scene<span></span></p>

<p class="MsoNormal">- whether to use it as a cubemap texture or a light can be
over-ridden in the receiving Shape/Appearance<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">SphericalMap : Light, Texture<span></span></p>

<p class="MsoNormal">{<span></span></p>

<p class="MsoNormal">//first 3 fields are 'default recommendations' to
Shape.Appearance, which can over-ride<span></span></p>

<p class="MsoNormal">SFBool texture FALSE<span></span></p>

<p class="MsoNormal">SFBool project FALSE<span></span></p>

<p class="MsoNormal">SFBool light TRUE<span></span></p>

<p class="MsoNormal">SFBool inward TRUE  //outward
is PointProjector, inward is EnvironmentLight/Cubemap, applies to light or
project=TRUE<span></span></p>

<p class="MsoNormal">SFNode sampleSource NULL [SphereicalHarmonicsNode,MultitextureCube,CubeMaptexture]<span></span></p>

<p class="MsoNormal">}<span></span></p>

<p class="MsoNormal">MultitextureCube - allows TextureCoordinates3DNormaized, and
TextureTransform3DRotation<span></span></p>

<p class="MsoNormal">TextureTransform3DRotation : TextureTransform3D<span></span></p>

<p class="MsoNormal">{<span></span></p>

<p class="MsoNormal">SFRotation rotation [0 1 0 0.0] //convenient to route to for
example clouds moving in the sky = f(Time)<span></span></p>

<p class="MsoNormal">}<span></span></p>

<p class="MsoNormal">ConventionalBackground: SphericalMap <span></span></p>

<p class="MsoNormal">{ texture TRUE, light FALSE }<span></span></p>

<p class="MsoNormal">BackgroundLight : SphericalMap<span></span></p>

<p class="MsoNormal">{light TRUE inward TRUE texture TRUE}<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">Q. whats an EnvironmentLight? <span></span></p>

<p class="MsoNormal">A. its a (cubemap/SH used as a) Light, used in lighting math
as reflective (vs Cubemap is a texture)<span></span></p>

<p class="MsoNormal">EnvironmentLight: SphericalMap<span></span></p>

<p class="MsoNormal">{texture FALSE light TRUE inward TRUE }<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">Q. what's a PointProjector?<span></span></p>

<p class="MsoNormal">A. its a (cubemap, SH used as a) Texture or Light, projecting
outward<span></span></p>

<p class="MsoNormal">PointProjector : SphericalMap<span></span></p>

<p class="MsoNormal">{ inward FALSE light TRUE texture FALSE }<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">Q. what's the difference between punctual and areal lights?<span></span></p>

<p class="MsoNormal">A. punctual resolve/resolve to a single sample per fragment,
of either a texture or pointlight<span></span></p>

<p class="MsoNormal">- areal require multipe samples of same source for same
fragment<span></span></p>

<p class="MsoNormal">- example using a colored rectangle as a light. From the
frag, where would the sample come from? Perhaps sample its 4 corners punctually
like pointLights, and compute an (angular) area as seen from frag, and apply
math to get a center and magnitude equivalent - a computational method to
punctualize. None of the above is area lights -- all single sample per fragment.<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">SUMMARY: Cubemaps need to be treated like full textures,
with multitexturing, texturetransforms and texturecoordinates specialized.
Sphereical harmonics uses a different sampler, but still uses (receiving Shape)
frag normal for lookup like CubeMaps, and is non-areal (punctual) in the sense
it gives one sample per frag, and would use a 3D rotational TextuereTransform and
so should share a common ancestor (abstract?) type with Cubemaps, perhaps
SphericalMap.<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">HYPOTHESIS: internally browsers can implement something like
a SphereicalMap and specialize it for a number of current web3d node types, and
then add a few new / strange nodes like ComplexBackground and PointProjector at
little additional cost.<span></span></p>

<p class="MsoNormal"><span> </span></p>

<p class="MsoNormal">/CUBEMAP CONCEPTUAL<span></span></p></div></div>