Friday, October 22, 2010

Ribbon :Part3:

มาถึง Part3 อันสุดท้ายแล้วนะครับสำหรับการทำ Ribbon
เราจะทำ Squash กับ Auto Squash และการใช้ Node MultiplyDivide, plusMinusAverage, blendColors เหล่านี้

1. Connect ค่า Squash ของ Test_rbbnelemMidIIILFT_ctrl ไปยัง Squash ของ Test_rbbnelemIIILFT_nrb

2. Connect ค่า Arclenght ของ Test_rbbnelemStretchIIILFT_crvinfo ไปยัง arclen ของ Test_rbbnelemIIILFT_nrb

3. ให้สร้าง Node ใน mel Box ขึ้นมาตามนีและเปลี่ยนชื่อตามนี้
- สร้าง blendColors ขึ้นมา 1 node
    - createNode blendColors -n "Test_rbbnSquashDivIIILFT_bc"
- สร้าง multiplyDivide ขึ้นมา 2 node
    - createNode multiplyDivide -n "Test_rbbnsquashDivIIILFT_mdv" **[Operation = Divide]
    - createNode multiplyDivide -n "Test_rbbnsquashPowIIILFT_mdv" **[Operation = Power,input2X=0.5]

- สร้าง plusMinusAverage ขึ้นมา 5 node
    - createNode plusMinusAverage -n "Test_rbbnSquash1IIILFT_pma"
    - createNode plusMinusAverage -n "Test_rbbnSquash2IIILFT_pma"
    - createNode plusMinusAverage -n "Test_rbbnSquash3IIILFT_pma"
    - createNode plusMinusAverage -n "Test_rbbnSquash4IIILFT_pma"
    - createNode plusMinusAverage -n "Test_rbbnSquash5IIILFT_pma"

หลังจากนั้นจะทำการ Connect ทั้งหมดเริ่มจาก
1. connect ค่าจาก Test_rbbnelemIIILFT_nrb ไปยัง Test_rbbnSquashDivIIILFT_bc
    - arclen To color1R
    - Divider To color2R
    - Squash To blender

2. connect ค่าจาก Test_rbbnelemIIILFT_nrb ไปยัง Test_rbbnsquashDivIIILFT_mdv
    - Divider To input1X

3. connect ค่าจาก Test_rbbnSquashDivIIILFT_bc ไปยัง Test_rbbnsquashDivIIILFT_mdv
    - outputR To input2X

4. connect ค่าจาก Test_rbbnsquashDivIIILFT_mdv ไปยัง Test_rbbnsquashPowIIILFT_mdv
    - outputX To input1X

5. connect ค่าจาก Test_rbbnsquashPowIIILFT_mdv ไปยัง Test_rbbnSquash#IIILFT_pma [ของแต่ละNode]
    - outputX To input1D

6. connect ค่าจาก Test_rbbnelemMidIIILFT_ctrl ไปยัง Test_rbbnSquash#IIILFT_pma [ของแต่ละNode]
    - Squash To input1D

7. connect ค่าจาก Test_rbbnelem#IIILFT_ctrl ไปยัง Test_rbbnSquash#IIILFT_pma [ของแต่ละNode]
    - Squash To input1D

8. connect ค่าจาก Test_rbbnSquash#IIILFT_pma ไปยัง Test_rbbnelem#JntIIILFT_grp [ของแต่ละNode]
    - output1D To scale X
    - output1D To scale Z

9. connect ค่าจาก Test_rbbnelem1JntIIILFT_grp ไปยัง Test_rbbnelem1IIILFT_jnt [ของแต่ละNode]
    - scale To scale
    - scale To inverseScale

ใกล้ถึงขั้นตอนสุดท้ายแล้วๆๆๆ อันนี้เราจะมาทำการ connect ค่า Rotate Y กันนะครับ
สำหรับค่า Rotate Y ของ Test_rbbnelem1JntIIILFT_grp ให้เอาค่า Rotate Y ของ Test_rbbnBttmPostelemIIILFT_loc มา connect ได้เลย
สำหรับค่า Rotate Y ของ Test_rbbnelem5JntIIILFT_grp ให้เอาค่า Rotate Y ของ Test_rbbnTopPostelemIIILFT_loc มา connect ได้เลย
ส่วน Test_rbbnelem2JntIIILFT_grp, Test_rbbnelem3JntIIILFT_grp, Test_rbbnelem4JntIIILFT_grp ให้ทำดังนี้

