Popular Archive

Monday, March 22

จุดประกาย

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


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



ตอบไปเลย 2 เหตุผลครับว่า

- ทำงานประกวดโมเดลปั้นเสร็จไปแสนนานแต่ต้องมาติดแหง็กตอน Rigging เนี้ยแหละ
ปาเข้าไปครึ่งเดือนแถม Rig ออกมายังไม่สมประกอบอีก เพ้นเวดก็ไม่เป็น มันเลยเกิดอาการอยาก
อยากเอาชนะ อยากทำได้ อยากเป็น

- ช่วงที่ได้เริ่มหัดจากหนังสือรู้สึกว่ามันยากเหลือเกิน ผ่านไปร่วม2สัปดาห์ผลออกมาเห่ยสุดๆ แต่ก็เริ่มสนุกกับมัน
จังหวะที่เพิ่มเอกที่ได้ไปเรียนคลาสแอนิเมเตอร์มาก็ให้ข่าวว่าพี่ตุนจะเปิดคลาสริกกิ้ง เอาละไงเห็นทางสว่างละครับ

เอาละจังหวะที่กำลังจะเริ่มทำอะไรเป็นชิ้นเป็นอันก็เห็นคนนั่นนี้มีงานออกมาให้เห็นเป็นการจุดไฟโหมไปกันใหญ่ ตายเป็นตาย ไม่เริ่มตอนนี้จะไปเริ่มตอนไหนละ

เอาละวันนี้ไปเรียนมาได้อะไรบ้างนะ

Maya Architecture

- Node Based Architecture
คือในโปรแกรมมายาเนี้ยจะมีการทำงานในลักษณะของ Node ซึ่งจะมีความยืดหยุ่นสามารถ Connect
เพื่อให้เกิดผลลัพธ์สุดท้ายตามที่ต้องการได้

- Module Based
ส่วนในโปรแกรมอื่นๆเนี้ย อาทิเช่น ไลฟ์เวฟ จะมีการทำงานที่แยกจากกันเป็นโมดูล ทำงานแยกส่วนว่างั้น
โดยลำดับต่อมา

DAG = Directed Acyclic Graph > ไม่มีการเชื่อมต่อแบบทับซ้อน หรือเป็นการเชื่อมต่อทางเดียวไม่สามารถทำการเชื่อมต่อเป็นวงกลมได้

DG = Dependency Graph > มีการเชื่อมต่อที่เป็นอิสระต่อกัน วนไปเวียนมาเด้งหน้าเด้งหลัง(อันนี้ไม่ใช่) จนน่าเวียนหัวทีเดียวเชียว(นี่แหละพระเอกของเราเลย)

ทั้งนี้พี่เป๊ก(อาจารย์) ได้บอกให้เราปรับเปลี่ยนมุมมองในสายตาของริกเกอร์ซะหน่อย
จากที่เห็นโพลีกอน4เหลี่ยมธรรมดา ก็ให้มองในมุมของชาวริก
นั่นคือวัตถุหนึ่งชิ้นที่เห็นตรงหน้านั้นไม่ได้มีแค่ที่เห็น สรุปแล้วชาวริกทั้งหลายโปรดจงมองลงไปให้ลึก
ให้ซึ้งถึงหัวใจโพลีกอนกันเลย 55

สรุปได้ดังนี้
วัตถุ 1 ชิ้นจะประกอบด้วย 2 Node คือ
- Transform Node : ซึ่งจะทำการเก็บค่าการเคลื่อนไหวของวัตถุนั้นหรือตำแหน่งอ้างอิงพิกัดเป็นต้น
นั่นก็คือค่าของ Translate, Rotate, Scale, Pivot Point แล้วก็ไม่แน่ใจว่าจะมีอะไรเหนือจากนี้อีกรึเปล่า

- Shape Node : ในโหนดนี้ก็ตามชื่อเลย เก็บลักษณะรูปร่างรูปทรงของวัตถุชนิดนั้นๆ นั่นเอง วัตถุทุกชิ้นที่สร้างขึ้นมาจะต้องมีเชฟโหนดนี้อยู่ด้วยเสมอมา โดยข้อสังเกตุคือ เชฟโหนดนี้ไม่สามารถอยู่ได้อย่างโดดเดี่ยวเดียวดาย เรียกง่ายๆว่า ขี้เหงานั่นเอง

