การสร้าง Texture แบบสุ่มลวดลาย Variations Block Texture

เทคนิคการกำหนดน้ำหนักให้ Texture เพื่อพื้นผิวที่ดูเป็นธรรมชาติ

Variations Textures คือเทคนิคการกำหนด Texture ที่ไม่ซ้ำกันให้กับบล็อกชนิดเดียวกัน โดยระบบจะสุ่มเลือกจากชุดของภาพ (Array) ตามน้ำหนัก (Weight) ที่เรากำหนด และอ้างอิงจากตำแหน่ง (Position) ของบล็อกนั้นๆ ในโลกเกม

Dirt Variations

ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีสร้าง Variations Block Textures เพื่อช่วยให้พื้นผิวหรือสภาพแวดล้อมในโลกของคุณดู เป็นธรรมชาติและสมจริงยิ่งขึ้น (ไม่ดูเป็นตารางซ้ำๆ จนเกินไป)

สิ่งที่ต้องเตรียมตัวก่อนเริ่ม

ขอแนะนำให้คุณศึกษาบทเรียนเหล่านี้มาก่อนนะครับ:

การสร้าง Texture

ในการสร้าง Variations Texture คุณเพียงแค่ต้องกำหนดค่าในไฟล์ terrain_texture.json ของ Resource Pack ครับ โดย Texture ที่อยู่ในอาร์เรย์ variations จะต้องมีค่า weight (น้ำหนัก) กำกับไว้เสมอ

หากไม่มีการกำหนดค่า weight เกมจะเลือก Texture ตัวแรก ในอาร์เรย์มาแสดงเสมอ โดยไม่สนใจตำแหน่งของบล็อกครับ

หมายเหตุ

นี่คือตัวอย่างภาพและการตั้งค่า Texture ของดิน (Dirt) แบบสุ่มลวดลายครับ:

Dirt Variation 0 Dirt Variation 1 Dirt Variation 2 Dirt Variation 3 Dirt Variation 4 Dirt Variation 5 Dirt Variation 6 Dirt Variation 7 Dirt Variation 8 Dirt Variation 9
{
          "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 ของเราเมื่อวางเรียงกันลงไปในเกมครับ!

Demo Dirt Variations

การแก้ไขปัญหาเบื้องต้น

มีข้อควรจำบางประการเกี่ยวกับ Variations Textures บน Custom Blocks ที่คุณควรทราบครับ:

ลูกเล่นเพิ่มเติม

เคล็ดลับ

ลองเข้าไปดูบทเรียน การสร้าง Texture เคลื่อนไหว (Create an Animated Block Texture) เพื่อเรียนรู้วิธีทำได้เลยครับ