φυβλαςのβλογ
phyblas的博客



สร้างวิมานพระอินทร์แบบง่ายๆด้วย maya python
เขียนเมื่อ 2016/09/13 21:03
แก้ไขล่าสุด 2021/09/28 16:42
เห็นช่วงนี้กำลังมีข่าวดังเรื่องที่มีการออกแบบแลนด์มาร์กริมแม่น้ำเจ้าพระยาที่ชื่อว่าวิมานพระอินทร์ ซึ่งมีลักษณะเป็นหอคอยเวียนสวยงาม แล้วก็มีคนไปพบว่าแบบของหอคอยนี้ไปลอกมาจากโครงการหอคอย Crystal Island ที่เคยวางแผนจะสร้างที่รัสเซีย

ข่าว >> http://www.matichon.co.th/news/282984
ภาพเปรียบเทียบ >> https://www.facebook.com/10154510905052943

อีกทั้งแบบจำลองสามมิติของหอคอยนี้ยังสามารถโหลดได้จากเว็บได้อย่างง่ายๆด้วย โดยเป็นของโปรแกรม SketchUp
ที่โหลด >> https://3dwarehouse.sketchup.com/model.html?id=45e488a141b7e90c17e212e05b08f33e

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

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

ผลที่ได้เป็นไปตามนี้


โค้ดที่ใช้ทั้งหมดเป็นดังนี้ จำเป็นต้องลง numpy ไว้ด้วยเพื่อที่จะใช้ เพราะจะทำให้การคำนวณทำได้ง่ายขึ้นมาก
import maya.cmds as mc
import numpy as np
for i in range(12):
    h = np.hstack([np.linspace(1,0,101),np.linspace(0,1,101)])
    r = 1-np.sqrt(1-(1-h)**2)
    mum = i*30+r*90
    mum[101:] = i*30+180-r[101:]*90
    x = r*np.cos(np.radians(mum))
    y = r*np.sin(np.radians(mum))
    chut = np.stack([x,h,y],axis=1)
    sen1 = mc.curve(ep=chut)
    chut[:,0] *= 0.9
    chut[:,2] *= 0.9
    sen2 = mc.curve(ep=chut)
    mc.nurbsToPolygonsPref(f=0,pt=1,pc=150)
    mc.loft(sen1,sen2,po=1,ch=0)
    mc.polyExtrudeFacet(ty=0.05)
    mc.delete(sen1,sen2)

สำหรับวิธีการลง numpy ในมายาดูได้ใน https://phyblas.hinaboshi.com/20160116
และโค้ดอื่นๆที่เกี่ยวข้อง เช่น การสร้างเส้นโค้ง NURBS https://phyblas.hinaboshi.com/maso31
การสานพื้นผิวขึ้นจากเส้นโค้ง NURBS https://phyblas.hinaboshi.com/maso33
แปลงรูปโพลิกอนอย่างอิสระด้วยการดันยื่นเข้าออก https://phyblas.hinaboshi.com/maso24

จะเห็นว่าโค้ดเพียงแค่ไม่กี่บรรทัดเท่านี้ก็สามารถสร้างรูปสวยๆแบบนี้ขึ้นมาได้

สมการที่ใช้สำหรับเส้นโค้งของหอคอยนี้คือสมการวงกลมธรรมดา
1 = (1-r)^2+(1-h)^2



หลังจากที่ได้สร้างออกมาแล้วพอลองมองดูก็รู้สึกว่าดูแล้วโล่งไปหน่อยก็เลยลองเพิ่มเติมโดยใส่ส่วนกระจกใสที่เชื่อมระหว่างโครง โดยเขียนโค้ดตามนี้
sen = []
for i in range(24):
    if(i%2==0):
        h = np.linspace(0,1,101)
    else:
        h = np.linspace(0.02,1,101)
    r = 1-np.sqrt(1-(1-h)**2)
    mum = 360-i*15
    x = r*np.cos(np.radians(mum))
    y = r*np.sin(np.radians(mum))
    chut = np.stack([x,h,y],axis=1)
    sen += [mc.curve(ep=chut)]
mc.loft(sen,c=1)
mc.delete(sen)

จากนั้นก็ใส่สันสีลงไปด้วยให้สวยงาม ผลที่ได้เป็นไปตามนี้



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

แต่สรุปโดยคร่าวๆแล้วก็คือ คิดว่าต่อให้เขาไม่ได้โหลดแบบจำลองจากเว็บมาใช้ก็อาจไม่ยากที่จะสร้างขึ้นมาเอง

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

ไม่ว่าอย่างไรก็ตาม การขโมยผลงานทางความคิดของคนอื่นก็ไม่ใช่สิ่งที่ควรทำ



แถม ภาพล้อเลียนจากที่อื่นๆ รวบรวมโดยพี่ Cocon
https://web.facebook.com/10205376530452181
https://web.facebook.com/10155172494889018
https://web.facebook.com/10155172281809018
https://web.facebook.com/10154108103594888


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

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

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

หมวดหมู่

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

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

目录

从日本来的名言
模块
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
机器学习
-- 神经网络
javascript
蒙古语
语言学
maya
概率论
与日本相关的日记
与中国相关的日记
-- 与北京相关的日记
-- 与香港相关的日记
-- 与澳门相关的日记
与台湾相关的日记
与北欧相关的日记
与其他国家相关的日记
qiita
其他日志

按类别分日志



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

  查看日志

  推荐日志

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