- สร้าง multiplyDivide ขึ้นมา 3 node
    - createNode multiplyDivide -n "Test_rbbnelem2IIILFT_mdv"
**[1X = 0.75,1Y=0.25]   
    - createNode multiplyDivide -n "Test_rbbnelem3IIILFT_mdv"  
**[1X = 0.50,1Y=0.50]
    - createNode multiplyDivide -n "Test_rbbnelem4IIILFT_mdv"  
**[1X = 0.25,1Y=0.75]
- สร้าง plusMinusAverage ขึ้นมา 3 node
    - createNode plusMinusAverage -n "Test_rbbnelem2IIILFT_pma"
    - createNode plusMinusAverage -n "Test_rbbnelem3IIILFT_pma"
    - createNode plusMinusAverage -n "Test_rbbnelem4IIILFT_pma"

แล้วให้เอา rotate Y ของ Test_rbbnTopPostelemIIILFT_loc connect เข้า input1Y ของ Test_rbbnelem#IIILFT_mdv [2, 3, 4] แต่ละอัน
แล้วให้เอา rotate Y ของ Test_rbbnBttmPostelemIIILFT_loc connect เข้า input1X ของ Test_rbbnelem#IIILFT_mdv [2, 3, 4] แต่ละอัน
และให้ connect ค่าจาก Test_rbbnelem#IIILFT_mdv [2, 3, 4] ไปยัง Test_rbbnelem#IIILFT_pma [2, 3, 4] [ของแต่ละNode]
    - outputX To input1D
    - outputY To input1D
จากนั้นให้เอาค่าของ Test_rbbnelem#IIILFT_pma [2, 3, 4] ไป connect กับ Test_rbbnelem#JntIIILFT_grp [2, 3, 4]
    - output1D To rotate Y

สุดท้ายให้ Paint Weight ให้ Test_rbbnelemIIILFT_nrb กับ Test_rbbnelemStretchIIILFT_crv สวยงาม
หมดแล้วครับการทำ Ribbon หวังว่าจะเป็นประโยชนืกับทุกคนนะครับ
ถ้ามีอะไรสงสัยก็ แอด msn : gimojung@hotmail.com มาคุยได้นะครับ
Read More......

Ribbon :Part2:

มาเริ่มกันที่ Part2 กันเลย
เริ่มจากเราจะสร้าง Joint กับ Locator เพื่อเอาไว้ Aim ทิศทางของ joint

เราจะสร้าง joint กับ locator โดยการพิมพิ์ใน mel box ว่า
"createNode joint"
"CreateLocator"
แล้วทำการตั่งชื่อแล้วก็ทำ group และเรียง Hierarchy ตามนี้

    - Test_rbbnTopPostelemIIILFT_loc ------->Locator
       - Test_rbbnTopAimelemIIILFT_grp ------->Group
          - Test_rbbnTopelemIIILFT_jnt -------> Joint

    - Test_rbbnMidPostelemIIILFT_grp ------->Group
       - Test_rbbnMidAimelemIIILFT_grp ------->Group
          - Test_rbbnMidOffmelemIIILFT_loc ------->Locator
             - Test_rbbnMidelemIIILFT_jnt -------> Joint
    - Test_rbbnMidUpelemIIILFT_grp ------->Group

    - Test_rbbnBttmPostelemIIILFT_loc ------->Locator
       - Test_rbbnBttmAimelemIIILFT_grp ------->Group
          - Test_rbbnBttmelemIIILFT_jnt -------> Joint

ทั้งหมดนี้จะอยู่ใน Group "Test_rbbnelemCtrlJntAllIIILFT_grp"
แล้วเราจะย้ายตำแหน่งของแต่ละ Group ไปแล้ว Freeze Tranformation ทั้งหมดดังรูป
จากนั้นให้เราเลือก Test_rbbnTopelemIIILFT_jnt,Test_rbbnMidelemIIILFT_jnt,
Test_rbbnBttmelemIIILFT_jnt แล้วให้ไป Bind Skin กับ Test_rbbnelemIIILFT_nrb และ Test_rbbnelemIIILFT_crv หลังจากนั้นเราจะมาทำการ Aim กัน
แต่ผมจะใช้ Object rotation Up กับ Object Up แล้วจะอธิบายตอนท้ายว่ามันต่างกันยังไงนะครับ

