Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Khi xem một đoạn game hiện đại với phản chiếu trên mặt nước, bóng đổ mềm và ánh sáng len qua khe cửa, bạn đang thấy kết quả của hai xu hướng: dò tia (ray tracing) giúp ánh sáng chân thực hơn, và upscaling giúp giữ tốc độ khung hình bằng cách dựng ở độ phân giải thấp rồi phóng to thông minh. Cùng tìm hiểu nguyên lý.
Hầu hết game thời gian thực dùng kỹ thuật rasterization: chuyển các tam giác 3D thành điểm ảnh trên màn hình rất nhanh. Ánh sáng, bóng đổ và phản chiếu thường được xấp xỉ bằng các mẹo như bản đồ bóng (shadow map), ánh sáng nướng sẵn (baked lighting) và phản chiếu trong không gian màn hình. Cách này nhanh nhưng có giới hạn về độ chân thực.
Dò tia mô phỏng đường đi của ánh sáng: từ camera bắn tia vào cảnh, tia chạm vật thể thì tính màu, rồi có thể bắn thêm tia phản xạ, tia khúc xạ hoặc tia về phía nguồn sáng để xác định bóng. Vì mô phỏng gần với vật lý hơn nên bóng đổ, phản chiếu và ánh sáng gián tiếp trông tự nhiên hơn.
Ý tưởng cốt lõi chỉ là tìm giao điểm giữa tia và vật thể. Ví dụ tia với mặt cầu:
import math
def giao_tia_cau(goc, huong, tam, r):
# huong đã được chuẩn hóa; trả về khoảng cách t nhỏ nhất > 0 hoặc None
oc = [goc[i] - tam[i] for i in range(3)]
b = 2 * sum(oc[i] * huong[i] for i in range(3))
c = sum(x * x for x in oc) - r * r
delta = b * b - 4 * c
if delta < 0:
return None
t = (-b - math.sqrt(delta)) / 2
return t if t > 0 else None
print(giao_tia_cau([0, 0, 0], [0, 0, 1], [0, 0, 5], 1)) # 4.0
Game thật làm việc này cho hàng triệu tia mỗi khung hình, nên dựa vào phần cứng chuyên dụng của GPU và cấu trúc dữ liệu tăng tốc tìm giao điểm.
Dò tia rất tốn tài nguyên. Vì vậy game thường dùng phương pháp lai: rasterization cho phần lớn cảnh, dò tia cho các hiệu ứng chọn lọc như phản chiếu, bóng hoặc ánh sáng toàn cục, với số tia ít rồi dùng bộ khử nhiễu để làm mịn kết quả.
Độ phân giải cao đòi hỏi sức mạnh GPU lớn. Upscaling giải quyết bằng cách dựng ở độ phân giải thấp hơn rồi phóng lên độ phân giải đích. Các kỹ thuật hiện đại không chỉ kéo giãn ảnh mà còn dùng thông tin từ nhiều khung hình liên tiếp (temporal), vector chuyển động và đôi khi cả mạng nơ-ron để tái tạo chi tiết, nhờ đó ảnh sắc nét hơn nhiều so với phóng đại thông thường.
Một số công nghệ đại diện: nhóm kỹ thuật dựa trên học máy của các hãng GPU, các giải pháp mở không cần phần cứng chuyên dụng, và bộ upscaling tích hợp trong game engine. Tên và tính năng từng giải pháp thay đổi theo thời gian, hãy xem tài liệu mới nhất của engine hoặc hãng GPU bạn dùng.
Bạn không cần tự viết bộ dò tia để tận dụng chúng. Các game engine như Unity, Unreal và Godot đã tích hợp nhiều tùy chọn ánh sáng và upscaling. Hãy bắt đầu bằng việc hiểu khái niệm ánh sáng, vật liệu, rồi thử bật các tùy chọn trong engine và quan sát khác biệt về hình ảnh lẫn hiệu năng.
Ray tracing nâng độ chân thực của ánh sáng, upscaling giữ cho tốc độ khung hình mượt. Cặp đôi này cho thấy đồ họa hiện đại là bài toán cân bằng giữa chất lượng, hiệu năng và tính tương thích phần cứng.
Nếu bạn muốn học đồ họa và làm game từ nền tảng, mời bạn xem các khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment