
Ray tracing và path tracing
Nếu để so sánh cái gì “chuẩn” đồ hoạ hơn, thì RT là thứ thực tế hơn tensor core. Vì AI suy cho cùng mới bắt đầu bùng nổ khoảng 1 thập kỷ trở lại đây. Còn ray trace là thứ đã được đề cập từ hàng thập niên trước, với mục đích tạo ra những hình ảnh chân thực nhất có thể (đúng hơn là path tracing, nhưng dù sao cũng là bản cao cấp của ray trace).
Sự tương tác của ánh sáng với vật chất là điều kiện cơ bản cho sinh vật phát triển thị giác
Bạn có thể cũng đã biết ray trace là gì. Nói cho đúng, mọi thứ mà chúng ta “thấy” đều là kết quả của phản ứng quang điện khi mà tia bức xạ khả kiến từ môi trường xung quanh đập vào tế bào hình nón nằm trong đáy mắt mỗi người, từ đó chuyển thành tín hiệu điện gửi lên vỏ não. Hay nói cho gọn, bức xạ khả kiến (hay tia sáng) là “ngôn ngữ” để mắt “đọc” thế giới. Và khi chúng ta có thể “tính” được tia sáng thì chúng ta mô phỏng được thế giới.
Vấn đề ở chỗ nếu nhớ phần quang học trong SGK Lý, bạn sẽ biết khi 1 tia xạ tiếp xúc 1 bề mặt vật chất, sẽ xảy ra 3 hiện tượng – phản xạ, khúc xạ và hấp thụ bức xạ. Trong đó tuỳ theo bản chất vật liệu, mà tỷ lệ % của từng hiện tượng sẽ khác nhau. Có vật liệu sẽ phản xạ mạnh (gương bóng), khúc xạ mạnh (lăng kính, chất lỏng), hấp thu mạnh (bề mặt đục nhám). Và khi tất cả các nguồn xạ này giao thoa lẫn nhau thì… việc tính toán chúng quả thực là ác mộng!
Path tracing mô tả chính xác nhất cách ánh sáng tương tác với tất cả mọi vật thể gồm cả phản xạ, khúc xạ, hấp thụ
Còn ray tracing là phiên bản “giản hoá” của path tracing với số lần va chạm thấp hơn
Nhưng điều không thể phủ nhận là chúng ta có thể tính toán chi tiết từng tia sáng tới mức nào thì hình ảnh chúng ta có được sẽ càng thật từng ấy. Đến đây, chúng ta có 2 phương hướng để mô phỏng tia sáng là ray tracing và path tracing. Và những gì mình vừa trình bày thực chất là path tracing – bạn cần tính toán tất cả mọi nguồn sáng cả từ trực tiếp, gián tiếp, xuyên thấu, bị hấp thụ… Mỗi khi 1 tia sáng tiếp xúc 1 bề mặt, 1 bài toán mới phát sinh và cứ thế cho tới khi nó bị hấp thụ hoàn toàn hoặc “đâm vào” camera.
Do path tracing quá nặng nề về mặt tính toán nguồn sáng như thế, chúng ta có phương hướng “nhẹ nhàng” hơn là ray tracing. Tuy cũng là “dò tia” nhưng thay vì bắt đầu từ nguồn sáng như path tracing thì ray tracing “dò ngược” tia sáng từ camera tới vật thể, rồi từ vật thể đi ngược lại nguồn sáng (thứ cấp). Do đặc trưng này, ray tracing bị thiếu yếu tố nguồn sáng toàn cục (global illumination), cũng như không tính được trọn vẹn số lượng tia sáng thực tế phải có. Bù lại thì “chi phí” điện toán của ray tracing thấp hơn và chúng ta có thể chủ động chọn số lần phản xạ để GPU vẫn có thể đáp ứng được lượng fps tối thiểu.
Quảng cáo
Nhìn chung, khung hình do path tracing tạo ra thường có độ sáng cao nhất (vì tính tất cả mọi nguồn sáng), ray tracing ít sáng hơn (do không tính toàn bộ mọi nguồn sáng) còn raster cho độ thật thấp nhất (do ánh sáng được giả lập chứ không tính tới đường đi đúng của chúng).
Ray tracing so với Rasterization
Thành thật mà nói, những game gắn mác ray tracing đang có hiện nay không hoàn toàn là ray tracing. Phần lớn chúng vẫn được dựng hình bằng cách “truyền thống”. Ray tracing được đưa vào như một giải pháp xử lý hậu kỳ để cải thiện chất lượng ánh sáng. Nguyên nhân chủ yếu vì mọi GPU đang có trên thị trường đều có shader core để xử lý raster, nhưng không phải GPU nào cũng có nhân xử lý ray tracing để phục vụ chức năng trên. Thế nên “mác” game thì thế nhưng cái “ruột” vẫn không thay đổi nhiều lắm.
Vậy thế nào là ray tracing/path tracing “chuẩn”?
So sánh ống lệnh raster và ray tracing
Quảng cáo
Nghe có vẻ nhiều quá nhỉ?
Thực tế nhiều hay ít thì độ phân giải mới chỉ là một phần. Vì ở raster thì mục đích cũng là định lượng từng pixel có giá trị bao nhiêu. Và thực tế với số lượng shader core, tensor core, RT core nhiều như hiện nay, mỗi giây chúng đều có thể thực hiện được hàng tỷ phép tính, thì vài triệu pixel cũng không phải quá nhiều với GPU hiện đại (tất nhiên GPU đời cũ thì không mạnh như này được).
Điểm qua chất lượng hình ảnh 1 số game ray tracing hiện có. Có thể thấy game nào đặt ray tracing là trọng tâm thì khác biệt rất rõ ràng. Nhưng những game vẫn lấy raster làm nền móng thì gần như không phân biệt được. Cái gì tốt hơn thực tế dựa trên lựa chọn của nhà làm game
Và suy cho cùng ống lệnh 3D truyền thống hiện tại cực kỳ phức tạp. Những gì mình viết ở phần trước chỉ là cơ bản nhất. Còn để tạo ra một game “giống thật” nhất có thể, nhà phát triển phải nhồi nhét vô đó hàng chục tính năng để tạo ra đủ hiệu ứng cháy nổ, vật lý, cinematic, DOF… Một số đôi khi chồng lấn lên nhau và nghiễm nhiên làm cho khối lượng công việc cần tính toán nhiều gấp bội. Có những thứ khi đã raster chán chê nhưng qua xử lý hậu kỳ bị cắt bớt…
Thế nên tuy raster về cơ bản là “nhanh lẹ” hơn ray tracing song khi áp dụng vô thực tế, mỗi một hiệu ứng được thêm vào là thêm một gánh nặng cho GPU. Từ đây dẫn tới chuyện nếu một game ray tracing 100% thì có khi nó lại “mượt” hơn game raster + full hiệu ứng. Dĩ nhiên số lượng RT core mà GPU đó có cũng là yếu tố then chốt để tính ray tracing nhanh hay chậm. Nhưng bạn có thể hình dung được con đường nào cũng có những hạn chế của riêng mình.
Nguồn: Tinhte.vn