curvature continuity question

   13471   12   2
User Avatar
Member
48 posts
Joined: July 2005
Offline
Hello,

I have a couple of NURBS modeling questions.

1. I'd like to connect 2 NURBS grids with a blend between them (basically, rounding a corner). When I place the grids at 90 degrees to each other, with edges nearly touching and apply the stitchSOP I get the connection. However, there seems to be a discontinuity, or crease at the join. I am looking for the correct method to round a corner with curvature continuity?

2. I'd like to connect a tube to a grid with a blend.
I've carved out the first v of my tube and projected it onto the grid and then tried connecting the original tube to the grid using a variety of SOP, none worked properly for me. How is this most easily achieved? Do I need to use the trim number here? I"ve had sucess bridging 2 trims using the trim #'s, but connecting a trim to a primative has got me baffled.

Thank you
User Avatar
Member
639 posts
Joined: July 2005
Offline
Hi Shannon,

1) Have you tried reversing either U or V with a Reverse SOP? Sometimes, this could be an issue.

2) Try Bridge SOP. That'll connect trimmed surface to a tube. Use Carve SOP to carve out a circle from your tube, merge them with your trimmed grid, and append a Bridge SOP afterward. Now, it won't do anything yet. Turn on the “Profile Numbers” icon at the right side of your viewport. This will display the profile number (something like 1.0 1.1). In your Bridge SOP's group, enter one of the profile number, separated by space, and the primitive number of the carved circle (so you have something like this in the group: 1.0 1) This should work. Be careful,though, in your viewport, the Bridged SOP may look really low res. Render it out and I think you should get a very smoothed surfaces. So don't try to kick up the resolution to unnecessary detail.

NURBS in Houdini can still be quite a bit to deal with. I am still hoping that SideFX would make some improvement to the NURBS tools.

Hope that helped.
Alex
User Avatar
Member
48 posts
Joined: July 2005
Offline
Hi Alex,

Thanks for your response. On the 1st point. I tried to reverse the U direction to and it's not what I needed. It seems the ony way I can achelve continuity is by turning on tangency, and thats not what I'm looking for. I'll keep trying though.

On the second point, I've had great sucess using your stated method for bridging 2 projected profiles. However, in this case I cant seem to find a primitive number that works. I got the profile number (0.1 0.0), but I hit the display flag on the carveSOP and turn on primitive numbers and all I can see is a 0. These numbers arent having an effect. What did I miss?

So, here's what Ive got: (wish I could insert a pic of my network)

NURBS grid, NURBS cylinder
cylinder appended with carveSOP (first V extracted, keep original ON)
carve appended with project
project appended with trim
trim merged with carve
merge appended with bridge

I found the profile numbers (0.0 0.1)
I turned on primitive numbers when in the carve sop, however, I cant find the primitive number. I also tried merging with the original tube instead of the carve, though I don't think thats correct. I also tried a bunch of possible numbers, ie. 0.0 1.0 , no luck. Any suggestions?

I'm hoping that I can get these basic modeling operations to work reliably for me because I absolutely love the flexiblity of the proceduralism when modeling. Maya is extremely unforgiving even with its vast NURBS toolset. Sometimes I feel that many of the tools that make up the Maya NURBS modeling toolset are there simply to fix surface problems created by the lack of proceduralism.
User Avatar
Member
4140 posts
Joined: July 2005
Offline
Just a quick suggestion on point 1 - I've found that when you have two edges almost touching as you describe, it's actually quite difficult to get a good result. It's trying to maintain an “integrity” of the two shapes, which can only be accomplished by wild tangential bowing, or with that pinch. Although it might sound a little hacky itself , I've had better success by simply modelling the two grids(in this case) so the edges aren't so close together. I'm able to get a nice rounded curve when I quickly try that here…

Cheers,

JC
John Coldrick
User Avatar
Member
48 posts
Joined: July 2005
Offline
Hey John,

Thanks for the suggestion. It definitely helps a bit. However, I'm still getting what looks like simple positional continuity(visible seam), albeit, with some curvature. I'm curious if curvature continuity is actually an inteded feature of stitch. It seems that the tangent option works wonderfully however the grids are placed. You say that you get a nice smooth surface. I must be missing a param somewhere. I'll keep trying. If its still not happening for me I'll post what I've got. Hopefully someone will point out my mistakes.
Edited by - May 13, 2003 10:25:15
User Avatar
Member
648 posts
Joined: July 2005
Offline
try:
2x nurbs grids (zx and xy) at right angles with
a 0.6 gap (YZ).
feed into a merge.
reverse : swap u v (auto when stitching).
reverse : reverse u (auto when stitching).
stitch : tolerance 1, stitch on, tangent on,
sharp partials off, and play with LR scale handles,
peak : 0.1.

