Cool, thanks a lot, I'll look for the command line arguments. I guess Megascans plugin doesn't set those up.
cheers
calin
Found 44 posts.
Search results Show results as topic list.
3rd Party » Pixar rounded cube issue
- calin
- 114 posts
- Offline
3rd Party » Pixar rounded cube issue
- calin
- 114 posts
- Offline
Hey there,
When I use pixar rounded cube with megascans surface and change the frequency to tile the texture I get black border around the texture. It looks like it's not repeating the texture, however I don't know how to fix this since the multi texture node doesn't have any wrap/repeat parameter.
Please let me know how to fix this.
cheers
calin
When I use pixar rounded cube with megascans surface and change the frequency to tile the texture I get black border around the texture. It looks like it's not repeating the texture, however I don't know how to fix this since the multi texture node doesn't have any wrap/repeat parameter.
Please let me know how to fix this.
cheers
calin
Technical Discussion » Houdini HD weirdness and other issues.
- calin
- 114 posts
- Offline
I don't know if this is the right forum to ask Mac App HD questions but I have a couple very annoying little bugs.
First one: Double click on the .hipnc file will attempt to open Houdini apprentice HD Escape and that will fail with a license problem. I always wonder why there is even an escape version of houdini in apprentice mode. I like to think most people will go for the master, plus you can't buy HD escape only.
Second one: I'm on the mac, and macs have only one mouse button below the trackpad. I don't know why and I don't really care, that is for the apple designers, but what I do care is my ability to change the shortcuts to use meta keys + single mouse button to perform RMB and MMB just like in Maya. I know, I know I've said Maya but maya has this option of using only one button mouse and that turns the apple key, option and control keys into RMB, MMB.
Third one and the most annoying: Text fields or parameter fields in general are not updating. Editing those fields is always a gamble, sometimes you double click to select the whole text then you type new text but all you see is a black parm field. Then you scroll the parm pane or do something to force the update and you have the surprise that the old text is still there and the new one just got appended to the old one. this will force Houdini to kick in the expression mode which you have to get rid of.
cheers
calin
First one: Double click on the .hipnc file will attempt to open Houdini apprentice HD Escape and that will fail with a license problem. I always wonder why there is even an escape version of houdini in apprentice mode. I like to think most people will go for the master, plus you can't buy HD escape only.
Second one: I'm on the mac, and macs have only one mouse button below the trackpad. I don't know why and I don't really care, that is for the apple designers, but what I do care is my ability to change the shortcuts to use meta keys + single mouse button to perform RMB and MMB just like in Maya. I know, I know I've said Maya but maya has this option of using only one button mouse and that turns the apple key, option and control keys into RMB, MMB.
Third one and the most annoying: Text fields or parameter fields in general are not updating. Editing those fields is always a gamble, sometimes you double click to select the whole text then you type new text but all you see is a black parm field. Then you scroll the parm pane or do something to force the update and you have the surprise that the old text is still there and the new one just got appended to the old one. this will force Houdini to kick in the expression mode which you have to get rid of.
cheers
calin
Houdini Lounge » stretchy spine on vanillarigging.blogspot.com
- calin
- 114 posts
- Offline
You could do as Rob suggested or if you are a fan of all in one kind of a rig you could copy metaballs instead of cubes and used the meta capture sop to do the deformation. The possibilities are endless, you could copy nulls onto each point then use the muscle object. That way you could tweak the shape of the body off spine sort of speak.
cheers
calin
ps. I'll show the capturing process, “the Houdini way”, after I'm done with all the rigging bits.
cheers
calin
ps. I'll show the capturing process, “the Houdini way”, after I'm done with all the rigging bits.
Houdini Lounge » stretchy spine on vanillarigging.blogspot.com
- calin
- 114 posts
- Offline
I'll try to post as often as I can. If you're looking for something in particular please let me know
cheers
calin
cheers
calin
Houdini Lounge » stretchy spine on vanillarigging.blogspot.com
- calin
- 114 posts
- Offline
Hi,
I posted some files on my blog if somebody is interested how to do a stretchy spine.
Any feedback is welcomed
cheers
calin
I posted some files on my blog if somebody is interested how to do a stretchy spine.
Any feedback is welcomed
cheers
calin
Technical Discussion » Maya Python to Houdini Python
- calin
- 114 posts
- Offline
Hi,
I'm trying to port some maya python rigging scripts to houdini python scripts to post it on my rigging blog as examples, shameless plug follows: Please visit my blog at
http://vanillarigging.blogspot.com [vanillarigging.blogspot.com]
If all goes well maybe start some sort of transition guide or repository about python in maya and houdini.
I know that sort of thing will help the houdini community.
Anyway I'm kind of lost at the first attempt to get a selection out of houdini.
Here is maya code
“maya.cmds.ls(selection=True)”
which will return a list of all the objects selected, transforms, shaders, custom nodes you name it.
I was advised that I could do something like this in houdini
loop trough all children of /obj and test for selection with hou.Node.isSelected().
This works but I think this method has some big issues. First is the loop, if I have thousands of objects it might take a while . The bigger issue to me id the fact that this seems to go backwards, instead of saying give me the selection it says give me all the objects then take the selected out.
Could someone (Luke, maybe) please point me to a better, simpler way of getting my selection from houdini, wink wink, see the simplicity of mayas
cheers
calin
ps. I'm sure tons of question will follow because here is the script I'm trying to port:
import maya.cmds as mc
# Build the UI
def startUI():
print ‘starting the UI’
# end of UI
def createJoints(nrJoints, boneLength):
# create a number of joints, ‘nrJoints’ along the Y axis
# the joints will be spread apart by the ‘boneLength’ value
print ‘Create Joints’
jointsList =
# create the root joint then orient it to point in +Y
jointName = mc.joint(position0,0,0), name='spineJoint1', orientation-90,0,90))
jointsList.append(jointName)
for i in range(2, nrJoints):
jointName = mc.joint(positionboneLength,0,0), relative=True, name='spineJoint' + str(i))
jointsList.append(jointName)
return jointsList
def addBoneLengthToJoints(jointsList):
# add an ‘originalLength’ attribute to every joint that follows after root
# that stores the original length. Since the translate X is taken as original
# length the joints must be oriented along X for custon skeletons
print ‘Add original bone length attribute to joints’
selection = mc.ls(selection=True)
# take the root joint out of the joint list because there is no bone length
# on the root joint
stretchJointsList = jointsList
for i in stretchJointsList:
mc.select(i, replace=True)
tempXvalue = mc.getAttr(i + ‘.translateX’)
mc.addAttr(longName='originalLength', attributeType='double', defaultValue=tempXvalue)
mc.setAttr(i + ‘.originalLength’, lock=True)
return stretchJointsList
def createSpineHierarchy():
# create a spine hierarchy where the joints are unde the skeleton group,
# the controls under controls group and everything else is under the helpers group
print ‘Create spine hierarchy’
spineRig = mc.createNode('transform', name='spineRig')
spineSkeleton = mc.createNode('transform', name='spineSkeleton', parent=spineRig)
spineControls = mc.createNode('transform', name='spineControls', parent=spineRig)
spineHelpers = mc.createNode('transform', name='spineHelpers', parent=spineRig)
mc.setAttr('spineSkeleton.template', 1)
spineHierarchyList =
return spineHierarchyList
def buildStretchySpine(spineJointsList, stretchJointsList):
# create the stretchy spine setup based on the provided diagram
print ‘Build stretchy spine’
# adding spline IK solver to the bones
print ‘Add IK solver’
mc.ikHandle(name='spineIkHandle', startJoint=spineJointsList, endEffector=spineJointsList, solver='ikSplineSolver', numSpans=2)
spineSolverCurveShape = mc.ikHandle('spineIkHandle', query=True, curve=True)
spineSolverCurve = mc.listRelatives(spineSolverCurveShape, parent=True)
mc.setAttr(spineSolverCurve + ‘.template’, 1)
spineCurve = ‘spineCurve’
mc.rename(spineSolverCurve, spineCurve)
mc.parent(spineCurve, ‘spineHelpers’)
# create the curveInfo node that will compute the arclen of the spine
print “Add cruveInfo node that computes the spine's length”
spineCurveInfoNode = mc.arclen(spineCurve, constructionHistory=True)
spineLengthNode = ‘spineComputeCurveLength’
mc.rename(spineCurveInfoNode, spineLengthNode)
# store the original curve length in the ‘originalLength’ attribute
print “Add spine curve original length attribute”
spineCurveOrigLength = mc.getAttr(spineLengthNode + ‘.arcLength’)
mc.select(spineCurve, replace=True)
mc.addAttr(longName='originalLength', attributeType='double', defaultValue=spineCurveOrigLength)
mc.setAttr(spineCurve + ‘.originalLength’, lock=True)
mc.parent('spineIkHandle', ‘spineHelpers’)
mc.setAttr('spineIkHandle.visibility', 0)
# create a locator which will be a control for spine options, stretchiness
# we default this value to .2 which means that the spine will stretch and
# compress with .2 of the difference between the original length and the
# current length
print ‘Create a control for the spine options’
spineOptions = mc.createNode('transform', name='spineOptionsCtrl', parent='spineControls')
mc.createNode('locator', name='spineOptionsCtrlShape', parent=spineOptions)
mc.setAttr(spineOptions + ‘.translateX’, 4)
mc.parentConstraint('spineJoint1', spineOptions, maintainOffset=True)
print ‘Add spine options attributes’
mc.select(spineOptions, replace=True)
mc.addAttr(longName='spineStretchiness', attributeType='double', minValue=0, maxValue=1, defaultValue=0.2, keyable=True)
# create the stretchiness network which mainly consists of adding shading nodes
# and connect attributes
print ‘Add stretchiness network’
# create a plusMinusAverage node. this node will take the current length
# and subtract the original length to find out with how much the curve changed
spineSubtractOriginalCurveLengthNode = mc.shadingNode('plusMinusAverage', asUtility=True, name='spineSubtractOriginalCurveLength')
mc.connectAttr(spineLengthNode + ‘.arcLength’, spineSubtractOriginalCurveLengthNode + '.input1D', force=True)
mc.connectAttr(spineCurve + ‘.originalLength’, spineSubtractOriginalCurveLengthNode + '.input1D', force=True)
mc.setAttr(spineSubtractOriginalCurveLengthNode + ‘.operation’, 2)
# create a multiplyDivide node that multiplies the result from the subtract node with
# the spine stretchiness to find out what's the length we care about
spineMultiplyStretchinessNode = mc.shadingNode('multiplyDivide', asUtility=True, name='spineMultiplyStretchiness')
mc.connectAttr(spineSubtractOriginalCurveLengthNode + ‘.output1D’, spineMultiplyStretchinessNode + ‘.input1X’, force=True)
mc.connectAttr(spineOptions + ‘.spineStretchiness’, spineMultiplyStretchinessNode + ‘.input2X’, force=True)
# create a plusMinusAverage node and we add back the original curve to find out the
# total length of the curve we have to stretch the bones
spineAddOriginalCurveLengthNode = mc.shadingNode('plusMinusAverage', asUtility=True, name='spineAddOriginalCurveLength')
mc.connectAttr(spineMultiplyStretchinessNode + ‘.outputX’, spineAddOriginalCurveLengthNode + '.input1D', force=True)
mc.connectAttr(spineCurve + ‘.originalLength’, spineAddOriginalCurveLengthNode + '.input1D', force=True)
# create a multiplyDivide node and divide the total length we care about with the original
# length to find out the ratio.
spineDivideByOriginalCurveLengthNode = mc.shadingNode('multiplyDivide', asUtility=True, name='spineDivideByOriginalCurveLength')
mc.connectAttr(spineAddOriginalCurveLengthNode + ‘.output1D’, spineDivideByOriginalCurveLengthNode + ‘.input1X’, force=True)
mc.connectAttr(spineCurve + ‘.originalLength’, spineDivideByOriginalCurveLengthNode + ‘.input2X’, force=True)
mc.setAttr(spineDivideByOriginalCurveLengthNode + ‘.operation’, 2)
# once we know the ration we have to create a multiplyDivide node for each joint
# and multyply the original bone length with the computed ratio
print “Change the bone Tx value to accomodate stretchiness”
for i in stretchJointsList:
spineMultiplyByOriginalBoneLengthNode = mc.shadingNode('multiplyDivide', asUtility=True, name='spine' + i + ‘MultiplyOriginalLength’)
mc.connectAttr(spineDivideByOriginalCurveLengthNode + ‘.outputX’, spineMultiplyByOriginalBoneLengthNode + ‘.input1X’, force=True)
mc.connectAttr(i + ‘.originalLength’, spineMultiplyByOriginalBoneLengthNode + ‘.input2X’, force=True)
mc.connectAttr(spineMultiplyByOriginalBoneLengthNode + ‘.outputX’, i + ‘.translateX’, force=True)
def createClusters():
print ‘Create clusters’
for i in range(0,5):
cv = 'spineCurve.cv' %i
cluster = mc.cluster(cv, name='spineCurveCluster' + str(i))
mc.parent(cluster, ‘spineHelpers’)
def main(createJointsOption, nrJoints, boneLength):
if createJointsOption==1:
spineJointsList = createJoints(nrJoints, 2)
spineHierarchyList = createSpineHierarchy()
mc.parent(spineJointsList, spineHierarchyList)
stretchJointsList = addBoneLengthToJoints(spineJointsList)
buildStretchySpine(spineJointsList, stretchJointsList)
createClusters()
main(1, 20, 2)
I'm trying to port some maya python rigging scripts to houdini python scripts to post it on my rigging blog as examples, shameless plug follows: Please visit my blog at
http://vanillarigging.blogspot.com [vanillarigging.blogspot.com]
If all goes well maybe start some sort of transition guide or repository about python in maya and houdini.
I know that sort of thing will help the houdini community.
Anyway I'm kind of lost at the first attempt to get a selection out of houdini.
Here is maya code
“maya.cmds.ls(selection=True)”
which will return a list of all the objects selected, transforms, shaders, custom nodes you name it.
I was advised that I could do something like this in houdini
loop trough all children of /obj and test for selection with hou.Node.isSelected().
This works but I think this method has some big issues. First is the loop, if I have thousands of objects it might take a while . The bigger issue to me id the fact that this seems to go backwards, instead of saying give me the selection it says give me all the objects then take the selected out.
Could someone (Luke, maybe) please point me to a better, simpler way of getting my selection from houdini, wink wink, see the simplicity of mayas
cheers
calin
ps. I'm sure tons of question will follow because here is the script I'm trying to port:
import maya.cmds as mc
# Build the UI
def startUI():
print ‘starting the UI’
# end of UI
def createJoints(nrJoints, boneLength):
# create a number of joints, ‘nrJoints’ along the Y axis
# the joints will be spread apart by the ‘boneLength’ value
print ‘Create Joints’
jointsList =
# create the root joint then orient it to point in +Y
jointName = mc.joint(position0,0,0), name='spineJoint1', orientation-90,0,90))
jointsList.append(jointName)
for i in range(2, nrJoints):
jointName = mc.joint(positionboneLength,0,0), relative=True, name='spineJoint' + str(i))
jointsList.append(jointName)
return jointsList
def addBoneLengthToJoints(jointsList):
# add an ‘originalLength’ attribute to every joint that follows after root
# that stores the original length. Since the translate X is taken as original
# length the joints must be oriented along X for custon skeletons
print ‘Add original bone length attribute to joints’
selection = mc.ls(selection=True)
# take the root joint out of the joint list because there is no bone length
# on the root joint
stretchJointsList = jointsList
for i in stretchJointsList:
mc.select(i, replace=True)
tempXvalue = mc.getAttr(i + ‘.translateX’)
mc.addAttr(longName='originalLength', attributeType='double', defaultValue=tempXvalue)
mc.setAttr(i + ‘.originalLength’, lock=True)
return stretchJointsList
def createSpineHierarchy():
# create a spine hierarchy where the joints are unde the skeleton group,
# the controls under controls group and everything else is under the helpers group
print ‘Create spine hierarchy’
spineRig = mc.createNode('transform', name='spineRig')
spineSkeleton = mc.createNode('transform', name='spineSkeleton', parent=spineRig)
spineControls = mc.createNode('transform', name='spineControls', parent=spineRig)
spineHelpers = mc.createNode('transform', name='spineHelpers', parent=spineRig)
mc.setAttr('spineSkeleton.template', 1)
spineHierarchyList =
return spineHierarchyList
def buildStretchySpine(spineJointsList, stretchJointsList):
# create the stretchy spine setup based on the provided diagram
print ‘Build stretchy spine’
# adding spline IK solver to the bones
print ‘Add IK solver’
mc.ikHandle(name='spineIkHandle', startJoint=spineJointsList, endEffector=spineJointsList, solver='ikSplineSolver', numSpans=2)
spineSolverCurveShape = mc.ikHandle('spineIkHandle', query=True, curve=True)
spineSolverCurve = mc.listRelatives(spineSolverCurveShape, parent=True)
mc.setAttr(spineSolverCurve + ‘.template’, 1)
spineCurve = ‘spineCurve’
mc.rename(spineSolverCurve, spineCurve)
mc.parent(spineCurve, ‘spineHelpers’)
# create the curveInfo node that will compute the arclen of the spine
print “Add cruveInfo node that computes the spine's length”
spineCurveInfoNode = mc.arclen(spineCurve, constructionHistory=True)
spineLengthNode = ‘spineComputeCurveLength’
mc.rename(spineCurveInfoNode, spineLengthNode)
# store the original curve length in the ‘originalLength’ attribute
print “Add spine curve original length attribute”
spineCurveOrigLength = mc.getAttr(spineLengthNode + ‘.arcLength’)
mc.select(spineCurve, replace=True)
mc.addAttr(longName='originalLength', attributeType='double', defaultValue=spineCurveOrigLength)
mc.setAttr(spineCurve + ‘.originalLength’, lock=True)
mc.parent('spineIkHandle', ‘spineHelpers’)
mc.setAttr('spineIkHandle.visibility', 0)
# create a locator which will be a control for spine options, stretchiness
# we default this value to .2 which means that the spine will stretch and
# compress with .2 of the difference between the original length and the
# current length
print ‘Create a control for the spine options’
spineOptions = mc.createNode('transform', name='spineOptionsCtrl', parent='spineControls')
mc.createNode('locator', name='spineOptionsCtrlShape', parent=spineOptions)
mc.setAttr(spineOptions + ‘.translateX’, 4)
mc.parentConstraint('spineJoint1', spineOptions, maintainOffset=True)
print ‘Add spine options attributes’
mc.select(spineOptions, replace=True)
mc.addAttr(longName='spineStretchiness', attributeType='double', minValue=0, maxValue=1, defaultValue=0.2, keyable=True)
# create the stretchiness network which mainly consists of adding shading nodes
# and connect attributes
print ‘Add stretchiness network’
# create a plusMinusAverage node. this node will take the current length
# and subtract the original length to find out with how much the curve changed
spineSubtractOriginalCurveLengthNode = mc.shadingNode('plusMinusAverage', asUtility=True, name='spineSubtractOriginalCurveLength')
mc.connectAttr(spineLengthNode + ‘.arcLength’, spineSubtractOriginalCurveLengthNode + '.input1D', force=True)
mc.connectAttr(spineCurve + ‘.originalLength’, spineSubtractOriginalCurveLengthNode + '.input1D', force=True)
mc.setAttr(spineSubtractOriginalCurveLengthNode + ‘.operation’, 2)
# create a multiplyDivide node that multiplies the result from the subtract node with
# the spine stretchiness to find out what's the length we care about
spineMultiplyStretchinessNode = mc.shadingNode('multiplyDivide', asUtility=True, name='spineMultiplyStretchiness')
mc.connectAttr(spineSubtractOriginalCurveLengthNode + ‘.output1D’, spineMultiplyStretchinessNode + ‘.input1X’, force=True)
mc.connectAttr(spineOptions + ‘.spineStretchiness’, spineMultiplyStretchinessNode + ‘.input2X’, force=True)
# create a plusMinusAverage node and we add back the original curve to find out the
# total length of the curve we have to stretch the bones
spineAddOriginalCurveLengthNode = mc.shadingNode('plusMinusAverage', asUtility=True, name='spineAddOriginalCurveLength')
mc.connectAttr(spineMultiplyStretchinessNode + ‘.outputX’, spineAddOriginalCurveLengthNode + '.input1D', force=True)
mc.connectAttr(spineCurve + ‘.originalLength’, spineAddOriginalCurveLengthNode + '.input1D', force=True)
# create a multiplyDivide node and divide the total length we care about with the original
# length to find out the ratio.
spineDivideByOriginalCurveLengthNode = mc.shadingNode('multiplyDivide', asUtility=True, name='spineDivideByOriginalCurveLength')
mc.connectAttr(spineAddOriginalCurveLengthNode + ‘.output1D’, spineDivideByOriginalCurveLengthNode + ‘.input1X’, force=True)
mc.connectAttr(spineCurve + ‘.originalLength’, spineDivideByOriginalCurveLengthNode + ‘.input2X’, force=True)
mc.setAttr(spineDivideByOriginalCurveLengthNode + ‘.operation’, 2)
# once we know the ration we have to create a multiplyDivide node for each joint
# and multyply the original bone length with the computed ratio
print “Change the bone Tx value to accomodate stretchiness”
for i in stretchJointsList:
spineMultiplyByOriginalBoneLengthNode = mc.shadingNode('multiplyDivide', asUtility=True, name='spine' + i + ‘MultiplyOriginalLength’)
mc.connectAttr(spineDivideByOriginalCurveLengthNode + ‘.outputX’, spineMultiplyByOriginalBoneLengthNode + ‘.input1X’, force=True)
mc.connectAttr(i + ‘.originalLength’, spineMultiplyByOriginalBoneLengthNode + ‘.input2X’, force=True)
mc.connectAttr(spineMultiplyByOriginalBoneLengthNode + ‘.outputX’, i + ‘.translateX’, force=True)
def createClusters():
print ‘Create clusters’
for i in range(0,5):
cv = 'spineCurve.cv' %i
cluster = mc.cluster(cv, name='spineCurveCluster' + str(i))
mc.parent(cluster, ‘spineHelpers’)
def main(createJointsOption, nrJoints, boneLength):
if createJointsOption==1:
spineJointsList = createJoints(nrJoints, 2)
spineHierarchyList = createSpineHierarchy()
mc.parent(spineJointsList, spineHierarchyList)
stretchJointsList = addBoneLengthToJoints(spineJointsList)
buildStretchySpine(spineJointsList, stretchJointsList)
createClusters()
main(1, 20, 2)
Technical Discussion » Muscle Blend question
- calin
- 114 posts
- Offline
We moved away from the additional profiles because we didn't want to hardcode 2 or 3 or any fixed number of profiles. Now you can animate the muscle shape by changing the scale parms.
Houdini Lounge » Q: Quadruped rig, jaw proxy, choosing captures
- calin
- 114 posts
- Offline
The 2 painting methods I highlighted in the tutorial are the 2 methods available for H9. Although all the bones related tools should work with metaballs there are a couple of differences. In the paint capture layer tool you can't CTRL+MMB on a muscle to select it, I think this is a bug, along with edit capture weights, but it may be a technical issue as well. On the other hand displaying the muscles will make the viewport slow because we need to polygonize all the metaball fields. I do believe the the painting process and working with muscles in general can be improved, and we're working on it but I'm afraid for H9 it will stay the same.
And to answer the jaw question, you are right there is no proxy for the jaw right now. Partially because we still have to figure out a better way to deal with overlapping geometry. In this case the head and the jaw will be overlapping. Secondly the facial rig isn't that far away in which case it will replace entirely the head.
I hope this makes a little bit of sense.
cheers
calin
And to answer the jaw question, you are right there is no proxy for the jaw right now. Partially because we still have to figure out a better way to deal with overlapping geometry. In this case the head and the jaw will be overlapping. Secondly the facial rig isn't that far away in which case it will replace entirely the head.
I hope this makes a little bit of sense.
cheers
calin
Edited by - 2007年11月12日 11:19:47
Technical Discussion » Houdini and Ubuntu 6.10, Edgy
- calin
- 114 posts
- Offline
Well that's no good for me because I'm running a sort of edgy hardware and ubuntu 6.06 doesn't work on my machine, can't find the SATA hdd. Its the new IBM/Lenovo T60p.
calin
calin
Technical Discussion » Houdini and Ubuntu 6.10, Edgy
- calin
- 114 posts
- Offline
Hi, does any of you receive this error when trying to install houdini in ubuntu 6.10:
./houdini.install: 765: let: not found
thx
calin
./houdini.install: 765: let: not found
thx
calin
Technical Discussion » rigging: follow curve question
- calin
- 114 posts
- Offline
Hi Syntetik,
If you want to build a spine proceduraly take a look at the bodypart spine asset or open the attached, simplified file.
Here is a short description of what I'm doing.
Once you have a set of bones on the curve you can change their length to match your preference, shorter in the lumbar region big one in the thorax.
So first define the curve and create a ik with the number of bones. By default their length will be constant.
Then create a bunch of controls on the curve using the path object.
There is a handle that allows you to move the controls on the curve, you access it with “y”.
Bind the bone length to the distance between 2 handles. In the bodypart spine I'm running a script that does that because I want to do it at the rigging stage.
Back to the example file:
select a null press y and move the handle which will adjust the bone length.
cheers
calin
If you want to build a spine proceduraly take a look at the bodypart spine asset or open the attached, simplified file.
Here is a short description of what I'm doing.
Once you have a set of bones on the curve you can change their length to match your preference, shorter in the lumbar region big one in the thorax.
So first define the curve and create a ik with the number of bones. By default their length will be constant.
Then create a bunch of controls on the curve using the path object.
There is a handle that allows you to move the controls on the curve, you access it with “y”.
Bind the bone length to the distance between 2 handles. In the bodypart spine I'm running a script that does that because I want to do it at the rigging stage.
Back to the example file:
select a null press y and move the handle which will adjust the bone length.
cheers
calin
Houdini Lounge » Weight map systems available?
- calin
- 114 posts
- Offline
IMHO painting point weights in another package is not a good idea. Why, because you will want to see the deformation on the fly, that is the whole point of painting weights. If you still want to do that you will need a grayscale map for each bone or a rgb map for bone triplets, very nasty job to keep track of values for each point/bone if you ask me (you could have them as layers but still…). As far as I remember Maya (up to version4.5) uses maps to save the point weights to disk and bring them back just in case you want to modify the topology, maya will assign the new weights based on the maps. I tried it once with a light character and a relative small number of bones and it worked but when I dropped 100k on 150 bones it crashed every time I try it. That was my experience with Maya and point weight maps. I don't know about XSI. We save point weights in the geo file which allows us to split the painting process in 2-3 or as many people as we need to get the job done. Next we bring the geos in use attribcomposite and paint the blend map, very elegant and simple, you can't do that in Maya or XSI.
Houdini Lounge » 0.1*$CEX*($F-1) ????
- calin
- 114 posts
- Offline
hi
So is: 0.1 is a constant, $CEX is the object's centroid position and $F will return the current frame number. If you take a look at the primitive sop you can see that the pivot has $CEX,Y,Z as values. Each node have a help card and there is a tab called locals. If you look into it you can learn something about the local variables that you can use with that node.
So is: 0.1 is a constant, $CEX is the object's centroid position and $F will return the current frame number. If you take a look at the primitive sop you can see that the pivot has $CEX,Y,Z as values. Each node have a help card and there is a tab called locals. If you look into it you can learn something about the local variables that you can use with that node.
Technical Discussion » Object deformation and RBD
- calin
- 114 posts
- Offline
Is it possibe to pass somehow the object deformation to RBD solver. For example I have a bottle in ice cubes and the bottle will morph into a bigger bottle (with some wobble effect) and I want the ice that surrounds the bottle to react properly. I was thinking about RBD but I don't know if it works.
Technical Discussion » muscle problem
- calin
- 114 posts
- Offline
Technical Discussion » muscle problem
- calin
- 114 posts
- Offline
hi,
thanks for your reply. In the mean time I found out that there is a expression called distance() witch gives you the distance between 2 points in space, exactly what I needed, but my problem is that if I parent the null to the bone(geometry) and move the parent, the tx, ty, tz coordinates of the null will not change. I could do a ch reference of the parent to the null instead of parenting but still the problem remains one step up when I parent the bone(geometry) to the bone.
The other problem regarding the volume, I was thinking to have a reference object, like in a neutral pose.
What I'm trying to achive is a muscle OTL that takes 2 nulls as imputs and one reference obj (usualy an elipsoid), or better, just the two nulls, make inside a elipsoid, use it as a reference and output the deformed muscle (elipsoid). It would meen so much to me if you can help me out because than I'm one step forward in my character developement(until now I have a good skeleton, bouth anatomicaly and cartoony way).
Cheers!
thanks for your reply. In the mean time I found out that there is a expression called distance() witch gives you the distance between 2 points in space, exactly what I needed, but my problem is that if I parent the null to the bone(geometry) and move the parent, the tx, ty, tz coordinates of the null will not change. I could do a ch reference of the parent to the null instead of parenting but still the problem remains one step up when I parent the bone(geometry) to the bone.
The other problem regarding the volume, I was thinking to have a reference object, like in a neutral pose.
What I'm trying to achive is a muscle OTL that takes 2 nulls as imputs and one reference obj (usualy an elipsoid), or better, just the two nulls, make inside a elipsoid, use it as a reference and output the deformed muscle (elipsoid). It would meen so much to me if you can help me out because than I'm one step forward in my character developement(until now I have a good skeleton, bouth anatomicaly and cartoony way).
Cheers!
Technical Discussion » muscle problem
- calin
- 114 posts
- Offline
I'm trying to implement a muscle system for my skeleton. It should work this way: I have a base and end (insertion point) nulls. I want to create an elipsoid between them because it's easy to compute its volume and than parent the nulls to the bones.
I dont know how to measure the distance between 2 objects and if its possible to compure in realtime the volume of the elipsoid.
mant thx.
calin
I dont know how to measure the distance between 2 objects and if its possible to compure in realtime the volume of the elipsoid.
mant thx.
calin
Technical Discussion » I need some help with shaders and shading
- calin
- 114 posts
- Offline
thx, for the link, caustic works fine now. But I still have the transparent shadow and glass shader BIG problem. If I use a glass shader the shadow is opaque even if I use texture shadow as a shadow shader(too bad there is no video tutorial about shadows and raytracing). Basicaly I have a glass object and inside a opaque object. Now what I expect to see in the shadow is a nice transparent shadow (a little less transparent to the edge of the glass shadow) and a opaque shadow of the opaque object. There must be a way of doing this but I'm affraid I don't know how to do it
Can someone please help me.
I've try to build a vex glass shader from scratch (like connecting facing forward or fresnel to bouth color and opacity) but it was a total fiasco.
In my opinion this capitol (rendering raytracing and some dumb vex shader creation for transparent/translucent objects like glass, water or ice) needs some more tutorials because I find myself a bit lost in the way that houdini renders
Can someone please help me.
I've try to build a vex glass shader from scratch (like connecting facing forward or fresnel to bouth color and opacity) but it was a total fiasco.
In my opinion this capitol (rendering raytracing and some dumb vex shader creation for transparent/translucent objects like glass, water or ice) needs some more tutorials because I find myself a bit lost in the way that houdini renders
Technical Discussion » I need some help with shaders and shading
- calin
- 114 posts
- Offline
I'm trying to render a glass and maybe some caustics. Can someone please tell me how to use this things in houdini (btw. they are not documented so well, except ambient occlusion) because I used the glass shader and it's cool as long as I don't render with shadows (the shadow is black no matter which shadow filter I'm using) and when I want to render from inside the glass only the reflection map is rendering (no transparency). I must admit I'm kind of lost here because I don't fully understand the way that Houdini works with ray tracing/transparencies/caustics
-
- Quick Links