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



[maya python] ร่มกระดาษน้ำมันจีน
เขียนเมื่อ 2017/02/20 23:24
แก้ไขล่าสุด 2021/09/28 16:42
สิ่งของที่มีโครงสร้างง่ายๆไม่ซับซ้อนสามารถสร้างขึ้นมาจากโค้ดไพธอนได้ไม่ยาก แค่อาจต้องเข้าใจการประยุกต์ใช้คำสั่งต่างๆสักหน่อย

ครั้งก่อนได้ลองสร้างวิมานพระอินทร์ดูแล้ว https://phyblas.hinaboshi.com/20160913

ในลักษณะคล้ายๆกันเราอาจลองทำอะไรกับสิ่งของเครื่องใช้ต่างๆก็ได้

ครั้งนี้ลองเขียนโค้ดสร้างร่มกระดาษน้ำมันแบบจีน ซึ่งในภาษาจีนเรียกว่า "โหยวจื๋อส่าน" (油纸伞, yóuzhǐsǎn) หรือในภาษาญี่ปุ่นเรียกว่า "เคียววางาสะ" (京和傘)

โค้ดที่ใช้สร้างเป็นดังนี้
import maya.cmds as mc
import math

# สีผิวไม้
phiumai = mc.shadingNode('lambert',asShader=1,n='phiumai')
mc.setAttr(phiumai+'.c',0.9,0.6,0.2,typ='double3')
mai = []

# สีผิวด้ามจับ
phiudamchap = mc.shadingNode('lambert',asShader=1,n='phiudamchap')
mc.setAttr(phiudamchap+'.c',1,0.65,0.6,typ='double3')

# ภาพใบร่ม
phap_bairom = mc.shadingNode('lambert',asShader=1,n='phap_bairom')
file_bairom = mc.shadingNode('file',at=1,n='file_bairom')
mc.connectAttr(file_bairom+'.oc',phap_bairom+'.c')
s = '<ไฟล์ภาพ>'
mc.setAttr(file_bairom+'.ftn',s,typ='string')

# ใบร่ม
bairom = mc.polySphere(sy=3,sx=48)[0]
mc.delete(bairom+'.f[0:95]')
mc.polyProjection(bairom+'.f[*]',md='y')
mc.select(bairom+'.f[*]')
mc.hyperShade(a=phap_bairom)

for i in range(mc.polyEvaluate(bairom,v=1)):
    mc.select(bairom+'.vtx[%d]'%i)
    t = mc.xform(q=1,t=1)
    r = (t[0]**2+t[2]**2)**0.5
    if(r>0.01):
        mc.scale(0.6/r,1,0.6/r)
        if(i%2):
            mc.move(-0.15,y=1)
        else:
            mc.move(-0.16,y=1)
    else:
        mc.move(0,y=1)

# ด้ามร่ม
damrom = mc.polyCylinder(r=0.0075,h=1,sx=24)[0]
mc.move(-0.5,y=1)

# ด้ามจับ
damchap = mc.polyCylinder(r=0.015,h=0.1,sx=24,sy=2)[0]
mc.hyperShade(a=phiudamchap)
mc.move(0.05-1,y=1)
mc.scale(0.7,1,0.7,'.vtx[24:47]')
mc.select(damchap+'.f[48:49]')
mc.polyExtrudeFacet(ltz=0.01,sx=0.5,sz=0.5)


# ยอดร่ม
yotrom = mc.polyCylinder(r=0.015,h=0.03,sx=24)[0]
mc.move(0.015-0.01,y=1)
mc.scale(0.6,1,0.6,'.vtx[24:47]')

# แกนร่ม
kaenyuet = mc.polyCylinder(r=0.015,h=0.05,sx=24,sy=2)[0]
mc.move(-0.1-0.05,y=1)
mc.scale(1.5,1,1.5,'.vtx[24:47]')

# ก้านขึงและก้านค้ำ
h = (0.6**2+0.15**2)**0.5
kankhueng = mc.polyCylinder(r=0.0025,h=h,sx=18)[0]
mc.move(h/2,y=1)
mc.rotate(90+math.degrees(math.atan2(0.15,0.6)),z=1,p=[0,0,0])
h = (0.2**2+0.1**2)**0.5
kankham = mc.polyCylinder(r=0.0025,h=h,sx=18)[0]
mc.move(h/2,y=1)
mc.rotate(90-math.degrees(math.atan2(0.1,0.2)),z=1,p=[0,0,0])
mc.move(-0.1-0.05,y=1,r=1)

mai += [damrom,yotrom,kaenyuet,kankhueng,kankham]
for i in range(1,24):
    kankhueng = mc.duplicate(kankhueng)[0]
    kankham = mc.duplicate(kankham)[0]
    mc.rotate(360/24,0,0,[kankhueng,kankham],y=1,r=1,p=[0,0,0])
    mai += [kankhueng,kankham]

# ใส่สีผิวไม้
mc.select(mai)
mc.hyperShade(a=phiumai)

# รวมกลุ่ม
mc.group(bairom,mai,damchap,n='rom_kradat_namman')

พอรันโค้ดก็จะได้ออกมาเป็นแบบนี้



ส่วนของลวดลายบนใบร่มนั้นสามารถไปใส่เพิ่มเองตามที่ต้องการ ในที่นี้ใช้เป็นลายดอกแบบจีน เอามาจาก >> เว็บนี้

ดูจากใต้ร่ม





คราวนี้ลองเอาภาพจากอนิเมะ girlish number มาใส่บนร่มแล้วให้โมโมกะจังถือ โดยได้ปรับผิวร่มให้เป็น blinn ซึ่งมันวาวสะท้อนแสงได้ จะเห็นว่าภาพฉากรอบๆสะท้อนลงบนใบร่มด้วย แม้จะยังดูแปลกๆเหมือนจะไม่สมจริงอยู่บ้างเพราะร่มกระดาษไม่มีทางสะท้อนแสงแบบนี้ได้อยู่แล้วแต่ก็สวยดี




ทั้งโมโมกะและฉากหลังเป็นโมเดลที่ดึงมาจาก MMD

โมโมกะยืมมาจาก http://3d.nicovideo.jp/works/td28604

ส่วนฉากหลังยืมมาจาก http://amiamy111.deviantart.com/art/MMD-Yet-another-city-stage-289451176

ร่มนี้มีขนาดเส้นผ่านศูนย์กลาง 1.2 เมตร ถ้าลองขยายใหญ่ขึ้น 20 เท่ามันจะใหญ่พอที่จะสร้างเงาปกคลุมย่านเมืองตรงนี้จนมืดไปได้เลย



ภาพเดียวกันถ่ายจากมุมสูงให้เห็นบริเวณของเงาชัดเจน



ลองให้โมโมกะจังขึ้นไปนั่งบนตึกดูบ้าง แบบนี้ก็สวยไปอีกแบบ





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


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

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

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

หมวดหมู่

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

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

สารบัญ

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

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

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



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

  ค้นหาบทความ

  บทความแนะนำ

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

ไทย

日本語

中文