[x3d-public] Displacer and normals ?

Joe D Williams joedwil at earthlink.net
Wed Feb 12 19:57:16 PST 2025


I think degenerate triangles, ones that flip from ccw to cw, or overlap or
whatever messes up a triangle when any of all of its points get moved 
is purely result of author error(s) in setting the parameter(s). 

Whatever happens with normals of triangles moved or destroyed by Displacer
must match what happens with points moved by joint-driven skin animations 
which can also mess up, and by points moved by CoordinateInterpolator,
same as any morphing operation. 
Normals can also be set by the author each frame if desired. 
       
Maybe some help given in authortime but not any sort of
enumerated error except undefined in runtime since this visual effect;
it is just an artifact of bad data. 
Esp likey when deformable face is actually composed of multiple shapes
and they must blend regardless of the combinations of shapes
that move to make the motion for a pose.  
Always? much easier with single basic mesh for the face and and then
add features and accessories animated individually?  
          
One of the limitations with Displacer is that it is just a single scaled 3D vector,
meaning it has a fixed relative direction regardless of the weight applied. 
When a curved displacement is required, then point motion can be
controlled using joint rotation, like the eyeball.
In some cases,a CoordinateInterpolator may be used to move points around. 
Texture position and rotation can be animated. 
   
Since all these Displacer nodes have been produced by finding the
simple 3D vector difference between the first and last data point 
of a source CoordinateInterpolator it is likely that some displacements
do not produce exact same movement of a point just because the
original interpolator keyValue keyframe data points described a curved path. 
    
Sure, we can update the 3D vector direction each frame if we want to,
but I would like to see a Displacer which could use multiple sets of vectors  
interpolated to produce computed keyframes like other interpolators.
For each point there could be a set of vectors where the output value for
point movement is the result of interpolation between
adjacent key time (weight) keyValue 3D vectors.
   
So, more fun with x3d HAnim 
Thanks, 
Joe


-----Original Message-----
From: Extensible 3D (X3D) Graphics public discussion <x3d-public at web3d.org>
Sent: Feb 12, 2025 9:11 AM
To: X3D Graphics public mailing list <x3d-public at web3d.org>
Cc: Andreas Plesch <andreasplesch at gmail.com>
Subject: Re: [x3d-public] Displacer and normals ?

 
Responses below:
 
Date: Tue, 11 Feb 2025 15:58:40 -0600
From: John Carlson <yottzumm at gmail.com (mailto:yottzumm at gmail.com)>
To: "Extensible 3D (X3D) Graphics public discussion"
        <x3d-public at web3d.org (mailto:x3d-public at web3d.org)>
Subject: Re: [x3d-public] Displacer and normals ?

Did you get the black tongue effect?  I?ve seen that in Sunrize, and
reported it there.  Holger had a response about providing normals. 
I found https://github.com/create3000/sunrize/issues/9
 
Yes, I think this is similar. x-ite/sunrize just may not automatically recalculate normals for performance reasons which in some cases may be beneficial by avoiding the effects of degenerate triangles.
 
The displacers were taken from CoordinateInterpolators in the
HumanoidAnimation/FacialAnimation X3D archive.
https://www.web3d.org/x3d/content/examples/HumanoidAnimation/FacialAnimation/index.html
Perhaps we could derive normals from those examples, realizing only one set
of meshes is chosen for the final version.

It?s relevant, because I will be providing a unified skin mesh for FACS,
and it would be nice to provide normals. 
I noticed the effect actually only in combined displacers/morphers, eg. the Contempt combo. That brings up the future question of how pre-computed normals from multiple displacers may be combined, maybe just by averaging the slerped orientation from each.
There may have been studies on how to best recombine facial subexpressions for a valid result.
 
-Andreas
 

On Tue, Feb 11, 2025 at 3:41?PM Andreas Plesch via x3d-public <
x3d-public at web3d.org (mailto:x3d-public at web3d.org)> wrote:

> I noticed that some displacers cause degenerate or flipped triangles which
> may cause rendering problems, mostly due to problems calculating
> automatically a good normal vector.
>
> In general, for best rendering results, it is necessary to provide
> precomputed normals. rather than rely on automatic normal calculations. Was
> there a discussion on how to have displacers provide precomputed normals
> along with the displacement of the vertices ? That  would help with
> rendering quality, and may be necessary for some use cases.
>
> This may be deemed a long term feature to consider.
>
> Perhaps an idea would be a MFRotation normalRotations field which has the
> rotation required to rotate the normal (per vertex, or perhaps per face)
> from the rest orientation to the final orientation. Weights are applied
> with slerp. For animation authors it would be probably easier to be able to
> just directly provide the final orientation.
>
> Any feedback or comment much welcome, -Andreas
>
>
> --
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250211/a4be3c1a/attachment-0001.html>

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

