2026-09-12 · อัปเดต 2026-09-13

แผนที่ความลึก 16 บิต: แก้ปัญหา Banding และตรวจสอบไฟล์ PNG

แก้แผนที่ความลึกที่เป็นขั้นบันไดหรือกลับด้าน ด้วยการทดลอง PNG 8 บิตเทียบ 16 บิตที่ทำซ้ำได้ สคริปต์ตรวจสอบไฟล์ และเช็กลิสต์การนำเข้า Blender

แผนที่ความลึก 16 บิต: แก้ปัญหา Banding และตรวจสอบไฟล์ PNG

อัปเดตล่าสุด: 13 กันยายน 2026 ผลการวัดการเข้ารหัสด้านล่างใช้ภาพไล่ระดับสังเคราะห์ ไม่ใช่การวัดประสิทธิภาพความแม่นยำของความลึกที่ AI ประเมิน

แผนที่ความลึกดูเรียบเนียนในเบราว์เซอร์ แต่พอนำไปทำ displacement พื้นผิวกลับเกิดเป็นขั้นคล้ายนาขั้นบันได คุณลองส่งออกเป็น “PNG 16 บิต” แล้วก็ไม่มีอะไรเปลี่ยน ก่อนจะสร้างภาพใหม่หรือเพิ่มความละเอียดของเมช ให้หาก่อนว่าค่าต่าง ๆ กลายเป็นขั้นในขั้นตอนใด นามสกุลไฟล์เพียงอย่างเดียวตอบคำถามนี้ไม่ได้

คำตอบด่วน: จะป้องกัน banding ในแผนที่ความลึกได้อย่างไร?

ใช้ PNG ระดับสีเทา 16 บิตที่ส่งออกโดยตรงจากค่าความลึกแบบทศนิยมลอยตัว (floating-point) ของโมเดล หากแอปพลิเคชันถัดไปรองรับ อย่าให้แผนที่ผ่านภาพพรีวิว 8 บิต ภาพหน้าจอ JPEG หรือโปรแกรมบีบอัดรูปภาพ จากนั้นตรวจสอบความลึกของตัวอย่าง (sample depth) ช่วงค่า และจำนวนค่าที่ไม่ซ้ำกันในไฟล์ ก่อนทดสอบ displacement

การใส่ข้อมูลลงในไฟล์ 16 บิตไม่ได้คืนความแม่นยำที่สูญเสียไปแล้ว ในการทดลองที่ทำซ้ำได้ของเรา ภาพไล่ระดับที่เข้ารหัสเป็น 16 บิตโดยตรงเก็บค่าที่ไม่ซ้ำกันไว้ได้ 4,096 ค่า ขณะที่ภาพไล่ระดับ 8 บิตที่บันทึกใหม่เป็น 16 บิตเหลือเพียง 256 ค่า ทั้งที่ไฟล์ 16 บิตทั้งสองแสดงความลึกของตัวอย่างเท่ากันและมีช่วงค่าตัวเลขเต็ม

วิธีนี้แก้อะไรได้ และแก้อะไรไม่ได้

ขั้นตอนนี้จัดการเรื่องความแม่นยำตอนส่งออกและข้อผิดพลาดที่พบบ่อยตอนนำเข้า แต่ไม่ได้เปลี่ยนความลึกเชิงสัมพัทธ์จาก AI ให้เป็นระยะทางที่วัดได้จริง ไม่ได้เผยรูปทรงที่ถูกบัง ไม่ได้แก้เส้นขอบวัตถุที่ผิด และไม่ได้รับประกันว่าจะได้งานนูนต่ำที่ใช้ผลิตได้ การประเมินความลึกของฉากกับ height field ที่ปั้นขึ้นมีจุดประสงค์ต่างกัน

หากต้องการพื้นฐาน อ่านบทนำเรื่องแผนที่ความลึกของเรา สำหรับการส่งออกจริง เครื่องมือสร้างแผนที่ความลึก จะส่งออก PNG ระดับสีเทา 16 บิตเป็นค่าเริ่มต้น แสดงว่าสีขาวหมายถึงใกล้หรือไกล และมีตัวเลือกกลับค่าความลึก