1. ให้เลือก Test_rbbnBttmAimelemIIILFT_grp ก่อนแล้วเลือก Test_rbbnTopAimelemIIILFT_grp ตามแล้วไปที่ Option Box ของ Aim Constrain แล้วตั่งค่าตามนี้
    - aim Vector        0    -1    0
    - Up Vector         0     0    1
    - World Up Type        Object Up
    - World Up Vector    0    0    1
    - World UP Object    Test_rbbnTopPostelemIIILFT_loc
    แล้วกด Add

2. ให้เลือก Test_rbbnTopAimelemIIILFT_grp ก่อนแล้วเลือก Test_rbbnBttmAimelemIIILFT_grp ตามแล้วไปที่ Option Box ของ Aim Constrain แล้วตั่งค่าตามนี้
    - aim Vector        0    1    0
    - Up Vector         0    0    1
    - World Up Type        Object Up
    - World Up Vector    0    0    1
    - World UP Object    Test_rbbnBttmPostelemIIILFT_loc
    แล้วกด Add

3. ก่อนทำให้เลือก Test_rbbnMidUpelemIIILFT_grp แล้วให้ translateX =1 แล้วให้เลือก Test_rbbnTopelemIIILFT_jnt ก่อนแล้วเลือก Test_rbbnMidAimelemIIILFT_grp ตามแล้วไปที่
    Option Box ของ Aim Constrain แล้วตั่งค่าตามน
    - aim Vector        0    1    0
    - Up Vector         1    0    0
    - World Up Type        Object Up
    - World UP Object    Test_rbbnMidUpelemIIILFT_grp

    แล้วกด Add

หลังจากที่เรา aim เสร้จแล้วนั้น ให้เรามาเลือก Test_rbbnelemMidIIILFT_ctrl มา Parent constrain กับ Test_rbbnMidelemIIILFT_jnt แล้วจากนั้นให้มาเลือก Test_rbbnTopelemIIILFT_jnt กับ Test_rbbnBttmelemIIILFT_jnt มา point constrain กับ Test_rbbnMidPostelemIIILFT_grp และสุดท้ายให้เอา
Test_rbbnMidAimelemIIILFT_grp ไป parent constrain กับ Test_rbbnelemMidCtrlIIILFT_zG เป็นอันเสร็จ

ให้เราเลือก Test_rbbnelemMidIIILFT_ctrl แล้ว add attribute เพิ่มตามนี้
    - squash
    - auto squash [min=0, max=1]
    - Upr_twist
    - Lwr_twist
    - Detail_vis [min=0, max=1]

ให้เอา Upr_twist connect เขากับ Rotate Y ของ Test_rbbnTopPostelemIIILFT_loc
แล้วเอา Lwr_twist connect เขากับ Rotate Y ของ Test_rbbnBttmPostelemIIILFT_loc
แล้วเอา Detail_vis connect เข้ากับ visibility ของ Test_rbbnelem#CTRLIIILFT_zG แต่ละอัน

แค่นี้ก็หมดของส่วน Part2 แล้ว เราไปต่อกันที่ Part3 กันดีกว่า
Read More......

Ribbon :Part1:

" Ribbon "
    การทำ Ribbon นั้นมีไว้เพื่อเป็นการช่วยให้ animator นั้นสามารถจัดโพสของแขนหรือขาเพื่อให้ได้ silhouette ได้ตามที่ต้องการหรือเอาไว้แก้ไข shape หรือ Pose ของตัวละครเราได้เราลองไปดูการทำ Ribbon กันเลยดีกว่า

ขั้นแรกเลยเราจะทำการสร้าง Nurbs Plans ขึ้นมาก่อนในที่นี้้เราจะใส่ค่าดังนี้
     - Rotate X = 90
     - Scale Z = 5
ใน makeNurbPlane1
     - PatchesU = 1
     - PatchesV = 5