Utility Node
ในโหนดนี้เองโปรแกรมสร้างไว้เพื่อใช้กับ Shader หรือพวกการใส่พื้นผิวให้วัตถุนั่นแหละ (มั้ง) แต่เราจะนำเอามาปรับใช้ในการเล่นกับโหนดเพื่อ Rig กันให้เมามัน โดยตัวที่ใช้บ่อยๆ (พี่เป๊กสรุปมาให้) ก็คือ

- Condition (ไม่ใช่คอนดิชั่นเนอร์สำหรับบำรุงผม) ใช้เพื่อตรวจเช็คสภาพของเหตุการณ์ อย่างมีเงื่อนไข
- Distance Between อันนี้ยังไม่ชัวร์เว้นไว้ก่อน
- Multiply Divide วันนี้เจ้าคำสั่งนื้ถือเป็นพระเอกของผมเลยทีเดียว มันทำหน้าที่รับค่าและส่งออกไปยังที่ที่ระบุ ไว้จะมาทำความเข้าใจเพิ่มแล้วกันพ่อพระเอก
- Average ยังไม่ได้เข้าถึงแต่ก็คิดว่าน่าจะเป็นการคำนวณหาผลรวมตามความหมายนั่นแหละ
- Reverse ยังเป็นปริศนา แต่คิดว่าอนาคตต้องมีหมัดเด็ดแน่นอน
- Set Range ตัวละครลับ
- Vector Product ตัวละครลับ

เพิ่มเติมในส่วน Utility Node
- การเข้าถึงสามารถทำได้โดย คลิกขวาที่ Outliner > เพื่อทำการแสดง DAG
- อันนี้เบๆแต่จำไม่ค่อยได้สักทีบันทึกไว้ก่อน Hypergraph : ไปที่ windows > Hypergraph

ในสองส่วนด้านบนนี้จะมีความแตกต่างกันคือ (การทำงานริกเกอร์จะต้องใช้เป็นหลัก)
Outliner จะสามารถแสดงให้เห็นเฉพาะ DAG เท่านั้น ในทางกลับกัน
Hypergraph จะสามารถแสดงให้เห็นได้ทั้ง DG และ DAG ซึ่งคิดว่าการใช้งานน่าจะขึ้นกับความคล่องตัวเป็นหลัก
เกือบลืมการที่จะเลือกใช้ Utility Node ทำได้ 2 อย่างเท่าที่รู้ในตอนนี้คือ

- เปิด Hypergraph > Rendering > Create Render Node… จะเด้งหน้า Create Render Nodeมา
ให้คลิกเลือกที่ แท็บ Utilitys เพียงเท่านี้ก็พร้อมเสิรฟความปวดหัวให้เราแล้ว

- มั่นใจหน่อยก็ พิมพ์ในช่อง Mel Script ไปเลย สร้างตามชื่อตัวแปรที่ต้องการ

พูดถึงเรื่อง Mel ก็เข้าทาง Script Editor เพราะว่ายังไม่เข้าใจรูปแบบการเขียนเท่าไหร่ให้เราไปเช็คที่การใช้ตัวแปรได้ที่
Help > Mel Command Reference เท่านี้เราก็รีดความลับมาได้นิดนึงแล้ว

แทรกเกร็ดเล็กน้อย สำหรับ Expression ที่เราใช้เป็นสีม่วงๆ กันนั้น
พี่เป๊กบอกว่าเนื้อไม่ค่อยพิมพ์นิยมเท่าไหร่ เพราะเมื่อใช้จะมีการคำนวณทุกเฟรมทำให้การแสดงผลช้าแล้วก็มีคอมเม้นอีก... แต่ฟังไม่ทัน

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

เอาละต่อไปเป็นตัวอย่างแล้วก็ทริปต่างๆที่คิดว่ามันจะมีประโยชน์ (เพิ่งรู้) ก็มีดังนี้

- สมมุติเราสร้าง Locator ขึ้นมาแล้วทำการ Duplicate ให้เราดูในหน้า Hypergaph สังเกตุว่า ตัว Locator ที่ก็อปเพิ่มนั้นจะยังไม่อัพเดท (อยู่ในรูปทรานฟอมโหนดแค่อันต้นแบบ) ให้เราอัพเดทวิธี คลิกขวาที่ว่างเลือก Graph > Rebulid เท่านั้นก็เป็นเรื่อง (เรียบร้อย)