เส้นทางการประมวลผลด้วย AI ของเครื่องมือนี้เก็บค่าแบบทศนิยมลอยตัวไว้จนถึงขั้นตอนเข้ารหัสสุดท้าย แต่หากเครื่องมือแจ้งเตือนว่าใช้วิธีสำรองที่อาศัยขอบภาพและการเบลอแทน วิธีนั้นเริ่มจากค่า 8 บิต ไฟล์ PNG 16 บิตที่ได้จึงมีได้มากที่สุดเพียง 256 ระดับ

ควรเลือกความลึกแบบ 8 บิต 16 บิต หรือทศนิยมลอยตัว?

งานถัดไปของคุณ เลือกแบบนี้หากรองรับ ตรวจสอบก่อนทำต่อ
มาสก์แบบเร็วหรือพรีวิวคร่าว ๆ PNG ระดับสีเทา 8 บิต เอฟเฟกต์ยอมรับขั้นของค่าที่มองเห็นได้หรือไม่
displacement ที่เรียบจากความลึกที่ทำให้เป็นมาตรฐานแล้ว PNG ระดับสีเทา 16 บิตที่ส่งออกโดยตรง ต้นทางไม่ได้ถูกลดเหลือ 8 บิตมาก่อน
ไปป์ไลน์ที่ต้องใช้ค่าทศนิยมลอยตัวดิบ รูปแบบ float ที่แอปพลิเคชันระบุไว้ ซึ่งมักเป็น EXR หน่วย ค่าที่ไม่ถูกต้อง การทำให้เป็นมาตรฐาน และข้อตกลงตอนนำเข้า
เครื่องมือที่รับได้เฉพาะภาพ 8 บิต เก็บต้นฉบับความแม่นยำสูงไว้ แล้วส่งออกสำเนา 8 บิต พรีวิวและผลลัพธ์สุดท้ายยังคงรายละเอียดเพียงพอหรือไม่

ความลึกของตัวอย่างใน PNG วัดต่อช่องสี ไม่ได้นำทุกช่องมารวมกัน PNG แบบ RGBA ที่เรียกว่า “32 บิต” เก็บ 8 บิตในแต่ละช่องจากทั้งหมดสี่ช่อง ดังนั้นค่าสีเทาที่คัดลอกไปทุกช่องก็ยังมีได้เพียง 256 ระดับ ข้อกำหนด PNG ของ W3C อนุญาตให้ภาพระดับสีเทามีความลึกของตัวอย่าง 1, 2, 4, 8 และ 16 บิต และ PNG ไม่มีรูปแบบตัวอย่างแบบทศนิยมลอยตัว

แผนภาพเปรียบเทียบ 256 ระดับสีเทาของ 8 บิต กับ 65,536 ระดับสีเทาของ 16 บิต

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

การทดลอง 8 บิตเทียบกับ 16 บิตของเราวัดอะไร?

เราสร้างภาพไล่ระดับแนวนอนขนาด 4,096 × 64 พิกเซล ที่มีค่า 4,096 ค่าเว้นระยะเท่ากันตั้งแต่ศูนย์ถึงหนึ่ง จากนั้นเข้ารหัสสามแบบด้วย NumPy และ Pillow เปิดไฟล์ PNG แต่ละไฟล์อีกครั้ง แล้ววัดส่วนหัวไฟล์ จำนวนค่าที่ไม่ซ้ำกัน ช่วงค่า และความคลาดเคลื่อนแบบนอร์มัลไลซ์สูงสุดเมื่อเทียบกับภาพไล่ระดับต้นฉบับ

เส้นทางการเข้ารหัส ความลึกของตัวอย่าง PNG จำนวนค่าไม่ซ้ำหลังถอดรหัส ความคลาดเคลื่อนนอร์มัลไลซ์สูงสุด ขนาดไฟล์ (ไบต์)
ภาพไล่ระดับ float → 8 บิต 8 256 0.001953602 528
ภาพไล่ระดับ float → 16 บิต 16 4,096 0.000007602 848
ภาพไล่ระดับ float → 8 บิต → 16 บิต 16 256 0.001953602 819

