[x3d-public] Finding required fields (Appearance) and default rendering for Shape

Brutzman, Donald (Don) (CIV) brutzman at nps.edu
Tue Sep 3 16:16:17 PDT 2024


Thanks, we have accepted the proposed sentence as a future resolution.


  *   If the appearance field is NULL, the Shape is rendered as if a default Appearance node were defined.


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 https://faculty.nps.edu/brutzman



________________________________
From: Andreas Plesch <andreasplesch at gmail.com>
Sent: Sunday, September 1, 2024 8:53 PM
To: Brutzman, Donald (Don) (CIV) <brutzman at nps.edu>
Cc: Holger Seelig <holger.seelig at yahoo.de>; X3D <x3d-public at web3d.org>; puk at igraphics.com <puk at igraphics.com>
Subject: Re: [x3d-public] Finding required fields (Appearance) and default rendering for Shape

NPS WARNING: *external sender* verify before acting.

Hi Don,

Oh, I did not realize that there was such a gap and I agree with the proposed resolution.

In general, I think if there is no sensible default value for a field, for example the Shape.geometry field, the behaviour should remain undefined.

While not providing a geometry value may be interpreted by the browser as an intent of the author not to render anything ( as suggested by the spec.), it may also be just an oversight and should generate a message or an error.

The more appropriate way to not render a geometry would be the visible field on the shape level, or to not create the shape node in the first place. Rendering is related to shapes, not geometries.

Best,
-Andreas

On Sat, Aug 31, 2024 at 1:10 PM Brutzman, Donald (Don) (CIV) <brutzman at nps.edu<mailto:brutzman at nps.edu>> wrote:
Thanks for helpful discussion regarding null Appearance under Shape, good insights.

I have entered the following Mantis issue as a potential future specification revision.


  *
Mantis 1472: Shape is missing default rendering guidance if appearance field not defined
  *
https://www.web3d.org/member-only/mantis/view.php?id=1472
  *
Shape is missing default rendering guidance if appearance field not defined (i.e. NULL)

     *
12.4.8 Shape
     *
https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/shape.html#Shape

Suggested specification addition:

     *   If the appearance field is NULL, the Shape is rendered as if a default Appearance node were defined.
Additional
Information
Note that the corresponding default definition for missing geometry field is provided in 12.4.8 Shape.

     *   "If the geometry field is NULL, the object is not drawn."


This has been a recurring issue over the years, and trying to make sense of things always seems to be a bit convoluted when we try to evaluate something that is missing.

I am hoping to define the simplest response that might be crafted, hopefully the specification prose above is satisfactory.


  *
Never want to impose browser burdens like "insert a default node" because that might have lots of potential ambiguities and repercussions.
  *
Simply defining rendering response, such as the material field does, minimizes potential change to browsers.
  *
Stating that rendering is matches a default Appearance also avoids the possibility of mismatch if the details here were to get more specific.
  *
Avoiding "results are undefined" enables different X3D browsers to show the same 3D content equivalently.

Interestingly the following guidance seems appropriate.


  *
Wikipedia: Principle of least astonishment (POLA)
  *
https://en.wikipedia.org/wiki/Principle_of_least_astonishment

Further considerations and improvements always welcome.  Have fun with X3D!  🙂


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 https://faculty.nps.edu/brutzman



________________________________
From: Holger Seelig <holger.seelig at yahoo.de<mailto:holger.seelig at yahoo.de>>
Sent: Friday, August 30, 2024 1:41 PM
To: X3D <x3d-public at web3d.org<mailto:x3d-public at web3d.org>>
Cc: Brutzman, Donald (Don) (CIV) <brutzman at nps.edu<mailto:brutzman at nps.edu>>; Andreas Plesch <andreasplesch at gmail.com<mailto:andreasplesch at gmail.com>>
Subject: Re: [x3d-public] Finding required fields (Appearance)

In 12.2.3 Two-sided materials
https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/shape.html#TwoSidedMaterials

* Both material and backMaterial are NULL. In this case results are equivalent to a default Material node, when viewed from either the front and back side.
* This case is exactly equivalent to using an UnlitMaterial with default emissiveColor white for both material and backMaterial.

I assume that if a appearance field is NULL a default Appearance should be used.

Best regards,
Holger

--
Holger Seelig
Leipzig, Germany

holger.seelig at yahoo.de<mailto:holger.seelig at yahoo.de>
https://create3000.github.io/x_ite/

