Cách cắt tileset từ một ảnh
Thoạt nhìn tileset giống bảng sprite: lưới các ảnh vuông nhỏ trong một tệp. Nhưng yêu cầu bên dưới nghiêm ngặt hơn: mỗi ô phải ghép liền mạch với mọi ô khác khi đặt trên bản đồ. Cắt từ ảnh tham khảo phẳng, đặc biệt ảnh không được dựng trên lưới pixel từ đầu, có nghĩa tìm đúng lưới chứ không chỉ đoán.
Tileset so với sprite sheet: vì sao yêu cầu cao hơn
Bảng sprite chứa các ảnh độc lập. Nếu một khung đi bộ lệch tâm một pixel so với khung tiếp theo, không ai để ý: mỗi khung được vẽ riêng và nhiễu vị trí nhỏ trông như chuyển động tự nhiên. Tileset khác. Mỗi ô được đặt sát cạnh ô lân cận trên lưới, lặp đi lặp lại khắp màn chơi. Lệch một pixel ở một ô không chỉ ảnh hưởng ô đó: nó lặp ở mọi đường nối có ô đó, khiến texture nền đất hoặc tường lát có thể xuất hiện hàng chục đường nối thấy rõ chỉ từ một đường cắt sai.
Đó là toàn bộ ràng buộc thiết kế tileset: đường nối phải không nhìn thấy, nghĩa là các mép phải chính xác đến pixel, nghĩa là ảnh nguồn cần lưới thật có thể tìm được trước khi bạn cắt bất cứ thứ gì.
Chọn kích thước ô
Nếu trích ô từ tài nguyên người khác, kích thước thường đã cố định bởi đồ họa: đếm họa tiết lặp như gạch, bụi cỏ, ván qua rộng rồi chia. Nếu tự định tileset từ tham khảo hoặc texture tạo, kích thước phổ biến 16×16, 32×32, 48×48.
- 16×16 trông như pixel art cổ điển. Nó không dung thứ chi tiết — mỗi ô phải truyền đạt chất liệu (cỏ, đá, nước) bằng rất ít pixel, vốn đã là một kỹ năng nghệ thuật thực sự.
- 32×32 là mặc định hiện đại phổ biến nhất. Đủ chỗ cho chất liệu và bóng đổ mà không cần độ chính xác dưới pixel để đọc rõ ở mức phóng thông thường.
- 48×48 trở lên phù hợp với game có ô lớn hơn trên màn hình hoặc hình vẽ thiên về hội họa, khi bạn muốn thấy chi tiết chất liệu thay vì diện mạo pixel art phẳng.
Dù chọn gì, hãy giữ nhất quán trên toàn bộ tileset và lý tưởng nhất là trên mọi tileset của dự án. Kích thước ô lẫn lộn buộc bạn phải phóng thu hình khi chạy — gây lại đúng vấn đề nhòe mà pixel art cố tránh — hoặc duy trì nhiều hệ lưới riêng trong trình biên tập màn chơi.
Tìm độ lệch khi lưới không bắt đầu 0
Biết ô 32px nên cắt 0, 32, 64, 96… nhưng ô bị nửa, tường thành nhiều sàn hàng này, nhiều tường hàng sau. Lưới thật không bắt đầu góc trái trên mà lệch vài pixel, do viền, lề screenshot hoặc đệm xuất.
Tìm độ lệch bằng zoom pixel, tìm đặc điểm lặp như vữa giữa gạch, bóng đáy cỏ, sáng mép trên. Đo tọa độ lần đầu, kiểm lặp mỗi N pixel nơi N là kích thước ô. Nếu đường vữa đầu ở x = 6 và đường tiếp theo ở x = 38, độ lệch là 6 pixel và dự đoán ô 32 được xác nhận. Áp dụng độ lệch riêng cho từng trục; độ lệch ngang và dọc không liên quan và ảnh hoàn toàn có thể chỉ có một trong hai.

