φυβλαςのβλογ
บล็อกของ phyblas



maya python เบื้องต้น บทที่ ๑๐: ค่าองค์ประกอบต่างๆ และการปรับแก้ค่า
เขียนเมื่อ 2016/03/10 18:36
แก้ไขล่าสุด 2021/09/28 16:42
วัตถุต่างๆที่ถูกสร้างขึ้นในในโปรแกรมมายาจะประกอบไปด้วยองค์ประกอบหลายๆอย่างซึ่งก่อตัวขึ้นมาเป็นวัตถุนั้นอย่างที่เป็นอยู่

เช่นทรงกรวยจะประกอบด้วย ส่วนสูง, รัศมี, แกนหัน, ฯลฯ ซึ่งเป็นตัวกำหนดว่ามันจะมีรูปร่างเป็นยังไง

ค่าเหล่านั้นสามารถดูได้จากแอตทริบิวต์อีดิเตอร์ (アトリビュートエディタ, attribute editor) ดังที่ได้กล่าวไปในบทที่ ๘ แล้ว

ลองสร้างวัตถุตามตัวอย่างนี้
mc.polyCube(w=9.5,h=10.5,d=8.5,sx=2,sy=2,sz=2,n='klong')



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



หากอยากรู้ว่าวัตถุหนึ่งมีองค์ประกอบอะไรบ้างสามารถทำได้ด้วยฟังก์ชัน listAttr() โดยใส่ชื่อของวัตถุที่ต้องการดูลงในวงเล็บ เช่น
print(mc.listAttr('klong'))

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

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

ลองเพิ่มแฟล็กลงไปตัวหนึ่งคือ k (keyable)
print(mc.listAttr('klong',k=1))

ผลที่ได้จะเห็นว่าเหลือองค์ประกอบเพียง ๑๐ ตัวเท่านั้น
[u'visibility', u'translateX', u'translateY', u'translateZ', u'rotateX', u'rotateY', u'rotateZ', u'scaleX', u'scaleY', u'scaleZ']

ความหมายของแฟล็ก k คือ หาก k=1 จะเป็นการจำกัดวงให้แสดงเฉพาะแค่องค์ประกอบที่สามารถคีย์ได้เท่านั้น

คีย์ได้ในที่นี้หมายถึงสามารถปรับค่าให้แปรเปลี่ยนได้ตามเวลาได้ด้วยการตั้งคีย์เฟรม ซึ่งจะอธิบายในบทหลังจากนี้ไปอีก

องค์ประกอบเหล่านั้นได้แก่ ตำแหน่ง, มุมหมุน, มาตรส่วน และ สภาพการมองเห็น โดยที่สามอย่างแรกแบ่งย่อยตามแกน x,y,z ดังนั้นโดยรวมแล้วจึงมี ๑๐ อัน

ชื่อทั้งหมดที่ปรากฏนี้เป็นชื่อยาว แต่หากต้องการชื่อย่อก็สามารถทำได้ด้วยการเพิ่มแฟล็กลงไปอีกตัว คือ sn (shortnames)
print(mc.listAttr('klong',k=1,sn=1))

จะได้ผลเป็น
[u'v', u'tx', u'ty', u'tz', u'rx', u'ry', u'rz', u'sx', u'sy', u'sz']

ซึ่งเป็นชื่อย่อขององค์ประกอบทั้ง ๑๐ นี้

หากดูที่แชนเนลบ็อกซ์ (チャネルボックス, channel box) ก็จะเห็นองค์ประกอบทั้ง ๑๐ ตัวนี้วางเรียงกันอยู่ ดังนี้

ชื่อในรายการ ชื่อเต็ม ชื่อย่อ ความหมาย
移動X translateX tx ตำแหน่งในแกน x
移動Y translateY ty ตำแหน่งในแกน y
移動Z translateZ tz ตำแหน่งในแกน z
回転X rotateX rx มุมหมุนในแกน x
回転Y rotateY ry มุมหมุนในแกน y
回転Z rotateZ rz มุมหมุนในแกน z
スケールX scaleX sx มาตราส่วนในแกน x
スケールY scaleY sy มาตราส่วนในแกน y
スケールZ scaleZ sz มาตราส่วนในแกน z
可視性 visibility v สภาพการมองเห็น (ตัวบอกว่าวัตถุแสดงอยู่หรือซ่อนอยู่ มีค่าเป็น 1 หรือ 0)

ค่า เหล่านี้สามารถปรับได้ด้วยฟังก์ชัน setAttr() โดยใส่อาร์กิวเมนต์ ๒ ตัว คือชื่อขององค์ประกอบที่ต้องการเปลี่ยนค่า และตามด้วยค่าที่ต้องการป้อนเข้าไป เช่น
mc.setAttr('klong.tx',3)

แบบนี้วัตถุ klong จะถูกย้ายไปในตำแหน่ง x=3