เส้นทางที่สามคูณจำนวนเต็ม 8 บิตแต่ละค่าด้วย 257 ทำให้ศูนย์ยังเป็นศูนย์ และ 255 กลายเป็น 65,535 ช่วงค่าจึงดูถูกต้อง แต่ก็ยังสร้างค่าระหว่างกลางที่หายไปตั้งแต่การแปลงครั้งแรกกลับคืนมาไม่ได้ นี่คือเหตุผลที่การดูแค่ป้าย “16 บิต” หรือพิกเซลที่สว่างที่สุด ทำให้พลาดความผิดพลาดสำคัญแบบหนึ่ง

กราฟแท่งจำนวนค่าไม่ซ้ำที่วัดได้: 8 บิตได้ 256, 16 บิตโดยตรงได้ 4,096, 8 บิตที่บันทึกเป็น 16 บิตได้ 256

ไฟล์ขนาดเล็กมากเหล่านี้มีแถวซ้ำกันจึงบีบอัดได้ง่าย ขนาดไบต์ของไฟล์จึงใช้คาดการณ์ขนาดของภาพถ่ายไม่ได้ การทดลองนี้แยกดูเฉพาะเรื่องการควอนไทซ์ ไม่ได้เปรียบเทียบโมเดลความลึก ไม่ได้ทดสอบการเรนเดอร์ใน Blender และไม่ได้วัดคุณภาพงานแกะสลักจริง ภาพ WebP ในหน้านี้เป็นกราฟิกประกอบคำอธิบาย ไม่ใช่แผนที่ความแม่นยำสำหรับดาวน์โหลด

หากต้องการสร้างไฟล์ทั้งสามซ้ำ ให้ติดตั้ง NumPy และ Pillow ในสภาพแวดล้อม Python แล้วรัน:

import numpy as np
from PIL import Image

ramp = np.tile(np.linspace(0, 1, 4096), (64, 1))
a8 = np.rint(ramp * 255).astype(np.uint8)
a16 = np.rint(ramp * 65535).astype(np.uint16)
wrapped = a8.astype(np.uint16) * 257
for name, values in [("ramp-8", a8), ("ramp-16", a16),
                     ("ramp-8-in-16", wrapped)]:
    Image.fromarray(values).save(name + ".png")

จะตรวจสอบไฟล์ PNG ที่ดาวน์โหลดมาได้อย่างไร?

รันสคริปต์นี้กับไฟล์ที่ดาวน์โหลดมาตั้งแต่แรก ก่อนที่แอปพลิเคชันอื่นจะบันทึกทับ สคริปต์ใช้แพ็กเกจ Python ชุดเดียวกับการทดลอง และคาดว่าจะได้รับ PNG แบบช่องเดียว หากได้รับภาพพรีวิว RGB สคริปต์จะหยุดโดยตั้งใจ แทนที่จะแปลงภาพพรีวิวนั้นเงียบ ๆ ให้กลายเป็นข้อมูลความลึกที่ดูเหมือนใช้ได้

from pathlib import Path
import numpy as np
from PIL import Image

path = Path("depth.png")
raw = path.read_bytes()
assert raw[:8] == b"\x89PNG\r\n\x1a\n"
assert raw[12:16] == b"IHDR"
print("PNG sample depth:", raw[24])
print("PNG color type:", raw[25])  # 0 = grayscale
values = np.asarray(Image.open(path))
assert values.ndim == 2, "Inspect the grayscale export, not an RGB preview"
print("Range:", int(values.min()), int(values.max()))
print("Distinct values:", np.unique(values).size)
  • ยืนยันว่าเป็นไฟล์ดาวน์โหลดระดับสีเทา ไม่ใช่ภาพพรีวิวแบบมีสี
  • ความลึกของตัวอย่างควรเป็น 16 หากคุณเลือกส่งออก 16 บิต
  • ตรวจว่าช่วงค่าตัวเลขเหมาะกับไปป์ไลน์ของคุณ
  • ประเมินจำนวนค่าที่ไม่ซ้ำตามเนื้อหาของภาพ เพราะไม่มีเกณฑ์ผ่านที่ใช้ได้กับทุกภาพ
  • ดูบริเวณทางลาดที่เรียบ ซึ่งสังเกตพื้นที่แบนผิดปกติได้ง่ายที่สุด
  • ตรวจซ้ำทุกครั้งหลังการแปลงที่อาจลดความแม่นยำ