หลังจากนั้นจะ Freeze Transformation แล้วก็ Delete History แล้วตั่งชื่อ "Test_rbbnelemIIILFT_nrb" แล้วเราจะสร้าง Curve ขึ้นมาโดยไปที่ Option Box ของ CV Curve Tool แล้วเลือก 3 Cubic
แล้วสร้างให้อยู่กลางแผ่น Nurbs จากบนลงล่างให้พอดีแล้วให้ไปที่ Rebuilt Curve
โดยเลือก " Number of Spans = 5 "ก็จะได้ Curve CV ที่อยู่ตรงเส้นพอด
แล้วก็ตั่งชื่อเป็น "Test_rbbnelemIIILFT_crv"



ทีนี้เราจะมาหาความยาว Curve นี้โดยการสร้าง CurveInfo โดยเลือก Curve แล้วไปพิมพ์ใน mel Boxว่า"arclen -ch 1"แล้วตั่งชื่อ Nodeนี้ว่า"Test_rbbnelemStretchIIILFT_crvinfo"ซึ่งเอาไว้สามารถดู Arclenght ของ Curve นี้ได้ จากนั้นเลือก Nurbs แล้ว add attribute ตามนี้
    - arclen
    - divider
    - squash
เสร็จแล้วจะ Group เข้าไว้ด้วยกันแล้วตั่งชื่อ "Test_rbbnelemStillAllIIILFT_grp"
ต่อมาผมจะทำ Group เปล่าขึ้นมาเพื่อเอาไวให้มันเกาะอยู่กับ Nurbs สร้างและตั่งชื่อตามนี้

    - Test_rbbnelem1IIILFT_folicle
    - Test_rbbnelem2IIILFT_folicle
    - Test_rbbnelem3IIILFT_folicle
    - Test_rbbnelem4IIILFT_folicle
    - Test_rbbnelem5IIILFT_folicle

แล้ว Group รวมกันทั้งหมดและตั่งชื่อ "Test_rbbnelemIIILFT_folicleGrp"
ในการที่เราจะทำให้มันเกาะกับ Nurbs นั้นในวิธีนี้เราจะใช้ Node pointOnSurface การที่ใช้ Node นี้มันจะช่วยแก้ปัญหาเรื่องการ Flip ได้มากการสร้างให้ไปที่ Mel Box แล้วพิมพิ์ว่า "createNode pointOnSurfaceInfo" มา 5Node แล้วตั่งชื่อตามนี้

    - Test_rbbnelem1IIILFT_foliclePosi
    - Test_rbbnelem2IIILFT_foliclePosi
    - Test_rbbnelem3IIILFT_foliclePosi
    - Test_rbbnelem4IIILFT_foliclePosi
    - Test_rbbnelem5IIILFT_foliclePosi

เมื่อได้ Node มาครบแล้วจะทำการ Connect เพื่อให้ได้ตำแหน่งบน Nurbs โดยเราจะconnect
.worldSpace ของ Nurbs ไปเข้าที่ .inputSurface ของ pointOnSurface แต่ละอันวิธีนี้สามารถทำได้จาก Connection Editior หรือ Script Editor ได้
ถ้าใช้ Script Editor จะมีวิธีดังนี้

connectAttr -f Test_rbbnelem1IIILFT_nrbShape.worldSpace[0] Test_rbbnelem1IIILFT_foliclePosi.inputSurface;
connectAttr -f Test_rbbnelem2IIILFT_nrbShape.worldSpace[0] Test_rbbnelem2IIILFT_foliclePosi.inputSurface;
connectAttr -f Test_rbbnelem3IIILFT_nrbShape.worldSpace[0] Test_rbbnelem3IIILFT_foliclePosi.inputSurface;
connectAttr -f Test_rbbnelem4IIILFT_nrbShape.worldSpace[0] Test_rbbnelem4IIILFT_foliclePosi.inputSurface;
connectAttr -f Test_rbbnelem5IIILFT_nrbShape.worldSpace[0] Test_rbbnelem5IIILFT_foliclePosi.inputSurface;

จากนั้นเราจะเอาค่าของ .position ของ pointOnSurface มาconnectเข้า .translate ของ Test_rbbnelem#IIILFT_folicle ของแต่ละอัน

connectAttr -f Test_rbbnelem1IIILFT_foliclePosi.position Test_rbbnelem1IIILFT_folicle.translate;
connectAttr -f Test_rbbnelem2IIILFT_foliclePosi.position Test_rbbnelem2IIILFT_folicle.translate;
connectAttr -f Test_rbbnelem3IIILFT_foliclePosi.position Test_rbbnelem3IIILFT_folicle.translate;
connectAttr -f Test_rbbnelem4IIILFT_foliclePosi.position Test_rbbnelem4IIILFT_folicle.translate;
connectAttr -f Test_rbbnelem5IIILFT_foliclePosi.position Test_rbbnelem5IIILFT_folicle.translate;

