Bạn học Photoshop trên máy nào? Phím tắt và hướng dẫn sẽ hiển thị đúng theo lựa chọn của bạn.

Lộ trình › Pixel art chuyên sâu › Bài 184/218

Dự án 11: Bộ khung UI pixel 9-slice

Vẽ bộ giao diện pixel trên dải 128 × 32 px – khung bảng gỗ viền vàng, nút ở trạng thái thường và đang nhấn, ô vật phẩm lõm – với viền dày đúng 8 px để Unity 6 cắt 9-slice: giãn bảng thành mọi kích thước mà 4 góc không méo.

Nâng cao 90 phút ★★★ Vừa Hướng dẫn cho Windows · đổi sang macOS

Photoshop hiển thị tiếng Anh. Từ có gạch chân chấm là thuật ngữ trên giao diện — chạm để xem nghĩa, hoặc tra Từ điển Anh–Việt.

File mẫu để luyện tập

Tải về rồi mở bằng Photoshop: FileTệp›OpenMở (Ctrl+O).

Hộp thoại, túi đồ, menu tạm dừng… đều có kích thước khác nhau, nhưng bạn không thể vẽ một khung riêng cho từng cái. 9-slice (cắt 9 mảnh) giải quyết việc đó: ảnh khung được chia bằng 4 đường thành 9 phần – 4 góc giữ nguyên, 4 cạnh giãn theo một chiều, phần giữa giãn theo cả hai chiều. Với pixel art có một điều kiện quan trọng: cạnh và phần giữa phải là hoa văn lặp đều (hoặc màu phẳng), vì khi bị giãn, mọi chi tiết ở đó sẽ bị kéo dài. Chi tiết đẹp (đinh tán, hoa văn) chỉ được đặt ở 4 góc.

Hình mẫu

Dải 128 × 32 px gồm khung bảng gỗ viền vàng có vạch 9-slice ở 8 px, nút xanh thường và đang nhấn, ô vật phẩm lõm; bên dưới khung được kéo giãn thành bảng lớn và nút được giãn ngang
Dải 128 × 32 px gồm khung bảng gỗ viền vàng có vạch 9-slice ở 8 px, nút xanh thường và đang nhấn, ô vật phẩm lõm; bên dưới khung được kéo giãn thành bảng lớn và nút được giãn ngang

Thời gian ước tính: khoảng 90 phút. So sánh khung nhỏ 32 × 32 với bảng lớn bên dưới: góc và đinh vàng giống hệt, chỉ phần cạnh và nền tối dài ra.

Chuẩn bị

  • Canvas: 128 × 32 px (4 ô 32 × 32), Resolution (Độ phân giải) 72, RGB Color, Background Contents: Transparent.
  • Công cụ chính: Rectangular Marquee (Khung chọn) (M) Fixed Size, Pencil (Bút chì) Tool 1 px (Shift+B), Paint Bucket (Thùng sơn) Tolerance 0 bỏ Anti-alias (Khử răng cưa), Guides (Đường gióng): ViewHiển thị›GuidesĐường gióng›New Guide Layout để đặt đường 9-slice.
  • Phóng to không mờ: Image Interpolation Nearest Neighbor (Điểm lân cận), ViewHiển thị›ShowHiện›Pixel GridLưới điểm ảnh, Grid mỗi 32 px chia 4 (mỗi ô phụ 8 px – đúng độ dày viền).
  • Thiết bị: UI pixel toàn hình chữ nhật và đường thẳng – chuột là công cụ hoàn hảo, nhanh và chính xác hơn bút. Wacom, XP-Pen, Huion hay iPad + Apple Pencil không mang lại lợi thế ở bài này; nếu dùng, tắt lực nhấn.
  • File mẫu: "Dải 4 ô 32 × 32": vạch hồng ở x, y = 8 và 24 trong mỗi ô là đường cắt 9-slice – góc không được vượt qua vạch, phần giữa hai vạch phải lặp đều.
MàuMã hexDùng cho
#1b1a24Viền ngoài nút
#3a2630 · #6a4636 · #a8704a · #d8a868Gỗ khung 4 tông: rãnh, mép tối, thân, mép sáng
#c88a2a · #ffd860Đinh vàng ở 4 góc
#1e1c2a · #2b2838 · #3d3a55Nền bảng và ô vật phẩm 3 tông
#1f4a6a · #2f7ab0 · #5cb8e8 · #b8f0f0Nút 4 tông và mũi tên

