2026-09-12 · Cập nhật 2026-09-13

Bản đồ độ sâu 16 bit: sửa lỗi phân dải và kiểm tra tệp PNG

Sửa bản đồ độ sâu bị bậc thang hoặc đảo chiều bằng thử nghiệm PNG 8 bit và 16 bit có thể tái lập, script kiểm tra tệp và danh sách nhập vào Blender.

Bản đồ độ sâu 16 bit: sửa lỗi phân dải và kiểm tra tệp PNG

Cập nhật lần cuối: ngày 13 tháng 9 năm 2026. Các phép đo mã hóa bên dưới dùng một dải chuyển sắc tổng hợp, không phải bài đánh giá độ chính xác độ sâu của AI.

Bản đồ độ sâu trông mượt trên trình duyệt, nhưng bề mặt sau khi displacement lại xuất hiện các bậc thang. Bạn xuất “PNG 16 bit” mà không có gì thay đổi. Trước khi tạo ảnh mới hay tăng mật độ lưới, hãy tìm xem giá trị bị phân bậc ở khâu nào. Chỉ nhìn phần mở rộng của tệp thì không trả lời được câu hỏi đó.

Câu trả lời nhanh: làm sao tránh lỗi phân dải trên bản đồ độ sâu?

Hãy dùng PNG 16 bit thang độ xám được xuất trực tiếp từ giá trị độ sâu dấu phẩy động của mô hình, nếu ứng dụng tiếp theo hỗ trợ. Tránh để bản đồ đi qua ảnh xem trước 8 bit, ảnh chụp màn hình, JPEG hay công cụ nén ảnh. Sau đó, kiểm tra độ sâu mẫu, phạm vi và số giá trị riêng biệt của tệp trước khi thử displacement.

Vỏ chứa 16 bit không khôi phục được độ chính xác đã mất. Trong thử nghiệm có thể tái lập của chúng tôi, dải chuyển sắc mã hóa trực tiếp sang 16 bit giữ được 4096 giá trị riêng biệt, còn dải 8 bit lưu lại thành 16 bit chỉ còn 256. Cả hai tệp 16 bit đều báo cùng độ sâu mẫu và đủ toàn bộ phạm vi số.

Cách này sửa được gì và không sửa được gì?

Quy trình này xử lý độ chính xác khi xuất và các lỗi nhập thường gặp. Nó không biến độ sâu tương đối của AI thành khoảng cách đo được, không làm lộ phần hình học bị che khuất, không sửa đường viền sai và không bảo đảm tạo được phù điêu dùng để sản xuất. Ước tính độ sâu của cảnh và trường độ cao dùng để điêu khắc phục vụ những mục đích khác nhau.

Để nắm các khái niệm nền tảng, hãy đọc bài giới thiệu về bản đồ độ sâu. Khi cần xuất thật, trình tạo bản đồ độ sâu mặc định xuất PNG 16 bit thang độ xám, ghi rõ màu trắng là gần hay xa và có tùy chọn đảo chiều.

Nhánh AI của công cụ giữ giá trị dấu phẩy động đến bước mã hóa cuối cùng. Nếu công cụ cảnh báo rằng nó đã dùng phương pháp dự phòng dựa trên cạnh và làm mờ, phương pháp đó bắt đầu từ giá trị 8 bit, nên tệp PNG 16 bit chỉ có tối đa 256 mức.

Nên chọn độ sâu 8 bit, 16 bit hay dấu phẩy động?

Việc tiếp theo Chọn định dạng này nếu được hỗ trợ Kiểm tra trước khi làm tiếp
Mặt nạ nhanh hoặc xem trước sơ bộ PNG 8 bit thang độ xám Hiệu ứng có chấp nhận các bậc giá trị lộ rõ hay không
Displacement mượt từ độ sâu đã chuẩn hóa PNG 16 bit thang độ xám xuất trực tiếp Nguồn chưa từng bị giảm xuống 8 bit
Quy trình cần giá trị dấu phẩy động thô Định dạng float mà ứng dụng quy định, thường là EXR Đơn vị, giá trị không hợp lệ, cách chuẩn hóa và quy ước nhập
Công cụ chỉ nhận ảnh 8 bit Giữ bản gốc độ chính xác cao; xuất thêm bản sao 8 bit Ảnh xem trước và kết quả cuối có giữ đủ chi tiết không

Độ sâu mẫu của PNG được tính theo từng kênh, không cộng dồn tất cả các kênh. PNG RGBA “32 bit” lưu 8 bit cho mỗi kênh trong bốn kênh, nên một giá trị xám được chép vào mọi kênh vẫn chỉ có 256 mức. Đặc tả PNG của W3C cho phép ảnh thang độ xám có độ sâu mẫu 1, 2, 4, 8 và 16 bit; PNG không có định dạng mẫu dấu phẩy động.

Sơ đồ so sánh 256 mức xám của ảnh 8 bit với 65 536 mức xám của ảnh 16 bit

Sơ đồ mô tả khả năng mã hóa, không phải độ chính xác của mô hình hay số giá trị mà mọi ảnh phải có. Một bề mặt phẳng hoàn toàn có thể chỉ dùng một giá trị. Tệp lớn hơn cũng không chứng minh ước tính tốt hơn.

Thử nghiệm 8 bit và 16 bit của chúng tôi đã đo những gì?

Chúng tôi tạo một dải chuyển sắc ngang 4096 × 64 với 4096 giá trị cách đều từ 0 đến 1. Chúng tôi mã hóa nó theo ba cách bằng NumPy và Pillow, mở lại từng tệp PNG rồi đo phần header, số giá trị riêng biệt, phạm vi và sai số chuẩn hóa lớn nhất so với dải gốc.

Cách mã hóa Độ sâu mẫu PNG Số giá trị riêng biệt sau giải mã Sai số chuẩn hóa lớn nhất Dung lượng (byte)
Dải float → 8 bit 8 256 0,001953602 528
Dải float → 16 bit 16 4096 0,000007602 848
Dải float → 8 bit → 16 bit 16 256 0,001953602 819

Cách thứ ba nhân mỗi số nguyên 8 bit với 257. Phép nhân này đưa 0 thành 0 và 255 thành 65 535, nên phạm vi trông vẫn đúng. Nhưng nó không thể tạo lại các giá trị trung gian đã mất ở lần chuyển đổi đầu tiên. Vì vậy, nếu chỉ kiểm tra nhãn “16 bit” hoặc điểm ảnh sáng nhất, bạn sẽ bỏ sót một kiểu lỗi quan trọng.

Biểu đồ cột số giá trị đo được: 8 bit có 256, 16 bit trực tiếp có 4096, 8 bit lưu thành 16 bit có 256

Các tệp rất nhỏ này chứa những hàng lặp lại nên nén rất dễ. Dung lượng của chúng không dùng để dự đoán cho ảnh chụp. Thử nghiệm chỉ tách riêng hiện tượng lượng tử hóa; nó không so sánh các mô hình độ sâu, không thử kết xuất Blender và không đo chất lượng khắc thực tế. Các hình WebP trên trang là đồ họa minh họa, không phải bản đồ chính xác để tải về.

Để tái tạo ba tệp này, hãy cài NumPy và Pillow trong môi trường Python rồi chạy:

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")

Làm sao kiểm tra tệp PNG bạn đã tải về?

