Josh Gaines 3D.com

Home

Hello and welcome to my website. I am a 3D Technical Artist working in Maya. As a Technical Artist, I am capable of covering many kinds of tasks due to a broad spectrum of abilities. Some of these tasks include: rigging a model for animation; trouble shoot broken scenes or characters; create effects or technical animations with nCloth, dynamic hair, fur, fluids and particles; develop custom tools with Python and MEL scripts; create 3D models of characters, hard surfaces, and environments; prepare scenes for a rendering process. My purpose is to use my abilities as a Technical Artist to help you at any point in a production with the most cost effective, artistic, and productive solutions.

If you would like to consult on a project, please feel free to contact me. I will reply to you as soon as possible.
Thank you for visiting.

~ Josh Gaines

Colossians 3: 23-24

23 Whatever you do, work at it with all your heart, as working for the Lord, not for men, 24 since you know that you will receive an inheritance from the Lord as a reward. It is the Lord Christ you are serving.”

Joshua Gaines

E-mail: josh@joshgaines3d.com


View Josh Gaines's profile on LinkedIn

Demo Reel

View on Vimeo

 

Portfolio

Graphic/Art Portfolio (10.6 MB)

View PDF

 

 

Resumé

View PDF

Downloads

Non-Flip Elbow Match Script

import maya.cmds as cmds
import math

#--- No-Flip PV ---
min = 0
max = 360
fkPos = cmds.xform('L_elbow_FKCTRL', q=True, ws=True, rp=True)

for i in xrange(0, 50, 1):
    #Set min and max on elbow_twist to find correct value:
    cmds.setAttr('L_wrist_IKCTRL.elbow_twist', min)
    ikPos = cmds.xform('L_elbow_IKJNT', q=True, ws=True, rp=True)

    ikVecX = ikPos[0]    
    ikVecY = ikPos[1]    
    ikVecZ = ikPos[2]

    fkVecX = fkPos[0]    
    fkVecY = fkPos[1]    
    fkVecZ = fkPos[2]

    vecX = ikVecX - fkVecX
    vecY = ikVecY - fkVecY
    vecZ = ikVecZ - fkVecZ

    minDist = math.sqrt(vecX**2 + vecY**2 + vecZ**2)

    cmds.setAttr('L_wrist_IKCTRL.elbow_twist', max)
    ikPos = cmds.xform('L_elbow_IKJNT', q=True, ws=True, rp=True)

    ikVecX = ikPos[0]
    ikVecY = ikPos[1]
    ikVecZ = ikPos[2]

    fkVecX = fkPos[0]
    fkVecY = fkPos[1]
    fkVecZ = fkPos[2]

    vecX = ikVecX - fkVecX
    vecY = ikVecY - fkVecY
    vecZ = ikVecZ - fkVecZ

    maxDist = math.sqrt(vecX**2 + vecY**2 + vecZ**2)

    avg = ((max - min)/2 + min)

    if (minDist > maxDist):
        min = avg
    elif (minDist < maxDist): 
        max = avg 
    else: #min == max 
        min = min + .00001 

    #Check elbow_twist value:
    twistVal = cmds.getAttr('L_wrist_IKCTRL.elbow_twist') 
    if (twistVal > 180):
        cmds.setAttr('L_wrist_IKCTRL.elbow_twist', twistVal - 360)
    elif (twistVal < -180):
        cmds.setAttr('L_wrist_IKCTRL.elbow_twist', twistVal + 360)

 

Eclipse Color Themes

JGaines_Dark