Các bước

Sáu giai đoạn: khối và viền ngoài, màu nền từng phần, mép sáng tối tạo độ nổi, đinh góc, nút nhấn lõm xuống 1 px, hoàn thiện và kiểm tra viền 8 px
Sáu giai đoạn: khối và viền ngoài, màu nền từng phần, mép sáng tối tạo độ nổi, đinh góc, nút nhấn lõm xuống 1 px, hoàn thiện và kiểm tra viền 8 px
  1. Tạo file và đường cắt: Ctrl+N 128 × 32 px, Transparent. ViewHiển thị›GuidesĐường gióng›New Guide Layout: Columns 16, Width 8 px, Gutter 0 và Rows 4, Height 8 px – có đường dẫn mỗi 8 px. Đặt file mẫu lên trên cùng.
  2. Khung bảng – khối gỗ: ô 1, layer Panel. Tô cả ô 32 × 32 #6a4636; thu vào 1 px tô #a8704a. Hàng trên và cột trái của phần sáng là #d8a868, hàng dưới và cột phải là #6a4636 – khung nổi lên dưới ánh sáng trên – trái.
  3. Rãnh và nền bảng: thu vào 3 px từ mép, tô rãnh #3a2630; thu tiếp 1 px, tô nền #2b2838. Nền lõm xuống: hàng trên và cột trái của nền tối hơn #1e1c2a (bóng của khung đổ vào), hàng dưới và cột phải sáng #3d3a55. Tổng độ dày khung từ mép tới nền là 4 px – nằm gọn trong 8 px của góc.
  4. Đinh vàng ở góc: mỗi góc một đinh 3 × 3 #c88a2a với 1 pixel #ffd860 ở góc trên – trái của đinh. Khuyết 4 pixel ở 4 góc ngoài cùng cho khung bo tròn nhẹ. Đinh và góc khuyết chỉ nằm trong vùng 8 × 8 của mỗi góc.
  5. Cạnh lặp đều: kiểm tra đoạn cạnh giữa x = 8 và x = 24: mọi cột pixel phải giống hệt nhau (cùng thứ tự màu từ ngoài vào trong). Nếu có vết gỗ hay chi tiết lẻ ở đó, Unity sẽ kéo dài nó thành vệt xấu – xóa đi.
  6. Nút thường: ô 2, layer Button Normal. Hình chữ nhật 28 × 15 px có viền #1b1a24, 4 góc khuyết. Mặt nút #2f7ab0, hàng trên #b8f0f0 (ánh sáng), cột trái #5cb8e8, 3 hàng đáy #1f4a6a làm "thành nút" – nút trông nổi cao 3 px. Một vệt sáng ngắn 3 px ở góc trên trái.
  7. Mũi tên trên nút: tam giác 3 × 5 pixel #b8f0f0 ở giữa mặt nút. Trong game, chữ trên nút do Unity vẽ bằng TextMeshPro hoặc font pixel của dự án 4; mũi tên này chỉ để thử.
  8. Nút đang nhấn: ô 3, nhân bản nút thường rồi sửa: cả nút thấp xuống 1 px, mất thành nút dưới đáy (còn 2 hàng tối), hàng trên của mặt nút thành tối #1b1a24 2 hàng – như bóng của mép trên khi nút lún xuống. Mũi tên cũng xuống 1 px. Chiều cao nút từ 15 còn 14 px nhưng đáy nút ở cùng chỗ.
  9. Ô vật phẩm lõm: ô 4, layer Slot. Hình vuông 24 × 24: viền #6a4636, trong là #1e1c2a ở hàng trên – cột trái (bóng), nền #2b2838, hàng dưới – cột phải #3d3a55 và mép ngoài dưới – phải #d8a868. Ánh sáng ngược với khung bảng nên ô trông lõm vào.
  10. Kiểm tra độ dày viền: bật Guides: góc của khung bảng nằm trọn trong 8 × 8; nút có phần đầu – cuối trái phải mỗi bên 8 px chứa góc khuyết, phần giữa lặp đều. Ô vật phẩm không cần giãn nhưng cũng làm viền đều để dùng 9-slice khi cần ô to hơn.
  11. Giãn thử trong Photoshop: file mới 160 × 96 px. Dán 4 góc 8 × 8 của khung vào 4 góc; kéo mảnh cạnh trên (16 × 8) bằng Free Transform (Biến đổi tự do) với Interpolation Nearest Neighbor cho dài 144 px, tương tự với các cạnh và phần giữa. Nếu bảng lớn trông đúng, Unity cũng sẽ giãn đúng.
  12. Đếm màu và xuất: bản sao › Indexed Color (≤ 14 màu). Ẩn mẫu và guides, FileTệp›Export›Export AsXuất ra (tùy chỉnh) PNG 100% → ui_pixel.png đúng 128 × 32 px.
  13. Unity 6 – cắt và đặt viền: Texture Type Sprite (2D and UI), Sprite Mode Multiple, Pixels Per Unit (Số pixel mỗi đơn vị) 16, Filter Mode (Chế độ lọc ảnh) Point (no filter), Compression None. Sprite Editor › Slice › Grid By Cell Size 32 × 32. Chọn sprite khung bảng, ở ô Border nhập L 8, R 8, T 8, B 8 (các đường xanh lá hiện lên), Apply. Làm tương tự cho nút (L 8, R 8, T 6, B 6).
  14. Unity 6 – dùng trên Canvas: tạo GameObject›UI›ImageHình ảnh, gán sprite khung, Image Type Sliced, Pixels Per Unit Multiplier 1; kéo RectTransform tùy ý – góc giữ nguyên. Nút: component Button với Transition Sprite Swap, Pressed Sprite là nút đang nhấn. Canvas Scaler Scale With Screen Size, Reference Resolution 320 × 180 và kích thước bảng là bội số nguyên để pixel luôn vuông.
Mẹo: Muốn cạnh có hoa văn (ví dụ dây xích, ván gỗ có mạch), đổi cạnh của 9-slice sang chế độ lặp: Image Type Tiled thay vì Sliced. Khi đó hoa văn được lặp lại thay vì bị kéo dài – nhưng chiều dài cạnh nên là bội số của mảnh hoa văn để không bị cắt cụt ở cuối.
Lỗi hay gặp: Đặt đinh, vết nứt hay chữ khắc ở giữa cạnh khung. Khi giãn, chi tiết đó thành một vệt dài như bị kéo kẹo. Chỉ góc mới được có chi tiết; cạnh và phần giữa phải đồng nhất theo hướng giãn.

Nâng cao (tùy chọn)

  • Trạng thái Hover và Disabled: thêm 2 ô: nút sáng hơn (mặt #5cb8e8) khi rê chuột và nút xám (đổi dải xanh sang dải đá) khi không bấm được – Button dùng Highlighted Sprite và Disabled Sprite.
  • Khung hội thoại có đuôi: thêm mảnh "đuôi" 8 × 8 hình tam giác chỉ vào nhân vật đang nói, đặt dưới cạnh dưới của bảng bằng một Image riêng.
  • Thanh máu 3-slice: khung 32 × 8 với đầu – cuối 4 px, phần giữa giãn ngang; bên trong là một Image Type Filled màu đỏ chạy theo lượng máu.

Mẹo & trick học nhanh

Viền là bội của 8

Viền 8 px (hoặc 4, 16) dễ khớp lưới UI và dễ nhập Border trong Sprite Editor. Viền 7 hay 9 px làm bạn tính toán sai và góc lệch 1 pixel khi giãn.

Nổi hay lõm là do ánh sáng

Mép sáng ở trên – trái, tối ở dưới – phải: khung nổi lên. Đảo ngược: ô lõm xuống. Chỉ cần đổi chỗ hai màu là nút chuyển từ thường sang đang nhấn.

Tỉ lệ nguyên

UI pixel chỉ đẹp khi mỗi pixel ảnh bằng đúng 2, 3, 4… pixel màn hình. Chọn Reference Resolution nhỏ như 320 × 180 và để Canvas Scaler phóng to nguyên lần.

Kiểm tra nhanh

1 Trong 9-slice, phần nào giữ nguyên kích thước khi giãn bảng?
2 Vì sao không được đặt đinh tán ở giữa cạnh khung?
3 Trong Unity 6, nhập độ dày viền 9-slice ở đâu?
4 Nút đang nhấn khác nút thường thế nào trong bài?

Bài tập: Bộ khung UI pixel 9-slice của bạn

Làm trong Photoshop rồi nộp file. Máy chấm kiểm tra các yêu cầu kỹ thuật và chỉ cách sửa từng lỗi; giáo viên chấm thêm phần thẩm mỹ.

Làm bài tập