Chọn kích thước của sprite phù hợp

DPI và PPU là gì? chúng có quan trọng không?

Giới thiệu

Game Design: Yêu cầu thêm 1 element mới vào

Artist: Ê Dev kích thước element là bao nhiêu thế?

Develop: ???

Artist: Working with their own rules

Develop: Thêm vào project Unity

Hồi mới đi làm mình hay nhận được câu hỏi rằng là:

Tôi đang phát triển một trò chơi trong Unity cho mobile thì kích thước của các asset mà tôi dùng là bao nhiêu

Chúng có quy chuẩn hay không?

Unity không thể hiện kích thước của một đối tượng bằng pixel điều này có thể khiến các artists bối rối khi tạo assets cho trò chơi 2D. Các câu hỏi kiểu như “Nó cần kích thước bao nhiêu là đủ?”, “Chúng cần lớn đến mức nào?”.

Bài viết này sẽ đưa ra các khái niệm và bạn cần quyết định xem bao nhiêu là đủ?

Scale down chứ không scale up

Độ phân giải Điểm ảnh ngang x Điểm ảnh dọc Số điểm ảnh
SD 720x560 403.200
HD 1280x720 921.600
QHD 1366x768 1.049.088
Full HD 1920x1080 2.073.600
4K 3840x2160 8.294.400
8K 7680x4320 33.177.600

Trước khi chúng ta đi vào bất kỳ cân nhắc nào về việc chọn độ phân giải, bạn nên nhớ rằng khi bạn tạo asset của mình, bạn nên chọn độ phân giải cao hơn ngay cả khi bạn không thực sự cần nó cho việc sử dụng trong trò chơi. Bạn luôn có thể thu nhỏ image, nhưng bạn không thể tăng scale mà không làm giảm chất lượng.

Hãy xem xét các tình huống sau: bạn có thể muốn tăng kích thước của một thành phần trên màn hình hoặc bạn muốn tạo “phiên bản 4K” của trò chơi cho màn hình 4K sau này.

Vì những lý do này các file source của artist thường có kích thước lớn, họ sử dụng các file có độ phân giải gấp đôi hoặc nhiều hơn độ phân giải mà bạn thực sự cần, sau đó thu nhỏ chúng lại trước khi đưa chúng vào Unity hoặc sử dụng import setting để giảm kích thước của chúng khi chúng được nhập vào Unity.

Import Setting có thuộc tính MaxSize cho phép bạn quy định kích thước tối đa , phương pháp nén (compressType) bạn cũng có thể quy định riêng cho từng nền tảng

Unity cũng cung cấp một tính năng gọi là Sprite Atlas nó có tác dụng gom nhóm nhiều sprite nhỏ thành một atlas ngoài việc giảm kích thước bản build và draw call. Sprite atlas cũng cung cấp cách kiểm soát maxSize cho toàn bộ atlas thay vì cài đặt riêng cho từng sprite, nó cũng cung cấp cách điều chỉnh độ phân giải bằng Variant sprite atlas

Xác định độ phân giải tùy thuộc vào nền tảng hỗ trợ

Ví dụ bạn xây dựng trò chơi của mình cho android và ios, độ phân giải phổ biến nhất hiện nay là full Hd 1080 x 1920. Các mẫu điện thoại mới hiện nay hầu hết sẽ hỗ trợ độ phân giải 4K

DPI là gì?

DPI là viết tắt của Dot per Inch PPI là viết tắt của Pixel per Inch hoặc Point per Inch

1 DPI = 1 PPI

Chúng đều có cùng một ý nghĩa là thể hiện số pixel được nén trong 1 inch trên màn hình

1 inch = 2.54 cm

Trước đây các màn hình cũ thường có 72 DPI ngày nay thì con số này là 144 DPI

Trên mobile thì DPI thường cao hơn ngưỡng này vì chúng bao gồm nhiều pixel hơn trong 1 màn hình có kích thước nhỏ

Như trên iphone 4 ra mắt vào mùa hè năm 2010 nó có mức DPI là ~330 PPI

Đơn vị phép đo trong scene của Unity

Như đã nói trước đây, Unity do khoảng cách và kích thước bằng unit không phải bằng pixel

1 unit = 1 mét

Ví dụ model humanroid nằm trong khoảng 1.7 và 1.8 unit điều này không bắt buộc nhưng nó sẽ đảm bảo trò chơi của bạn hoạt động bình thường với các thao tác vật lý (cả 2D và 3D), bởi vì vật lý trong Unity sử dụng 1 unit bằng 1 mét. Điều này cũng áp dụng cho ánh sáng các thông số tùy chỉnh của light được biết là đúng với thực tế.

