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

อัปเดตล่าสุด: 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 ไม่มีรูปแบบตัวอย่างแบบทศนิยมลอยตัว

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

ไฟล์ขนาดเล็กมากเหล่านี้มีแถวซ้ำกันจึงบีบอัดได้ง่าย ขนาดไบต์ของไฟล์จึงใช้คาดการณ์ขนาดของภาพถ่ายไม่ได้ การทดลองนี้แยกดูเฉพาะเรื่องการควอนไทซ์ ไม่ได้เปรียบเทียบโมเดลความลึก ไม่ได้ทดสอบการเรนเดอร์ใน 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 เปลี่ยนเส้นขอบวัตถุไม่ได้ ตำแหน่งเมนูแตกต่างกันไปตามเวอร์ชัน จึงควรทำตามเอกสารที่ตรงกับเวอร์ชันที่คุณติดตั้ง

| อาการ | ตรวจสอบก่อน | การทดสอบที่มีประโยชน์ถัดไป |
|---|---|---|
| เกิดขั้นสม่ำเสมอบนทางลาดที่ค่อย ๆ ชัน | การควอนไทซ์ หรือการแปลงเป็น 8 บิตระหว่างทาง | เทียบไฟล์ดาวน์โหลดต้นฉบับกับไฟล์ที่นำเข้า |
| วัตถุด้านหน้ากลายเป็นยุบลงไป | ข้อตกลงใกล้/ไกล หรือทิศทางของ displacement | กลับค่าหนึ่งครั้ง แล้วเทียบกับจุดด้านหน้าที่รู้ตำแหน่ง |
| เส้นขอบเป็นเหลี่ยมทั้งที่แผนที่เรียบ | รูปทรงเรขาคณิตไม่พอ หรือโหมด displacement ไม่ถูก | ทดลองเพิ่มรูปทรงเรขาคณิตในพื้นที่เมชเล็ก ๆ |
| กระจก เส้นผม หรือแสงสะท้อนเกิดรูปทรงแปลก ๆ | การตีความฉากของโมเดล | เทียบผลประเมินกับภาพถ่ายต้นฉบับ |
| แผนที่ดูเกือบดำในโปรแกรมดูภาพ | ช่วงค่าตัวเลข หรือการจัดการการแสดงผล | ตรวจค่าต่ำสุดและสูงสุดดิบก่อนปรับระดับสี |
ระหว่างทดสอบ ให้ตั้งสเกลของ displacement ไว้ในระดับพอดี ตรวจ Midlevel การแมป UV การครอบภาพ และอัตราส่วนภาพ ก่อนเพิ่มรายละเอียด การเปลี่ยนทุกค่าในคราวเดียวทำให้ระบุได้ยากว่าขั้นตอนไหนเป็นต้นเหตุ
เช็กลิสต์ที่เชื่อถือได้ ตั้งแต่ส่งออกจนถึงนำเข้า
ก่อนส่งออก:
- เก็บภาพต้นฉบับไว้คู่กับไฟล์ความลึกที่ดาวน์โหลดมาครั้งแรก
- เลือกภาพที่ฉากหน้ากับฉากหลังแยกกันชัดเจน
- ตรวจขอบวัตถุก่อนเลือกรูปแบบไฟล์ส่งออก
- ส่งออก PNG ระดับสีเทา 16 บิตโดยตรงสำหรับเวิร์กโฟลว์ที่รองรับ
- จดไว้ว่าพิกเซลสว่างหมายถึงใกล้หรือไกลในการส่งออกครั้งนี้
หลังดาวน์โหลด:
- ตรวจส่วนหัวไฟล์ ช่วงค่า และจำนวนค่าไม่ซ้ำของไฟล์ที่บันทึก
- นำเข้าเป็นข้อมูล และยืนยันทิศทางกับจุดในฉากที่รู้ตำแหน่ง
- ทดสอบพื้นที่เล็ก ๆ ด้วยรูปทรงเรขาคณิตที่เหมาะสมก่อนเรนเดอร์เต็ม
- เก็บต้นฉบับความแม่นยำสูงไว้ก่อนแปลงไฟล์เพื่อความเข้ากันได้
- บันทึกการตั้งค่าที่ได้ผล เพื่อเทียบกับการส่งออกครั้งต่อไป
อย่านำต้นฉบับแผนที่ความลึกไปผ่านขั้นตอนบีบอัดรูปภาพตามปกติ ภาพสำหรับแสดงผลที่เล็กลงกับข้อมูลตัวเลขที่เชื่อถือได้มีข้อกำหนดต่างกัน ในทำนองเดียวกัน ตัวขยายภาพด้วย AI ทั่วไปอาจสร้างพื้นผิวขึ้นมาเอง ซึ่งจะกลายเป็นรูปทรงที่ไม่ต้องการเมื่อถูกตีความเป็นความสูง
หากปลายทางคือแอปพลิเคชันงานนูนหรืองานแกะสลัก ให้ตรวจแยกต่างหากว่าเอกสารของแอประบุวิธีจัดการตัวอย่างและทิศทางของระดับสีเทาไว้อย่างไร บทความนี้ไม่ได้ทดสอบผลลัพธ์จากเครื่องจักร ความลึกเชิงสัมพัทธ์ต่อกล้องเพียงอย่างเดียวไม่ได้กำหนดความหนาของงานนูน หน่วยทางกายภาพ หรือค่าการประมวลผล
คำถามที่พบบ่อย
ความลึก 16 บิตทำให้ AI ประเมินแม่นยำขึ้นหรือไม่?
ไม่ มันเก็บค่าผลลัพธ์ที่ละเอียดขึ้นได้ แต่ไม่ได้แก้ข้อผิดพลาดในการตีความฉากของโมเดล
แปลง PNG 8 บิตเป็น 16 บิตแล้ว banding จะหายไหม?
การเปลี่ยนแค่รูปแบบไฟล์ไม่ได้คืนค่าที่หายไป การทำให้เรียบอาจลดความเป็นขั้นได้ แต่ก็จะเปลี่ยนข้อมูลความลึกด้วย
ทำไม PNG 16 บิตถึงมีค่าที่ไม่ซ้ำกันเพียง 256 ค่า?
ไฟล์อาจเคยผ่านขั้นตอน 8 บิตมาก่อน แม้ว่าภาพที่เรียบง่ายก็อาจมีค่าน้อยเท่านั้นได้โดยไม่ผิดปกติ
ในแผนที่ความลึก สีขาวหมายถึงใกล้เสมอหรือไม่?
ไม่ ข้อตกลงแต่ละเครื่องมือต่างกัน ให้ดูป้ายใกล้/ไกลของเครื่องมือส่งออก และยืนยันกับจุดด้านหน้าที่รู้ตำแหน่ง
ใช้ JPEG เป็น displacement map ได้ไหม?
ตัวเรนเดอร์อาจรับได้ แต่การเข้ารหัสแบบสูญเสียข้อมูลทำให้ JPEG ไม่เหมาะเป็นต้นฉบับสำหรับเก็บค่าความลึกที่แม่นยำ
PNG แบบ RGBA 32 บิตแม่นยำกว่า PNG ระดับสีเทา 16 บิตหรือไม่?
ไม่ สำหรับแผนที่ความลึกระดับสีเทา RGBA “32 บิต” หมายถึงสี่ช่องสีช่องละ 8 บิต ค่าสีเทาแต่ละค่าจึงยังมี 256 ระดับ เว้นแต่เครื่องมือจะตั้งใจกระจายค่าความลึกไปหลายช่องสี
ทำไมภาพพรีวิวในเบราว์เซอร์ของทั้งสองไฟล์จึงดูเหมือนกัน?
การแปลงเพื่อแสดงผลอาจซ่อนความแม่นยำเชิงตัวเลขที่เพิ่มขึ้น จึงควรตรวจข้อมูลต้นฉบับและทดสอบในแอปพลิเคชันปลายทาง
แผนที่ความลึกนี้ให้ค่าการวัดในโลกจริงที่แม่นยำได้หรือไม่?
ไม่ได้ ค่าประเมินเชิงสัมพัทธ์ที่ทำให้เป็นมาตรฐานแล้วไม่ได้กำหนดระยะทางจริง และไม่ได้กู้รูปทรงที่มองไม่เห็นกลับมา
ใช้เครื่องมือฟรีของเราขณะทำตามคู่มือนี้
อ่านต่อ

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

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