Message: 3
Date: Wed, 12 Feb 2025 11:27:59 -0500
From: Andreas Plesch <andreasplesch at gmail.com (mailto:andreasplesch at gmail.com)>
To: John Carlson <yottzumm at gmail.com (mailto:yottzumm at gmail.com)>
Cc: Holger Seelig <holger.seelig at yahoo.de (mailto:holger.seelig at yahoo.de)>,  X3D Graphics public
        mailing list <x3d-public at web3d.org (mailto:x3d-public at web3d.org)>, Joe D Williams
        <joedwil at earthlink.net (mailto:joedwil at earthlink.net)>
Subject: Re: [x3d-public] Turning on and off simultaneous animations
        individually
Message-ID:
        <CAKdk67vXRSz1pM4QLjcxuCQHfjY4LUT924cSmX7rPAasroPUCw at mail.gmail.com (mailto:CAKdk67vXRSz1pM4QLjcxuCQHfjY4LUT924cSmX7rPAasroPUCw at mail.gmail.com)>
Content-Type: text/plain; charset="utf-8"

Hi,

I took a first stab at Displacers in Segments for x3dom and use it now in
the editor:

https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/ManyClocks.x3d

This is experimental and mostly for testing purposes. If there is an
example combining Displacers in both Joints and Segments that would be
interesting as it is not necessarily expected to work.
The experimental implementation is inefficient and expensive as it is
weight_changed event driven. If you activate multiple displacers the frame
rate starts to drop. It probably is not very useful at this point.

Fee free to give it a try, -Andreas

On Wed, Feb 5, 2025, 4:11?PM Andreas Plesch <andreasplesch at gmail.com (mailto:andreasplesch at gmail.com)> wrote:

