chapter-02b - revised · chapter 2: maya embedded language basic concepts arus kunkhet, phd chapter...
TRANSCRIPT
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 1
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
Chapter :MayaEmbeddedLanguageBasic
Concept
Topics:
Part I: variables, random, get attributes, and
set attributes
Part II: statements, conditional operators, and
loops
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 2
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
เอกสารประกอบการเรยน รายวชา ANI 951301 สาขาวชาแอนนเมชนและเกม วทยาลยศลปะ สอ และเทคโนโลย มหาวทยาลยเช ยงใหม
Chapter :MayaEmbeddedLanguageBasicConcepts
วตถประสงค 1. เพอใหนกศกษามความเขาใจในคณลกษณะ ประเภท และการ
ใชงานของ variables ในโปรแกรม Maya และ MEL scripts วาม
การทางานอยางไร
2. เปนการปพนฐานความเขาใจใน programming basic
concepts และ MEL scripting language
3. แนะแนวทางการประยกตใชเพอการ apply ความรดงกลาวใน
มตของการ generate ตวละครสามมต เพอเปนแนวทางพนฐานให
นกศกษาสามารถนาไปพฒนาองคความรและตอยอดไดตอไป
4. ใหนกศกษาเขาใจถงการใช statements แบบตาง ใๆน MEL
5. เขาใจถง concepts ของการใชคาสง loops ประเภทตาง ๆ
เนอหาการสอน สวนท 1: การใช variables, random, get attributes, และ set
attributes
สวนท 2: การใช statements, conditional operators, และ loops
ประเภทตาง ๆ
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 3
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
MEL Basic Concepts
MEL เปนโปรแกรมภาษาอนหนง ซงม rules และ structures เชนเดยวกบโปรแกรมภาษาอนๆ นกศกษา
ทมพนฐานการเขยนโปรแกรมอยแลว สามารถเขาใจพนฐานการใช MEL ไดอยางรวดเรว สวนนกศกษา
สายแอนนเมชน อาจยงขาดความรพนฐานในการเรมตนทาความเขาใจการเขยนโปรแกรมอย
เนอหาวชานออกแบบเพอใหนกศกษาทไมมพนฐานการเขยนโปรแกรมสามารถเขาใจได และชวยป
พนฐานเบองตนทจาเปน
โดยเนอหาในคาบนจะมงเนนท basic concepts ในการเขยนโปรแกรม MEL ซงเปนพนฐานในการ
ประยกตใชโปรแกรมตอไปในภายหนา เนอหาอาจมความซบซอนสาหรบบางคน แตขอใหทาความ
เขาใจความรพนฐานทจาเปนเหลานเพอเปนพนฐานการเรยนในภาคการศกษาน
Variables
Variables คอตวแปรทเราใชในการเขยนโปรแกรม เปนสงทเกบ data รปแบบตางๆใน MEL ถาสบสนวา
variable มหนาทการทางานอยางไร ใหลองจนตนาการตามสถานการณนในการเปรยบเทยบ
นายสชาตตองการไปเบกเงนทธนาคาร เมอเดนเขาไปในธนาคารพบวามผคนอยมากมาย ทางเจาหนาท
ธนาคารจงบอกใหนายสชาตกดบตรคว นายสชาตกดบตรควออกมาไดเบอร A101 เมอถงเวลาทควของ
นายสชาตมาถง เจาหนาทกเรยกคว A101 ออกมาโดยททกๆคนทคอยควอยในธนาคารทราบวา
หมายถงนายสชาตทถอบตรควหมายเลขนนอย
ในเชงการเขยนโปรแกรมกเปนเชนเดยวกน ใหคดวาในการเขยนโปรแกรมหนงๆคอธนาคาร สวนลกคาท
เดนเขามาคอสงทเราตองการนาคาเขามาในโปรแกรม สวน variable กคอบตรควนนเอง เพอใหทกคนใน
ธนาคารทราบวาเราหมายถงใคร ทางธนาคารจงสรางตวแปรขนมาในการอางองถงบคคลนน
ในการทางานของ MEL เราตองสรางสงๆหนงขนมาเพอใชในการทเราจะใสคา data ตางๆเขาไป โดย
เพอใหโปรแกรมทราบวาสงๆนนคอ variable เราตองใสเครองหมาย $ นาหนาชอของสงนน ยกตวอยาง
เชนการประกาศตวแปรชอ MyNumber สามารถทาไดโดยการตงชอวา $MyNumber ทงนตว data ทเรา
จะนาเขามามหลายลกษณะ ซงตองเลอกประเภทของ variable ใหเหมาะสม เราลองมาดกนวาประเภท
ของ variables มอะไรบาง
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 4
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
The Variable Types
เนองจากบทเรยนนเปนการทาความเขาใจขนพนฐาน concepts การใช MEL จงขอแบง variables
ออกเปนหาประเภทหลกๆดงน
1. Integer Numbers
เรามาทาความรจกกบ variable ประเภทแรกกนเรยกวา integer หมายถงตวเลขเตมแบบไมทจดทศนยม
เชน 1, 23, 512 เปนตน เราจะใชตวเลขเหลานเมอไหร ยกตวอยางของสถานการณทเหนไดชดเชน การ
ทา Boolean หรอการตรวจสอบ objects ภายใน list หรอการ return คาจากการสรางเมน เปนตน
ในการทา Boolean เราใชตวเลข 0 แทน off, no หรอ false เมอ 1 แทนคา on, yes หรอ true (นกศกษา
จะเขาใจขนในบทตอๆไป) สวนการตรวจสอบลาดบของ objects จากใน list โปรแกรม Maya จะ return
คาเปน integer numbers เชน 0 หมายถง ลาดบแรก 1 หมายถงลาดบทสอง 2 หมายถงลาดบท 3 และ
ตอๆไปเปนตน และอกสถานการณทพบเหนไดบอยคอการ return คาจากป ม radio buttons ในการสราง
เมนดวย MEL ซงจะอธบายอยางละเอยดในบทหลงๆตอไป
โดยทคาสงในการประกาศตวแปรแบบ integers สามารถทาไดโดยใชคาสง int ตามดวย $ชอของตวแปร
นนๆ ตวอยางเชน int $myNumber = 4;
หมายถงการประกาศตวแปรแบบ integer ทชอ myNumber ใหมคาเทากบ 4 นนเอง
2. Floating-Point Number
Floating points คอตวเลขทศนยมแบบ 32 bits เชน 1.2, 3.32357, 0.013 เปนตน เราจะตองใชตวเลข
แบบนบอยมากในการทางาน ยกตวอยางเชนคาตวเลขตางๆจากการ transform วตถ การกาหนดคาส
หรอการกาหนดคา weighing เปนตน
นกศกษาอาจมความสงสยวาเหตใดเราจงไมใช floating points ทงหมดแทน integers ในเมอ floating
points กสามารถจดการกบเลขทไมมเศษไดเชนกน (เชน 3.0, 12.0 หรอ 423.0) ทงนเนองจากวา
floating-point number จะใชทรพยากร RAM มากกวา integers อยางมาก เราจงควรวางแผนและ
ตดสนใจเลอกใช integers ในทกโอกาสททาได และใชคา floating-points เมอมความจาเปนเหมาะสม
เทานน อกเรองหนงทเราควรจะตองพงระวงไว คอการท Maya จะปดเศษทศนยมออกใหเหลอเพยง 6
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 5
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
หลก ในการ print คาใน interface หรอ file ซงนกศกษาควรจะพงระวงไวเมอตองการนาตวเลขไปใชใน
คาสงอนๆตอไป
โดยทคาสงในการประกาศตวแปร floating-points สามารถทาไดโดยใชคาสง float ตามดวย $ชอตวแปร
นนๆ ตวอยางเชน Float $pi = 3.1415926536;
หมายถงการประกาศคาตวแปรแบบ floating-points ทชอ pi ใหมคาเทากบ 3.1415926536 นนเอง
3. Vector Numbers
ใน MEL นน vector numbers จะแสดงในรปของ floating-points สามตว คนดวยเครองหมาย comma
(,) และอยระหวางวงเลบ angled brackets (<<…>>) ตวอยางของคา vector numbers เชน << 0, 1,
0 >>
เนองจาก vector numbers มคณลกษณะในการแสดงออกมาเปนตวเลขสามตว จงถกนาไปใชในการ
บอกตาแหนง (position) ของจด (vertex) วตถ, คาส, IK handle’s pole vector
โดยทคาสงในการประกาศตวแปร vector numbers สามารถทาไดโดยใชคาสง vector ตามดวย $ชอตว
แปรนนๆ ตวอยางเชน vector $moveY = << 0, 1, 0 >>;
หมายถงการประกาศคาตวแปรแบบ vector numbers ทชอ moveY ใหมคาเทากบ 0, 1, 0 นนเอง
4. Strings
Strings จะถกใชในการจดการกบขอความ texts เชนตวอกษร, ชอ object หรอ ชอของสวนประกอบ
ตางๆใน UI เมอตวแปรถกประกาศใหเปน strings ไมวาจะเปนตวเลขหรอตวหนงสอโปรแกรมจะคานง
มนเปนเพยงตวหนงสอเทานน
ในการทางานกบตวแปร strings มขอพงระวงคอ หนงคอเรองของโปรแกรมจะคานงถงตวหนงสอแบบ
case-sensitive นนคอ MyNumber จะมความแตกตางกบ mynumber หรอ myNumber และสองคอ
เรองของ escape characters โดยเราสามารถใช เครองหมาย “\” ในระหวางคาเพอแสดงวาตวอกษรท
ตามหลงเครองหมาย “\” เปน escape character
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 6
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
อะไรคอ escape characters? ทกครงทโปรแกรมเหนเครองหมาย “\” โปรแกรมจะทาการมองไปท
ตวหนงสอถดไปวามความหมายพเศษอยางไร ซงอาจเปน function พเศษเชน \n หมายถงใหเรมบรรทด
ใหม, \r หมายถง carriage return หรอ \t หมายถงการ tab character นนเอง นอกจาก function พเศษ
ดงทยกตวอยางมาแลว escape characters ยงหมายถงการเปลยนความหมายของสญลกษณเดมทม
อยเปนอยางอนได ตวอยางจากบทเรยนทแลวเชนเมอเราจะใหโปรแกรม print ขอความอะไรขนมา
สามารถทาไดโดยใสขอความไประหวางเครองหมาย “” เชน print "Hello"; //โปรแกรมจะ return ขอความวา Hello
แตถาเราตองการใหแสดงตว “” ดวยสามารถทาไดโดยกาหนดให “” เปน escape characters ดวย \ ดงน print "\"Hello\""; //โปรแกรมจะ return ขอความวา "Hello"
5. Array
ประโยชนของ array คอเราสามารถ collect คาหลายๆคามาไวในตวแปรเดยวได คาแตละตวใน array
สามารถเปนไดทง integers, floating-points, strings หรอ vector แตทกวาทเกบในหนง array จะตอง
เปนชนดเดยวกน ใน Maya เราจะเรยกวาตางๆทเกบไวใน array วา scalar นกศกษาจะสงเกตไดจาก
หนาตาง feedback area เมอใดกตามทคาใน array มปญหา เราจะได feedback รายงานวา scalar ม
ปญหา
เราสามารถตงคา array ไดโดยการใชเครองหมาย “[]” ตอทายชอของ variable ทตง ตวอยางเชน int $myNumber[]; float $objectDepth[]; string $objectName [];
ในกรณทเราตองการกาหนดคาไวในตว array เลยตอนทสรางขนมา สามารถทาไดโดยการใช
เครองหมาย “{}” ครอบคาทตองการโดยใช comma เปนตวแบงดงตวอยาง int $myList[] = {1, 2, 3, 4, 5}; float $myList2[] = {0.1, -24, 15.99, 42}; string $myObject[] = {"myCube", "myCylinder", "mySphere", "myCone"};
ในการใชงาน array คาทกๆคาในหนง array จะเรยกวา array element โดยทแตละ array element จะ
มหมายเลขประจาตวของตวเองอยเรยกวา index คาแรกสดใน array element จะมหมายเลข index =
0 ตวทสองจะม index = 1 ตวทสาม index = 4 แตเพมขนแบบนไปเรอยๆ ในการทางานอาจเกดความ
สบสนในชวงแรกได เพราะ index เรมจาก 0 ไมใช 1 เหมอนการนบทวไปของเรา ตวอยางเชน
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 7
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
string $myObject[] = {"myCube", "myCylinder", "mySphere", "myCone"}; print $myObject[1];
โปรแกรมจะ return วา myCylinder แทนทจะเปน myCube เนองจาก myCube ม index = 0 นนเอง
เราสามารถใช array ในการเรยกด object ทถก selected ใน listไดดวยวธดงน string $myObjectList[] = `ls -selection`; print $myObjectList[0]; // โปรแกรมจะ print ชอ object ตวแรกใน list ใหด
สาหรบการ print objects ทถก selected ภายใน list สามารถทาไดโดย
print `ls -selection`; // flag –selection สามารถยอไดเปน –sl // ls คอตว L เลก + S เลก โปรดอยาสบสน
Workshop (Kunkhet, 2017; Kunkhet and Klaynak, 2016) ทนเราลองนาความรทไดมาประยกตใชในแบบทดสอบงายๆกน ยกตวอยางวาถาเราตองการสรางรปคน
ขนมาอยางงายๆโดยจะมสวนประกอบคอ หว ตว และขาสองขางดงตวอยางดานลาง
Fig 02-01: ตวอยางการจดวางตวละครขนพนฐานโดยการคานวณจากสดสวนของวตถ
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 8
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
เราจะทดลองสรางตวละครตวนขนดวย MEL scripts โดยเรมจากการสรางขาซายกอน แลวจงไลขนไป
ถงสวนหว ใหตวละครยนอยบนระนาบของ grid lines ดงตวอยาง โดยใหนกศกษาประกาศคาตวแปร
เพอใชในเกบคาสดสวนตางๆของตวละคร ในการใชคานวณ proportion ของตวละครทงหมด โดย
กาหนดสดสวนดงน
1. ใหขามขนาดเรมตนเทาไหรกได
2. ใหลาตวมขนาดความสงเปน 0.7 เทาของความสงขา
3. ใหลาตวมความกวางเปน 3 เทาของความกวางขา
4. ใหลาตวมความลกเปน 1.1 เทา ของความลกขา
5. ใหสวนหวมความสงเปน 0.5 เทาของความสงลาตว
6. ใหสวนหวมความกวางเปน 0.6 เทาของความกวางลาตว
7. ใหสวนหวมความลกเปน 2 เทาของความลกลาตว
เราสามารถทาไดโดยการใชคาสง MEL ดงน
// สรางสวนขา float $legH = 6; float $legW = 1; float $legD = 1; polyCube -h $legH -w $legW -d $legD -name LeftLeg; move -y ($legH/2);
// สรางสวนลาตว float $bodyH = ($legH*0.7); float $bodyW = ($legW*3); float $bodyD = ($legD*1.1); polyCube -h $bodyH -w $bodyW -d $bodyD - name Body; select -r Body; move -y ($legH+($bodyH/2)); select -r LeftLeg; move -x (-$bodyW/4); polyCube -h $legH -w $legW -d $legD -name RightLeg; move -y ($legH/2); move -x ($bodyW/4);
// สรางสวนศรษะ float $headH = ($bodyH*0.5); float $headW = ($bodyW*0.6); float $headD = ($bodyD*2); polyCube -h $headH -w $headW -d $headD -name Head; move -y ($legH+$bodyH+($headH/2));
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 9
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
นกศกษาอาจเกดความสงสยวาทาไมเราถงตองตงคา variables ใหกบสดสวนตางๆของตวละคร ในเมอ
เราสามารถนงคานวณแลวใสเปนคาตวเลขไปได ทงนเนองจากเราสามารถนาไปประยกตใชใหเปน
ประโยชนไดตอไปในหลายลกษณะ ดงตวอยางตอไปน ถาเราเกดตองการสรางตวละครขนมามากกวา
หนงตวละ ถาเราตองการสราง random characters ขนมาหลายๆตวใหมขนาดไลเลยกน แตไม
เหมอนกนทเดยว เราสามารถทาไดโดยแกคาสงทเราสรางขนมาเมอครเพยงนดเดยว แตกอนอนเราลอง
ทาความรจกคาสงทชอวา random กนกอน
Random
ในกรณทเราไมตองการกาหนดคาตวแปรออกมาตายตว แตเราตองการใหโปรแกรม random คาให
สามารถทาไดดวยคาสงดงน float $Depth = rand(0.5,2);
ถาเราปอนคาสงตามน เราจะไดคาตวแปรทชอวา $Depth ทมคาอยระหวาง 0.5 ถง 2 การตงคา random
สามารถตงใหตวแปรไดทงแบบ integers และ floating-points ตวเลขในวงเลบคอคาตาสดและสงสดท
อนญาตใหสมได โดยจะใช comma ในการคนระหวางคาสงสดและตาสด
จากความรตรงนเราสามารถแกเฉพาะสวนเรมตนสามบรรทดแรกของคาสงทเราสรางขนเมอสกครท
ผานมา โดยกาหนดใหคาตงตนของขนาดขาเปนคา random ไดดงน
เพมสามบรรทดนเขาไปกอนหนาคาสงเดมทเขยนไว เพอสรางตวแปรขนาด กวาง x ยาว x สง ของขาเปน
ตวเลขแบบ random โดยกาหนดใหคาทไดเกบในตวแปรชอ $H, $W และ $D float $H = rand(4,10); float $W = rand(0.5,2); float $D = rand(0.5,2);
แกสามบรรทดแรกของคาสงเดมทสรางขน แทนทเราจะกาหนดเปนตวเลข แตเราใหดงเอาคา random
มาใชแทน float $legH = $H; float $legW = $W; float $legD = $D;
จากนนลอง run คาสงดจะพบวาในแตละครงเราสามารถ generate ตวละครทมสดสวนตางๆกนออกมา
ไดไมจากด นเปนตวอยางงายๆในการประยกตใช MEL เบองตน ในการทางานและขอบเขต
ความสามารถของ MEL ยงมอกมากมายซงจะไดนาเสนอในบทตอไป
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 10
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
Get Attributes and Set Attributes
อกสองคาสงทมความจาเปนคอคาสงในการเรยกคา attribute (getAttr) และคาสงในการตงคา
attribute (setAttr)
ตวอยางตอไปจะชวยใหนกศกษาเขาใจการใชงานทงสองคาสงนมากขน ใหนกศกษาลองสราง sphere
ขนมาลกหนงโดยตงชอวา Ball จากนนให move มนขนตามแนวแกน Y = 5 units polySphere -name Ball; move -y 5;
จากนนเราลองใชคาสง get attribute เพอตรวจสอบคาตาแหนงของวตถทชอ Ball ดงตวอยางดานลาง float $X = `getAttr Ball.tx`; float $Y = `getAttr Ball.ty`; float $Z = `getAttr Ball.tz`; vector $BallPosition = << $X, $Y, $Z>>; print $BallPosition; //โปรแกรมจะ return คา 0 5 0 ท feedback area
จากตวอยางดานบน เราตงคาตวแปรแบบ float ขนมาสามตว คอ $X, $Y และ $Z โดยใช get attribute
สงใหเรยกคา attributes ของ translate X, Y และ Z ตามลาดบ จากนนเราประกาศตวแปรแบบ vector
ขนมาเพอเกบคาสามตวนไว แลวจงสง print คาออกมาดในตอนสดทาย
การใชงาน getAttr จะพบไดบอยมากในเวลาทเราตองการคาจากการคานวณหรอ modify สกอยางเขา
มาโดยทเราไมจาเปนทจะตองระบคานนๆตอนประกาศ
เราไดเรยนรถงคาสง move กนไปแลว move จะทางานโดยเคลอน object จากจดเดมทมนอยไปยง
ตาแหนงใหมดวยคาทกาหนด นอกจากการใชคาสง move และ move -r แลว เรายงสามารถใชคาสง
กาหนดตาแหนงของวตถไดดวยการใช set attribute จากโจทยเดมทเราม ใหเราลองยายวตถชอ Ball
ของเราใหไปอยทตาแหนง translate X, Y และ Z เปน 5, 1, 5 ดวยคาสงดานลาง setAttr Ball.tx 5; setAttr Ball.ty 1; setAttr Ball.tz 5;
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 11
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
เรายงสามารถใชคาสง set attribute ไดกบการทางานอกหลายๆประเภท เชนการ set material
- ใหนกศกษาทดลองสราง object ขนมา 1 ชน
- สราง material ใหมขนมา ในทนขอใชเปน Lambert
- เปลยนชอ material จาก lambert1 เปน myMaterial
- ให apply material ตวนลงใน object ทสราง
ทนเราลองมาดวธการปรบแตงคาตางๆของ material ตวนกน โดยเราจะปรบแตงคาความโปรงใส
(transparency) และคาส (colour) ของมน โดยเราสามารถปรบคาความโปรงใสไดดวยคาสง setAttr "myMaterial.transparency" -type double3 0 0 0;
โดยหมายเลข 0 0 0 ดานทายแสดงคาวามความโปรงใสเปนศนย (ทบสนท) ถาเราตองการใหมนมคา
ความโปรงใสเพมขนเทาไหรใหเพมคาทเลขสามตวน โดยจะมคาความโปรงใสสงสดท 1 1 1
จากนนเราลองมาปรบคาสกน โดยสามารถทาไดดวยคาสง setAttr "myMaterial.color" -type double3 0 0 0;
โดยหมายเลข 0 0 0 (สขาว) แสดงคาของการแทนสแบบ RGB นนเองโดยแตละคามคาเตมท 1 1 1 ซง
จะเปนสดา ใหลองเปลยนคาเปน 1 0 0 จะไดสแดงเปนตน
ถาเราตองการสราง material ประเภท lambert ขนมาใหม แลวตงชอวา myMaterial ผาน MEL สามารถ
ทาไดโดย shadingNode -asShader lambert -name myMaterial; // สราง lambert ขนมา ใหชอวา myMaterial // sets -renderable true -noSurfaceShader true -empty -name
myMaterialSG; connectAttr -f myMaterial.outColor
myMaterialSG.surfaceShader; // เนองจากใน Maya ตง material ตวหนงจะม node มากกวาหนงตวจงตองสรางแลว
connect มนเขาไวดวยกน โดยใหเราใชชอทเราตงตามดวย SG เพอปองกนความสบสน //
แลวเราสามารถ apply material ใหวตถดวยคาสง select -r myObject1 myObject2 myObject3 myObject4; // บรรทดแรกเปนการเลอกวตถทเราตองการ apply material ทงหมด (ถามอนเดยวใสชอเดยว)
// sets -e -forceElement myMaterialSG; // เปนการ connect วตถทเลอกเขากบ node ของ material (ในทนชอ
myMaterialSG) //
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 12
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
*ขอพงระวง MEL จะใชการสะกดคาแบบ American English เชนคาวา color ผ ทคนเคยกบ British
English (colour) ควรระมดระวงในการเรยกใชคาสง
Workshop (Kunkhet, 2017; Kunkhet and Klaynak, 2016)
จากความรทไดเรยนมา ใหนกศกษาลองออกแบบสรางตวละครขนมาใหม (หรอจะใชตวเดมจาก
workshop1 มาแกไขกได) โดยทตวละครตวนตองมสวนประกอบของ หว ตว ขาสองขาง และแขนสอง
ขาง เมอเสรจแลวใหทดลองใส material ลงไปใหตวละครดวย ดงตวอยางดานลาง
Fig 02-02: ตวละครทประกอบดวยศรษะ ลาตว แขน และขา ทมการใสพนผว
โดยในคราวนใหนกศกษาทดลองใชคาสง get attribute (getAttr) ในการหาตาแหนงของวตถ แลว
ทดลองใช set attribute (setAttr) ในการจดวางตาแหนงของวตถ ถามความสงสยใหลองทาตามตวอยาง
ดานลาง แลวทาความเขาใจเพอไปประยกตใชตอ // คาสงจาก workshop1 //
float $H = rand(4,10); float $W = rand(0.5,2); float $D = rand(0.5,2);
float $legH = $H; float $legW = $W; float $legD = $D;
polyCube -h $legH -w $legW -d $legD -name LeftLeg; move -y ($legH/2);
float $bodyH = ($legH*0.7);
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 13
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
float $bodyW = ($legW*3); float $bodyD = ($legD*1.1); polyCube -h $bodyH -w $bodyW -d $bodyD -name Body; select -r Body; move -y ($legH+($bodyH/2));
select -r LeftLeg; move -x (-$bodyW/4);
polyCube -h $legH -w $legW -d $legD -name RightLeg; move -y ($legH/2); move -x ($bodyW/4);
float $headH = ($bodyH*0.5); float $headW = ($bodyW*0.6); float $headD = ($bodyD*2); polyCube -h $headH -w $headW -d $headD -name Head; move -y ($legH+$bodyH+($headH/2));
// คาสงใหมเรมจากตรงน
float $armW = ($legH*0.8); float $armH = ($legW*0.8); float $armD = ($legD*0.8); polyCube -h $armH -w $armW -d $armD -name LeftArm; move -y ($legH + $bodyH - $armH/2); move -x (-($armW/2+$bodyW/2));
polyCube -h $armH -w $armW -d $armD -name RightArm; float $armPosY = `getAttr LeftArm.ty`; float $armPosX = `getAttr LeftArm.tx`; setAttr RightArm.tx (-$armPosX); setAttr RightArm.ty $armPosY;
shadingNode -asShader lambert -name myMaterial; sets -renderable true -noSurfaceShader true -empty -name
myMaterialSG; connectAttr -f myMaterial.outColor
myMaterialSG.surfaceShader;
select -r LeftLeg Body RightLeg Head LeftArm RightArm; sets -e -forceElement myMaterialSG;
setAttr "myMaterial.transparency" -type double3 0 0 0; setAttr "myMaterial.color" -type double3 1 0 0.5;
Statements
คอการบอกถงการตงคาหรอเปรยบเทยบคาวาเปนอยางไรภายใน MEL ซงสามารถแบงออกไดเปนสาม
ประเภทหลกๆคอ assignment statement, arithmetic statement และ condition statement
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 14
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
1. Assignment Statement
นเปน statement ทงายทสดในการใช MEL ซงเราไดใชกนไปพอสมควรแลวตอนทประกาศคาตวแปร
สวนทสาคญทสดของ assignment statement คอเครองหมายเทากบ (=) การสราง statement ตวนเรา
จะประกาศตวแปรในฝงซาย แลวจงประกาศคาของมนทางขวามอ เราไมจาเปนทจะกาหนดคาตวแปร
ตอนทประกาศเทานน แตเราสามารถปรบคาไดตลอดเวลาโดยการใช assignment statement ใหกบคา
ใหมของมน int $myNumber = 20;
เมอเราประกาศตวแปร $myNumber ใหมคาเทากบ 20 $myNumber = 2; print $myNumber;
เราจะไดผลลพธวา $myNumber ถกเปลยนเปน 2 ในการเปลยนคา (reassign) ใหกบตวแปรใดๆ เราไม
จาเปนตองประกาศตวแปรใหม เพยงใสคาไปใหมเทานน
เมอใดกตามทฝงขวามอของเครองหมาย (=) เปนคาทเราตองการจาก return value เราสามารถทาได
โดยใชสญลกษณ (``) ครอบคาสงนน ดงทเราเหนไดจากตวอยาง get attribute ทผานมา float $tx =`getAttr Ball.tx`;
สงสาคญในการใช assignment statement คอเราตองประกาศประเภทของตวแปรใหเหมาะสมกบชนด
ของคาทเราตองการจดเกบ การประกาศคาตวแปรผดประเภทอาจทาใหเกด error ได
2. Arithmetic Statement
Arithmetic statement แตกตางจาก assignment statement คอมนจะมตวเลขเปนองคประกอบ เราไม
จาเปนตอง capture ผลลพธของ mathematical statement ลงไปใน variable โดยตรง แตเราสามารถ
ประหยดเวลาไดโดยการใส mathematical statement ลงในคาสงโดยตรงไดเลย ดงตวอยางดานลาง float $X = `getAttr Ball.tx`; setAttr Ball.tx ($X + 5); setAttr Ball.tx (`getAttr Ball.tx` + 5);
โดยทบรรทดทสองและสามมความหมายเหมอนกน มคาเทากบ move –x 5; นนเอง
นอกจากเราสามารถใช mathematical statement กบตวเลขไดแลว เรายงสามารถใชกบขอความ
ตวหนงสอ (string) ไดดวย
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 15
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
string $myString = ("My" + " " + "Cat"); print $myString; //เราจะไดผลลพธวา My Cat
เรายงสามารถเปลยนคาของตวแปรไดโดยการใช mathematical statement เชนกน float $num = 5; $num = ($num*2); // Result: $num = 10
MEL กเชนเดยวกบโปรแกรมภาษาอนๆ เมอเราเขาใจพนฐานแลวเราจะพบวาม shortcuts มากมาย
ยกตวอยางเชนการบวก ลบ คณ หาร float $myNum = 5; $myNum /= 3; //จะมคาเทากบคาสงเตม $myNum = ($myNum / 3); //เชนเดยวกบ +=, -=, *=
เราสามารถใช mathematical statement ในการเพมหรอลดคาของคาตวแปรทเรามทละ 1 ไดโดยการใช
เครองหมาย (++) กบ (--) ใสทดานหนาหรอดานหลงตวแปรทตองการ int $x = 0; //เมอใส (++ หรอ --) ไวดานหนา โปรแกรมจะเพมหรอลดคาใหกบตวแปรตวนน (ในทนคอ $x) และม
ผลตอการคานวณบรรทดนนทนท ($y) int $x = 0; int $y = ++$x; //$x จะมคา = 1 //$y จะมคา = 1 //เมอใส (++ หรอ --) ไวดานหลง โปรแกรมจะเพมหรอลดคาใหกบตวแปรตวนน (ในทนคอ $x) แตคาท
เปลยนแปลงยงไมมผลตอการคานวณในบรรทดนน ($y) int $x = 0;
int $y = $x++; //$x จะมคา = 1 //$y จะมคา = 0 หรอคอคา $x กอนใส ++
3. Conditional Statement
เปน statement ทสรางขนมาเพอใหโปรแกรมตรวจสอบคาทใหไว เชนวาเปน true หรอ false ซงรปแบบ
ของมนสามารถแบงยอยไดหลายประเภทดงน
3.1 If Statement
นเปนคาสงพนฐานใน conditional statement เราสามารถเรยกใชไดดงตวอยาง
if (condition) statement;
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 16
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
condition คอเงอนไขทเราตง แลว statement คอ action ทจะใหทาถาเงอนไขเปน true ตวอยางเชน ถา
เราตองการทราบวา object ทชอวา Head มอยใน scene ทเราทางานอยไหม ถามให print ขอความวา
“Head is there” ใหเราทราบ สามารถทาไดโดย if (`objExists Head`) print "Head is there";
นอกจากการใช if แลว เรายงสามารถใช if + else เพอเพมประสทธภาพในการทางานไดอกหลากหลาย
ตวอยางของ if-else ไดแก if (condition) statement; else statement;
การใชงาน if-else จะสามารถเพมความยดหยนในการทางานไดมากกวา if ซงจะ execute คาสงเมอ
condition เปน true เทานน ถาไมใชกจะไมมการกระทาตอแตอยางใด แต if-else โปรแกรมจะตรวจสอบ
ดวา condition เปนจรงไหม ถาเปนจรงกทา ถาไมจรงกจะทาตามท else สง
อกประเภทของการใช if คอ else-if ซงเปนเสมอนการสราง layers ใหกบคาสง if ตวอยางการใช else-if
คอ if (condition) statement; else if (condition) statement;
เราสามารถใช else-if สราง layers ให if มากเทาไหรกได ตวอยางสถานการณทใช เชนเมอเราตองการ
ทา actions ทตางกน ขนอยกบประเภทของ object ทถก selected ราสามารถใชทง if, else-if และ else
รวมกนไดดงตวอยางดานลาง if (condition) statement; else if (condition) statement; else statement;
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 17
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
3.2 Switch Statement
การใช switch statement เหมาะกบการทางานกบคาท return มาของ rules based ทมความซบซอน
เราสามารถกาหนดสงทตองการใหทา จาก values ทได return มาโปรแกรมจะเลอก execute คาสงท
เหมาะสม การใชคาสง switch statement เปนการทางานแบบ flow control ดตวอยางการใชดานลาง switch (condition) { case possibility: statement; break; // เราจะตองมการใชคาสง break ขนระหวาง case possibilities ทกครง case possibility: statement; break; case possibility: statement; break; case possibility: statement; break; default: // มคาเทากบ else คอถา condition ไมตรงขอไหนเลย ใหทาตามขอน statement; break; }
เมอโปรแกรมเจอคาวา switch มนจะเขาไปดท condition จากนนไปดท case โดยไลจากบนลงลาง ถา
condition ตรงกบ possibility ของ case ไหน มนกจะเขาไปทาตาม statement ของ case นนแลวจะ
สนสดทคาสง break ถา condition ไมตรงกบ possibility ของ case โปรแกรมจะวงเขาไปหา case
ดานลางถดไป เชนนเรอยๆ โดยทคาสง default บรรทดสดทาย ทาหนาทเชนเดยวกบ else คอถาไมเขา
case ไหนเลยจะใหทาอยางไร โดยทเราจะม default หรอไมมกได ขนอยกบการออกแบบของเรา
Workshop
ใหนาความรทไดจากการใช switch statement มาสรางคาสงในการ random สรางวตถกน โดยใช
ประโยชนจากการใชคาสง random ในการชวย int $myNumber = rand (1, 6); switch ($myNumber) { case 1: polyCube; break; case 2: polySphere;
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 18
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
break; case 3: polyCylinder; break; case 4: polyCone; break; default: polyTorus; break; }
Conditional Operators
การใช conditional statement ควบคกบการใช conditional operators สามารถทาไดเชนกน คนทม
ความคนเคยกบการเขยนโปรแกรมคงจะสามารถเขาใจถงคณสมบตของมนไดเปนอยางด สาหรบคนท
ไมมพนฐาน conditional operators แบงเปนสองประเภทไดแก Logical Operators และ Relation
Operators
- Logical Operators จะใชเพอเปรยบเทยบ data สองตว สามารถใชไดกบ variables และ conditional
statement ทกประเภท ประกอบดวย
|| จะ return true ถาฝงใดฝงหนงของเครองหมายเปนจรง
&& จะ return true ถาทงสองฝงของเครองหมายเปนจรง
! จะ return true ถา argument ทตาม ! มาเปน false
ตวอยางของการใช logical operators if (argument || argument) statement;
- Relational Operators สามารถใชไดกบ integers, floating-points และ vectors โดยทจะมเทากบ
(==) และไมเทากบ (!=) ทสามารถใชกบ string variables ไดดวย relational operators ทงหมด
ประกอบดวย
> จะ return true เมอคา value ดานซายมากกวาคาดานขวาของ operator
< จะ return true เมอคา value ดานซายนอยกวาคาดานขวาของ operator
== เมอคา value ดานซายเทากบคาดานขวาของ operator
!= เมอคา value ดานซายไมเทากนกบคาดานขวาของ operator
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 19
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
>= เมอคา value ดานซายมากกวาหรอเทากนกบคาดานขวาของ operator
<= เมอคา value ดานซายนอยกวาหรอเทากนกบคาดานขวาของ operator
ตวอยางของการใช relational operators ทสงใหตรวจดวา object ทชอ mySphere เคลอนทไปตาม
แนวแกน X เรอยๆทละ 5 units จนกวาจะพนจด unit mark ท X = 20 โดยทเราไมคานงถงตาแหนง
ปจจบนของมน if (`getAttr mySphere.tx` < 20) move -r 5 0 0 mySphere;
Loops
หวขอตอไปทเราจะเรยนกนคอเรองของ loops ซงมหนาทในการสงใหโปรแกรมทาคาสงใดๆซาไปเรอยๆ
จนกวาจะไดสงทเราตองการ มนอาจดไมใชสงทนาสนใจ แตเราตองศกษาไวเนองจากเปนหนงในคาสงท
เราจะตองใชเปนประจาในการทางานตอไป loops ทเราจะใชในภาคการศกษานแบงเปนสองประเภทคอ
while loop และ for loop ซงมรายละเอยดแตกตางกนเลกนอย
1. The While Loop
เมอ MEL เจอคาสง while loop โปรแกรมจะทางานตามคาสงภายใน loop นนจนกวาจะถงเปาทเราได
ใหไว (given condition is met) คลายกบ conditional statements ทจะถกทาซาไปเรอยๆตราบใดท test
condition ใหผลลพธวา true การใชงาน while นนมความคลายคลงกบ if statement ดงตวอยางทใหไว
ดานลาง while (condition) statement;
ในการออกแบบคาสง while loops นนมขอพงระวง เนองจากโปรแกรมจะทาคาสงซาอยางไมมวนสนสด
จนกวา condition statement จะ return คาวา false ถาเราออกแบบคาสงไมดอาจจะมปญหา run แบบ
ไมมวนสนสดได ดงนนการออกแบบคาสง while loop ผออกแบบตองมนใจวาสดทายแลวเราสามารถได
ผลลพธทไมสอดคลองกบ condition ทเรากาหนดไวตอนแรกได
ดานลางคอตวอยางของการออกแบบคาสงทมความผดพลาด ถานกศกษาตองการทดลองเพอสงเกต
ผลลพธ อยาลม save งานในเครองใหเรยบรอยกอน
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 20
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
int $i = 1; while ($i > 0) print (($i++) + “\n”);
ถาเรา run คาสงขางตนจะพบวา Maya จะ return คาเปนตวเลขทเพมคาขนทละหนงแบบไมรจบ
เนองจากเราตงคาให $i มคาเทากบหนง แลวเราสงวาตราบใด (while) ท $i มากกวาศนยใหโปรแกรม
print ตวเลขเพมคาขนเรอยๆ ทางเดยวทเราจะหยดการทางานของมนไดคอเราตอง Terminate
โปรแกรมเทานน
2. The Do-While Loop
ขอแตกตางของ do-while loop คอ ถาเปน while loop ปกตโปรแกรมจะตรวจสอบ condition กอนทจะ
ตรวจสอบ statement (สงเกตไดจากลาดบทมากอนหลงของ condition และ statement ในการสราง
while loop) ภายหลงจากการ execution do-while loop ครงแรกแลว มนจะทางานเชนเดยวกบ while
loop แตความสาคญมนอยทการ execution ครงแรกนเอง เนองจากการใช while loop ไมมอะไรมา
ประกนไดวา statement ของเราจะถก execution เลยแมแตครงเดยว ในขณะท do-while loop นน
statement จะถกวางไวหนา condition ดงตวอยางดานลาง do statement; while (condition);
ใหสงเกตวา do-while loop จะตองมเครองหมาย (;) ปดทาย condition ดวย ซงแตกตางกบ while loop
ถาเราลมใสจะทาใหเกด error ขน ตวอยางของ do-while loop คอ do move -r 5 0 0; while (`getAttr mySphere.tx` < 10);
จากคาสงนโปรแกรมจะเคลอน object ทชอ mySphere ไปตามแนวแกน X ทนท 5 units แลวจง
ตรวจสอบด condition วามนเกน 10 units marking point ถาเกนแลวมนกจะหยดทางาน แตถาไมเกนก
จะเคลอนตอจนกวาจะเกน ในขณะทถาเราใช while loop โปรแกรมจะตรวจสอบ condition กอนแลวจง
จะเคลอนวตถ
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 21
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
3. The For-In Loop
มประโยชนเมอเราตองการจดการกบ elements ภายใน array คงจากนไดวา array คอ variable ท
สามารถเกบคา values ไดมากกวาหนงคาภายในเครองหมาย [] คาทเกบใน [] เรยกวา elements เรามา
ดตวอยางการใช for-in loop กน for ($variable in $array) statement;
เราจะใชคาวา “in” คนระหวาง variable กบ array ทเราตองการจดการ ทนเราลองมาดตวอยางการใช
งานกน ในทนเราจะลองใช for-in loop ในการเรยกดรายชอ objects ทถก selected อยโดยโปรแกรมจะ
เรยง list ตามลาดบกอนหลงในการ select ให กอนอนตองมวตถกอน ลองสรางวตถขนมาสามชนอะไรก
ได จากนน select ทงสามวตถ แลวพมพคาสงท command line วา ls –sl // แอล เอส-เอส แอล
เพอใหโปรแกรม list ตว objects ทงสามออกมา จากนนลองพมพคาสงท script editor string $myList[] = `ls -sl`; string $myCurrentObj; // หมายถงวตถทถก selected อย ณ ขณะน
for ($myCurrentObj in $myList) {
print ("You have selected " + $myCurrentObj + "\n"); }
ความหมายคอเราประกาศตวแปรประเภทขอความ array ชอ $myList[] โดยให elements ภายใน list
คอชอของ objects ทกาลงถกเลอกอย (`ls –sl`) จากนนเราประกาศตวแปร $myCurrentObj ไวเกบคา
elements ใน array แลวเราใช for-in สงใหโปรแกรมคนหาชอภายใน array ทเราบอกแลวพมพขอความ
You have selected ตามดวยชอของ objects เหลานน ซงจะไดผลลพธประมาณน You have selected yourObj1 You have selected yourObj2 You have selected yourObj3
4. The for Loop
For loop มความสามารถมากกวา for-in แตกมความซบซอนเพมขนมาเลกนอย เราจะใช for loop เมอ
สถานการณทเราม variable ทเราตองการเรมทคาใดคาหนง แลวเปลยนแปลงคาทกครงท loop runs ใน
แตละครงท loop runs โปรแกรมจะตรวจสอบวาควรจะ run ตออกครงหรอหยดลง รปแบบการใช for
loop คอ
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD
Chapter 2 22
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
9513
01: A
dvan
ced
Anim
ation
and
Ren
derin
g Te
chniq
ues
for (initialisation; condition; update condition) statement;
จะสงเกตไดวาม MEL statements สามประเภทคนดวยเครองหมาย semicolons (;) ภายในวงเลบเรา
มาดวาแตละตวมหนาทอยางไร
- Initialisation จะถก run ครงแรกทเรม loop โดยปกตจะเปนการ set คาใหกบตว variable ทจะ
เปลยนแปลงคาเมอมการ run loop ขน
- Condition ทาหนาทเชนเดยวกบ condition ใน while loop คอจะเปนเงอนไขชชดวา loop ยงควรจะ
run ตว statement ภายในตอหรอไม
- Update condition ทกครงภายหลงจากท statement ภายใน loop runs กอนท condition จะถก
ตรวจสอบในรอบตอไป update condition จะทาการแกไขคาของ initialisation ตามทเรา set ไว แลวด
วาคาใหมทไดยงอยใน condition ทควร run ตอไปหรอไม การแกไขคาเชน การเพมหรอการลดคา
initialisation นนเอง ลองดตวอยางดานลาเพอความเขาใจ
int $myInitial = 1; for ($myInitial; $myInitial < 100; $myInitial++) // หรอเราจะประกาศคาตวแปร $myInitial ตรงนกได { print ("This loop has run " + $myInitial + " times" + "\n"); }
จากตวอยาง เราใช for loop ทาการ run ไปเรอยๆ ตราบใดทตวแปร $myInitial มคานอยกวา 100 โดย
ใหเพมคาของ $myInitial ขนทละ 1 ในทกๆรอบท run ($myInitial++) โดยให $myInitial มคาเรมตน =
1
References: - Kunkhet, A., (2017) Designing an Application of 3D Character Modelling in Trialling Size of
Clothes on Online Clothing Shopping, International Conference on Digital Arts, Media and Technology, ICDAMT 2017.
- Kunkhet, A. and Klaynak, K. (2016) Virtual Reality and Collaborative Learning to Improve Students’ Learning Experiences in 3D Modelling, International Conference on Digital Arts, Media and Technology, ICDAMT 2016, pp. 357-361.
- Mark R .Wilkins and Chris Kazmier )2005 (MEL Scripting for MAYA Animators, Morgan Kaufmann Publishers, Elsevier Inc.
- Robert Galanakis )2014 ( Practical Maya Programming with Python, Packt Publishing Ltd. - David Stripinis )2003 (The MEL Companion :Maya Scripting for 3D Artists, Charles River Media,
INC