- Array Attribute เคยคุ้นๆ เจ้าตัวนี้มาบ้างแล้วแต่สรุปสั้นประมาณว่า เป็นตัวใช้สำหรับ Input ตัวแปร โดยมีการประกาศต่อไปเรื่อยๆ เป็นลำดับ

- การตั้งชื่อ ตัวอย่าง Shoulder_jnt สังเกตุว่า ชื่อต้องสื่อให้ตรงกับตำแหน่งตามด้วย _jnt หมายถึงชนิดของวัตถุนั้นในที่นี้คือ กระดูก (jnt = joint) อีกตัวอย่าง armIk_ctrl ส่วนมากถ้าชื่อมีสองสื่อ จะให้คำแรกตัวเล็กหมด ต่อมาให้ตัวใหญ่เพื่อให้รู้ว่าเป็นอีกคำ แล้วก็ตามด้วย _ctrl ชนิดของวัตถุเหมือนเดิม สมควรฝึกตั้งให้เป็นนิสัย

- ในส่วนของคำสั่ง Parent Constraint Option จะมีช่องให้ติ๊กเจษฏาพรเอ้ย ติ๊กถูกช่อง Maintain Offset เมื่อเราเลือกจะเป็นการรักษาระยะห่างให้เท่าเดิมโดยมีการยึดวัตถุเข้าด้วยกันแต่อยู่ในตำแหน่งเดิม

- วิธี Snap ที่แม่นยำ ให้เราเลือก วัตถุทั้งสอง ไปที่ Constrain > Parent จากนั้นทำการติ๊กเอา Maintain Offset ออกซะ วัตถุทั้งสองจะได้เหนี่ยวแน่นหนึบไปตามกัน แล้วก็ถ้าไม่อยากให้มีผลจากการ Parent ของ constraint ก็ให้ลบ Parent Constraint ใน Outliner ออก เพื่อไม่ให้ Parent ทำงาน(ก็เราแค่จะSnapนิ)

- มาถึงตรงนี้ยังงงๆอยู่ ในทางสูตร A,B คือ Static(Second Term) C คือ Dynamic(First Term) โดยเงื่อนไขที่เรียนในคลาสมีดังนี้ IF C > (A+B) Than sx = C Else sx = 1….. (sx ย่อมาจาก ScaleX ถ้าเป็น tx ย่อมาจาก TranslateX เป็นต้น) เข้าใจว่าในสูตรนี้คือ ถ้า C ก็คือผลลัพธ์ มากกว่า A+B ให้ ScaleX = C ถ้าไม่ใช่ให้ ScaleX = 1

- Edit > parent ใช้กันทั่วไปสำหรับยัดสิ่งที่เลือกให้ไปอยู่ขึ้นบันได
ส่วน Contrint > parent เป็นการรวมเหมือนกันแต่จะทำให้ไฟล์หนักกว่าเดิม เพราะมีการเพิ่มโหนดเข้ามา ในส่วนนี้จะมีประโยชน์ในการทำริบบอนในคลาสต่อๆ ไป

- ทิ้งท้ายสำหรับครั้งนี้ได้รู้ว่ามายาใช้เป็นเครื่องคิดเลขได้แต่ใครกันหนอจะใช้ ไม่เป็นไรพิมพ์บันทึกไว้ก่อน การใช้ก็ไม่ยากมีความรู้สึกว่ามันคล้ายๆ ปาสคาลเลย ดังนี้ print ( number + number ); คิดเลขได้โอ้จริงๆ ด้วยนะจอร์จ

ส่วนแรงบันดาลใจเพิ่มเติมพี่เป๊กแนะนำให้ดูตามนี้.. ของเค้าดีจริง (อันนี้ยกมาทั้งประโยคจากต้นฉบับครับ)
1.http://jasonschleifer.com/ Link ของ Jason Schleifer เค้าเป็น Technical Artist ที่โด่งดังมากครับ เป็นผู้ทำ Animator Friendly Rig ซึ่งเป็น Training Rigging DVD ที่ผมคิดว่าดีที่สุดแล้ว
2.
http://inspired3dadvancedrigging.blogspot.com/ เป็น Blog ของหนังสือที่เกี่ยวกับ Rigging ที่ดีเยี่ยมเลยครับ เล่มนี้ผมแนะนำให้หาซื้อมาอ่านกันนะครับ
3.
http://www.davidgould.com/ Link ของ David Gould ผู้เขียน Complete Maya Programming ครับ เป็นหนังสือสอนเขียน MEL Script สำหรับผู้เริ่มต้นที่ดีอีกเล่มครับ