Splop objects onto a SubD (even if only using a coarse/dense render mesh underneath for simple, imperfect deformation).
Matching a subd edge in smooth mode to a polysurface (using the underlying NURBS object, doesn’t need to be exact, just as close as the match can be using the existing geometry). Maybe a refine match could be added, so do it with history and then user can insert points on the edge until they get a match they’re happy with (as some poeple do with MatchSrf + history, adding knots until something looks a better match).
Delete Input, Quad Remesh
SubD to Mesh (using extract control polygon), doesn’t preserve selection sets
‘Points’ command - add undo option
Flow along surface works amazingly from one subd face to another. How could we do something similar, but flow something from one loop (quad faces, single loop ‘strip’) to another loop strip, perhaps of a different length (but still just a quad loop, one edge wide (but maybe moving up to two edges wide eventally, again only on the condition that the selections form 4 sided all quad topology)
Freeze border in QuadRemesh - maybe even define segments in edge loop / naked / open edge point count (current/target), or even match a subd surface in box mode to a degree 1 curve (ala matchsrf to curve)
BringToFront for controls
Hello - a couple of these are straighforward enough. Some of the others less so to me.
since free SubD edges have zero curvature, tangency would be the best you can do, I guess. Is that what you are asking here, make a SubD tangent, at its edge, to a surface?
FlowAlongSrf is working well because there is a surface ‘equivalent’ for a single subd face. There is not for an arbitrary set of faces. The ToNurbser can pack multiple faces and does a pretty good job - I do not know if that would do the job reliably here - that is, pack a user defined set of faces into a surface. Same for
Splop - if it does not, I guess it can be made to work on a single face relatively easily but spanning faces might be a challenge.
RH-61823 Points: Allow Undo within the command
RH-61824 Quadremesh: delete input
Matching wise would be okay with just positional. Is this currently only possible, as Kyle described, by using Align after duplicating the edge of a nurbs object? I probably need to attach a mmore visual case for this.
Yes - so when I heard this was possible, my first thought was that it would surely be the first step to enabling such deformations to take place. If a face packing can take place under the hood, of a selection of say 4 subd faces which are adjacent and all in a line (or indeed a 2 x 2 grid), then surely we’re onto something? Whilst I fancy the challenge of making it work with Python, I’m sure evenings and days of me toiling would not be worth it when it would probably be childs play to a real dev. Flow would then be something like:
- Pick object to flow
- Pick base surface, with corner point as per
- pick a 1d or 2d array of quad faces, maybe picking the orientation point after (or just in the first face pick) - of course, the subd quick select tools could be used here, such as picking a start and end of loop, and dbl click in between for the loop.
- or pick a corner on the array for orientation, this could use the under the hood pack faces
- apply the space morph as in vanilla Rhino
- then something similar with splop - choose an array of faces to splop to, use the nurbs limit underneath as temporary geometry (without having to actually produce it only to delete later)
Until then, I understand that as @theoutside pointed out we can use lots of construction geometry and duplications and stuff. Long term obviously it would be nicer for lots of users to not have to spend lots of time doing this - but to pack it into a tool. Maybe we could have a test command of some kind, testFlowAlongSubD? Honestly couldn’t care that much if it was super buggy to begin with or anything.
Whoops - I already asked for this. Sorry about that.
Another thing I wondered about @pascal - I tried editing a few times to get it visibility. It’s about exposing morph control box ‘slices’ (when specifying a control box with x/y/z points.
Thanks Kyle. I’ll leave it out there anyway. It could sure as heck be nice. Just while bridge is still a very tight command for needing same point count for the edges.
Control objects (in cage edit) would be great if they could use the BringToFront visibility option. Ignore, this, I’ve asked for it before and there’s a YT!
Apologies - it’s a quite random list of stuff that I’ve just had on post its for a while.
A Flow along a sub-grid of quad faces would be super useful. Could we use selection sets for the starting quads grid and destination quad strips? I know it’s hairy, but a good starting point for testing.
Personally I think it’s a no brainer. I know it’s like I’m asking to treat meshes as NURBS, but it’s not really is it I feel. Basically we have this hybrid geometry which, in simple cases (all quad and 1d / 2d arrays of faces), can be described as a surface underneath, but then manipulated in the free manner that SubD offers.
At the end of the day, it’s important to maintain synergy between the tools so that we’re not going down the line of ‘Tool A get’s you to Point A; get out of your car and into Tool B, and that’ll get you to Point B’. I’d be interested to know what the biggest limitation is. Are there not conditionals to determine whether a selection of quad faces form something which can be described as a surface for use with UDT bits? basically, how can we reuse great nurbs stuff and apply it to SubD logic.
I’d more than happily try and break something like this.
I was going to try it here, but the problem with a lot of this SubD stuff continues to be the same: even the stuff that should work and we should be able to use to explore new stuff is all a buggy mess.
@Trav here I cannot even rename a named Selection. I’m trying to rename ‘torus_6x5 - Copy’ to ‘torus_6x5_subpatch’ and I can’t. Trying to select a partial length of text to override doe snot work, , using the arrows keys doesn’t work either. Seriously McNeel, shipping software that is tested and that works well is your job, not ours. Ugh…
I tried to simulate the FlowAlongSrf using a ToNurbs converted patch for each saved selection. Even after matching Nurbs UV direction I still get inconsistent results, not what I’d expect in UV direction, or normal direction. Something seems quite broken here, unless I’m missing something obvious?
torus_cylinder_dir_ignored_bug_gf_201204.3dm (732.9 KB)
post this to the gallery please! gorgeous work!!
For sure I will! When it’s really complete and gets the TLC it still needs. Maybe I can try out rendering in Rhino too (I know we ‘have’ cycles, but I still don’t fully understand the implementation to be honest still - just feels easier for me to do it in blender with all options available). Looking at my render again, might need to do something about some of these edges… maybe its just not got the shade-smooth on.
This is my super basic subd flow-er from maybe a couple of hours poking, if that. Obviously nothing really that useful yet, need to decide how I would want this to work first really before going much further.
- Pick SubD faces for a limited domain / subset of a subd to flow to, from a base, maybe use bounding boxes a bit to just ‘guess’ a start plane based on the geometry you want to flow, rather than bothering with defining base surfaces
- Maybe command line based stuff for tweaking scale and rotation of the geometry once it’s morphed over. Like mixing sporph with flowalongsurface. I don’t know.
- Plus could just grasshopper-ify it all for endless tweaking.
I still feel someone with an ounce of python know how could make this much more useful. Posting in the hope someone interested maybe picks it up and runs with it, or at least shows me how I can clean up something othwerwise quite messy.
import rhinoscriptsyntax as rs import Rhino.Geometry as rg import scriptcontext as sc geometry = rs.GetObjects("Select object/s to morph") obj_rh = rs.coercegeometry(geometry) base_srf_guid = rs.GetObject("Select base surface") base_srf_brep = rs.coercegeometry ( base_srf_guid ) base_srf = base_srf_brep.Surfaces  target_srf_guid = rs.GetObject("Pick target subd") target_srf_brep = rs.coercegeometry( target_srf_guid ) def SubDSporph(base, target ): vtx_options = rg.SubDToBrepOptions.ExtraordinaryVertexProcessOption( 2 ) options = rg.SubDToBrepOptions( True, vtx_options ) brep = target.ToBrep( options ) if brep.IsSurface: target_srf = brep.Surfaces  flowalongsubd = rg.Morphs.SporphSpaceMorph(base_srf, target_srf ) return flowalongsubd flowalongsubd = SubDSporph(base_srf, target_srf_brep) for geo in geometry: coerced = rs.coercegeometry(geo) sporphed = rg.Brep.Duplicate(coerced) flowalongsubd.Morph(sporphed) sc.doc.Objects.Add(sporphed)
I’d be particularly interested in how I should match the surface directions.
I just updated Rhino 7 to the latest version, but the “Points” command does not show the mentioned “Undo” option within the command. Was it really implemented yet?
Point: : Added Undo option (RH-61823)
It is fixed here in the latest - it looks like the fix was in early December so… should be 7.2, I would think… I’ll check tomorrow.
I have the latest Version 7 (7.2.21012.11001, 12.1.2021 г.) Commercial. Here is a screenshot while using the “Points” command:
I had it working okay in 7.3 this morning, using the point cloud icon (points).
My Rhino 7 says that it’s up to date and its version is still 7.2.21012.11001 I can’t see any “Undo” option while running the “! _Points” or “! _PointCloud” commands.
If you change upgrade frequency to ‘Service Release Candidate’, rather than service release, and Check Now.
I usually update only when a stable Service release is being released, so I skip the releases candidates. Looks like I will simply wait a bit more for the next SR to come. No big deal, just wanted to test the newly added Undo option in the “Points” command.