ปกติพอเราลบพื้นผิวโพลิกอนหรือผิว NURBS ที่ไม่ต้องการออกจากฉากไป หากผิวนั้นเป็นผิวที่ได้มีการป้อนวัสดุให้ไว้ วัสดุที่เคยสร้างไว้จะยังคงเหลืออยู่ไม่ได้หายไปไหน ทั้งที่ก็อาจไม่ได้จำเป็นต้องใช้แล้ว
หากวัสดุไม่ได้ใช้แล้วเหลือไว้ก็ไม่มีประโยชน์ ลบทิ้งดีกว่า แต่บางทีเราก็อาจขี้เกียจมานั่งไล่ดูว่าวัสดุอันไหนที่ไม่ได้ใช้แล้วบ้าง
แต่หากใช้การเขียนโค้ดแล้วก็สามารถทำให้ค้นหาและลบของที่ไม่ใช้ออกได้โดยอัตโนมัติไม่ยากนัก
นอกจากจะลบโหนดของวัสดุแล้ว สิ่งที่ควรลบไปด้วยก็คือเชดดิงกรุปของวัสดุนั้นๆ ซึ่งโดยปกติจะถูกสร้างขึ้นมาพร้อมกัน
แล้วนอกจากนี้ที่ยังอาจต้องการลบไปด้วยก็คือพวกโหนดของเท็กซ์เจอร์ต่างๆซึ่งเชื่อมต่ออยู่กับวัสดุ เช่นเท็กซ์เจอร์รูปภาพจากไฟล์ ดังนั้นเราจะให้โปรแกรมทำการลบไปด้วย
แล้วก็สำหรับโหนดไฟล์ภาพนั้นอาจมีการเชื่อมต่ออยู่กับโหนด placed2d หรือ placed3d ด้วย ดังนั้นหากมีก็ควรจะลบไปด้วย
โค้ดที่จะใช้เขียนได้ดังนี้
# ลบวัสดุ tr = mc.
ls(tr=1)
for mat
in mc.
ls(mat=1):
try:
sg = mc.
listConnections(mat+
'.outColor')[0]
except:
continue for con
in mc.
listConnections(sg):
if(con
in tr):
break else:
try:
mc.
delete(mat)
mc.
delete(sg)
print(u
'ลบ '+mat+u
' และ '+sg)
except: 0
# ลบ bump
for b
in mc.
ls(typ=
'bump2d')+mc.
ls(typ=
'bump3d'):
if(mc.
listConnections(b+
'.outNormal')==
None):
mc.
delete(b)
print(u
'ลบ '+b)
# ลบ multiplyDivide และ plusMinusAverage
for b
in mc.
ls(typ=
'multiplyDivide')+mc.
ls(typ=
'plusMinusAverage'):
if(mc.
listConnections(b+
'.output')==
None):
mc.
delete(b)
print(u
'ลบ '+b)
# ลบเท็กซ์เจอร์
place2d = mc.ls(typ='place2dTexture')+mc.ls(typ='place3dTexture')
for tex
in mc.
ls(tex=1):
pla =
'' for con
in mc.
listConnections(tex,c=1):
if(
'.out' in con):
break if(pla==
'' and con
in place2d):
pla = con
else:
mc.
delete(tex)
print(u
'ลบ '+tex)
if(pla):
mc.
delete(pla)
print(u
'ลบ '+pla)
แค่รันโค้ดนี้โหนดวัสดุที่ไม่ถูกใช้ก็จะถูกลบออกทั้งหมด รวมทั้งเท็กซ์เจอร์ทั้งหมดที่เคยเชื่อมกับวัสดุเหล่านั้นด้วย
คำสั่งหลักๆที่ใช้ก็คือ ls() ซึ่งเอาไว้ลิสต์รายชื่อโหนดชนิดต่างๆตามที่กำหนด โดย mc.ls(mat=1) คือลิสต์โหนดวัสดุทั้งหมด และ mc.ls(tex=1) คือลิสต์เท็กซ์เจอร์ทั้งหมด
และอีกคำสั่งที่สำคัญคือ listConnections() ใช้เพื่อตรวจหาความเชื่อมโยงระหว่างโหนด
รายละเอียดมีเขียนไว้ในเนื้อหา
มายาไพธอนบทที่ ๓๐ สามารถอ่านเพิ่มเติมเพื่อทำความเข้าใจได้
เงื่อนไขที่ตรวจว่าให้ลบวัสดุก็คือดูว่ามีชื่อของโหนดที่เป็นทรานสฟอร์มอยู่ในลิสต์การเชื่อมต่อหรือไม่ โดย mc.ls(tr=1) คือการลิสต์โหนดที่เป็นทรานสฟอร์มทั้งหมด
โปรแกรมจะวนหาซ้ำตามวังวน for ถ้าหาแล้วเจอการเชื่อมต่อก็จะเข้าเงื่อนไขแล้ว break ออกไป แต่ถ้าวนจนครบทั้งหมดแล้วยังไม่เข้าเงื่อนไขก็แสดงว่าไม่พบการเชื่อมต่อใดๆ ก็จะเข้ามาที่ else ซึ่งมีคำสั่ง delete ซึ่งทำการลบทั้งวัสดุและเชดดิงกรุ๊ปของวัสดุนั้นทิ้งไป
ส่วนเงื่อนไขที่ตรวจว่าให้ลบเท็กซ์เจอร์ก็คือดูว่ามีการเชื่อมต่อที่มี .out อยู่หรือไม่ ดังนั้นจะไม่ถูกลบตราบใดที่เจอ .outColor ซึ่งแสดงว่าใช้เป็นสีอยู่ หรือ .outTransparency ซึ่งแสดงว่าใช้แทนความโปร่งแสง เป็นต้น
เพื่อเป็นการทดสอบการใช้งาน อาจลองทดสอบการใช้ด้วยการสร้างพื้นผิวที่ใช้วัสดุที่มีลายดังที่สร้างไว้ในเนื้อหา
มายาไพธอนบทที่ ๓๖ เช่น ลองสร้างตารางโกะดังในตัวอย่างสุดท้ายขึ้นมา ซึ่งจะมีการสร้างโหนดวัสดุขึ้นมา ๔ อัน คือ ๔ อันทางซ้ายนี้ (ส่วน ๓ อันทางขวาเป็นวัสดุตั้งต้นที่มีอยู่แล้วแต่แรก เราจะไม่ไปยุ่งมัน)
หลังจากสร้างพื้นผิวขึ้นมาเสร็จก็ลองเอาโค้ดไปรันดูก็จะพบว่าไม่เกิดอะไรขึ้น เพราะว่าวัสดุกำลังเชื่อมต่อกับผิวอยู่
แต่หลังจากนั้นถ้าเราลองลบพื้นผิวออกไป แล้วก็เอาโค้ดมารันอีกที ก็จะพบว่าโหนดวัสดุและโหนดไฟล์ถูกลบทิ้งไปด้วย
วิธีการเขียนโค้ดทั้งหมดนี้เรียบเรียงขึ้นมาเอง ไม่ได้อ้างอิงจากที่ไหน จึงอาจไม่ใช่วิธีที่ดีที่สุด บางทีอาจมีวิธีที่ดีกว่านี้อยู่ก็เป็นได้ หากใครสามารถเขียนให้ดีและทำงานเร็วกว่านี้ก็มีลองแนะนำกันได้เช่นกัน