or better yet make a profile curve, copy and skin.

-cpb
User Avatar
Member
48 posts
Joined: July 2005
Offline
Ok, thats how its done. Thank you very much.

Oh and you know what, I missed those damn handles the firt 12 tries.
ops:

On to my next challenge. The grid and tube scenario. Still trying to connect that tube to that grid with a blend. Projection of tube's first v works nicely, however I cant seem to bridge the 2 prims.

For specifics, see 3 or 4 replies prior.
User Avatar
Member
4140 posts
Joined: July 2005
Offline
I wish we could post attachments here! :x

I have a sopnet that does what you're after, I'm going to paste a cmd file here that should be faster that manually talking through the network. I stole this from the 5.0 example files(which many new users don't have access to!). I've hacked it to your particular needs. Cut and paste the following txt to a file, say bridge.cmd, then start a new houdini in the same directory it is saved, open a textport, type

opcd /obj
source bridge.cmd


and you should get something useful to examine/play with. Here goes - I hope! Grab everything from the opening comment line to the end - excluding my sig of course I can grab and paste from Opera in Linux into a text file with the proper carriage returns - hopefully you can do the same on your platform. This is the fastest way, but if you can't get it to work, let me know and I can talk through the net - it's only 10 OPs. Oh yeah - there's a twist SOP in there to show some funky deforms, but you don't need it…8)

Cheers,

J.C.

####################################
# Automatically generated script: Tuesday May 13, 11:07
\set noalias = 1
set saved_path = `execute(“oppwf”)`
opcf /obj

# Node bridge_two_grids
opadd -n geo bridge_two_grids
oplocate -x 8.50469 -y 3.65021 bridge_two_grids
opparm bridge_two_grids stdswitcher ( 0 0 0 0 0 ) keeppos ( off ) pre_xform ( clean ) xOrd ( srt ) rOrd ( xyz ) t ( 0 0 5 ) r ( 0 0 0 ) s ( 1 1 1 ) p ( 0 0 0 ) scale ( 2 ) lookatpath ( “” ) lookup ( on ) pathobjpath ( “” ) roll ( 0 ) pos ( 0 ) pathorient ( 1 ) up ( 0 1 0 ) bank ( 1 ) shadespace ( “” ) dispspace ( “” ) shop_surfacepath ( “” ) shop_photonpath ( “” ) shop_displacepath ( “” ) lightmask ( * ) reflectmask ( * ) smooth ( on ) nobackface ( off ) autogen ( off ) reflmap ( ‘/usr/tmp/$OS.pic’ ) reflres ( 128 ) shading_switcher ( 0 0 0 ) ri_color ( off ) ri_Cs ( 1 1 1 ) ri_Os ( 1 1 1 ) ri_Xmit ( opaque ) rishader ( ‘“plastic”’ ) ridisplace ( “” ) riinterior ( “” ) shop_surfaceshadowpath ( “” ) shop_fogpath ( “” ) shop_backgroundpath ( “” ) shop_photonvolumepath ( “” ) shop_contourpath ( “” ) soundmat ( “” ) soundchop ( “” ) genshader ( “” ) gendisplace ( “” ) geninterior ( “” ) material ( _no_mATERIAL_ ) instancepath ( “” ) ptinstance ( off ) partinstancepath ( “” ) detail ( off ) detail_file ( “” ) detail_mantraproc ( “” ) detail_ribproc ( “” ) detail_blur ( off ) detail_min ( -1 -1 -1 ) detail_max ( 1 1 1 ) shop_geometrypath ( “” ) blur ( inherit ) tdisplay ( off ) display ( 1 ) tmatte ( off ) matte ( 0 ) tphantom ( off ) phantom ( 0 ) trbounce ( off ) rbounce ( 4 ) ttbounce ( off ) tbounce ( 10 ) trclip ( off ) rclip ( 0.001 ) tdbound ( off ) dbound ( 1 ) tshadequality ( off ) shadequality ( 1 ) lod ( 1 ) causticmode ( 3 ) gillummode ( 3 ) preinclude ( “” ) postinclude ( “” ) shadowquality ( 1 ) reflectquality ( 1 ) rest ( “” ) active ( 1 ) mass ( 1 ) bounce ( 1 ) fdynamic ( 0 ) fstatic ( 0 ) com ( 0 0 0 ) velocity ( 0 0 0 ) angvelaxis ( 0 0 1 ) angvelangle ( 0 ) popgeo ( _render_SOP_ ) cglod ( 1 ) itensor ( points ) itsamples ( 100 ) geochanges ( off ) use_dcolor ( on ) dcolor ( 1 1 1 ) picking ( on ) pickscript ( “” )
chlock bridge_two_grids -*
opcolor -c 0.7 0.7 0.7 bridge_two_grids
opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c off -C on -p on -e on -b off -S on -x off bridge_two_grids
opcf bridge_two_grids

