chapter-02b - revised · chapter 2: maya embedded language basic concepts arus kunkhet, phd chapter...

22
Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation and Rendering Techniques Chapter : Maya Embedded Language Basic Concept Topics: Part I: variables, random, get attributes, and set attributes Part II: statements, conditional operators, and loops

Upload: others

Post on 27-Sep-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 

 

Page 2: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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

ประเภทตาง ๆ

Page 3: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 มอะไรบาง

Page 4: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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

Page 5: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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

Page 6: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 เหมอนการนบทวไปของเรา ตวอยางเชน

Page 7: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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: ตวอยางการจดวางตวละครขนพนฐานโดยการคานวณจากสดสวนของวตถ

Page 8: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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));

Page 9: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 ยงมอกมากมายซงจะไดนาเสนอในบทตอไป

Page 10: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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;

Page 11: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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) //

Page 12: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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);

Page 13: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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

Page 14: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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) ไดดวย

Page 15: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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;

Page 16: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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;

Page 17: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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;

Page 18: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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

Page 19: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 งานในเครองใหเรยบรอยกอน

Page 20: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 กอนแลวจง

จะเคลอนวตถ

Page 21: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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 คอ

Page 22: Chapter-02B - Revised · Chapter 2: Maya Embedded Language Basic Concepts Arus Kunkhet, PhD Chapter 2 1 951301: Advanced Animation and Rendering Techniques 951301: Advanced Animation

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