Am 30.08.2024 um 18:00 schrieb Andreas Plesch via x3d-public <x3d-public at web3d.org<mailto:x3d-public at web3d.org>>:

Hi Don,

Thanks for responding.

On Fri, Aug 30, 2024 at 10:33 AM Brutzman, Donald (Don) (CIV)
<brutzman at nps.edu<mailto:brutzman at nps.edu>> wrote:

Thanks for thoughtful posts.  Here are some background considerations regarding X3D design.

In general, the X3D Architecture specification tries to define compatible default behavior if a NULL declaration (or omission) of an essential SFNode field is found in a scene.

Further, the specification maintains a really light touch regarding handling of problems in a scene graph.  Typical prose says things like "behavior is undefined" so that well-meaning remedies or requirements are not forced on browsers. This is intended to avoid undesirable complications or computational cost that might impact browser performance.  This puts the responsibility on the author (or authoring software) to "do the right thing" in the first place.

I completely agree that an author should be motivated to not rely on
NULL values since it may lead to undefined behaviour. However, this is
somewhat inconsistent with how NULL is used in the specification for
Appearance and Material node values. There NULL leads to unexpected
(but useful) behaviour. The least surprising behaviour would be a
default value which is not NULL but simply an Appearance/Material with
its own default fields. One issue is how to express such a default
value in the signature ? NULL is certainly more convenient to place in
the signature as a default.
I  think an omission should not indicate a NULL value but a default
value, in parallel to how non-node value fields are treated. In
effect, NULL should not be considered a valid value, or perhaps a
value at all, since it expresses the lack of a value (if anything).
Use of NULL just leads to confusion since it is difficult to consider
the lack of something.

This is all not too critical and rather a suggestion for future work,

-Andreas

p.s. Ongoing regression testing of Java X3DJSAIL and Python X3DPSAIL libraries revealed that Appearance backMaterial field was not defined in the XML source asset.  Now integrated.  All improvements always welcome.

X3D Tooltips:  Appearance backMaterial
[backMaterial accessType inputOutput, type SFNode singleton, NULL node] [X3DMaterialNode]
Single contained Material, PhysicalMaterial or UnlitMaterial node that can specify visual attributes for lighting response (color types, transparency, etc.) applied to back faces of corresponding geometry.
Warning: it is only allowed to define a backMaterial field if the material field is also defined (not NULL).
Warning: the node type for backMaterial field (if any) must match node type for material field.
https://www.web3d.org/x3d/tooltips/X3dTooltips.html#Appearance.backMaterial


Have fun with X3D!  🙂


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 https://faculty.nps.edu/brutzman



________________________________
From: x3d-public <x3d-public-bounces at web3d.org<mailto:x3d-public-bounces at web3d.org>> on behalf of Andreas Plesch via x3d-public <x3d-public at web3d.org<mailto:x3d-public at web3d.org>>
Sent: Wednesday, August 7, 2024 4:33 PM
To: X3D Graphics public mailing list <x3d-public at web3d.org<mailto:x3d-public at web3d.org>>
Cc: Andreas Plesch <andreasplesch at gmail.com<mailto:andreasplesch at gmail.com>>
Subject: Re: [x3d-public] Finding required fields (Appearance)

Shorter answer:

Let me clarify that I fully agree that an Appearance field value is
not strictly required in which case it will be NULL which in turn
leads to an unlit white rendering.

Since this is rarely useful (sometimes it is)  I originally listed the
minimal Shape node which leads to a more expected rendering and then
can be modified as needed, as a more practical response..

Longer answer:

I think the real question may be what are useful default values.
Additionally, should NULL be ever used as a default value since it is
not obvious what a NULL value may indicate or what consequences it may
have. After all, non-node valued fields never have null values as
defaults.

For example, for the Appearance field in Shape I would have expected
the default value to be an Appearance node with its default values for
its fields. Similarly, I would have expected for the Material field in
Appearance a default value which is a Material node with its default
values.

Of course, it is not possible to change the default values of existing
nodes but for new nodes careful consideration may be given to
assigning default values to node fields which may not be NULL.

-Andreas

Date: Wed, 7 Aug 2024 13:47:29 -0500
From: John Carlson <yottzumm at gmail.com<mailto:yottzumm at gmail.com>>
To: Joe D Williams <joedwil at earthlink.net<mailto:joedwil at earthlink.net>>
Cc: "Extensible 3D (X3D) Graphics public discussion"
       <x3d-public at web3d.org<mailto:x3d-public at web3d.org>>, Michalis Kamburelis <michalis.kambi at gmail.com<mailto:michalis.kambi at gmail.com>>