# Node NURBs_circle
opadd -n circle NURBs_circle
oplocate -x 3.18192 -y 6.75945 NURBs_circle
chadd -t 0 4.96667 NURBs_circle beginangle
chkey -t 0 -v 0 -m 0 -a 1 -F ‘cubic()’ NURBs_circle/beginangle
chkey -t 4.96667 -v 0 -m 0 -a 1 NURBs_circle/beginangle
chadd -t 0 4.96667 NURBs_circle endangle
chkey -t 0 -v 185 -m 0 -a 1 -F ‘cubic()’ NURBs_circle/endangle
chkey -t 4.96667 -v 360 -m 0 -a 1 NURBs_circle/endangle
opparm NURBs_circle type ( nurbs ) orient ( xy ) rad ( 0.3 0.3 ) t ( 0 0 0 ) order ( 4 ) divs ( 5 ) arc ( closed ) angle ( beginangle endangle ) imperfect ( on )
chlock NURBs_circle -*
opcolor -c 0.7 0.7 0.7 NURBs_circle
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off NURBs_circle

# Node NURBs_grid
opadd -n grid NURBs_grid
oplocate -x 5.59034 -y 7.14907 NURBs_grid
opparm NURBs_grid type ( nurbs ) surftype ( quads ) orient ( xy ) size ( 1 1 ) t ( 0 0 0 ) rows ( 10 ) cols ( 10 ) orderu ( 4 ) orderv ( 4 ) interpu ( on ) interpv ( on )
chlock NURBs_grid -*
opcolor -c 0.7 0.7 0.7 NURBs_grid
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off NURBs_grid

# Node project_circle_on_grid
opadd -n project project_circle_on_grid
oplocate -x 5.04576 -y 5.42196 project_circle_on_grid
opparm project_circle_on_grid facegroup ( “” ) surfgroup ( “” ) cycle ( allseq ) switcher ( 0 0 ) axis ( zaxis ) vector ( 0 0 1 ) projside ( closest ) sdivs ( 6 ) rtolerance ( 0.01 ) ftolerance ( 0.01 ) uvgap ( 0.1 ) order ( 4 ) csharp ( on ) accurate ( off ) ufrom ( uvx ) vfrom ( uvy ) userange ( on ) urange ( 0.1 0.9 ) vrange ( 0.1 0.9 ) maptype ( unif )
chlock project_circle_on_grid -*
opcolor -c 0.7 0.7 0.7 project_circle_on_grid
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C on -p off -e on -b off project_circle_on_grid

# Node tube1
opadd -n tube tube1
oplocate -x 7.51215 -y 6.90805 tube1
opparm tube1 stdswitcher ( 0 0 ) type ( nurbs ) surftype ( quads ) orient ( z ) t ( 0 0 0.4 ) rad ( 0.1 0.1 ) height ( 0.3 ) imperfect ( on ) rows ( 2 ) cols ( 10 ) orderu ( 4 ) orderv ( 2 ) cap ( off )
chlock tube1 -*
opcolor -c 0.7 0.7 0.7 tube1
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off tube1

# Node merge1
opadd -n merge merge1
oplocate -x 5.92425 -y 3.76641 merge1
opparm merge1
chlock merge1 -*
opcolor -c 0.7 0.7 0.7 merge1
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off merge1