ภาพที่ดูมีรายละเอียดมากแต่มีเพียง 256 ค่าควรตรวจสอบเพิ่ม แต่นั่นเป็นเพียงเบาะแส ไม่ใช่คำตัดสิน มาสก์ที่ตั้งใจให้แบนอาจต้องใช้ค่าน้อยกว่านั้นก็ได้ ในทางกลับกัน การประมาณค่าในช่วง (interpolation) สร้างค่าได้หลายพันค่าจากต้นทาง 8 บิต โดยไม่ได้กู้ค่าพยากรณ์เดิมกลับมา การตรวจไฟล์จึงพิสูจน์ประวัติการประมวลผลทั้งหมดไม่ได้

ภาพพรีวิวที่เกือบดำสนิทก็ต้องตีความให้ถูกเช่นกัน ความลึกดิบที่เก็บในช่วงค่าตัวเลขแคบ ๆ อาจถูกต้องสำหรับซอฟต์แวร์ที่จะอ่านข้อมูลนั้น ให้ทำให้เป็นมาตรฐานเฉพาะกับสำเนา และเฉพาะเมื่อเครื่องมือถัดไปต้องการความลึกแบบนอร์มัลไลซ์ พร้อมเก็บไฟล์ต้นฉบับและเมทาดาทาเรื่องสเกลไว้ สำหรับการตรวจขนาดและรูปแบบไฟล์เบื้องต้น คู่มือตรวจสอบรูปภาพ ของเราอธิบายว่าคุณสมบัติไฟล์ทั่วไปบอกอะไรได้และบอกอะไรไม่ได้

ทำไมไฟล์ที่ถูกต้องยังดูผิดใน Blender?

ให้ถือว่าแผนที่เป็นข้อมูลตัวเลข ในโหนด Image Texture ให้ตั้ง color space เป็น Non-Color เพื่อไม่ให้มีการแปลงสีสำหรับการแสดงผล เชื่อมภาพเข้ากับอินพุต height หรือ displacement ที่เหมาะสม ตรวจวิธี displacement ของวัสดุ และดูให้แน่ใจว่าเมชมีรูปทรงเรขาคณิตมากพอสำหรับ displacement จริง

เอกสาร displacement ของ Blender แยก bump mapping ซึ่งเปลี่ยนเพียงการแรเงา ออกจาก displacement จริงซึ่งขยับพื้นผิว จึงต้องใช้รูปทรงเรขาคณิตที่แบ่งย่อยละเอียด bump เปลี่ยนเส้นขอบวัตถุไม่ได้ ตำแหน่งเมนูแตกต่างกันไปตามเวอร์ชัน จึงควรทำตามเอกสารที่ตรงกับเวอร์ชันที่คุณติดตั้ง

การวินิจฉัยสามขั้น: เทียบผลประเมินต้นทาง ตรวจ PNG ที่ส่งออก แล้วจึงตรวจการตั้งค่านำเข้า