Hãy chạy đoạn mã này trên tệp tải về gốc, trước khi ứng dụng khác lưu lại nó. Mã dùng cùng các gói Python như thử nghiệm và cần một PNG một kênh. Nó cố ý dừng lại khi gặp ảnh xem trước RGB thay vì âm thầm chuyển ảnh đó thành dữ liệu độ sâu trông như hợp lệ.

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)
  • Xác nhận đây là tệp xám, không phải ảnh xem trước có màu.
  • Độ sâu mẫu phải là 16 nếu bạn đã chọn xuất 16 bit.
  • Xem phạm vi số có hợp với quy trình không.
  • Đánh giá số giá trị theo nội dung; không có ngưỡng chung.
  • Soi một dốc mượt, nơi dễ thấy các bậc phẳng.
  • Kiểm tra lại sau mỗi lần chuyển đổi có thể làm giảm độ chính xác.

Một ảnh trông nhiều chi tiết mà chỉ có 256 giá trị thì đáng xem xét, nhưng đó là manh mối, không phải kết luận. Mặt nạ cố ý phẳng có thể cần ít giá trị hơn. Ngược lại, phép nội suy có thể tạo ra hàng nghìn giá trị từ nguồn 8 bit mà không khôi phục được dự đoán gốc. Việc kiểm tra tệp không thể chứng minh toàn bộ lịch sử xử lý.

Ảnh xem trước gần như đen cũng cần được hiểu đúng. Độ sâu thô lưu trong một phạm vi số hẹp vẫn có thể hợp lệ với phần mềm sẽ đọc nó. Chỉ chuẩn hóa một bản sao khi công cụ tiếp theo cần độ sâu đã chuẩn hóa; hãy giữ bản gốc và mọi siêu dữ liệu tỷ lệ. Với việc kiểm tra kích thước và định dạng cơ bản, hướng dẫn kiểm tra ảnh giải thích thuộc tính tệp thông thường cho biết được gì và không cho biết được gì.

Vì sao một tệp tốt vẫn hiển thị sai trong Blender?

Hãy coi bản đồ là dữ liệu số. Trong node Image Texture, đặt không gian màu thành Non-Color để không áp dụng biến đổi hiển thị. Nối ảnh vào đầu vào height hoặc displacement phù hợp, kiểm tra phương thức displacement của vật liệu và bảo đảm lưới có đủ hình học cho displacement thật.

Tài liệu displacement của Blender phân biệt bump mapping, vốn chỉ thay đổi đổ bóng, với displacement thật, vốn dịch chuyển bề mặt nên cần hình học được chia nhỏ mịn. Bump không thể thay đổi đường viền. Vị trí menu khác nhau theo phiên bản, vì vậy hãy làm theo tài liệu đúng với bản bạn đang cài.

Chẩn đoán ba bước: so ước tính gốc, kiểm tra tệp PNG đã xuất, rồi kiểm tra thiết lập nhập

Triệu chứng Kiểm tra trước Phép thử hữu ích tiếp theo
Bậc thang đều đặn trên sườn dốc thoải Lượng tử hóa hoặc một bước trung gian 8 bit So tệp tải về gốc với tệp đã nhập
Chủ thể tiền cảnh bị lõm vào Quy ước gần/xa hoặc dấu của displacement Đảo chiều một lần rồi so với một điểm tiền cảnh đã biết
Đường viền răng cưa dù bản đồ mượt Thiếu hình học hoặc sai chế độ displacement Thử thêm hình học trên một vùng lưới nhỏ
Kính, tóc hoặc phản chiếu tạo hình thù lạ Cách mô hình diễn giải cảnh So ước tính với ảnh gốc
Bản đồ gần như đen trong trình xem Phạm vi số hoặc cách hiển thị Xem giá trị nhỏ nhất và lớn nhất thô trước khi chỉnh levels

Giữ tỷ lệ displacement ở mức vừa phải khi thử. Xác nhận Midlevel, ánh xạ UV, vùng cắt và tỷ lệ khung hình trước khi tăng chi tiết. Thay đổi mọi thiết lập cùng lúc sẽ khiến bạn khó biết bước nào gây ra lỗi.

Danh sách kiểm tra đáng tin cậy từ lúc xuất đến lúc nhập

