[x3d-public] ProtoBody completeness in nested Protos

Andreas Plesch andreasplesch at gmail.com
Mon Apr 25 20:22:41 PDT 2022


Thank you for these examples. These are great to study execution contexts.

The tricky Proto_context_inherit_and_declare.x3d (see below) first
defines a Thing proto (red sphere) which is then inherited in another
proto (NestedDuo) and instanced inside the NestedDuo proto. Then the
Thing proto gets redefined inside the NestedDuo proto as blue box and
instanced again. Finally, the NestedDuo proto is instanced in the main
scene, and a red sphere and blue box is displayed.

So freewrl protos inherit parent proto definitions but these inherited
protos can then be redeclared. This is very reasonable but I am not
sure if such inheritance is intended or required in X3D. It may be
silently intended (as Don may have suggested) but the idea of
execution contexts and name scopes would be that there is
encapsulation rather than somehow permeable boundaries.

Another experiment would be to now add a Thing instance to the main
scene at the end, in another transform to not overlap other shapes.

Should the final Thing display a red sphere or a blue box ?

My guess is a red sphere (if the scene name scope is maintained) but I
am not sure since it may be that there is actually just one global
name scope (for protos), or that the redefinition somehow affects the
parent execution context. Don outlined more of a sequential processing
flow which may favor display of a blue box.

-Andreas

<ProtoDeclare name='Thing'>
 <ProtoBody>
  <Shape>
   <Appearance>
    <Material diffuseColor='1 0 0' />
   </Appearance>
   <Sphere/>
  </Shape>
 </ProtoBody>
</ProtoDeclare>

<ProtoDeclare name='NestedDuo'>
 <ProtoBody>
  <Group>
   <Transform translation='-1 0 0'>
    <ProtoInstance name='Thing' />
   </Transform>

   <ProtoDeclare name='Thing'>
    <ProtoBody>
     <Shape>
      <Appearance>
       <Material diffuseColor='0 0 1' />
      </Appearance>
      <Box/>
     </Shape>
    </ProtoBody>
   </ProtoDeclare>

   <Transform translation='1 0 0'>
    <ProtoInstance name='Thing' />
   </Transform>
  </Group>
 </ProtoBody>
</ProtoDeclare>

<ProtoInstance name='NestedDuo' />
<!-- experiment below -->
<Transform translation='3 0 0'
 <ProtoInstance name='Thing' />
</Transform>

