สำหรับสาย 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
ผลลัพธ์คือ:
จัดแสงหน่อยก็สวยละ
เสร็จเรียบร้อย!