หลังจาก Connect .translate ไปแล้วให้ไปเลือก pointOnSurface มาปรับตำแหน่งตามต้องการโดยไปแก้ใน
attribute Editor โดยแก้ที่ค่า Parameter  U = 0.5 กับ V=ตำแหน่งที่เราต้องการ เราสามารถดูตำแหน่งได้จาก
Group ที่เรา connect .translate เข้าไปแล้วไปเลือก Display > Transfoem Display > Local Rotationn Axesโดยค่า Parameter จะได้แบบนี้

- Test_rbbnelem1IIILFT_foliclePosi [U = 0.5 , V = 0.1]
- Test_rbbnelem2IIILFT_foliclePosi [U = 0.5 , V = 0.3]
- Test_rbbnelem3IIILFT_foliclePosi [U = 0.5 , V = 0.5]
- Test_rbbnelem4IIILFT_foliclePosi [U = 0.5 , V = 0.7]
- Test_rbbnelem5IIILFT_foliclePosi [U = 0.5 , V = 0.9]

เมื่อเสร็จแล้วทีนี้เราจะมาสร้าง Node aimConstraint ขึ้นมา Node นี้มีไว้เพื่อ
พิมพิ์ใน mel box "createNode aimConstraint"

เข้าไปที่ attribute Editor ของ aim แต่ละnodeแล้วให้เปลี่ยนค่า
Aim Vector    0     0    1
Up Vector     0     1    0
แล้วตั่งชื่อตามนี้
    - Test_rbbnelem1IIILFT_folicleAim
    - Test_rbbnelem2IIILFT_folicleAim
    - Test_rbbnelem3IIILFT_folicleAim
    - Test_rbbnelem4IIILFT_folicleAim
    - Test_rbbnelem5IIILFT_folicleAim

เริ่มจากเราจะ connect ค่า .tangentV จาก foliclePosi ไปconnectกับ .worldSpace ของ folicleAim

connectAttr -f Test_rbbnelem1IIILFT_foliclePosi.tangentV Test_rbbnelem1IIILFT_folicleAim.WorldUpVector;
connectAttr -f Test_rbbnelem2IIILFT_foliclePosi.tangentV Test_rbbnelem2IIILFT_folicleAim.worldUpVector;
connectAttr -f Test_rbbnelem3IIILFT_foliclePosi.tangentV Test_rbbnelem3IIILFT_folicleAim.worldUpVector;
connectAttr -f Test_rbbnelem4IIILFT_foliclePosi.tangentV Test_rbbnelem4IIILFT_folicleAim.worldUpVector;
connectAttr -f Test_rbbnelem5IIILFT_foliclePosi.tangentV Test_rbbnelem5IIILFT_folicleAim.worldUpVector;

แล้วก็ connect ค่า .normal ไปยัง .target[0].targetTranslate ซึ่งจะใช้ connection Editor ทำไม่ได้ต้องแบบนี้

connectAttr -f Test_rbbnelem1IIILFT_foliclePosi.normal Test_rbbnelem1IIILFT_folicleAim.target[0].targetTranslate;
connectAttr -f Test_rbbnelem2IIILFT_foliclePosi.normal Test_rbbnelem2IIILFT_folicleAim.target[0].targetTranslate;
connectAttr -f Test_rbbnelem3IIILFT_foliclePosi.normal Test_rbbnelem3IIILFT_folicleAim.target[0].targetTranslate;
connectAttr -f Test_rbbnelem4IIILFT_foliclePosi.normal Test_rbbnelem4IIILFT_folicleAim.target[0].targetTranslate;
connectAttr -f Test_rbbnelem5IIILFT_foliclePosi.normal Test_rbbnelem5IIILFT_folicleAim.target[0].targetTranslate;

สุดท้ายเราจะ connect .constraintRotate[x,y,z] ของ FolicleAim ไปยัง .rotate[x,y,z] ของ folicle

connectAttr -f Test_rbbnelem1IIILFT_folicleAim.constraintRotateX Test_rbbnelem1IIILFT_folicle.rotateX;
connectAttr -f Test_rbbnelem1IIILFT_folicleAim.constraintRotateY Test_rbbnelem1IIILFT_folicle.rotateY;
connectAttr -f Test_rbbnelem1IIILFT_folicleAim.constraintRotateZ Test_rbbnelem1IIILFT_folicle.rotateZ;

connectAttr -f Test_rbbnelem2IIILFT_folicleAim.constraintRotateX Test_rbbnelem2IIILFT_folicle.rotateX;
connectAttr -f Test_rbbnelem2IIILFT_folicleAim.constraintRotateY Test_rbbnelem2IIILFT_folicle.rotateY;
connectAttr -f Test_rbbnelem2IIILFT_folicleAim.constraintRotateZ Test_rbbnelem2IIILFT_folicle.rotateZ;

connectAttr -f Test_rbbnelem3IIILFT_folicleAim.constraintRotateX Test_rbbnelem3IIILFT_folicle.rotateX;
connectAttr -f Test_rbbnelem3IIILFT_folicleAim.constraintRotateY Test_rbbnelem3IIILFT_folicle.rotateY;
connectAttr -f Test_rbbnelem3IIILFT_folicleAim.constraintRotateZ Test_rbbnelem3IIILFT_folicle.rotateZ;

connectAttr -f Test_rbbnelem4IIILFT_folicleAim.constraintRotateX Test_rbbnelem4IIILFT_folicle.rotateX;
connectAttr -f Test_rbbnelem4IIILFT_folicleAim.constraintRotateY Test_rbbnelem4IIILFT_folicle.rotateY;
connectAttr -f Test_rbbnelem4IIILFT_folicleAim.constraintRotateZ Test_rbbnelem4IIILFT_folicle.rotateZ;

connectAttr -f Test_rbbnelem5IIILFT_folicleAim.constraintRotateX Test_rbbnelem5IIILFT_folicle.rotateX;
connectAttr -f Test_rbbnelem5IIILFT_folicleAim.constraintRotateY Test_rbbnelem5IIILFT_folicle.rotateY;
connectAttr -f Test_rbbnelem5IIILFT_folicleAim.constraintRotateZ Test_rbbnelem5IIILFT_folicle.rotateZ;

เป็นการเสร็จในขั้นตอนนี้ก่อน
(อย่าลืม Parent Test_rbbnelem1IIILFT_folicleAim เข้าไปไว้ใน Test_rbbnelem1IIILFT_folicle ของแต่ละอัน)

เริ่มกันต่อเลยหล้งจากที่ทำตามขั้นต้นมาแล้วเราจะทำการสร้าง joint + Control ขึ้นมาและตั่งชื่อตามนี้
- สร้าง Joint แล้วทำการ Group ของแต่ละ joint และตั่งชื่อตามนี้ให้พิมพิ์ใน mel box "createNode joint"

    - Test_rbbnelem1JntIIILFT_grp
        - Test_rbbnelem1IIILFT_jnt
    - Test_rbbnelem2JntIIILFT_grp
        - Test_rbbnelem2IIILFT_jnt
    - Test_rbbnelem3JntIIILFT_grp
        - Test_rbbnelem3IIILFT_jnt
    - Test_rbbnelem4JntIIILFT_grp
        - Test_rbbnelem4IIILFT_jnt
    - Test_rbbnelem5JntIIILFT_grp
        - Test_rbbnelem5IIILFT_jnt

แล้ว Group รวมกันแล้วตั่งชื่อ "Test_rbbnelemJntAllIIILFT_grp"
- สร้าง Control มา6อันมี [Circle = 5, square = 1 ] และตั่งชื่อตามนี้

    - "square"
    - Test_rbbnelemMidCtrlIIILFT_zG
        - Test_rbbnelemMidIIILFT_ctrl

    - "circle"
    - Test_rbbnelem1CTRLIIILFT_zG
        - Test_rbbnelem1IIILFT_ctrl
    - Test_rbbnelem2CTRLIIILFT_zG
        - Test_rbbnelem2IIILFT_ctrl
    - Test_rbbnelem3CTRLIIILFT_zG
        - Test_rbbnelem3IIILFT_ctrl
    - Test_rbbnelem4CTRLIIILFT_zG
        - Test_rbbnelem4IIILFT_ctrl
    - Test_rbbnelem5CTRLIIILFT_zG
        - Test_rbbnelem5IIILFT_ctrl