> Date: Mon, 25 Apr 2022 16:59:38 -0600
> From: GPU Group <gpugroup at gmail.com>
>
> http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_context_inherit_and_declare.x3d
>
> http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_context_inherit_and_declare.jpg
>
> http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_context_inherit.jpg
>
> http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_context_inherit.x3d
>
>
>
> On Mon, Apr 25, 2022 at 4:11 PM GPU Group <gpugroup at gmail.com> wrote:
>
> >
> > http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_context_vs_name.x3d
> >
> >
> >
> > http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_context_vs_name.jpg
> >
> >
> >
> > On Mon, Apr 25, 2022 at 4:01 PM GPU Group <gpugroup at gmail.com> wrote:
> >
> >> http://dug9.users.sourceforge.net/web3d/tests/protos/CircleFish.jpg
> >>
> >>
> >> http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_nested.jpg
> >>
> >>
> >> http://dug9.users.sourceforge.net/web3d/tests/protos/Proto_nested.x3d
> >>
> >>
> >>
> >> On Mon, Apr 25, 2022 at 1:10 PM Andreas Plesch <andreasplesch at gmail.com>
> >> wrote:
> >>
> >>> Hi Doug,
> >>>
> >>> Thank you for your response.
> >>>
> >>> > Date: Mon, 25 Apr 2022 07:09:14 -0600
> >>> > From: GPU Group <gpugroup at gmail.com>
> >>> >
> >>> > freewrl loads extern proto scenes as whole scene files, but as 'dead'
> >>> > scenery like a library file: in binary form, ready to binary deep copy
> >>> > parts to live scenery, but node initialization functions not yet
> >>> > called, and not rendered. Subsequent # references to the same scene
> >>> file
> >>> > use the same loaded library scene. So any ProtoDeclares outside the
> >>> > ProtoBody would be resolved.
> >>>
> >>> I think the issue in the CircleFishLod prototype is not directly
> >>> related to extern proto use, but only to how the local ProtoDeclare
> >>> definition needs to reach into the surrounding Scene. It sounds like
> >>> freewrl allows for that mixing of Execution Contexts, assuming that
> >>> the CircleFishLod proto works in freewrl.
> >>>
> >>> A stress test example would be a Scene which has two Protos, A and B.
> >>>
> >>> A is a simple Proto with the name "Joe". The scene uses it in an
> >>> instance later.
> >>>
> >>> B is a nested Proto which internally uses another Proto. This internal
> >>> Proto is also named "Joe" and has both a ProtoDeclare and instances
> >>> within B. The scene then uses B in an instance later.
> >>>
> >>> How should a browser resolve which ProtoDeclaration to use for the
> >>> internal ProtoInstance "Joe" ? Which one would freewrl choose ? The
> >>> first one it finds ?
> >>>
> >>> Perhaps it is time to draft such a test.
> >>>
> >>> Thanks, Andreas
> >>>
> >>> PS: rough draft
> >>>
> >>> <ProtoDeclare name='Joe'>
> >>>   <ProtoBody red sphere />
> >>> </ProtoDeclare>
> >>>
> >>> <ProtoDeclare name='nestedBox'>
> >>>   <ProtoBody>
> >>>     <ProtoDeclare name='Joe'>
> >>>       <ProtoBody blue box />
> >>>     </ProtoDeclare>
> >>>     <ProtoInstance name='Joe' />
> >>>   </ProtoBody>
> >>> </ProtoDeclare>
> >>>
> >>> <ProtoInstance name='Joe' />
> >>> <ProtoInstance name='nested' />
> >>>
> >>> Should display a red sphere and blue box.
> >>>
> >>> > -Doug
> >>> > PS this relates to:
> >>> >
> >>> > PROTOTYPE STYLE IMPORTS
> >>> >
> >>> > I had mentioned a prototype style import for gltf use:
> >>> >
> >>> > Shape { url=?library.gltf#shapeName? }
> >>> >
> >>> > Similar to how we load extern protos as a whole ?dead? scene, and then
> >>> do
> >>> > binary deep copies where used in the live scene to make live.
> >>> >
> >>> > But interestingly, the same goes for x3d scenery ? don?t need glTF,
> >>> don?t
> >>> > need extern protos in library scene, don?t need Inline or IMPORT.
> >>> >
> >>> > So the concept could be tested first with x3d scenery.
> >>> >
> >>> > Shape { url=?library.x3dv#shapeName }
> >>> >
> >>> > And then extended to gltf.
> >>> >
> >>> > /PROTOTYPE STYLE IMPORTS
> >>> >
> >>> > On Sun, Apr 24, 2022 at 10:43 PM Brutzman, Donald (Don) (CIV) <
> >>> > brutzman at nps.edu> wrote:
> >>> >
> >>> > > Actually please look a little more closely at that (admittedly
> >>> tricky)
> >>> > > example.
> >>> > >
> >>> > > * CircleFish is an ExternProto, separately defined in another file
> >>> > > * CircleFishLod is a ProtoDeclare defined in that first file,
> >>> > > CircleFishLodPrototype.x3d
> >>> > > * CircleFishLod ProtoBody contains two ProtoInstance copies of
> >>> CircleFish
> >>> > > * CircleFishLod ProtoDeclare is then followed by a CircleFishLod
> >>> > > ProtoInstance (again  in CircleFishLodPrototype.x3d)
> >>> > >
> >>> > > So I would expect an X3D Browser to
> >>> > >
> >>> > > a. load ExternProtoDeclare      CircleFish
> >>> > > b. build ProtoDeclare                CircleFishLod
> >>> > > c. create inner ProtoInstance  CircleFish for use
> >>> > > d. create outer ProtoInstance CircleFishLod
> >>> > >
> >>> > > Order of steps might vary a bit, but those are the dependencies.
> >>> Good luck
> >>> > > sir.
> >>> > >
> >>> > > 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
> >>> > >
> >>> > > -----Original Message-----
> >>> > > From: x3d-public <x3d-public-bounces at web3d.org> On Behalf Of Andreas
> >>> > > Plesch
> >>> > > Sent: Sunday, April 24, 2022 9:08 PM
> >>> > > To: X3D Graphics public mailing list <x3d-public at web3d.org>
> >>> > > Subject: [x3d-public] ProtoBody completeness in nested Protos
> >>> > >
> >>> > > ProtoDeclarations may use ProtoInstances of other Protos inside their
> >>> > > ProtoBody definitions.
> >>> > >
> >>> > > For example, the CircleFishLod proto here:
> >>> > >
> >>> > >
> >>> > >
> >>> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fx3dgraphic
> >>> > > s.com
> >>> > >
> >>> %2Fexamples%2FX3dForWebAuthors%2FKelpForestExhibit%2FCircleFishLodProto
> >>> > > typeIndex.html&data=05%7C01%7Cbrutzman%40nps.edu
> >>> > > %7C0b4a867ba9874e371f9b0
> >>> > >
> >>> > >
> >>> 8da267152fa%7C6d936231a51740ea9199f7578963378e%7C0%7C0%7C637864565880708349%
> >>> > >
> >>> > >
> >>> 7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwi
> >>> > >
> >>> > >
> >>> LCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=upr4eckI8axT7MO5fAUvAWfyBzUJfhTwqcp
> >>> > > BuH7tZjc%3D&reserved=0
> >>> > >
> >>> > > uses ProtoInstances of the CircleFish proto.
> >>> > >
> >>> > > A more extreme case of nesting is:
> >>> > >
> >>> > >
> >>> > >
> >>> https://www.web3d.org/x3d/content/examples/ConformanceNist/Miscellaneous/PRO
> >>> > > TO/fivedeepnestingIndex.html
> >>> > > <
> >>> https://www.web3d.org/x3d/content/examples/ConformanceNist/Miscellaneous/PROTO/fivedeepnestingIndex.html
> >>> >
> >>> > >
> >>> > > where Proto1 uses ProtoInstance of Proto2 inside its ProtoBody.
> >>> Proto2
> >>> > > itself uses a ProtoInstance of Proto3 inside its ProtoBody. And so
> >>> on to
> >>> > > five levels deep.
> >>> > >
> >>> > > The second example with the deep nesting currently works with x3dom
> >>> but the
> >>> > > seemingly simpler CircleFishLod proto does not.
> >>> > >
> >>> > > The reason is that x3dom expects the complete definition of a proto
> >>> to be
> >>> > > contained in its ProtoBody. However, The CircleFishLod proto only
> >>> contains
> >>> > > the CircleFish ProtoInstances in the body but not the associated
> >>> CircleFish
> >>> > > ProtoDeclaration which for some reason occurs outside the
> >>> CircleFishLod
> >>> > > ProtoBody (and outside the CircleFishLod ProtoDeclaration).
> >>> > >
> >>> > > Expecting the ProtoBody to be complete and self-contained seems
> >>> rather
> >>> > > natural. Is x3dom too strict in this regard, or is there an
> >>> oversight in
> >>> > > the
> >>> > > example ? There is not much guidance in the spec., if any.
> >>> > >
> >>> > > Thanks, Andreas
> >>> > >
> >>> > > --
> >>> > > Andreas Plesch
> >>> > > Waltham, MA 02453
> >>> > >
> >>> > > _______________________________________________
> >>> > > x3d-public mailing list
> >>> > > x3d-public at web3d.org
> >>> > > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >>> > > _______________________________________________
> >>> > > x3d-public mailing list
> >>> > > 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/20220425/fdcca17c/attachment-0001.html
> >>> >
> >>> >
> >>> > ------------------------------
> >>> >
> >>> > Message: 4
> >>> > Date: Mon, 25 Apr 2022 15:14:25 +0000
> >>> > From: "Brutzman, Donald (Don) (CIV)" <brutzman at nps.edu>
> >>> > To: Andreas Plesch <andreasplesch at gmail.com>
> >>> > Cc: "x3d at web3d.org" <x3d at web3d.org>, Spec Feedback
> >>> >         <spec-comment at web3d.org>, "X3D Public Mailing List
> >>> >         (x3d-public at web3d.org)" <x3d-public at web3d.org>, "Brutzman,
> >>> Donald
> >>> >         (Don) (CIV)" <brutzman at nps.edu>
> >>> > Subject: Re: [x3d-public] [x3d] Spec Comment by on 19775-1: X3D
> >>> >         Architecture - V4.0: component support needed for glTF inline
> >>> loading
> >>> >         conversion
> >>> > Message-ID:
> >>> >         <
> >>> BY3PR13MB48844D178FEBD3BCA8221B51C4F89 at BY3PR13MB4884.namprd13.prod.outlook.com
> >>> >
> >>> >
> >>> > Content-Type: text/plain; charset="us-ascii"
> >>> >
> >>> > [cc: x3d-public]
> >>> >
> >>> > Thanks for insightful comment.  Happy to modify this statement to list
> >>> all
> >>> > appropriate components, possibly Immersive profile.
> >>> >
> >>> > Michalis, do you have any opinions from writing your glTF->X3D
> >>> conversion
> >>> > code?
> >>> >
> >>> > It helps to know full coverage.  If there is a glTF test file that
> >>> includes
> >>> > all constructs, that would also be helpful to convert and add to our
> >>> > architecture.
> >>> >
> >>> > 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
> >>> >
> >>> > -----Original Message-----
> >>> > From: x3d <x3d-bounces at web3d.org> On Behalf Of Spec Feedback
> >>> > Sent: Thursday, April 21, 2022 12:47 PM
> >>> > To: x3d at web3d.org
> >>> > Subject: [x3d] Spec Comment by on 19775-1: X3D Architecture - V4.0
> >>> >
> >>> > -- Submitter indicates that this comment may be public: *Yes* --
> >>> >
> >>> > Comment on 19775-1: X3D Architecture - V4.0
> >>> >
> >>> >
> >>> https://www.web3d.org/documents/specifications/19775-1/V4.0/Part01/component
> >>> > s/networking.html#X3DUrlObject
> >>> >
> >>> > -----------------
> >>> > "Support for loading glTF assets (see 2.[GLTF]) also requires support
> >>> for
> >>> > Shape component level 2 and Lighting component level 4."
> >>> >
> >>> > Many different data fragments may be contained in the current standard
> >>> gltf
> >>> > asset structure, even animation data, so maybe also more general
> >>> statement?
> >>> >
> >>> >
> >>> >
> >>> > -----------------
> >>> >
> >>> > Submitted on Thursday, 2022,  April 21 - 12:47pm by  (Joe D Williams )
> >>> > IP: 12.206.82.58
> >>> >
> >>> > See: https://www.web3d.org/node/1694/submission/5663
> >>> >
> >>> >
> >>> > _______________________________________________
> >>> > x3d mailing list
> >>> > x3d at web3d.org
> >>> > http://web3d.org/mailman/listinfo/x3d_web3d.org
> >>> > -------------- next part --------------
> >>> > A non-text attachment was scrubbed...
> >>> > Name: smime.p7s
> >>> > Type: application/pkcs7-signature
> >>> > Size: 5353 bytes
> >>> > Desc: not available
> >>> > URL: <
> >>> http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20220425/1630c2b4/attachment.p7s
> >>> >
> >>> >
> >>> > ------------------------------
> >>> >
> >>> > Subject: Digest Footer
> >>> >
> >>> > _______________________________________________
> >>> > x3d-public mailing list
> >>> > x3d-public at web3d.org
> >>> > http://web3d.org/mailman/listinfo/x3d-public_web3d.org
> >>> >
> >>> >
> >>> > ------------------------------
> >>> >
> >>> > End of x3d-public Digest, Vol 157, Issue 93
> >>> > *******************************************
> >>>
> >>>
> >>>
> >>> --
> >>> Andreas Plesch
> >>> Waltham, MA 02453
> >>>
> >>> _______________________________________________
> >>> x3d-public mailing list
> >>> 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/20220425/bc638b0c/attachment.html>
>
> ------------------------------
>
> Subject: Digest Footer
>
> _______________________________________________
> x3d-public mailing list
> x3d-public at web3d.org
> http://web3d.org/mailman/listinfo/x3d-public_web3d.org
>
>
> ------------------------------
>
> End of x3d-public Digest, Vol 157, Issue 99
> *******************************************



-- 
Andreas Plesch
Waltham, MA 02453



More information about the x3d-public mailing list