Giải Thích Đơn Giản Ray Tracing Và Path Tracing Trong Khoa Học Đồ Họa Máy Tính

Về kỹ nghệ phát triển khoa học đồ họa máy tính và lịch sử phát triển của nó không phải là nội dung trong bài này, đây là một bài viết đơn giản chỉ để hiểu ray tracing là gì và khác gì so với với path tracing.

Cái này chủ yếu tôi dùng để giải thích cho trong group Facebook YeuFX có nhiều anh em trẻ và mới từ xưa giờ tiếp xúc đồ họa chỉ dùng Unreal Engine sử dụng chủ yếu GPU và không hiểu tại sao khi chuyển qua chế độ Path Tracer nó lại toàn noise không và chậm rì rì mà lại nghe khen Path Tracer đẹp lắm, uy vũ như Redshift 3D hay phần mềm render GPU unbiasOctane

Giải Thích Về Ray Tracing Và Path Tracing

Có lẽ rất nhiều bạn ở đây sẽ còn nhập nhằng hiểu Ray Tracing và Path Tracing vì làm real-time thì cứ nghe ray tracing ròi cũng reflect này nọ, nhưng vẫn bị so với các frame làm phim là path tracing nhưng phim không thể nào có frame hình real-time. Để tôi giải thích ngắn gọn ở đây. (chú ý là khi các hình minh họa thường mô tả icon con mắt, icon camera thì đều ý chỉ tới cái frame hình trên máy tính khi đã render, tức một frame có độ phân giải. Ví dụ: 1 frame hình FULL HD 1080)

phát họa cách 1 tia màu xanh lá cây được bắn ra từ 1 pixel thông qua vùng nhìn của hình (đại diện là camera), tracing có nghĩa là trong scene này sẽ tính toán xử lý xem tia đó có va chạm với vật thể nào không (đánh dấu số 2) – nếu có thì có nằm đắng sau ánh sáng không (nếu nằm sau ánh sáng thì là có bóng đổ) và có bề mặt vật liệu thế nào (3) so với ánh sáng (đại diện mặt trời) tương tác. Toàn bộ quá trình này gọi là ray tracing

Ray tracing có nghĩa là thông qua camera (tức cái frame hình hiển thị trên màn hình) mỗi một pixel thì engine sẽ đưa ra một tia (ray) vào trong không gian (scene), tia này gặp các đối tượng nó sẻ trả lại dữ liệu để biết (ánh sáng, bề mặt vật liệu, phản chiếu, trong suốt – transmission), những tia nào đi tới vật thể rồi xuyên qua mà đụng vật thể khác thì sẽ hiểu vật thể sau đó là đang trong shadow. Vì số tia bắn ra từ một pixel chỉ là một nên với GPU tính toán xử lý nhanh, ray tracing có thể thực hiện tức thời các sampler, đồng nghĩa với việc real-time.

Vậy, túm váy ray tracing là mỗi pixel trên frame hình bắn ra một tia, engine tính toán tia đó và trả lại pixel màu, nhiều pixel màu thì thành cái hình theo độ phân giải màn hình (FULL HD, 4K, 8K).

Path tracing cũng tương tự ray tracing về chuyện bắn tia, nhưng mỗi pixel, nó bắn ra 1 chùm tia, khối lượng chùm tia này có thể rất khổng lồ và đi tới mọi không gian (world) của scence, xong tiếp tục bounce (tia thứ cấp, tia dội vào bề mặt di chuyển tiếp), các tia này liên tục sampler data và việc này gọi là brute force tức tính thoải mái tới khi nào chi tiết nhất, ít noise nhất thì mới chịu, kết quả là đẹp và thời gian sẽ lâu bền bỉ.

path tracing không chỉ bắn một tia đi, mà là một chùm tia sao đó tiếp tục dội (bounce) vào các bề mặt, mỗi lần bounce này được hiểu là số lượng sampler data (càng lâu càng nhiều thì hình càng đẹp và càng ít noise)

Đây cũng được hiểu chính là unbias render, ở những phần mềm render bias thì có thể điều khiển các tham số, giới hạn số tia thứ cấp nhảy cà tưng bounce, giới hạn các giá trị tính toán như phản chiếu, bóng đổ, bề mặt vật liệu để có kết quả vừa đủ với mong muốn mà thời gian render vẫn nhanh. (Đọc thêm hiểu về bias và unbias trong kỹ thuật render)

Không có gì mình họa path tracing tuyệt vời bằng hãng phim hoạt hình Walt Disney đã thực hiện một video mô tả đầy kỹ thuật nhưng dùng ngôn ngữ rất dễ hiểu cùng hình ảnh thập niên 50 để mô tả về kỹ thuật render đồ họa này.




Như vậy, Ray Tracing là thông qua từ một pixel một tia được bắn vào scene, có khả năng xử lý tức thời bằng GPU thành real-time, còn Path Tracing là từ một pixel một chùm tia sẽ được bắn vào scene, các tia này sẽ tiếp tục gián tiếp dội (bounce) tạo ra các tia thứ cấp lan tỏa trong scene, thời gian tính toán xử lý sẽ lâu, khối lượng thông tin nhiều nên GPU sẽ không đủ bộ nhớ so với CPU và cần phải chờ để có hình không bị noise.

Đại Diện Ứng Dụng Ray Tracing Và Path Tracing