อาการ ตรวจสอบก่อน การทดสอบที่มีประโยชน์ถัดไป
เกิดขั้นสม่ำเสมอบนทางลาดที่ค่อย ๆ ชัน การควอนไทซ์ หรือการแปลงเป็น 8 บิตระหว่างทาง เทียบไฟล์ดาวน์โหลดต้นฉบับกับไฟล์ที่นำเข้า
วัตถุด้านหน้ากลายเป็นยุบลงไป ข้อตกลงใกล้/ไกล หรือทิศทางของ displacement กลับค่าหนึ่งครั้ง แล้วเทียบกับจุดด้านหน้าที่รู้ตำแหน่ง
เส้นขอบเป็นเหลี่ยมทั้งที่แผนที่เรียบ รูปทรงเรขาคณิตไม่พอ หรือโหมด displacement ไม่ถูก ทดลองเพิ่มรูปทรงเรขาคณิตในพื้นที่เมชเล็ก ๆ
กระจก เส้นผม หรือแสงสะท้อนเกิดรูปทรงแปลก ๆ การตีความฉากของโมเดล เทียบผลประเมินกับภาพถ่ายต้นฉบับ
แผนที่ดูเกือบดำในโปรแกรมดูภาพ ช่วงค่าตัวเลข หรือการจัดการการแสดงผล ตรวจค่าต่ำสุดและสูงสุดดิบก่อนปรับระดับสี

ระหว่างทดสอบ ให้ตั้งสเกลของ displacement ไว้ในระดับพอดี ตรวจ Midlevel การแมป UV การครอบภาพ และอัตราส่วนภาพ ก่อนเพิ่มรายละเอียด การเปลี่ยนทุกค่าในคราวเดียวทำให้ระบุได้ยากว่าขั้นตอนไหนเป็นต้นเหตุ

เช็กลิสต์ที่เชื่อถือได้ ตั้งแต่ส่งออกจนถึงนำเข้า

ก่อนส่งออก:

  1. เก็บภาพต้นฉบับไว้คู่กับไฟล์ความลึกที่ดาวน์โหลดมาครั้งแรก
  2. เลือกภาพที่ฉากหน้ากับฉากหลังแยกกันชัดเจน
  3. ตรวจขอบวัตถุก่อนเลือกรูปแบบไฟล์ส่งออก
  4. ส่งออก PNG ระดับสีเทา 16 บิตโดยตรงสำหรับเวิร์กโฟลว์ที่รองรับ
  5. จดไว้ว่าพิกเซลสว่างหมายถึงใกล้หรือไกลในการส่งออกครั้งนี้

หลังดาวน์โหลด:

  1. ตรวจส่วนหัวไฟล์ ช่วงค่า และจำนวนค่าไม่ซ้ำของไฟล์ที่บันทึก
  2. นำเข้าเป็นข้อมูล และยืนยันทิศทางกับจุดในฉากที่รู้ตำแหน่ง
  3. ทดสอบพื้นที่เล็ก ๆ ด้วยรูปทรงเรขาคณิตที่เหมาะสมก่อนเรนเดอร์เต็ม
  4. เก็บต้นฉบับความแม่นยำสูงไว้ก่อนแปลงไฟล์เพื่อความเข้ากันได้
  5. บันทึกการตั้งค่าที่ได้ผล เพื่อเทียบกับการส่งออกครั้งต่อไป

อย่านำต้นฉบับแผนที่ความลึกไปผ่านขั้นตอนบีบอัดรูปภาพตามปกติ ภาพสำหรับแสดงผลที่เล็กลงกับข้อมูลตัวเลขที่เชื่อถือได้มีข้อกำหนดต่างกัน ในทำนองเดียวกัน ตัวขยายภาพด้วย AI ทั่วไปอาจสร้างพื้นผิวขึ้นมาเอง ซึ่งจะกลายเป็นรูปทรงที่ไม่ต้องการเมื่อถูกตีความเป็นความสูง

หากปลายทางคือแอปพลิเคชันงานนูนหรืองานแกะสลัก ให้ตรวจแยกต่างหากว่าเอกสารของแอประบุวิธีจัดการตัวอย่างและทิศทางของระดับสีเทาไว้อย่างไร บทความนี้ไม่ได้ทดสอบผลลัพธ์จากเครื่องจักร ความลึกเชิงสัมพัทธ์ต่อกล้องเพียงอย่างเดียวไม่ได้กำหนดความหนาของงานนูน หน่วยทางกายภาพ หรือค่าการประมวลผล

คำถามที่พบบ่อย

ความลึก 16 บิตทำให้ AI ประเมินแม่นยำขึ้นหรือไม่?

