Variations Textures คือเทคนิคการกำหนด Texture ที่ไม่ซ้ำกันให้กับบล็อกชนิดเดียวกัน โดยระบบจะสุ่มเลือกจากชุดของภาพ (Array) ตามน้ำหนัก (Weight) ที่เรากำหนด และอ้างอิงจากตำแหน่ง (Position) ของบล็อกนั้นๆ ในโลกเกม
ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีสร้าง Variations Block Textures เพื่อช่วยให้พื้นผิวหรือสภาพแวดล้อมในโลกของคุณดู เป็นธรรมชาติและสมจริงยิ่งขึ้น (ไม่ดูเป็นตารางซ้ำๆ จนเกินไป)
สิ่งที่ต้องเตรียมตัวก่อนเริ่ม
ขอแนะนำให้คุณศึกษาบทเรียนเหล่านี้มาก่อนนะครับ:
การสร้าง Texture
ในการสร้าง Variations Texture คุณเพียงแค่ต้องกำหนดค่าในไฟล์ terrain_texture.json ของ Resource
Pack ครับ
โดย Texture ที่อยู่ในอาร์เรย์ variations จะต้องมีค่า weight (น้ำหนัก)
กำกับไว้เสมอ
หากไม่มีการกำหนดค่า weight เกมจะเลือก Texture ตัวแรก ในอาร์เรย์มาแสดงเสมอ โดยไม่สนใจตำแหน่งของบล็อกครับ
หมายเหตุ
- อาร์เรย์ variations สามารถบรรจุ Texture ได้สูงสุดไม่เกิน 256 รูป
- ค่า
"weight"ต้องอยู่ระหว่าง 0.05 ถึง 1,000,000
นี่คือตัวอย่างภาพและการตั้งค่า Texture ของดิน (Dirt) แบบสุ่มลวดลายครับ:
{ "resource_pack_name": "vanilla", "texture_name": "atlas.terrain", "padding": 8, "num_mip_levels": 4, "texture_data": { "dirt_variations": { "textures": { "variations": [ { "path": "textures/blocks/dirt_0", "weight": 10 }, { "path": "textures/blocks/dirt_1", "weight": 10 }, { "path": "textures/blocks/dirt_2", "weight": 10 }, { "path": "textures/blocks/dirt_3", "weight": 10 }, { "path": "textures/blocks/dirt_4", "weight": 10 }, { "path": "textures/blocks/dirt_5", "weight": 10 }, { "path": "textures/blocks/dirt_6", "weight": 10 }, { "path": "textures/blocks/dirt_7", "weight": 10 }, { "path": "textures/blocks/dirt_8", "weight": 10 }, { "path": "textures/blocks/dirt_9", "weight": 10 } ] } } } }
จากอาร์เรย์ด้านบน เรามี Texture ดิน 10 รูป (เบอร์ 0-9) และแต่ละรูปมีน้ำหนักเท่ากันคือ 10 ซึ่งหมายความว่าแต่ละรูปมีโอกาส 10% เท่าๆ กัน ที่จะถูกสุ่มเลือกมาแสดงผลครับ
การนำ Texture ไปใช้กับ Custom Block
หลังจากที่เรานิยาม Texture แบบ Variation ไว้แล้ว (ใน Resource Pack) ขั้นตอนต่อไปคือการสร้างไฟล์นิยามบล็อกใน Behavior Pack ครับ
ให้สร้างไฟล์ JSON ขึ้นมา (เช่น dirt_variations.json ในโฟลเดอร์ blocks)
และใส่โค้ดดังนี้:
{ "format_version": "1.21.110", "minecraft:block": { "description": { "identifier": "demo:dirt_variations" }, "Components": { "minecraft:geometry": "minecraft:geometry.full_block", "minecraft:material_instances": { "*": { "texture": "dirt_variations", "render_method": "opaque" } }, "minecraft:item_visual": { "geometry": "minecraft:geometry.full_block", "material_instances": { "*": { "texture": "dirt_variations", "render_method": "opaque" } } } } } }
สังเกตที่บรรทัด "texture": "dirt_variations" นะครับ ตรงนี้แหละคือการบอกให้บล็อกนี้ใช้ชุด
Texture
แบบสุ่มที่เรากำหนดไว้ก่อนหน้านี้
และนี่คือหน้าตาของ Custom Block ของเราเมื่อวางเรียงกันลงไปในเกมครับ!
การแก้ไขปัญหาเบื้องต้น
มีข้อควรจำบางประการเกี่ยวกับ Variations Textures บน Custom Blocks ที่คุณควรทราบครับ:
-
เวอร์ชันต้องถึง: ไฟล์ JSON ของบล็อก (ใน Behavior Pack) ต้องมีค่า
format_versionมากกว่าหรือเท่ากับ 1.21.110 มิฉะนั้นฟีเจอร์นี้จะไม่ทำงาน และเกมจะเลือก Texture รูปแรกในอาร์เรย์มาแสดงเสมอ - ต้องเปิดการทดลอง: โลก (World) ของคุณจะต้องเปิดใช้งานตัวเลือกการทดลอง Upcoming Creator Features ด้วย
ลูกเล่นเพิ่มเติม
-
ภาพเคลื่อนไหวก็ทำได้: Texture ที่อยู่ในอาร์เรย์
variationsสามารถเป็น Texture แบบเคลื่อนไหว (Animated) ได้ด้วยนะครับ!
เคล็ดลับ
ลองเข้าไปดูบทเรียน การสร้าง Texture เคลื่อนไหว (Create an Animated Block Texture) เพื่อเรียนรู้วิธีทำได้เลยครับ