# Node carve1
opadd -n carve carve1
oplocate -x 7.06822 -y 5.18356 carve1
opparm carve1 group ( “” ) firstu ( off ) domainu1 ( 0.25 ) secondu ( off ) domainu2 ( 0.75 ) firstv ( off ) domainv1 ( 1 ) secondv ( on ) domainv2 ( 1 ) onlybreakpoints ( off off ) divsu ( 2 ) divsv ( 2 ) allubreakpoints ( off ) allvbreakpoints ( off ) stdswitcher ( 1 1 ) keepin ( off ) keepout ( off ) extractop ( xprofile ) keepOriginal ( off )
chlock carve1 -*
opcolor -c 0.7 0.7 0.7 carve1
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off carve1

# Node twist_for_deformation1
opadd -n twist twist_for_deformation1
oplocate -x 6.81696 -y 2.51879 twist_for_deformation1
opparm twist_for_deformation1 group ( “” ) op ( twist ) paxis ( x ) saxis ( y ) p ( 0 0 0 ) strength ( 0 ) roll ( 1 )
chlock twist_for_deformation1 -*
opcolor -c 0.7 0.7 0.7 twist_for_deformation1
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off twist_for_deformation1

# Node bridge_the_two_profiles1
opadd -n bridge bridge_the_two_profiles1
oplocate -x 7.31211 -y 1.20408 bridge_the_two_profiles1
opparm bridge_the_two_profiles1 group ( *.0 ) bridge ( all ) inc ( 2 ) order ( 4 ) stdswitcher ( 0 0 ) isodivs ( 5 ) frenet ( frenet ) circular ( off ) rotatet ( 0 0 0 ) scalet ( -0.53 1 0.8 ) curvature ( on ) scalec ( 0 0 0 ) sdivs ( 6 ) tolerance ( 0.01 ) csharp ( off )
chlock bridge_the_two_profiles1 -*
opcolor -c 0.7 0.7 0.7 bridge_the_two_profiles1
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off bridge_the_two_profiles1

# Node trim_the_holes1
opadd -n trim trim_the_holes1
oplocate -x 6.97063 -y 0.230853 trim_the_holes1
chadd -t 0 4.96667 trim_the_holes1 altitude
chkey -t 0 -v 0 -m 0 -a 1 -F ‘$ALTITUDE’ trim_the_holes1/altitude
chkey -t 4.96667 -v 0 -m 0 -a 1 trim_the_holes1/altitude
opparm trim_the_holes1 group ( “” ) optype ( keepout ) individual ( on ) bigloop ( off ) trimtol ( 1e-04 ) altitude ( altitude )
chlock trim_the_holes1 -*
opcolor -c 0.7 0.7 0.7 trim_the_holes1
opset -d off -r off -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off trim_the_holes1

# Node choke_the_profiles1
opadd -n primitive choke_the_profiles1
oplocate -x 7.32919 -y -1.30582 choke_the_profiles1
chadd -t 0 4.96667 choke_the_profiles1 px
chkey -t 0 -v 0 -m 0 -a 1 -F ‘$CEX’ choke_the_profiles1/px
chkey -t 4.96667 -v 0 -m 0 -a 1 choke_the_profiles1/px
chadd -t 0 4.96667 choke_the_profiles1 py
chkey -t 0 -v 0 -m 0 -a 1 -F ‘$CEY’ choke_the_profiles1/py
chkey -t 4.96667 -v 0 -m 0 -a 1 choke_the_profiles1/py
chadd -t 0 4.96667 choke_the_profiles1 pz
chkey -t 0 -v 0 -m 0 -a 1 -F ‘$CEZ’ choke_the_profiles1/pz
chkey -t 4.96667 -v 0 -m 0 -a 1 choke_the_profiles1/pz
chadd -t 0 4.96667 choke_the_profiles1 upvectorx
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$NX’ choke_the_profiles1/upvectorx
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/upvectorx
chadd -t 0 4.96667 choke_the_profiles1 upvectory
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$NY’ choke_the_profiles1/upvectory
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/upvectory
chadd -t 0 4.96667 choke_the_profiles1 upvectorz
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$NZ’ choke_the_profiles1/upvectorz
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/upvectorz
chadd -t 0 4.96667 choke_the_profiles1 diffr
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$CR’ choke_the_profiles1/diffr
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/diffr
chadd -t 0 4.96667 choke_the_profiles1 diffg
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$CG’ choke_the_profiles1/diffg
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/diffg
chadd -t 0 4.96667 choke_the_profiles1 diffb
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$CB’ choke_the_profiles1/diffb
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/diffb
chadd -t 0 4.96667 choke_the_profiles1 alpha
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$CA’ choke_the_profiles1/alpha
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/alpha
chadd -t 0 4.96667 choke_the_profiles1 crease
chkey -t 0 -v 0 -m 0 -a 1 -F ‘$CREASE’ choke_the_profiles1/crease
chkey -t 4.96667 -v 0 -m 0 -a 1 choke_the_profiles1/crease
chadd -t 0 4.96667 choke_the_profiles1 metaweight
chkey -t 0 -v 1 -m 0 -a 1 -F ‘$WEIGHT’ choke_the_profiles1/metaweight
chkey -t 4.96667 -v 1 -m 0 -a 1 choke_the_profiles1/metaweight
chadd -t 0 4.96667 choke_the_profiles1 prblur
chkey -t 0 -v 0.0333333 -m 0 -a 1 -F ‘1/$FPS’ choke_the_profiles1/prblur
chkey -t 4.96667 -v 0.0333333 -m 0 -a 1 choke_the_profiles1/prblur
opparm choke_the_profiles1 group ( *.0 ) templateGrp ( “” ) stdswitcher ( 0 0 0 0 0 ) doxform ( on ) dorot ( off ) xOrd ( srt ) rOrd ( xyz ) t ( 0 0 0 ) r ( 0 0 0 ) s ( 0.995 0.995 0.995 ) p ( px py pz ) lookatpath ( “” ) upvector ( upvectorx upvectory upvectorz ) doclr ( off ) diff ( diffr diffg diffb ) doalpha ( off ) alpha ( alpha ) docrease ( off ) crease ( crease ) dotexture ( off ) texture ( “” ) pshapeu ( off ) pshapev ( off ) closeu ( sameclosure ) closev ( sameclosure ) clampu ( sameclamp ) clampv ( sameclamp ) vtxsort ( samevertex ) vtxuoff ( 0 ) vtxvoff ( 0 ) doweight ( on ) metaweight ( metaweight ) doprender ( off ) prtype ( sphere ) prsize ( 0.05 ) prblur ( prblur ) prsphere ( on )
chlock choke_the_profiles1 -*
opcolor -c 0.7 0.7 0.7 choke_the_profiles1
opset -d on -r on -h off -f off -y off -t off -l off -s off -u off -c off -C off -p off -e on -b off choke_the_profiles1
opcf ..

opcf /obj
opcf bridge_two_grids
opwire -n NURBs_circle -0 project_circle_on_grid
opwire -n NURBs_grid -1 project_circle_on_grid
opwire -n project_circle_on_grid -0 merge1
opwire -n carve1 -1 merge1
opwire -n tube1 -0 carve1
opwire -n merge1 -0 twist_for_deformation1
opwire -n twist_for_deformation1 -0 bridge_the_two_profiles1
opwire -n bridge_the_two_profiles1 -0 trim_the_holes1
opwire -n trim_the_holes1 -0 choke_the_profiles1
opcf ..
opcf $saved_path
John Coldrick
User Avatar
Member
48 posts
Joined: July 2005
Offline
John, that was exactly what I needed to see.

I found my error. In the CarveSOP, I too was extracting the 1st V. However, I failed to set the extract type to Iso Profile. Hence, I could not find the the “tube” profile and the *.0 param in bridge was doing nothing. Doh!

Thanks again.
User Avatar
Member
4140 posts
Joined: July 2005
Offline
Glad it worked out!

Cheers,

J.C.
John Coldrick
User Avatar
Member
48 posts
Joined: July 2005
Offline
I'm gonna try using a 5 corner patch type solution to this problem as well. Rather than using the profiles and bridge sop. Have you ever tried, or had success using this method? I guess ultimately, I'd need to carve up the prims and use stitchSOP to achieve this.
User Avatar
Member
4140 posts
Joined: July 2005
Offline
Hmmm…not entirely sure what you mean by that, which I guess answers your question. Anyway, give it a shot and report back if you have any problems…

Cheers,

J.C>
John Coldrick
User Avatar
Member
48 posts
Joined: July 2005
Offline
Hey John,

It's just an alternative to the usual trim method.

check this pic.


I'm sure you can see the value in that topology over using trim.
  • Quick Links