แล้ว add attribute "Squash" ให้กับcontrolด้วย
แล้ว Group รวมกันแล้วตั่งชื่อ "Test_rbbnelemCTRLAllIIILFT_grp"

เมื่อเรามีทั้ง joint แล้ว control แล้วก็ให้เราทำการย้ายตำแหน่งไปไว้ทีเดียวกับ pointOnSurfaceโดยเลือก Test_rbbnelem#IIILFT_folicle ก่อนแล้วเลือก Test_rbbnelem#JntIIILFT_grp
แล้วก็ใช้ Point Constrain กับ Orient Constraint ซึ่งจะได้ตามแบบนแล้วให้เรา Break Connection ของ Rotate Y ออกให้หมด

เมื่อเราย้ายตำแหน่ง joint ไปแล้วคราวนี้เรามาย้ายตำแหน่งของ Control กันบ้าง
โดยเลือก Test_rbbnelem#JntIIILFT_grp ก่อนแล้วเลือก Test_rbbnelem#CTRLIIILFT_zG
แล้วก็ใช้ Parent Constrain โดยใน option ให้เอา Maintain Offset ออกด้วยแล้วเอา
Test_rbbnelem#IIILFT_ctrl ของแต่ละอัน Parent Constrain เข้ากับ Test_rbbnelem#IIILFT_jnt

เป็นการเสร็จในส่วนของ Part1 ไว้เรามาต่อกันใน Part2 นะครับ

Read More......

"Love one person why"

"รักคนคนหนึ่งเพราะอะไร"

...นั่นเป็นรักจากสมอง สมองมักมีเหตุผล
มีคำตอบในการที่ต้องรัก
และอาจไม่ใช่รักแท้...
เพราะรักแท้ เป็นรักที่ไม่มีคำตอบ
...เป็นความรัก ที่มาจากความรู้สึก

ถ้ารักจากสมอง ชีวิตรักเหมือนอยู่ในโลกความจริง
มักไม่อ่อนหวาน ทำอะไรก็มีแผนการ
...มีเหตุผล มีคำอธิบายร้อยแปดพันอย่าง
ต่างจากรักที่มาจากความรู้สึก
...ชีวิตเหมือนอยู่ในความฝัน ...อ่อนหวาน อบอุ่น
ใช้หัวใจในการตัดสิน กลายเป็นคนไม่มีสมอง...

ถ้าใครบอกว่ารักคุณเพราะอะไร...
พึงจำไว้ว่ารักแท้จะไม่มีเหตุผล จะไม่มีคำว่าอะไร มาทำให้รัก

เพราะถ้าบอกว่ารัก เพราะคุณสวย
...เมื่อความสวยหมด อาจเลิกรักได้
หรือถ้ารักเพราะคุณเป็นคนดี
วันหนึ่งก็อ้างได้ว่า ตอนนั้นเห็นคุณเป็นคนดีได้อย่างไร...
หรือถ้ารักเพราะคุณเป็นคุณ
...ก็คงเบื่อที่จะหาคำอื่นมาพูด คำนี้ใช้ง่ายที่สุด...

จงฟังคนที่บอกว่า รักคุณ และไม่เข้าใจว่าทำไมถึงรัก
นั่นเเสดงว่าใช้หัวใจรัก ไม่ว่าวันข้างหน้า คุณจะเป็นอย่างไร
หัวใจก็จะยังไม่มีเหตุผลในการรักอยู่ดี
จะเลือกรักคนที่เค้าไม่รักคุณแต่คุณรักเค้า หรือ จะเลือกคนที่คุณไม่รักแต่เค้ารักคุณ แต่ความรักที่ดีที่สุดคือความรักจากใจสองใจ
จะเลือกคนที่ใช้หัวใจรัก หรือคนที่ใช้สมองรัก...ขึ้นอยู่กับคุณ
Read More......

Saturday, October 16, 2010

Blog Rigging

อยากทำอะไรที่ดีกับตัวเองซะหน่อย เกี่ยวกับงานที่ทำอยู่ทุกวันๆ
เลยอยากจะมาแชร์ประสบการณ์และวิธีการคิดและทำออกมา
ไว้มาค่อยดูกันนะครับว่ามีอะไรใหม่ๆมานำเสอนบ้าง Read More......