[x3d-public] Updated summary of my changes to X3Dv4, and reasoning "why do we need UnlitMaterial"

Don Brutzman brutzman at nps.edu
Thu Mar 12 04:19:57 PDT 2020


OK thanks.  I'd still be concerned that inconsistent roundoff error (perhaps on mobile device) might lead to differences in how each pair of point sets was handled.  Likely a rare/inefficient case we don't have to worry about, but might be worth a test model for conformance someday.

On 3/12/2020 1:56 AM, Michalis Kamburelis wrote:
> Yes the Coordinate note could be shared by DEF / USE. There is no aliasing -- whether coordinates are shared by DEF / USE or just repeated precisely the same, it results in equal screen positions or pixels.
> 
> Regards,
> Michalis
> 
> W dniu czw., 12.03.2020 o 04:36 Don Brutzman <brutzman at nps.edu <mailto:brutzman at nps.edu>> napisał(a):
> 
>     Looking forward to unification of front and back Materials.
> 
>     The use case translation is interesting.  For the second version, with two IFS nodes, am assuming you have consistent Coordinate nodes (hopefully via DEF/USE).  Not sure the browser would be expected to detect that they are identical however, especially if coordinate points are repeated.
> 
>     Wouldn't aliasing effects be possible/likely if the two passes are performed independently?  Two passes as Doug proposes would be traversing the same geometry and so could avoid that problem.
> 
>     On 3/9/2020 2:33 PM, Michalis Kamburelis wrote:
>      > Absolutely.
>      >
>      > 2-pass rendering is a valid way to implement different front/back
>      > material parameters. Although it will not be as efficient as doing it
>      > in 1 pass (and checking gl_FrontFacing). But it's unsure whether the
>      > optimization matters (you would need a huge scene using extensively
>      > two-sided materials with different front/back parameters to feel the
>      > optimization).
>      >
>      > Note that you don't need different shaders for front/back (unless you
>      > utilize some optimizations that assume knowledge about materials, e.g.
>      > CGE optimizes materials with specularColor = zero specially, by not
>      > including the specular computation). In normal case, you can use the
>      > same shader, just pass different parameters when it's front, different
>      > when it's back. Culling is done by glCullFace(GL_FRONT),
>      > glCullFace(GL_BACK), so it happens outside of the shader code.
>      >
>      > I actually proposed this at some point as an upgrade path from
>      > TwoSidedMaterial, and then we would not even need to add
>      > "backMaterial". In CGE (we don't support TwoSidedMaterial with
>      > separateBackColor=TRUE, or backMaterial, for now), as well as in Unity
>      > and probably some others, it's a standard way to get 2-sided materials
>      > with different colors.
>      >
>      > IOW, you can transform
>      >
>      > """
>      > Shape {
>      >    appearance Appearance {
>      >      material Material { diffuseColor 1 1 0 }
>      >      backMaterial Material { diffuseColor 0 0 1 }
>      >    }
>      >    geometry IndexedFaceSet { ccw TRUE solid FALSE ... }
>      > }
>      > """
>      >
>      > into this:
>      >
>      > """
>      > Shape {
>      >    appearance Appearance {
>      >      material Material { diffuseColor 1 1 0 }
>      >    }
>      >    geometry IndexedFaceSet { ccw TRUE solid TRUE ... }
>      > }
>      > Shape {
>      >    appearance Appearance {
>      >      material Material { diffuseColor 0 0 1 }
>      >    }
>      >    geometry IndexedFaceSet { ccw FALSE solid TRUE ... }
>      > }
>      > """
>      >
>      > Regards,
>      > Michalis
>      >
>      >
>      >
>      > pon., 9 mar 2020 o 21:24 GPU Group <gpugroup at gmail.com <mailto:gpugroup at gmail.com>> napisał(a):
>      >>
>      >> OK one more idea I haven't tried:
>      >> Could a browser loop on the CPU side, drawing the same object twice, once with front material the front facing fragments, once with back material drawing back facing fragments -different compiled shaders- and setting one uniform or #define in the shader to say to draw front or back side of fragments?
>      >> If so then that would simplify supporting front/back materials.
>      >> -Doug
>      >>
>      >> On Mon, Mar 9, 2020 at 7:55 AM Michalis Kamburelis <michalis.kambi at gmail.com <mailto:michalis.kambi at gmail.com>> wrote:
>      >>>
>      >>> AD 1 - Yes, using backMaterial will require using containerField in X3D XML.
>      >>>
>      >>> AD 2 - The specification of backMaterial will deliberately contain
>      >>> wording to make implementation easier.
>      >>>
>      >>> Namely:
>      >>>
>      >>> - backMaterial can be <> NULL only if material <> NULL
>      >>>
>      >>> - when both material and backMaterial are <> NULL, they must indicate
>      >>> *the same* node class, IOW:
>      >>>
>      >>>      - they must both be Material
>      >>>      - or they must both be UnlitMaterial
>      >>>      - or they must both be PhysicalMaterial
>      >>>
>      >>> - moreover, when both material and backMaterial are <> NULL, they must
>      >>> have equal values for all xxxTexture and xxxTextureChannel fields.
>      >>> This means that the only difference can be in vector/scalar
>      >>> parameters. This means that e.g. you cannot use cubemap for
>      >>> diffuseTexture on front, and 3D texture for diffuseTexture on back.
>      >>>
>      >>>      (Browsers are of course free to "lift" this limitation and allow
>      >>> more. But I would prefer to keep the required functionality of it, in
>      >>> X3D 4.0, simple.)
>      >>>
>      >>> - Indeed we will add wording to prohibit placing TwoSidedMaterial in
>      >>> backMaterial :) Added to my TODO.
>      >>>
>      >>> - Note that the requirement to implement backMaterial will be rather
>      >>> high level of the appropriate component. I don't want to force all
>      >>> browsers to implement this. I doubt that CGE will actually implement
>      >>> it -- the use-cases for this are rather small, i.e. I never heard
>      >>> anyone ask me to support TwoSidedMaterial with separateBackColor=TRUE
>      >>> :)
>      >>>
>      >>> Regards,
>      >>> Michalis
> 
> 
>     all the best, Don
>     -- 
>     Don Brutzman  Naval Postgraduate School, Code USW/Br brutzman at nps.edu <mailto:brutzman at nps.edu>
>     Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
>     X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman
> 

all the best, Don
-- 
Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman at nps.edu
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman



More information about the x3d-public mailing list