Subject: Re: [x3d-public] Finding required fields (Appearance)
Message-ID:
       <CAGC3UEmFeFAEMAG-ZUkO9fvTmrX3n3sxW2rf4Sc3+XZLMF2jdw at mail.gmail.com<mailto:CAGC3UEmFeFAEMAG-ZUkO9fvTmrX3n3sxW2rf4Sc3%2BXZLMF2jdw at mail.gmail.com>>
Content-Type: text/plain; charset="utf-8"

If you just take my subject, without reading the whole message, you might
assume that I am talking about an Appearance node instead of appearance
field.

My question was, is the appearance field required in Shape.

Sure, geometry and material are not required either.

For context, the question was, what?s the minimal code for a graphical
object in X3DOM.
Andreas and I had come up with two different answers, and I was trying to
use documentation to determine whether an Appearance node was required.
The X3DOM didn?t list NULL as a default value.  Andreas? approach was to
try actual examples.

I?m pretty sure that just a shape node and a geometry node are required to
show a graphical object, but at this point, let?s try actual examples.

Thanks,

John

On Sat, Aug 3, 2024 at 5:37?PM Joe D Williams <joedwil at earthlink.net<mailto:joedwil at earthlink.net>> wrote:

Finding required fields (Appearance) ...




https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/shape.html#Shape






https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/shape.html#Appearance






https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/components/shape.html#Material









Please look at the x3d standard. As you mentioned, default geometry is
null in Shape.



If there is a geometry then the Shape Material node is used. For Material
there is a default set which would tend to make the geometry visible. For
example, default transparency is 0.



My, my, my, ... how the material node has grown along with PBR for 4.0:)



All Best,

Joe





Shape : X3DShapeNode {
 SFNode  [in,out] appearance  NULL     [X3DAppearanceNode]
 SFBool  [in,out] bboxDisplay FALSE
 SFBool  [in,out] castShadow  TRUE
 SFNode  [in,out] geometry    NULL     [X3DGeometryNode]
 SFNode  [in,out] metadata    NULL     [X3DMetadataObject]
 SFBool  [in,out] visible     TRUE
 SFVec3f []       bboxCenter  0 0 0    (-?,?)
 SFVec3f []       bboxSize    -1 -1 -1 [0,?) or ?1 ?1 ?1
}



Appearance : X3DAppearanceNode {
 SFNode   [in,out] acousticProperties NULL   [AcousticProperties]
 SFFloat  [in,out] alphaCutoff        0.5    [0,1]
 SFString [in,out] alphaMode          "AUTO" ["AUTO", "OPAQUE", "MASK",
"BLEND"]
 SFNode   [in,out] backMaterial       NULL   [X3DOneSidedMaterialNode]
 SFNode   [in,out] fillProperties     NULL   [FillProperties]
 SFNode   [in,out] lineProperties     NULL   [LineProperties]
 SFNode   [in,out] material           NULL   [X3DMaterialNode]
 SFNode   [in,out] metadata           NULL   [X3DMetadataObject]
 SFNode   [in,out] pointProperties    NULL   [PointProperties]
 MFNode   [in,out] shaders            []     [X3DShaderNode]
 SFNode   [in,out] texture            NULL   [X3DTextureNode]
 SFNode   [in,out] textureTransform   NULL   [X3DTextureTransformNode]
}