Ví dụ minh họa rõ điều này bạn scale nhân vật của bạn lớn lên (scale = 100) bạn sẽ thấy tốc độ rơi của nó rất chậm, tốc độ rơi của nó sẽ tương tự như vật có scale là 1

Camera

Trong Camera 2D (orthographic) có tham số gọi là size khi bạn nhân đôi nó lên nó sẽ là số unit hiển thị theo chiều dọc

Camera có chiều rộng 5 mét và chiều cao 10 mét

Chiều cao sẽ luôn không thay đổi thay đổi ở đây là chiều rộng Ví dụ như tỉ lệ màn hình 9 : 16 với size của camera được đặt là 5 ta có kích thước chiều rộng sẽ là:

(2 * size) * 9 / 16 = 5.625 mét => khung camera là một vùng có kích thước (5.625 x 10)

Với tỉ lệ 16 : 9

(2 * size) * 16 / 9 = 17.7(7) mét => khung camera là một vùng có kích thước (17.7(7) x 10)

Pixel per Unit

Khi bạn thêm một image dưới dạng Sprite vào Unity bạn sẽ thấy bảng giống như dưới đây khi click vào một sprite

Bạn có thể thấy một thuộc tính có tên là Pixel per Unit (PPU) nó có nghĩa là số lượng pixel trên 1 unit (1 mét). Như hình trên PPU là 100 nghĩa là có 100 pixel trên 1 mét.

Giả sử bạn đang ở gốc tọa độ (0, 0, 0) sau đấy bạn di chuyển x = 1 (1, 0, 0) có nghĩa là bạn di chuyển 100 pixel sang bên phải

hay nói cách khác

1 pixel = 1 / 100 = 0.01 mét khi PPU bằng 100

khoảng cách di chuyển = số pixel di chuyển / Pixel per Unit

Giả sử trò chơi của bạn target tới chất lượng Full HD có kích thước màn hình là 1080 x 1920 (chiều dọc)

Với các cài đặt sau đây:

Camera size orthographic size 11

Element tảng đá có kích thước 805x741

Gameplay của nó sẽ trông như thế này:

Như bạn thấy kích thước của tảng đá chiếm khoảng 1/7 chiều rộng so với tỉ lệ màn hình 9/16

11 * 2 * 9 / 16 = 12.378 mét hay (12.378 x 22)

với kích thước của tảng đá là (8.05 x 7.41)

với một vài phép tính đơn giản ta có kích thước cần thiết của tảng đá để chiếm ~1/7 chiều rộng màn hình sẽ là

12.378 * (1 / 7) ~= 1.8 mét đây là kích thước mong muốn

Scale của tảng đá được sử dụng ở đây là 0.2

805 / 5 = 161 pixel

hay 1.61 mét nhỏ hơn con số đưa ra là 1.8 mét

Điều này có nghĩa là gì?

1.61 có nghĩa là tảng đá của bạn đang hiển thị 161 pixel trên 1 mét so với cái mà chúng ta muốn là 180 pixel nghĩa là tảng đá bị mờ hơn so với mong muốn

Để khắc phục điều này:

  1. giảm scale tảng đá (16 / 18 * 0.2 = 0.17(7))
  2. tăng size camera (zoom out)
  3. tăng PPU trong cài đặt sprite cho tảng đá

Ta có thể thấy kích thước tảng đá là 805x741 là quá lớn và không cần thiết

Giả sử chúng ta sử dụng PPU là 100. Để target cho kích thước 1080x1920 chúng ta sẽ cần camera có size là 1920 / 100 / 2 = 9.6

Lúc này tảng đá vẫn chiếm 1/7 chiều ngang vì vậy nó sẽ có kích thước là 1 / 7 * 9.6 = 1.37 hay 137 pixel

nếu chúng ta vẫn muốn sử dụng kích thước mặc định của camera là 5 thì chiều cao sẽ là 10 unit

Số PPU sẽ là 1920 / 10 = 192

Mặc dù PPU có thể được tùy chỉnh cho từng sprite riêng biệt nhưng tốt hơn hết là bạn nên sử dụng chung cùng một chỉ số PPU để dễ kiểm soát mọi thứ

nhưng trong một số trường hợp việc cần thay đổi PPU là cần thiết ví dụ như những đoạn cut scene phóng to nội dung hiện tại hay thu nhỏ, một số asset bạn không tùy chỉnh được chúng ví dụ như nó nằm trong một sprite sheet mà bạn không có file source …

Tóm lại là không nên quá cứng nhắc nhưng vẫn cần tuân thủ các nguyên tắc

Lượt nghé thăm