PDA

View Full Version : Render bones?


zoharl
01-05-2012, 11:32 AM
The script from creativeCrash that places elongated pyramids on top of the bones isn't good enough. Any creative idea for something that looks good, besides using the hardware render buffer?

hanskloss
01-06-2012, 08:05 PM
I was looking for a solution to this for the longest time. Not sure why they decided not to make bones a renderable object. Pretty lame if you ask me. :rolleyes:

zoharl
01-06-2012, 10:23 PM
The situation is that bad, ah?
Well wait a minute, I'm looking at the bones in the view port, and what's the problem to draw them one-to-one with all the colors and stuff (bit by bit, I'll rewrite maya ... ;) )?
How about making it even better, such as putting real bones (not real-real, real - graphics real...) exactly on top of them? It should be a blast. But surely someone must have done such a thing already?

thematt
01-06-2012, 10:39 PM
would viewport 2.0 render them? it render camera for exemple from what I saw.

Clappy3D
01-06-2012, 10:39 PM
I think your plugin Maya business will be a smashing success. Now get to work.

hanskloss
01-07-2012, 01:01 AM
It's been done before in Mirai. Bones in Mirai were built off of polygonal primitives thus were renderable. It amazes me how many people are asking for features/tools that have been around for years, but...not in Maya. I truly wish ADSK would have taken the time to do a real in depth analysis of this application.

zoharl
01-07-2012, 01:30 AM
This is getting ridicules!
Well here is my create_bones.py

https://docs.google.com/open?id=0B4PDrM6_sr2UOWFjYzAwNWQtMTQ3OC00OWNkLWE0NGItYjU0YTAzMDY1OGVi

Put the bone.ma

https://docs.google.com/open?id=0B4PDrM6_sr2UYWVlMjIxNTAtM2QwNy00Nzk4LTk0NGQtNWY0ZDU3ODNjZDI0

in the script dir, or create your own model named bone inside the scene. Select a joint and run:

import create_bones
reload(create_bones)
create_bones.do()

It would create bones for the joints and bind them:

http://i743.photobucket.com/albums/xx77/zoharl/anim/joints.jpg
http://i743.photobucket.com/albums/xx77/zoharl/anim/bones.jpg

I'm opened to suggestions (hierarchy colors?), or better bone.ma.

cgbeast14
01-21-2012, 12:49 AM
whipped this up for you to try out.

http://cgbeast.net/img/BeastlyBones.jpg
http://cgbeast.net/img/SkelGeo.jpeg

current working code [MEL]

/*usage select root joint and run script*/

//select all children of parent
string $rootJoint[] = `ls -sl -fl`;
select -hi;
string $sel[] = `ls -sl -fl`;
string $cpm = `createNode closestPointOnMesh`;
select -cl;
group -em -n "skelGeo";
for ($i=0; $i<size($sel); $i++){
//Evaluate for joints only
if (`nodeType $sel[$i]` == "joint"){
//create sphere at each joint
vector $pos = `xform -q -ws -t $sel[$i]`;
vector $rot = `xform -q -ro $sel[$i]`;
polySphere -sx 10 -sy 10 -n ($sel[$i]+"_geo");
float $jointScale = `jointDisplayScale -q`;
float $radius = `getAttr ($sel[$i]+".radius")`;
$radius = ($radius/2)*$jointScale;
xform -ws -t ($pos.x) ($pos.y) ($pos.z) -ro ($rot.x) ($rot.y) ($rot.z) -scale $radius $radius $radius ($sel[$i]+"_geo");
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 ($sel[$i]+"_geo");

if ($sel[$i] != $rootJoint[0]){
//create lengths to connect child nodes
string $fParent = firstParentOf($sel[$i]);
float $jointScale = `jointDisplayScale -q`;
float $radius = `getAttr ($fParent+".radius")`;
$radius = ($radius/2)*$jointScale;
$cone = `polyCone -sx 4 -h 2 -n ($fParent+"_geo_length")`;
move -r -y (2);
makeIdentity -apply true -t 1 -r 1 -s 1 -n 0 $cone;
ResetTransformations;

//get Position of Parent
vector $pos = `xform -q -ws -t $fParent`;
float $radius = `getAttr ($fParent+".radius")`;
xform -ws -t ($pos.x) ($pos.y) ($pos.z) -scale $radius $radius $radius ($cone);
select -r $sel[$i];
select -add $cone;
aimConstraint -offset 0 0 0 -weight 1 -aimVector 0 1 0 -upVector 0 1 0 -worldUpType "scene";
select -r ($sel[$i]+"_geo");
string $shapeNode[] = `ls -sl -dag -lf`;

connectAttr -f ($shapeNode[0]+".outMesh") ($cpm+".inMesh");
vector $pos = `xform -q -ws -t ($cone[0]+".vtx[4]")`;
setAttr ($cpm+".inPositionX")($pos.x);
setAttr ($cpm+".inPositionY")($pos.y);
setAttr ($cpm+".inPositionZ")($pos.z);
vector $pt = getAttr ($cpm+".position");
xform -ws -t ($pt.x) ($pt.y) ($pt.z) ($cone[0]+".vtx[4]");
select -r -hi $cone;
DeleteConstraints;
parent $cone (shortNameOf($fParent)+"_geo");
}
}
}
//clean up nodes
delete $cpm;


for ($i=0; $i<size($sel);$i++){
parent ($sel[$i]+"_geo") "skelGeo";
select -r $sel[$i];
select -add ($sel[$i]+"_geo");
ParentConstraint;

}




I wasn't sure how you'd want the geometry to be organized so that's pretty flexible for changes. Did you need it actually skinned? it seems like parenting would give a better result in this particular case but I dont know what the particular needs are. Anyway I'm gonna revise some of the code and I'll be posting it to Creative Crash as "Beastly Bones" for anyone whos interested

[edit] I decided to update it to set up a parent constraint from the bone to geometry so you can try it out and see if that works for your needs. Also I corrected a parenting issue for the 'length' geometry. All geo should be dumped into a group called skelGeo. Let me know how it works for you!

zoharl
01-21-2012, 06:48 AM
If you can, please show a rendered image of your skeleton, and put your code under code tags, and make indented, so it would be more readable.

cgbeast14
01-21-2012, 10:20 PM
Ok I reformatted the code and posted a render image based off a maya generated skeleton.

I caught a little oversight in there about the 'joint size' value and I've updated it in the code. Admittedly there's still a small bug in there which is adjusting the cones pivot point to replicate the exact position I'll mess with it a little later when I get some time.

hanskloss
01-22-2012, 03:35 PM
How about making the bones gray, white, blue or green? Something that would stand out even when not rendering them.

http://software.intel.com/file/3788

or watch some of these videos:

http://www.youtube.com/watch?v=_eAV3M3fQ7I

http://www.youtube.com/watch?v=mSmil8IdXO4

cgbeast14
01-25-2012, 10:02 PM
Well in the case that its not rendered, bones do have a drawing override that allows you to change the color to make them more visible. or alternatively you could also place them in a layer and apply a color to that which would change the drawing color (joints, curves, etc)

CGTalk Moderation
01-25-2012, 10:02 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.