Trước khi xuất:

  1. Giữ ảnh gốc và tệp độ sâu tải về cùng một chỗ.
  2. Chọn ảnh có tiền cảnh và hậu cảnh tách bạch.
  3. Soi đường biên vật thể trước khi chọn định dạng.
  4. Xuất PNG 16 bit thang xám trực tiếp.
  5. Ghi lại màu sáng là gần hay xa.

Sau khi tải về:

  1. Kiểm tra header, phạm vi và số giá trị riêng biệt.
  2. Nhập dưới dạng dữ liệu, xác minh chiều bằng một điểm đã biết.
  3. Thử một vùng nhỏ trước khi kết xuất toàn bộ.
  4. Giữ bản gốc độ chính xác cao trước mọi lần chuyển đổi.
  5. Lưu thiết lập hiệu quả để so các lần xuất sau.

Đừng đưa bản gốc độ sâu qua quy trình nén ảnh thông thường. Ảnh hiển thị nhẹ hơn và một trường số đáng tin cậy có yêu cầu khác nhau. Tương tự, công cụ phóng to ảnh bằng AI thông thường có thể bịa thêm kết cấu, và kết cấu đó thành hình học ngoài ý muốn khi được hiểu là độ cao.

Nếu đích đến là ứng dụng làm phù điêu hoặc khắc, hãy kiểm tra riêng cách nó xử lý mẫu theo tài liệu và chiều của thang độ xám. Bài viết này chưa thử nghiệm đầu ra trên máy. Riêng độ sâu tương đối theo camera không xác định được độ dày phù điêu, đơn vị vật lý hay thông số xử lý.

Câu hỏi thường gặp

Độ sâu 16 bit có làm ước tính của AI chính xác hơn không?

Không; nó có thể giữ các giá trị đầu ra mịn hơn, nhưng không sửa được lỗi trong cách mô hình diễn giải cảnh.

Chuyển PNG 8 bit sang 16 bit có loại bỏ được lỗi phân dải không?

Chỉ đổi vỏ chứa thì không khôi phục được giá trị đã mất; làm mịn có thể làm dịu các bậc nhưng sẽ thay đổi trường độ sâu.

Vì sao PNG 16 bit chỉ có 256 giá trị riêng biệt?

Có thể tệp đã đi qua một bước 8 bit, dù một ảnh đơn giản cũng có thể hợp lệ khi chỉ có ít giá trị như vậy.

Trong bản đồ độ sâu, màu trắng có luôn là gần không?

Không; quy ước mỗi nơi một khác, vì vậy hãy đọc nhãn gần/xa của công cụ xuất và xác minh bằng một điểm tiền cảnh đã biết.

Có thể dùng JPEG làm bản đồ displacement không?

Trình kết xuất có thể chấp nhận, nhưng kiểu mã hóa có mất dữ liệu khiến JPEG là bản gốc kém để giữ giá trị độ sâu chính xác.

PNG RGBA 32 bit có chính xác hơn PNG 16 bit thang độ xám không?

Không, với bản đồ độ sâu thang xám; RGBA “32 bit” nghĩa là bốn kênh 8 bit, nên mỗi giá trị xám vẫn chỉ có 256 mức, trừ khi công cụ cố ý đóng gói độ sâu qua nhiều kênh.

Vì sao ảnh xem trước trên trình duyệt trông giống nhau với cả hai tệp?

Quá trình chuyển đổi để hiển thị có thể che mất phần độ chính xác số tăng thêm, nên hãy kiểm tra dữ liệu gốc và thử trong ứng dụng đích.

Bản đồ độ sâu này có cho số đo thực tế chính xác không?

Không; một ước tính tương đối đã chuẩn hóa không xác định được khoảng cách vật lý và không khôi phục được hình học bị che khuất.

Sử dụng các công cụ miễn phí trong khi bạn theo dõi hướng dẫn.