Ray tracing thì để dễ hiểu, ta đang có các engine game phổ biến sử dụng tài nguyên GPU vượt trội là Unreal Engine, Unity, đây là môi trường real-time (thời gian thực). Bởi vậy, mới nói rằng cách mạng của ray tracing hiện nay nhờ GPU là khả năng có thể cho thấy đồ họa như cinematic phim, có phản chiếu, vật liệu PBR (mô hình shader PBR là gì), hiển thị được caustic, có motion blur, và cùng với sự tiến hóa vượt trội của GPU Nvidia mà giờ còn có kết hợp với AI Deep Learning để upscale được video game real-time khung cảnh khổng lồ độ phân giải 8K không lag Nvidia DLSS.

Xem DLSS đang hành động thông qua ray tracing




Còn nói về Path tracing là thường nói về sử dụng có thể là GPU hoặc CPU, nói về unbias và bias, và thuộc lĩnh vực thế giới làm VFX kỹ xảo, cinematic, làm phim điện ảnh, làm show quảng cáo, phim 3D kiến trúc, sử dụng điển hình các phần mềm render như Arnold, V-Ray, Redshift 3D, Corona, F-Storm, Mantra, Pixar Renderman, Maxwell, Cycles X, và EEVEE (mặc dù Blender viết EEVEE để có thể hiển thị hình ảnh như real-time nhưng bản chất nó vẫn là path tracing sử dụng GPU với đầy rẫy giới hạn vì vẫn phải rasterized… đây không phải một engine game)

Bản thân Path Tracing render được volumetric chất lượng cao (hiện tại có OpenVDB cho CPU và GPU là NanoVDB được trình bày trong Siggraph 2021 năm nay), volumetric với khối lượng khổng lồ nổ tung tóe kỹ xảo trong các phim điện ảnh hay cinematic là ngoài sức tưởng tượng của GPU về bộ nhớ (volumetric là thứ cần cho mọi data về fluid trong phim điện ảnh), nên công việc hiện nay vẫn dành cho CPU, tuy nhiên Unreal Engine cũng cho thấy các phiên bản mới có volumetric sử dụng volumetric, chưa thể nói được điều gì vào tương lai.

Xem hiệu quả của volumetric thông qua các pha hành động cháy nổ khói trong phim Stalingrad của studio VFX Nga, Main Road Post.

Hiện tại thì cả Ray Tracing và Path Tracing đều đã có GPU chứ không không chỉ tính toán trên CPU. Bản thân Path Tracing như Renderman 24 sắp tới có thể mix cả 2 nguồn tài nguyên và họ gọi là XPU (CPU + mọi GPU có trên máy – tuy nhiên theo biết thì XPU chưa có khả năng ra sản phẩm production cuối cùng), Weta hiện nay cũng đang tuyển mộ liên tục engineer nghiên cứu rendering real-time để đưa thẳng vào production ra xài luôn.

Trong Unreal Engine 4.27, có một chức năng mà tôi rất khoái, đó là khả năng render path tracing – UE gọi là Path Tracer, thông thường Unreal Engine sẽ dùng Ray Tracing để có real-time và dùng tài nguyên mạnh mẽ của GPU như các bạn đã biết, nhưng nếu mong muốn chất lượng hình ảnh cực căng và ánh sáng chi tiết hơn, UE đã có Path Tracing, như vậy trong tương lai gần, khả năng cao là nếu chỉ dùng Redshift 3D để render mấy cái Mesh thì anh em có UE sử dụng, hàng miễn phí.

Để cho các bạn xoắn não thêm tí, tôi để thêm cái video ở đây cho xem video game Battle Field so sánh Ray Tracing và Path Tracing đều real-time với ~60 fps, tôi chỉ dám nói, chào mừng tới thế kỷ 21 nơi Nvidia đang làm mưa làm gió khả năng tính toán cùng một lúc xảy ra đồng thời vô cùng dễ sợ của GPU.




Denoiser

Hiện nay không chỉ cứ đập đầu vào tính toán xử lý vắt kiệt khả năng của GPU hay CPU, mà các nhà khoa học nghiên cứu còn liên tục đưa ra những cuộc cách mạng về kỹ nghệ hình họa máy tính, ngoài sử dụng trí tuệ nhân tạo AI như đã nói ở trên, còn có ứng dụng denoise – khử nhiễu, khử hạt, và tính năng khử hạt của các hãng như Nvidia đã lên tới tầm real-time, phản ứng tức thì cho mọi ray có dữ liệu thấp mà vẫn cho ra hình ảnh đồ họa sắc nét.

Đây là ứng dụng công nghệ denoising sử dụng trên GPU RTX ngay cho phương pháp path tracing và tạo ra khung hình đủ để real-time




Gần đây với kết quả mới của mình, Nvidia cũng cho thấy khả năng denoise real-time không thể nhận biết ngay trong video game




Ngoài Nvidia còn có Intel Open Denoiser sử dụng cho các phần mềm 3D, rồi ta còn có AMD pro denoser cùng với phân khúc Pro Radeon gần đây còn phát triển kỹ nghệ Fidelity tức tương tự DLSS của Nvidia – đặc biệt là toàn thể các hệ thống máy Apple Mac đều không dùng GPU Nvidia chỉ vì mấy ông CEO không yêu nhau. Và kết với cái video sau đây để anh em thấy cuộc chơi đồ họa cũng vui lắm.




Post Author: Vu Pham