Ô không có khoảng cách và vấn đề màu tràn
Sprite sheet thường có các khoảng trống trong suốt giữa khung. Tileset thường không có — các ô nằm sát nhau, không có khoảng cách, vì chính điều đó cho phép chúng được lát liền mạch. Khi tileset vào engine, điều này gây tác dụng phụ là màu texture tràn: một vệt nhỏ của ô bên cạnh xuất hiện ở mép ô bạn đã đặt.
Tràn màu do cách GPU lấy mẫu texture. Khi ô được vẽ ở kích thước không khớp pixel 1:1 — hơi đổi tỷ lệ hoặc ở vị trí camera dưới pixel — trình kết xuất lấy mẫu pha pixel cạnh ô với phần ngay bên cạnh trong texture nguồn, tức ô lân cận. Cách sửa không phải thêm khoảng cách vào nguồn vì sẽ phá lát ô; dùng lọc point/nearest để không nội suy tràn màu, hoặc để engine tự mở rộng viền một pixel khi đóng gói/nhập. Sprite Atlas của Unity và trình nhập TileSet Godot đều có tùy chọn đệm hoặc mở rộng cạnh cho việc này: bật cho tileset sẽ đổi tỷ lệ hoặc di chuyển ở vị trí không nguyên.
Loại bỏ ô trùng
Sau khi cắt cả lưới, thường có nhiều ô giống hệt hoặc gần giống hệt từng điểm ảnh — một ô cỏ đơn giản có thể xuất hiện bốn lần trong bảng tham chiếu vì ảnh nguồn lặp lại để cân bằng thị giác. Giữ bản trùng không hẳn sai, nhưng làm tài nguyên bộ ô nặng hơn, bảng chọn ô trong trình chỉnh sửa màn chơi khó nhìn hơn, và khiến các chỉnh sửa cho “ô cỏ” về sau phải áp dụng ở nhiều nơi.
Cách đơn giản để phát hiện trùng mà không phải soi hàng chục ô nhỏ: băm dữ liệu pixel thô của từng ô rồi so sánh mã băm. Ô có cùng mã băm giống hệt từng pixel và có thể gộp an toàn. Ô gần trùng, chẳng hạn khác một pixel đổi màu như đuốc sáng và tắt, có mã băm khác và cần người quyết định đó là các ô khác có ý nghĩa hay biến thể đáng giữ riêng.
Đưa vào engine
Unity: Tile Palette
Nhập tileset cắt như Sprite với Sprite Mode Multiple, cắt trong Sprite Editor bằng Grid By Cell Size đúng kích thước ô rồi mở Window → 2D → Tile Palette, tạo bảng màu mới rồi kéo các sprite đã cắt vào. Từ đó, các ô được vẽ trực tiếp lên thành phần Tilemap trong cảnh. Nếu đã cắt các ô PNG riêng ngoài Unity, bạn có thể bỏ hẳn bước Sprite Editor và kéo thẳng thư mục PNG vào bảng màu.
Godot: tài nguyên TileSet
Tạo tài nguyên TileSet trên nút TileMapLayer; trong Atlas source thêm ảnh tileset đã cắt với kích thước ô khớp. Trình nhập Godot còn có Separation và Margin trên nguồn atlas, cho bảng có khoảng cách nhỏ giữa ô thay vì không khoảng cách như trên. Nếu nguồn không có khoảng cách và thấy tràn màu trong cửa sổ editor, bật đệm texture của atlas, sao chép pixel cạnh bên trong để lấy mẫu không chạm ô bên cạnh.
Thứ tự thao tác thực tế
- Xác định kích thước ô bằng đếm chi tiết lặp trong ảnh.
- Tìm độ lệch x, y bằng vị trí ô đầu thực bắt đầu.
- Cắt theo lưới đó. Công cụ có đường kéo được biến bước này thành kiểm tra trực quan thay vì tính mò.
- So mã băm ô và gộp bản trùng chính xác.
- Nhập engine với đệm hoặc mở rộng cạnh nếu ô từng hiển thị ở tỷ lệ hoặc vị trí không nguyên.
Câu hỏi thường gặp
Ô cắt đúng vẫn có đường nối trong engine.
Gần như luôn là màu tràn do lọc texture, không phải lỗi cắt. Chuyển chế độ lọc texture sang point/nearest, hoặc bật tùy chọn đệm/kéo dài viền ô trong engine, vốn thêm pixel mép được nhân bản quanh mỗi ô để nội suy không bao giờ lấy mẫu ô bên cạnh.
Tôi có thể dùng ảnh AI làm nguồn tileset không?
Bạn có thể, nhưng hãy dự kiến lưới bị lệch — hình ô được tạo hiếm khi nằm đúng ranh giới pixel như tileset làm thủ công. Đo độ lệch cẩn thận theo từng hàng và cột thay vì giả định một độ lệch cố định áp dụng cho cả ảnh; độ lệch thường tích lũy nhẹ khi đi qua sheet.
Có nên thêm khe 1px giữa ô trong tệp nguồn?
Không đặt khoảng cách trong chính ảnh nguồn — khoảng trống đó sẽ thành đường kẻ nhìn thấy được khi các ô ghép sát cạnh trên bản đồ. Giữ nguồn không có khoảng cách và để quy trình nhập của engine thêm đệm nội bộ vào atlas được đóng gói; như vậy xử lý được lem màu mà không thay đổi diện mạo các ô khi ghép.
Làm sao biết hai ô là biến thể hay bản trùng?
Nếu dữ liệu pixel giống từng byte, là bản trùng và xóa an toàn. Nếu khác dù nhỏ, như vết nứt khác trên ô đá, có thể là biến thể có chủ ý phá lặp trên mặt lát lớn; xóa làm màn đồng đều hơn ý đồ gốc.
Cắt lưới không ước lượng độ lệch pixel bằng mắt
Chế độ Thủ công & Mẫu của Cắt sprite sheet cho phép bạn kéo đường lưới trực tiếp trên ảnh và thấy ranh giới nằm đúng nơi lưới ô thực sự bắt đầu, bao gồm cả độ lệch. Không có gì được tải lên — việc cắt chạy cục bộ trong trình duyệt.
Mở Cắt bảng sprite