> Hi John,
>
> Thanks. I found the tongue.x3d example but if you can create another one
> that would be helpful in general.
>
> You vastly overestimate my ability and availability ;) This would be a
> longer term project. I have an idea what to do.
>
> Andreas
>
>
> On Wed, Feb 5, 2025, 1:31?PM John Carlson <yottzumm at gmail.com (mailto:yottzumm at gmail.com)> wrote:
>
>> I had one I sent to Holger, probably derived from this one:
>>
>>
>> https://github.com/coderextreme/ci2had/blob/main/resources/JinMouthStretch.x3d
>>
>>
>> What I would do (again) is take out all the segments but the tongue.
>>
>> There?s no menus involved in this one.
>>
>> If you need further assistance, like a smaller example, I can help.  Also
>> all the Jin*.x3d FACS action units can also provide examples.
>>
>> I?ll be pretty unbusy today.  I can allocate some time for creating a
>> model, make sure it animates, etc.
>>
>> If you?re able to allocate some time today, great, we have an HAnim
>> meeting tomorrow and showing off X3DOM editor using Displacers would be
>> fantastic!
>>
>> Remember there?s a coord field in HAnimSegment that the HAnimDisplacer
>> operates on!
>>
>> John
>>
>> On Wed, Feb 5, 2025 at 12:01?PM Andreas Plesch <andreasplesch at gmail.com (mailto:andreasplesch at gmail.com)>
>> wrote:
>>
>>> Hi John,
>>>
>>> The reason is that Displacers are currently implemented in x3dom only
>>> for Joints, but not for Segments, unfortunately. Do you know of a simple
>>> but instructive test case of Segments with Displacers ?
>>>
>>> Andreas
>>>
>>>
>>> On Tue, Feb 4, 2025, 2:33?PM John Carlson <yottzumm at gmail.com (mailto:yottzumm at gmail.com)> wrote:
>>>
>>>> I will try to test this in castle model converter.
>>>>
>>>> I did try setting a value for the outputOnly fields, but the converter
>>>> wouldn?t shut up.
>>>>
>>>> The model below doesn?t seem to animate when one presses the menu
>>>> items.  Did you get it to animate?
>>>>
>>>> On Tue, Feb 4, 2025 at 12:27?PM Andreas Plesch <andreasplesch at gmail.com (mailto:andreasplesch at gmail.com)>
>>>> wrote:
>>>>
>>>>> Hi John, all,
>>>>>
>>>>> It turns out that x3dom currently expects a default value for Proto
>>>>> fields even for outputOnly fields. This is due to how Proto fields are
>>>>> initialized. They always need to have a value. While the spec. does not
>>>>> require this, it seems still good practice to always define a default value
>>>>> in the ProtoInterface. There may be a case where an outputOnly field is
>>>>> used in ISing where a valid value would be expected. There may be other
>>>>> corner cases.
>>>>>
>>>>> Here is your example with added default values for outputOnly fields:
>>>>>
>>>>>
>>>>> https://andreasplesch.github.io/Library/Viewer/index.html?url=https://gist.githubusercontent.com/andreasplesch/af5ff3148c1159f71d34fb78c1f63024/raw/b3d4470107ab74e301ed48448ab2a4f4154672e0/ManyClocks_John.x3d
>>>>>
>>>>> This could be fixed in x3dom, by always setting some default value. Is
>>>>> there a list of recommended defaults for each data type if no other source
>>>>> of defaults is available? For SFTime it seems to be -1.
>>>>>
>>>>>
>>>>> -Andreas
>>>>>
>>>>>
>>>>> On Mon, Feb 3, 2025 at 7:39?AM Andreas Plesch <andreasplesch at gmail.com (mailto:andreasplesch at gmail.com)>
>>>>> wrote:
>>>>>
>>>>>> Hi John,
>>>>>>
>>>>>> On Mon, Feb 3, 2025 at 12:48?AM John Carlson <yottzumm at gmail.com (mailto:yottzumm at gmail.com)>
>>>>>> wrote:
>>>>>>
>>>>>>> Andreas, "startTime" is an accessType outputOnly field, so why do I
>>>>>>> need to provide a value attribute in fieldValue?  I'm kind of confused.
>>>>>>> I'm probably missing something in the spec.
>>>>>>>
>>>>>>
>>>>>> You are right, I only outlined scenarios where the accessType allows
>>>>>> input or initialization..
>>>>>> In the outputOnly case it is not necessary to provide a fieldValue
>>>>>> node at all since there is no value which can be provided. Providing the
>>>>>> node would indeed be confusing, to both the user code reader and any X3D
>>>>>> browser.
>>>>>> I believe the spec. is silent on this case in any encoding.
>>>>>>
>>>>>> Best, Andreas
>>>>>>
>>>>>> Thanks for any clarification.
>>>>>>>
>>>>>>> I have finally enabled schematron on the project, but I'm finding it
>>>>>>> hard to understand the messages, and modifications that I make, while
>>>>>>> removing the immediate problems, seem to move the problems elsewhere.
>>>>>>>
>>>>>>> Explaining why I need a "startTime" fieldValue value is my main lack
>>>>>>> of understanding, but perhaps I need a whole review of accessType.
>>>>>>>
>>>>>>> Castle Model Converter reports:
>>>>>>>
>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element
>>>>>>> references unknown field name "enabled"
>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element
>>>>>>> references unknown field name "startTime"
>>>>>>> castle-model-converter: Warning: X3D: X3D XML: <fieldValue> element
>>>>>>> references unknown field name "stopTime"
>>>>>>>
>>>>>>> I will try providing a field value in the ProtoInterface
>>>>>>>
>>>>>>> If I "cleanup" enabled, startTime and stopTime, I get:
>>>>>>>
>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype
>>>>>>> "MenuItem", event "inputTrue" references (by "IS" clause) non-existing
>>>>>>> event "enabled"
>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype
>>>>>>> "MenuItem", event "triggerTime" references (by "IS" clause) non-existing
>>>>>>> event "startTime"
>>>>>>> castle-model-converter: Warning: VRML/X3D: Within prototype
>>>>>>> "MenuItem", event "triggerTime" references (by "IS" clause) non-existing
>>>>>>> event "stopTime"
>>>>>>>
>>>>>>> I guess what I conclude at this point is, startTime and stopTime are
>>>>>>> bad DEF names, but what about enabled as a field?  The dominoes are falling.
>>>>>>>
>>>>>>> About your two scenarios in the other message, perhaps this is
>>>>>>> revealing.
>>>>>>>
>>>>>>> See attached attempt to fix original issue, which resulted in the
>>>>>>> above.
>>>>>>>
>>>>>>> John
>>>>>>>
>>>>>>> On Sun, Feb 2, 2025 at 3:59?PM Andreas Plesch <
>>>>>>> andreasplesch at gmail.com (mailto:andreasplesch at gmail.com)> wrote:
>>>>>>>
>>>>>>>> I think x3dom, reasonably, expects a value for the fieldValue nodes:
>>>>>>>>
>>>>>>>> For example:
>>>>>>>>
>>>>>>>> <fieldValue name="startTime" />
>>>>>>>>
>>>>>>>> and others.
>>>>>>>>
>>>>>>>> On Sun, Feb 2, 2025 at 5:42?AM John Carlson <yottzumm at gmail.com (mailto:yottzumm at gmail.com)>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Andreas, Joe,
>>>>>>>>>
>>>>>>>>> Reset Button, Reset_Clock added.
>>>>>>>>>
>>>>>>>>> See attached zip for details, or visit link;
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> https://create3000.github.io/x_ite/playground/?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d
>>>>>>>>>
>>>>>>>>> For some reason, this link doesn't show the live scene?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> https://andreasplesch.github.io/Library/Viewer/index.html?url=https://raw.githubusercontent.com/coderextreme/ci2had/refs/heads/main/resources/CleanedYouClocks.x3d
>>>>>>>>>
>>>>>>>>> Puzzled, haven't researched it yet.  Looks good in Sunrize and
>>>>>>>>> X_ITE, will try FreeWRL next.
>>>>>>>>>
>>>>>>>>> John
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Andreas Plesch
>>>>>>>> Waltham, MA 02453
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> Andreas Plesch
>>>>>> Waltham, MA 02453
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Andreas Plesch
>>>>> Waltham, MA 02453
>>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20250212/6f37d6ce/attachment.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 191, Issue 57
*******************************************
 

-- 
Andreas Plesch
Waltham, MA 02453





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


More information about the x3d-public mailing list