Material : X3DOneSidedMaterialNode {
 SFFloat  [in,out] ambientIntensity          0.2          [0,1]
 SFNode   [in,out] ambientTexture            NULL
[X3DSingleTextureNode]
 SFString [in,out] ambientTextureMapping     ""
 SFColor  [in,out] diffuseColor              0.8 0.8 0.8  [0,1]
 SFNode   [in,out] diffuseTexture            NULL
[X3DSingleTextureNode]
 SFString [in,out] diffuseTextureMapping     ""
 SFColor  [in,out] emissiveColor             0 0 0        [0,1]
 SFNode   [in,out] emissiveTexture           NULL
[X3DSingleTextureNode]
 SFString [in,out] emissiveTextureMapping    ""
 SFNode   [in,out] metadata                  NULL
[X3DMetadataObject]
 SFFloat  [in,out] normalScale               1            [0, ?)
 SFNode   [in,out] normalTexture             NULL
[X3DSingleTextureNode]
 SFString [in,out] normalTextureMapping      ""
 SFFloat  [in,out] occlusionStrength         1            [0,1]
 SFNode   [in,out] occlusionTexture          NULL
[X3DSingleTextureNode]
 SFString [in,out] occlusionTextureMapping   ""
 SFFloat  [in,out] shininess                 0.2          [0,1]
 SFNode   [in,out] shininessTexture          NULL
[X3DSingleTextureNode]
 SFString [in,out] shininessTextureMapping   ""
 SFColor  [in,out] specularColor             0 0 0        [0,1]
 SFNode   [in,out] specularTexture           NULL
[X3DSingleTextureNode]
 SFString [in,out] specularTextureMapping    ""
 SFFloat  [in,out] transparency              0            [0,1]
}





not mention PhysicalMaterial and  UnlitMaterial.







-----Original Message-----
From: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org<mailto:x3d-public at web3d.org>

Sent: Aug 2, 2024 10:34 AM
To: Michalis Kamburelis <michalis.kambi at gmail.com<mailto:michalis.kambi at gmail.com>>
Cc: John Carlson <yottzumm at gmail.com<mailto:yottzumm at gmail.com>>, Extensible 3D (X3D) Graphics
public discussion <x3d-public at web3d.org<mailto:x3d-public at web3d.org>>
Subject: Re: [x3d-public] Finding required fields (Appearance)


I got something for x3d schema, but X3DUOM was blank.  I don?t have my
computer and I?m using chrome.  I?m at the airport.

Should I use the spec on the road and tooltips? CGE?

John

On Fri, Aug 2, 2024 at 9:35?AM John Carlson <yottzumm at gmail.com<mailto:yottzumm at gmail.com>> wrote:

I don?t know if Apple can still prevent other browsers from avoiding
Apple?s Safari renderer on iOS.  The issue was that apparently, the pages
were blank because I was viewing XML schema and X3DUOM.  Maybe I didn?t
wait long enough.  AFAIK, there?s no view source on Safari on iOS?  Anyone
know a trick?

I was unable to search through X3D JSON Schema on GitHub because the page
crashed.

I can?t even search through my X3DUOM to JSON schema mapping on a web
page which is rendered HTML.

I will try chrome unless the Firefox is proved to work on iOS.

John

On Fri, Aug 2, 2024 at 7:31?AM Michalis Kamburelis <
michalis.kambi at gmail.com<mailto:michalis.kambi at gmail.com>> wrote:

Shape.appearance can be NULL.

I'm not sure about notes of iOS and Safari, it should naturally work
to search GitHub or to browse X3D specs :) You can also install other
browsers, lke Firefox, on iOS.

Michalis

czw., 1 sie 2024 o 17:32 John Carlson via x3d-public
<x3d-public at web3d.org<mailto:x3d-public at web3d.org>> napisa?(a):

I?m looking for a way to determine whether an Appearance node is
required, viewable  in iOS Safari? Default is NULL in Shape, so I assume
not.

I?m going to check X3D JSON Schema.  Safari bombs when searching on
GitHub.

Any approach would be great, I may even try vim.

John
_______________________________________________
x3d-public mailing list
x3d-public at web3d.org<mailto:x3d-public at web3d.org>
http://web3d.org/mailman/listinfo/x3d-public_web3d.org



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20240807/13c29e42/attachment-0001.html>

------------------------------

Subject: Digest Footer

_______________________________________________
x3d-public mailing list
x3d-public at web3d.org<mailto:x3d-public at web3d.org>
http://web3d.org/mailman/listinfo/x3d-public_web3d.org


------------------------------

End of x3d-public Digest, Vol 185, Issue 12
*******************************************



--
Andreas Plesch
Waltham, MA 02453

_______________________________________________
x3d-public mailing list
x3d-public at web3d.org<mailto:x3d-public at web3d.org>
http://web3d.org/mailman/listinfo/x3d-public_web3d.org



--
Andreas Plesch
Waltham, MA 02453

_______________________________________________
x3d-public mailing list
x3d-public at web3d.org<mailto:x3d-public at web3d.org>
http://web3d.org/mailman/listinfo/x3d-public_web3d.org



--
Andreas Plesch
Waltham, MA 02453
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20240903/d359ef60/attachment-0001.html>


More information about the x3d-public mailing list