ชื่อ องค์ประกอบนั้นต้องประกอบด้วยชื่อของวัตถุที่ต้องการแล้วตามด้วยจุด จากนั้นจึงตามด้วยชื่อขององค์ประกอบนั้น โดยจะเป็นชื่อเต็มหรือชื่อย่อก็ได้อย่างตัวอย่างนี้ถ้าพิมพ์เป็น
mc.setAttr('klong.translateX',3)

ก็ให้ผลในลักษณะเดียวกัน

นอกจากนี้หากวัตถุที่ต้องการแก้องค์ประกอบนั้นเป็นวัตถุที่ถูกเลือกอยู่ก็ไม่ จำเป็นต้องใส่ชื่อวัตถุ ใส่แค่ชื่อจุดแล้วตามด้วยองค์ประกอบก็พอ เช่น
mc.select('klong')
mc.setAttr('.tx',3)

นอกจากนี้หากต้องการแก้ค่าของทั้งสามแกนพร้อมกันก็สามารถทำได้โดย
mc.setAttr('klong.t',3,4,5)

หรือ
mc.setAttr('klong.translate',3,4,5)

องค์ประกอบ t (translate) รวม tx ty tz ไว้ด้วยกันในตัวเดียว

จะ เห็นว่าการย้ายตำแหน่งของวัตถุด้วยฟังก์ชัน setAttr() นั้นก็ให้ผลไม่ต่างจากการใช้ฟังก์ชัน move() ที่ต่างกันก็คือเป็นการย้ายโดยตรงหรือโดยอ้อมเท่านั้น สามารถเลือกใช้ตามความสะดวก

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



กรณีที่ใช้ตัวแปรเก็บชื่อของวัตถุ แทนที่จะตั้งชื่อโดยตรงก็สามารถใช้เครื่องหมาย + เพื่อเชื่อมได้ เช่น
chue = mc.polyCube(w=9.5,h=10.5,d=8.5,sx=2,sy=2,sz=2)
mc.setAttr(chue[0]+'.tx',3)

ฟังก์ชันที่ตรงกันข้ามกับ setAttr() ก็คือ getAttr() ฟังก์ชันนี้มีไว้หาค่าขององค์ประกอบที่เราต้องการ
print(mc.getAttr('klong.tx'))

เช่นเดียวกับ setAttr() คือจะใช้ชื่อเต็มหรือชื่อย่อก็ได้ แล้วก็ถ้าเลือกวัตถุอยู่แล้วก็แค่พิมพ์จุดตามด้วยชื่อองค์ประกอบ
mc.select('klong')
print(mc.getAttr('.tx'))

ถ้าจะดูตำแหน่งทั้ง ๓ แกนพร้อมกันก็ใส่ .t
print(mc.getAttr('klong.t'))

นอกจากโหนดหลักของวัตถุแล้ว คราวนี้ลองมาดูโหนดที่เก็บข้อมูลรูปทรงของวัตถุกันบ้าง ลองดูของทรงสี่เหลี่ยมอันเดิม
chue = mc.polyCube(w=9.5,h=10.5,d=8.5,sx=2,sy=2,sz=2,n='klong')
print(mc.listAttr(chue[1],k=1,sn=1))

จะเห็นว่าคราวนี้ใช้เป็น chue[1] ซึ่งคือโหนดที่เก็บชื่อโหนดรูปทรงวัตถุ

จะได้
[u'axx', u'axy', u'axz', u'w', u'h', u'd', u'sw', u'sh', u'sd']

รวมทั้งหมดมี ๙ ตัวซึ่งเป็นองค์ประกอบ

ชื่อในรายการ ชื่อเต็ม ชื่อย่อ ความหมาย
width w ขนาดตามแนวแกน x
高さ height h ขนาดตามแนวแกน y
深度 depth d ขนาดตามแนวแกน z
幅の分割数 subdivisionsWidth sw จำนวนที่แบ่งตามแนวแกน x
高さの分割数 subdivisionsHeight sh จำนวนที่แบ่งตามแนวแกน y
深度の分割数 subdivisionsDepth sd จำนวนที่แบ่งตามแนวแกน z
axis ax แกนหัน

โดยที่แกนหันนั้นแบ่งย่อยออกเป็น ๓ แกน เป็น axx axy axz

สามารถใช้ setAttr() และ getAttr() ได้ในลักษณะเดียวกัน เช่น
mc.setAttr(chue[1]+'.w',20)
print(mc.getAttr(chue[1]+'.w'))





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

และนอกจากองค์ประกอบมาตรฐานที่มีอยู่แล้วยังสามารถเพิ่มองค์ประกอบที่เราต้องการลงไปใหม่เองได้อีกด้วย



อ้างอิง

<< บทที่แล้ว      บทถัดไป >>
หน้าสารบัญ


-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python >> mayapython
-- คอมพิวเตอร์ >> 3D >> maya

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文