This commit introduce JavaScript as nodes generation script, to procedurally generate input nodes, which usually should draw by user on the canvas.
Powered by QuickJS (https://bellard.org/quickjs/)
Added Intermediates nodes sometimes will make the whole part’s mesh failed to generate. This commit add a fallback option, when mesh failed to generate, the generator will try again without the intermediate nodes added.
This feature is inspired from Nico J. Dolloso’s model (https://twitter.com/nicodoll).
Before this commit, outdated textured preview will override the updated untextured preview. From user's perspective, sometimes, the mesh preview flashback for a short time span, although it will finally been updated to the latest.
Before this commit, the cut normal of intermediate nodes doesn't consider the original nodes' travesal direction. This will cause self intersection in some cases.
The neck direction match is introduced for matching the human pose to a animal pose, however, current implementation will cause the neck pose not work as edited in pose editor.
Before this commit, the node id and edge id changed when reload from file, then caused the uuid changing and affected the node processing order during mesh generation.
Normally, when pose been generated, foot is always been pulling to the ground by a y-translation. This setting could be used to scale the y-translation. It's usefull for birds fly kind of motion.
When there is tail bone, the spine bone start with "Spine01" and "Spine02", this is to make the spine bone name match with none-tail bones. Why "Spine01"? Because the bone chain is ordered by name, "Spine01" and "Spine02" come before "Spine1".
If one part configured color solubility, the generated color texture seam between the neighbor parts will be gradient filled using this part's color with the specified solubility.
Demo: https://twitter.com/jeremyhu2016/status/1132159910815227904
Mesh layout and thickness adjustment are depend on base plane calculation. In this build, the base plane calculation could be limited to front plane, side plane, and so on, compare to without any limitation in previous implementation.
Uncombined mode could be used to avoid generation of trivial triangles. However, the result will be none-watertight if there is an uncombined mode component.
This would allow other software to contact with Dust3D without limit on the same machine, however, the user still need to enable it by command line "-remoteio".
Finished server creation, implemented two commands: listwindow, selectwindow
Ideally, all the UI should be possible manipulated by remote IO, a local TCP/IP connection, this could be useful to make a VR front end for Dust3D.
This commit add tips for buttons, to show what the function of the button.
Also, fixed a issue, there was no useful infos to tell user when the mesh was failed to generate, now user should see a warning icon with tips to show why the preview disappear.
Thanks the following contributors:
@RubenSandwich <https://github.com/RubenSandwich>
boynet <https://dust3d.discourse.group/u/boynet>
fornclake <https://www.reddit.com/user/fornclake>
When one pose consists of multiple frames, each frame will be hardly see when the opacity is 0.25, this commit change the opacity to 0.5 in pose editor, however, leave it as 0.25 in main modeling interface.
The mouse wheel event got triggered on multiple widgets at the same time, this will cause the rendered model been wrongly zoomed while the intention is resizing the nodes.
Currently, only support "Normal" and "Inversion" modes, "Normal" means normal mesh union, "Inversion" means mesh diff, it behaves like subtract itself from the previous mesh.
If there are images need to be saved, such as the model turnaround reference sheet and texture images, the document saving may be slow because of image encoding to png, now, all the images are pre encoded when the first load, so the document saving could be speed up by avoid the cost of image encoding.
Root bone will have heightAboveGroundLevel parameter to indicate the distance between ground and foot. It's a relative value, comparing with the distance of the first spine head position and foot.
It's very easy to place the wrong side limbs on the pose graphic editor, especially when the reference sheet is not clear. Switch chain side will switch the YZ for the paired chain which contains the selected node. For example, if you select one node from LeftLimb1, and choose the switch chain side from context menu, all the bones, has the name pattern LeftLimb1_Joint* and RightLimb1_Joint*, the YZ of origin will be swapped.
Usually one pose consists of one frame, however, sometimes multiple frames per one reference sheet for a serial of action could be very useful, such as a sprite sheet. Multiple frames per pose is different with one motion, one motion could contains multiple poses. Currently, the duration of one frame is fixed to 0.042s, it's based on the 24 frames per second calculation.
Each bone's head and tail positions are been kept in the pose parameters, that means there are repeated info and we can resolve the bone's head position from parent's tail position if there isn't any positions info been kept for one bone.
This commit include lots of changes for pose editor.
Before, we use buttons to represent the transform controller for bones;
Now, we use nodes and edges to represent the bones, just like the nodes and edges for representing the guide spheres for mesh generating. There are advantages by doing this. Firstly, The edit UI for both mesh and pose are unified, secondly, it is possible to set a reference sheet for pose editing now, this is very important.
This new pose editor is inspired by the Eadweard Muybridge's work.
Limb bones generation failed when two mark joints sit near with each other, because resolving the joint bone's connectivity failed on finding the first neighbor.
This commit fixs this issue by trying to find a nearest joint node.
The difference between tetrapod and generic is that, with tetrapod, all the bones need to be generated are know before mark, so if some marks are missing, there would be a message prompted; with generic, you can mark what ever marks as you wish, and the algorithm is try to create a spine and the limbs growing on the spine, that means, the generated skeleton would be some kind of creature.
Refactor outcome. Move processes of outcome to separated files, and leave the outcome class as clean as possible.
Normal export in glb format is been fixed.
Ambient occlusion baker is been temporarily removed.
The normals haven't fix yet, this commit is mainly preparing for the next coming commits about animation export.
The glTF text format abandoned for the binary format.