ไม่ มันเก็บค่าผลลัพธ์ที่ละเอียดขึ้นได้ แต่ไม่ได้แก้ข้อผิดพลาดในการตีความฉากของโมเดล

แปลง PNG 8 บิตเป็น 16 บิตแล้ว banding จะหายไหม?

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

ทำไม PNG 16 บิตถึงมีค่าที่ไม่ซ้ำกันเพียง 256 ค่า?

ไฟล์อาจเคยผ่านขั้นตอน 8 บิตมาก่อน แม้ว่าภาพที่เรียบง่ายก็อาจมีค่าน้อยเท่านั้นได้โดยไม่ผิดปกติ

ในแผนที่ความลึก สีขาวหมายถึงใกล้เสมอหรือไม่?

ไม่ ข้อตกลงแต่ละเครื่องมือต่างกัน ให้ดูป้ายใกล้/ไกลของเครื่องมือส่งออก และยืนยันกับจุดด้านหน้าที่รู้ตำแหน่ง

ใช้ JPEG เป็น displacement map ได้ไหม?

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

PNG แบบ RGBA 32 บิตแม่นยำกว่า PNG ระดับสีเทา 16 บิตหรือไม่?

ไม่ สำหรับแผนที่ความลึกระดับสีเทา RGBA “32 บิต” หมายถึงสี่ช่องสีช่องละ 8 บิต ค่าสีเทาแต่ละค่าจึงยังมี 256 ระดับ เว้นแต่เครื่องมือจะตั้งใจกระจายค่าความลึกไปหลายช่องสี

ทำไมภาพพรีวิวในเบราว์เซอร์ของทั้งสองไฟล์จึงดูเหมือนกัน?

การแปลงเพื่อแสดงผลอาจซ่อนความแม่นยำเชิงตัวเลขที่เพิ่มขึ้น จึงควรตรวจข้อมูลต้นฉบับและทดสอบในแอปพลิเคชันปลายทาง

แผนที่ความลึกนี้ให้ค่าการวัดในโลกจริงที่แม่นยำได้หรือไม่?

ไม่ได้ ค่าประเมินเชิงสัมพัทธ์ที่ทำให้เป็นมาตรฐานแล้วไม่ได้กำหนดระยะทางจริง และไม่ได้กู้รูปทรงที่มองไม่เห็นกลับมา

ใช้เครื่องมือฟรีของเราขณะทำตามคู่มือนี้

ภาพปกของ แปลง HEIC เป็น JPG: เปรียบเทียบเครื่องมือฟรีและวิธีแบบกลุ่ม

2026-07-26

แปลง HEIC เป็น JPG: เปรียบเทียบเครื่องมือฟรีและวิธีแบบกลุ่ม

แปลงรูปภาพ HEIC จาก iPhone เป็น JPG ด้วยเครื่องมือฟรีทั้งบนเว็บ, Mac, Windows, iPhone และ Command Line โดยเปรียบเทียบความเร็ว การรองรับแบบกลุ่ม (batch) และการใช้งานที่เหมาะสมที่สุด

ภาพปกของ แปลง JPG เป็น PDF: วิธีฟรีและเมื่อไหร่ที่คุณต้องการใช้งาน

2026-07-26

แปลง JPG เป็น PDF: วิธีฟรีและเมื่อไหร่ที่คุณต้องการใช้งาน

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

ภาพปกของ แปลง PNG เป็น JPG: เมื่อไหร่ที่ควรเปลี่ยนและวิธีการทำอย่างถูกต้อง

2026-07-26

แปลง PNG เป็น JPG: เมื่อไหร่ที่ควรเปลี่ยนและวิธีการทำอย่างถูกต้อง

แปลง PNG to JPG เพื่อลดขนาดไฟล์ได้ถึง 80% หรือมากกว่า เรียนรู้วิธีคงความโปร่งใสของ PNG การจัดการพื้นหลัง และขั้นตอนการแปลงแบบกลุ่มที่ยังคงคุณภาพเดิมไว้