3DBlender

การออกแบบ Hex Map ของเกมด้วย Blender กับภาษา Python

สำหรับสาย Level Design นั้นบางครั้งเราจะได้รับโจทย์ของการออกแบบเกม สไตล์ Hex Map มักจะมีความปวดหัวประมาณนึงที่ต้องออกแบบ Mesh 6 เหลี่ยมแล้ว Copy วางเรื่อยๆ ใน Blender จะมีเทคนิคนึงที่จะทำให้ง่ายขึ้น

สำหรับคนที่คิด Hex Map ไม่ออกให้นึกถึงเกมแนว Turn-Based Strategy เก่าๆ อย่าง Heroes 3 หรือ ใหม่หน่อยก็ War Load ดังภาพ:

สำหรับสาย 3D ออกแบบ ที่ใช้ Blender เป็นหลักจะมีเทคนิคนึงคือ ออกแบบ Mesh 6 เหลี่ยม แล้ว Shift D จัดเรียงไปจนครบ Map แต่สำหรับใครที่ต้องการตัวช่วยง่ายๆ เร็วๆ ให้ลองเปิดโหมด scripting ของ blender ที่จะมี Console ให้ใส่ภาษา Python ลงไป:

เปิด Blender ขึ้นมาแล้วก็ปรับโหมดการทำงานเป็น Scripting

เราจะเจอหน้าจอการทำงาน ดังภาพข้างล่าง ประกอบไปด้วยส่วนของ console ให้เราใส่ code ภาษา Python ลงไป

แต่วิธีที่ดีที่สุดคือการสร้างไฟล์ Script นามสกุล .bpy ขึ้นมาโดยการคลิกที่ปุ่ม New จะทำให้เราพิมพ์คำสั่งได้ยาวกว่า และสะดวกกว่าพิมพ์ผ่าน Console:

จะเห็นว่าเราจะสามารถพิมพ์คำสั่งได้ยาวๆ ในส่วนของ Editor ด้านบนซ้ายใหญ่ได้เลย

คำสั่งข้างต้นคือการประกาศ Header ของ Blender Python และ การเรียก Match มาใช้งาน

import bpy
import math

ส่วนการเลือกวัตถุทุกชิ้น หรือ Mesh ทุกชิ้น (เทียบเท่าการกดปุ่ม Ctrl+A) คือ

bpy.ops.object.select_all(action='SELECT')

และทำการลบทุกวัตถุในฉาก เหมือนกดปุ่ม X เพื่อ delete

bpy.ops.object.delete(True)

เราสามารถเรียกคำสั่งการสร้าง Mesh ขึ้นมาโดยเราจะเลือก cylinder แต่ปรับ Vertices เป็น 6 จากคำสั่งใน Library คือ

bpy.ops.mesh.primitive_cylinder_add()

โดยการทำงานคือการ รันวน Loop ซ้อน และทำการคำนวณ Cylinder วัตถุ Vertices 6 ชิ้นให้ปรากฏต่อเนื่องกันดังนี้:

import bpy
import math

bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(True)

for i in range(-5,5):
    for j in range(-5,5):
        bpy.ops.mesh.primitive_cylinder_add(vertices = 6,location=( math.sqrt(3)*j+(i%2)*math.sqrt(3)/2, 1.5*i, 1))

Loop แรกจะเป็นการวนสลับฟันปลาให้สร้างงวัตถุ 5 ชิ้นเรียงกัน จากระยะ -5 ไปถึง 5 ส่วน Loop ที่สองคือการวนสลับในร่องฟันปลาในการวนจำนวนเท่ากัน ผ่านสมการ

math.sqrt(3)*j+(i%2)*math.sqrt(3)/2

ผลลัพธ์คือ:

จัดแสงหน่อยก็สวยละ

เสร็จเรียบร้อย!

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน