The thing that always makes me sad when I make things like this is that you have to expose so many parameters that your tool ends up becoming overwhelming. I've not fiddled with geometry nodes yet - is there any scope for messing with the UI eg. implementing gizmos in viewport rather than sliders in the properties panels ?
Well you could set up some kind of a rig using geonodes, however strictly UI in the viewport is not supported. Yeah that's true, at least some collapsable menus would be helpful. Maybe they'll make it down the road some day.
Tools to manipulate Geometry Nodes are definitely coming, but it'll probably be a while, still. What is coming sooner is the ability to set GN attributes in the viewport. Think of how you currently set hard edges or Bevel Weights, but for any general attribute.
Even being able to use checkboxes, dropdowns, toggleable sections etc in the GN modifier would make them more manageable, but until that happens it's best to split it up in a few different modifiers (if feasible)
Space colonization? :D I recently ran into L-system for branches e.g. and been obsessed lately. My TA skills are still very low end but I hope to achieve something similar in Godot. Any tips tricks bottlenecs?
Btw love your stuff here :'D silent observer since forever
yeah it's space colonization, seems to give a more "natural" looking tree. the biggest change I made to the algorithm I used was to add a normal to the points so you can add a growth direction bias (it's also very useful in other main application for emitters as scattering tools). Also a good decreasing sides cylinder routine is a must for branches. I split the geometry virtually into trunk (branch 0) and branches the other neat trick is you make the resultant tree a point emitter in it's own right... so it can throw out leaves, fronds or act as the basis for another tree (though it's quite easy to run into the millions of faces very quickly cause things to get very sluggish. I've looked into stitched geometry and not really found anything that works well in all situations so may look at some kind localised modifier solution. It's quite an "in depth" subject probably deserving a thread in it's own right :)
I totally forgot to post it here, but here it is! I have worked on this one for years and now I have reached a relatively ok level. Fast and it's getting more and more reliable. It's now in beta phase, so you can even try it out. :)
The pack UVs around selection is really neat, I couldn't figure out how to do it in Maya with Mel script. Does the straighten UVs work on U-shaped shells or is it tolerance based and would collapse onto itself if the angle of the UVs was too great to start?
It works on any uv shell as long as they are fully quad, with uniform topology, which means the interior vertices have 4 adjacent edges, the outer 3 and corner verts have 2.
In certain cases it's much faster than any other solutions especially on modern machines. A lot of parts are computed in parallel, like creating the data structure, or the UV Packer. There are a lot of pre-cached data as well, making it much faster than the native solutions. The viewport is OpenGL based and it's fairly minimal. (millions of polygons, doesn't matter, not even for the packer)
Yes I saw that in the guy's demo he did, he was selecting a 1mil mesh in the UV editor in real time, very impressive. Autodesk should hire you to increase performance of their native UV editors in both Maya and Max.
a little arcane (and a right pain to workout/code) perhaps but I've managed to get my point emitter to be a "proper" max pipeline object like editable mesh, splines and poly. Doesn't sound much but it saves a lot of faff with each emitter having to handle everything individually can now be moved to a single mod that works on all emitters (as well as all deformer mods working too :D )
a base emitter object with taper mod and a stretch mod added then collapsed back to base emitter object.
another demo of having emitters as a pipeline object
procedural spherical emitter with a conform to mesh modifier applied used to generate a mesh at each point (yet to code the mesh normal to emitter normal so the generate mesh can align to the surface)
spline emitter above with conform to mesh mod
with normals
an "ocean" of grass (rotating the terrain under the emitter which is conformed to the terrain and spawning the grass meshes)
Implemented the most simple of interfaces for SimpleObject2 class in max called IVariation. And all it does is invalidate the mesh forcing max to rebuild it. So now if you add any kind of random variation in your object creation this can be reflected in the creation process
as a test I randomized the height segment in a cylinder object being used my emitter cloner object
kind of hilites the harsh white window surround now :)
so much wrong with that window! why is there a scroll bar ? is there invisible text going off the end of the page ? (I'm having a go @ Autodesk and their usual half arsed approach btw :) )
first proper object that uses my variation interface, It basically a foliage fan, where you can vary the number of fans and their height, shear, shift, slide, normals, vertex color, atlas mapping, uflip etc
the animation is showing a new instance of the original object at each point (the blue dots) which is then merged to a combined mesh.
@Klunk is that being done via maxscript or the SDK? I tried doing something similar at one point with Maxscript gw drawing methods but viewport performance was terrible with it.
SDK, using a call to the GraphicsWindow::triStrip function (though just a quad). Though it gets tricky in that if the viewport is in perspective you have to force the camera into orthographic projection or otherwise you get really noisy and strange behaviour at extreme zooms. The texture handling I use is much the same as used in the maxsdk\howto\ViewportTexture sample, you create a Texture handle with GraphicsWindow::getTextureHandle then set this you then assign this to a Material (not to be confused with (Mtl)). Then you use GraphicsWindow::setMaterial before drawing the tristip.
slight deviation, a max script that adds helpers to a spline shape so it can be manipulated when at the bottom of a stack without needing to go to into the stack and to subobject editing
it came about as a "reverse" of the points to spline thread, i'll post it up once most of the bugs and random crashes are ironed out
slight deviation, a max script that adds helpers to a spline shape so it can be manipulated when at the bottom of a stack without needing to go to into the stack and to subobject editing
it came about as a "reverse" of the points to spline thread, i'll post it up once most of the bugs and random crashes are ironed out
That's really neat. Is that real-time triangulation, Delaunay or otherwise?
thanks, Constrained Delauney poly2tri (though i've change some of the source code to work better with max) it's real touchy about duplicate points or points outside the constrained polyline (crashtastic ) otherwise it just a modifier that fills the spline with grid points and an optional border loop. I have another one in the same vane that uses a second curve to control the direction of the interior grid points. I use poly2tri quite a lot, though you have to create the tris in 2d it works really well in conjunction with max's Mesh class, it's good for retriangulation and fills etc. Also you have to provide your own quadifying and quad edge alignment routines as it only produces tri and edge direction with the grid can be quite random. It does better (neater) job with triangulation when the either the length or the width of the polyline is biased to one or the other, if equal it does a pretty poor job.... it and easy work around as you are only really interested in the triangulation you can scale the points you pass to it in either x or y.
quick demo with textures
the modifier also defines its bounding edges as an Outline which can be used by a cutting modifier (also using poly2tri)
doing the above demo snippet, I approximated the mapping of the two objects to similar scaling an position though the illusion is ruined the moment I rotate the entire object So it got me thinking about linking the mapping gizmo of both objects to a helper..... seems it works
the script sets a uvw mapping mod to each object (using the largest width and length for each) and linking the gizmo tm to the helper object via transform script.
A modifier to turn any geometry into a cutter (Outline) than can be used in my cutting modifier, currently using open edges will be extended to any edge selection.
nice as the ouliner mod is it threw up a few possible issues (revealed by extruded max text not capping correctly ). So I need to test some boolean operation on the outlines so added some shape booleans ops to max script to aid this....
does union (show with resample mod applied), difference, intersection and xor (intersection and union) works with "holes" too
Update/highlights on these restraint rigs, after animation, and brought into Unity. This is just a timeline preview for animation purposes. Normally I would integrate animations into character controllers for interactive experiences in VR, but I'm trying to focus on the tech art animation side and let developers make use of my clips. Ended up being a bit more complicated than estimated, knowing it was going to be a challenge to: restrain a character, buckle in the straps, and tighten it. Him fiddling with his mask ended up surprising me and became my favorite part. I've done enough work on this to make a talk out of it.... maybe I might. There are 7 different rigs working in tandem to make this happen. Post-mortem: try and fake it simpler next time
Replies
thanks, yeah no probs
you need to add a mesh smooth modifier to get the smoothing
been working on some improvements to BQT. making it more stable and easier to work with. https://github.com/techartorg/bqt
BQT makes custom UI in Blender possible. (with Python), by allowing devs to use QT in Blender (which by default isn't supported )
Neat, Blender's UI leaves a lot to be desired. That right click context menu has nothing you'd want in it.
drop and drag normal map merger which uses the "correct" maths
not full tested yet but I sure someone will break it 😉
and the ability for my capsule emitter to be an "icecream cone" emitter that a top and bottom radii
useful for creating frond/branch meshes
@Klunk is that a space filling thing that starts from the particles?
kind of yes, though It uses point "emitting" helpers (no motion involved)
So here's a belt making setup I made with geonodes. >>>https://blendermarket.com/products/beltmaker
Wow, that is really amazing. I'm not a Blender user, but it would be really impressive if it did roads.
Thanks! Well there's a setup for roads actually;) You can look it up at blendermarket;) Here's another shot of my belt setup:
very impressive 😀
it is very cool indeed
The thing that always makes me sad when I make things like this is that you have to expose so many parameters that your tool ends up becoming overwhelming. I've not fiddled with geometry nodes yet - is there any scope for messing with the UI eg. implementing gizmos in viewport rather than sliders in the properties panels ?
Well you could set up some kind of a rig using geonodes, however strictly UI in the viewport is not supported. Yeah that's true, at least some collapsable menus would be helpful. Maybe they'll make it down the road some day.
Tools to manipulate Geometry Nodes are definitely coming, but it'll probably be a while, still. What is coming sooner is the ability to set GN attributes in the viewport. Think of how you currently set hard edges or Bevel Weights, but for any general attribute.
Even being able to use checkboxes, dropdowns, toggleable sections etc in the GN modifier would make them more manageable, but until that happens it's best to split it up in a few different modifiers (if feasible)
Space colonization? :D I recently ran into L-system for branches e.g. and been obsessed lately. My TA skills are still very low end but I hope to achieve something similar in Godot. Any tips tricks bottlenecs?
Btw love your stuff here :'D silent observer since forever
yeah it's space colonization, seems to give a more "natural" looking tree. the biggest change I made to the algorithm I used was to add a normal to the points so you can add a growth direction bias (it's also very useful in other main application for emitters as scattering tools). Also a good decreasing sides cylinder routine is a must for branches. I split the geometry virtually into trunk (branch 0) and branches the other neat trick is you make the resultant tree a point emitter in it's own right... so it can throw out leaves, fronds or act as the basis for another tree (though it's quite easy to run into the millions of faces very quickly cause things to get very sluggish. I've looked into stitched geometry and not really found anything that works well in all situations so may look at some kind localised modifier solution. It's quite an "in depth" subject probably deserving a thread in it's own right :)
Well!
I totally forgot to post it here, but here it is! I have worked on this one for years and now I have reached a relatively ok level. Fast and it's getting more and more reliable. It's now in beta phase, so you can even try it out. :)
Here you can read a bit more about it 👉️ https://rapidmxs.com/store/uvreactor/
The pack UVs around selection is really neat, I couldn't figure out how to do it in Maya with Mel script. Does the straighten UVs work on U-shaped shells or is it tolerance based and would collapse onto itself if the angle of the UVs was too great to start?
It works on any uv shell as long as they are fully quad, with uniform topology, which means the interior vertices have 4 adjacent edges, the outer 3 and corner verts have 2.
:)
Nice, I've written a similar straightening tool for Maya. Looks like a great plugin for Max.
Thank You! :)
In certain cases it's much faster than any other solutions especially on modern machines. A lot of parts are computed in parallel, like creating the data structure, or the UV Packer. There are a lot of pre-cached data as well, making it much faster than the native solutions. The viewport is OpenGL based and it's fairly minimal. (millions of polygons, doesn't matter, not even for the packer)
Yes I saw that in the guy's demo he did, he was selecting a 1mil mesh in the UV editor in real time, very impressive. Autodesk should hire you to increase performance of their native UV editors in both Maya and Max.
grabbing this now
Very Impressive stuff ! pi3c3
Heres a attempt at blenders vertex extrude inside maya
shape emitter modifier
with min spacing and texture map density (gradient ramp in this case)
a little arcane (and a right pain to workout/code) perhaps but I've managed to get my point emitter to be a "proper" max pipeline object like editable mesh, splines and poly. Doesn't sound much but it saves a lot of faff with each emitter having to handle everything individually can now be moved to a single mod that works on all emitters (as well as all deformer mods working too :D )
a base emitter object with taper mod and a stretch mod added then collapsed back to base emitter object.
how it works for my tree creator
procedural sphere emitter with a taper mod
another demo of having emitters as a pipeline object
procedural spherical emitter with a conform to mesh modifier applied used to generate a mesh at each point (yet to code the mesh normal to emitter normal so the generate mesh can align to the surface)
spline emitter above with conform to mesh mod
with normals
an "ocean" of grass (rotating the terrain under the emitter which is conformed to the terrain and spawning the grass meshes)
Implemented the most simple of interfaces for SimpleObject2 class in max called IVariation. And all it does is invalidate the mesh forcing max to rebuild it. So now if you add any kind of random variation in your object creation this can be reflected in the creation process
as a test I randomized the height segment in a cylinder object being used my emitter cloner object
made a free max plugin https://github.com/hannesdelbeke/dark-listener-max
to get dark mode for the listener automatically on startup
kind of hilites the harsh white window surround now :)
so much wrong with that window! why is there a scroll bar ? is there invisible text going off the end of the page ? (I'm having a go @ Autodesk and their usual half arsed approach btw :) )
neat! last two .gif are the same?
kind of, different meshes, though still "static" as the "terrain" moves under them.
considerably more geometry with the grass :)
first proper object that uses my variation interface, It basically a foliage fan, where you can vary the number of fans and their height, shear, shift, slide, normals, vertex color, atlas mapping, uflip etc
the animation is showing a new instance of the original object at each point (the blue dots) which is then merged to a combined mesh.
abit denser
and a still
so you could in theory have a custom hud
it came about as a "reverse" of the points to spline thread, i'll post it up once most of the bugs and random crashes are ironed out
I use poly2tri quite a lot, though you have to create the tris in 2d it works really well in conjunction with max's Mesh class, it's good for retriangulation and fills etc. Also you have to provide your own quadifying and quad edge alignment routines as it only produces tri and edge direction with the grid can be quite random.
It does better (neater) job with triangulation when the either the length or the width of the polyline is biased to one or the other, if equal it does a pretty poor job.... it and easy work around as you are only really interested in the triangulation you can scale the points you pass to it in either x or y.
quick demo with textures
the modifier also defines its bounding edges as an Outline which can be used by a cutting modifier (also using poly2tri)
doing the above demo snippet, I approximated the mapping of the two objects to similar scaling an position though the illusion is ruined the moment I rotate the entire object So it got me thinking about linking the mapping gizmo of both objects to a helper..... seems it works
the script sets a uvw mapping mod to each object (using the largest width and length for each) and linking the gizmo tm to the helper object via transform script.
a cylinder with a slice mod (gizmo tied to a helper similar to the mapping script) then an outliner mod. and used as a cutter.
does union (show with resample mod applied), difference, intersection and xor (intersection and union)
works with "holes" too
I've done enough work on this to make a talk out of it.... maybe I might. There are 7 different rigs working in tandem to make this happen. Post-mortem: try and fake it simpler next time