Tôi không biết về bất kỳ giải pháp plug and play nào cho nó, nhưng đây là một thuật toán hoạt động trong trình đổ bóng pixel với chỉ một kết cấu là tài sản bổ sung .
Tài sản cần có là một kết cấu nhỏ với một hàng duy nhất của một số số gạch, trong đó phần bên trái là phần tối nhất và phần bên phải nhẹ nhất.
Điều gì xảy ra sau đó là (trên mỗi khung):
- Lấy bộ đệm mà bạn muốn tạo phiên bản ASCII và thu nhỏ nó theo kích thước ô (vì vậy nếu bạn có các ô xếp hình 8 x 8, hình ảnh sẽ được thu nhỏ lại 8 ở cả hai chiều).
- Tạo một mục tiêu kết xuất mới của bộ đệm có kích thước đầy đủ ban đầu.
- Sử dụng trình đổ bóng pixel với các mục sau:
- Một đầu vào lấy mẫu cho bộ đệm (với lấy mẫu được đặt thành hàng xóm gần nhất) và đầu vào lấy mẫu cho các ô.
- Đồng phục cho kích thước gạch, số lượng gạch và độ phân giải đầu ra cuối cùng
- Sau đó, pixel shader sẽ:
- Nhận giá trị thang màu xám từ bộ đệm thu nhỏ (
(col.r+col.g+col.b) / 3.0
có lẽ là đủ, mặc dù đó không phải là cách mắt hoạt động)
- Sử dụng thông tin này để lấy ô bạn muốn hiển thị từ (
floor(grayscale * TILE_COUNT)
)
- Tính toán tọa độ pixel X / Y của đầu ra và lấy các mô-đun đó kích thước ô (gạchX / gạchY).
- Trả về màu như giá trị được lấy mẫu từ bộ đệm gạch tại
vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )
Các trang liên kết có một số hình ảnh ví dụ, có một điều tôi muốn cân nhắc việc thêm sẽ là một chút nhẹ của tiếng ồn với giá trị màu xám tính do đó, nó không phải là một khối lớn của MMMMMMMMMMMMMMMM
s
Đã cập nhật: @Lokkij trong phòng chat gamedev đã đăng một hướng dẫn đầy đủ hơn cho Unity:
http://pentahelix.github.io/ASCII-Tutorial-Revisited/