Vật lý dựa trên bóng - ánh sáng xung quanh / gián tiếp


15

Tôi đã thực hiện một trình theo dõi đường dẫn vật lý sau khi nghiên cứu PBRT của M. Pharr và G. Humphreys. Bây giờ tôi đang cố gắng áp dụng kết xuất vật lý dựa trên đồ họa thời gian thực bằng OpenGL ES (trong ứng dụng iPhone).

Tôi muốn bắt đầu sử dụng Oren-Nayar và Cook-Torrance dưới dạng BRDF khuếch tán và đặc hiệu nhưng tôi có một vấn đề: làm thế nào để tôi mô hình hóa ánh sáng gián tiếp?

Trong một công cụ theo dõi đường đi (như cái được chứa trong pbrt), ánh sáng gián tiếp / môi trường xung quanh được cung cấp "tự động" từ thuật toán dò đường, vì nó đi theo đường đi của tia sáng có tính đến ánh sáng trực tiếp và gián tiếp.

Làm cách nào để mô hình hóa ánh sáng gián tiếp trong kết xuất đồ họa dựa trên vật lý được viết bằng OpenGL ES, vì vậy sử dụng đồ họa máy tính thời gian thực?

Câu trả lời:


39

Đồ họa thời gian thực triển khai một loạt các xấp xỉ để đối phó với chi phí tính toán của việc mô phỏng ánh sáng gián tiếp, đánh đổi giữa hiệu suất thời gian chạy và độ trung thực của ánh sáng. Đây là một lĩnh vực nghiên cứu tích cực, với các kỹ thuật mới xuất hiện hàng năm.

Ánh sáng xung quanh

Ở đầu rất đơn giản của phạm vi, bạn có thể sử dụng ánh sáng xung quanh : nguồn sáng toàn cầu, đa hướng áp dụng cho mọi đối tượng trong cảnh, mà không cần quan tâm đến nguồn sáng thực tế hoặc khả năng hiển thị cục bộ. Điều này hoàn toàn không chính xác, nhưng cực kỳ rẻ, dễ dàng cho một nghệ sĩ điều chỉnh và có thể trông ổn tùy thuộc vào cảnh và phong cách hình ảnh mong muốn.

Các phần mở rộng phổ biến cho ánh sáng xung quanh cơ bản bao gồm:

  • Làm cho màu sắc xung quanh thay đổi theo hướng, ví dụ như sử dụng các sóng hài hình cầu (SH) hoặc một sơ đồ khối nhỏ và tìm kiếm màu trong một shader dựa trên vectơ thông thường của mỗi đỉnh hoặc pixel. Điều này cho phép một số khác biệt thị giác giữa các bề mặt của các hướng khác nhau, ngay cả khi không có ánh sáng trực tiếp chiếu tới chúng.
  • Áp dụng các kỹ thuật che giấu môi trường xung quanh (AO) bao gồm AO đỉnh được tính toán trước, bản đồ kết cấu AO , trường AOAO không gian màn hình (SSAO) . Tất cả đều hoạt động bằng cách cố gắng phát hiện các khu vực như lỗ hổng và kẽ hở nơi ánh sáng gián tiếp ít có khả năng chiếu vào và làm tối ánh sáng xung quanh ở đó.
  • Thêm một sơ đồ khối môi trường để cung cấp phản xạ gương xung quanh. Một sơ đồ khối với độ phân giải khá (128² hoặc 256² mỗi mặt) có thể khá thuyết phục đối với hình dạng trên bề mặt cong, sáng bóng.

Nướng ánh sáng gián tiếp

"Cấp độ" tiếp theo, có thể nói, về các kỹ thuật liên quan đến nướng bánh (tiền điện toán ngoại tuyến) một số đại diện của ánh sáng gián tiếp trong một cảnh. Ưu điểm của nướng là bạn có thể nhận được kết quả chất lượng khá cao với ít chi phí tính toán theo thời gian thực, vì tất cả các phần cứng được thực hiện trong nướng. Sự đánh đổi là thời gian cần thiết cho quá trình nướng có hại cho tốc độ lặp của các nhà thiết kế cấp; Cần thêm bộ nhớ và dung lượng ổ đĩa để lưu trữ dữ liệu được tính toán trước; khả năng thay đổi ánh sáng trong thời gian thực rất hạn chế; và quá trình nướng chỉ có thể sử dụng thông tin từ hình học mức tĩnh, do đó hiệu ứng ánh sáng gián tiếp từ các đối tượng động như ký tự sẽ bị bỏ qua. Tuy nhiên, ánh sáng nướng được sử dụng rất rộng rãi trong các trò chơi AAA ngày nay.

Bước nướng có thể sử dụng bất kỳ thuật toán kết xuất mong muốn nào, bao gồm theo dõi đường dẫn, độ phóng xạ hoặc sử dụng chính công cụ trò chơi để hiển thị hình khối (hoặc dấu chấm phẩy ).

Các kết quả có thể được lưu trữ trong kết cấu ( ánh sáng ) áp dụng cho hình học tĩnh ở cấp độ và / hoặc chúng cũng có thể được chuyển đổi thành SH và được lưu trữ trong các cấu trúc dữ liệu thể tích, chẳng hạn như khối lượng chiếu xạ (kết cấu khối lượng trong đó mỗi texel lưu trữ đầu dò SH) hoặc lưới tứ diện . Sau đó, bạn có thể sử dụng các shader để tra cứu và nội suy màu từ cấu trúc dữ liệu đó và áp dụng chúng cho hình học được hiển thị của bạn. Phương pháp thể tích cho phép ánh sáng nướng được áp dụng cho các đối tượng động cũng như hình học tĩnh.

Độ phân giải không gian của ánh sáng, v.v. sẽ bị giới hạn bởi bộ nhớ và các ràng buộc thực tế khác, vì vậy bạn có thể bổ sung ánh sáng nướng bằng một số kỹ thuật AO để thêm chi tiết tần số cao mà ánh sáng nướng không thể cung cấp và đáp ứng với các đối tượng động (chẳng hạn như làm tối ánh sáng gián tiếp dưới một nhân vật hoặc phương tiện đang di chuyển).

Ngoài ra còn có một kỹ thuật gọi là chuyển bức xạ được tính toán trước (PRT) , giúp mở rộng nướng để xử lý các điều kiện ánh sáng động hơn. Trong PRT, thay vì tự nướng ánh sáng gián tiếp, bạn nướng chức năng truyền từ một số nguồn ánh sáng thường là bầu trời đến ánh sáng gián tiếp kết quả trong cảnh. Hàm truyền được biểu diễn dưới dạng ma trận biến đổi từ các hệ số SH đích đến tại mỗi điểm mẫu nướng. Điều này cho phép thay đổi môi trường ánh sáng và ánh sáng gián tiếp trong cảnh sẽ phản hồi hợp lý. Far Cry 3 và 4 đã sử dụng kỹ thuật này để cho phép một chu kỳ ngày đêm liên tục, với ánh sáng gián tiếp thay đổi dựa trên màu sắc bầu trời vào mỗi thời điểm trong ngày.

Một điểm khác về nướng bánh: có thể hữu ích khi có dữ liệu nướng riêng biệt cho ánh sáng gián tiếp khuếch tán và đặc biệt. Các hình khối hoạt động tốt hơn nhiều so với SH cho đặc tính (vì hình khối có thể có nhiều chi tiết góc cạnh hơn), nhưng chúng cũng chiếm nhiều bộ nhớ hơn, vì vậy bạn không thể đặt chúng dày đặc như các mẫu SH. Hiệu chỉnh parallax có thể được sử dụng để phần nào bù đắp cho điều đó, bằng cách làm cong vênh theo sơ đồ khối để làm cho phản xạ của nó cảm thấy có căn cứ hơn với hình học xung quanh nó.

Kỹ thuật hoàn toàn theo thời gian thực

Cuối cùng, có thể tính toán ánh sáng gián tiếp hoàn toàn động trên GPU. Nó có thể đáp ứng trong thời gian thực với những thay đổi tùy ý của ánh sáng hoặc hình học. Tuy nhiên, một lần nữa, có một sự đánh đổi giữa hiệu suất thời gian chạy, độ trung thực ánh sáng và kích thước cảnh. Một số trong những kỹ thuật này cần một GPU mạnh mẽ để hoạt động, và có thể chỉ khả thi đối với kích thước cảnh giới hạn. Chúng cũng thường chỉ hỗ trợ một luồng ánh sáng gián tiếp.

  • Một sơ đồ khối môi trường động, trong đó các mặt của sơ đồ khối được hiển thị lại mỗi khung bằng sáu camera được đặt xung quanh một điểm đã chọn, có thể cung cấp phản xạ môi trường tốt cho một đối tượng. Điều này thường được sử dụng cho xe người chơi trong các trò chơi đua xe, ví dụ.
  • Chiếu sáng toàn cầu trong không gian màn hình , một phần mở rộng của SSAO tập hợp ánh sáng phản chiếu từ các pixel gần đó trên màn hình trong một lần xử lý hậu kỳ.
  • Sự phản xạ tia không gian màn hình hoạt động bằng cách chiếu tia qua bộ đệm sâu trong một đường chuyền. Nó có thể cung cấp phản xạ chất lượng khá cao miễn là các đối tượng được phản chiếu trên màn hình.
  • Tính phóng xạ tức thời hoạt động bằng cách truy tìm các tia vào cảnh bằng CPU và đặt ánh sáng điểm tại mỗi điểm chiếu tia, đại diện cho ánh sáng phản xạ đi theo mọi hướng từ tia đó. Nhiều đèn này, được gọi là đèn điểm ảo (VPL), sau đó được GPU kết xuất theo cách thông thường.
  • Bản đồ bóng phản chiếu (RSM) tương tự như tính phóng xạ tức thời, nhưng VPL được tạo bằng cách hiển thị cảnh từ góc nhìn của ánh sáng (như bản đồ bóng) và đặt VPL ở mỗi pixel của bản đồ này.
  • Khối lượng truyền ánh sáng bao gồm các lưới 3D của đầu dò SH được đặt trong toàn cảnh. RSM được kết xuất và sử dụng để "bơm" ánh sáng dội vào đầu dò SH gần bề mặt phản chiếu. Sau đó, một quy trình giống như lũ lụt truyền ánh sáng từ mỗi đầu dò SH đến các điểm xung quanh trong lưới và kết quả của việc này được sử dụng để áp dụng ánh sáng cho cảnh. Kỹ thuật này đã được mở rộng để tán xạ ánh sáng thể tích là tốt.
  • Truy tìm hình nón Voxel hoạt động bằng cách voxel hóa hình học cảnh (có thể sử dụng các độ phân giải voxel khác nhau, mịn hơn gần camera và thô hơn), sau đó chiếu ánh sáng từ RSM vào lưới voxel. Khi kết xuất cảnh chính, trình tạo bóng pixel thực hiện một "dấu vết hình nón" tia-ray với bán kính tăng dần dần qua lưới voxel để thu thập ánh sáng tới cho bóng râm khuếch tán hoặc đặc trưng.

Hầu hết các kỹ thuật này không được sử dụng rộng rãi trong các trò chơi ngày nay do các vấn đề mở rộng đến kích thước cảnh thực tế hoặc các hạn chế khác. Ngoại lệ là sự phản chiếu không gian màn hình, rất phổ biến (mặc dù nó thường được sử dụng với các hình khối như một dự phòng, cho các khu vực mà phần không gian màn hình bị lỗi).

Như bạn có thể thấy, ánh sáng gián tiếp theo thời gian thực là một chủ đề lớn và thậm chí câu trả lời này (khá dài!) Chỉ có thể cung cấp một cái nhìn tổng quan và bối cảnh 10.000 feet để đọc thêm. Cách tiếp cận nào là tốt nhất cho bạn sẽ phụ thuộc rất lớn vào các chi tiết của ứng dụng cụ thể của bạn, những hạn chế nào bạn sẵn sàng chấp nhận và bạn phải dành bao nhiêu thời gian cho nó.


Xin chào @Nathan, cảm ơn bạn đã trả lời chi tiết. Tôi biết đây là một chủ đề lớn (và một chủ đề lớn của nghiên cứu). Vấn đề lớn nhất là tài liệu trực tuyến bị phân mảnh, và rất khó để tìm thấy một sự chấp thuận tốt. Dự án của tôi là goo.gl/Fgo21x : trình xem BRDF (lấy cảm hứng từ trình xem WDAS) để hiển thị các mô hình BRDF dựa trên kinh nghiệm và vật lý phổ biến nhất và hỗ trợ tính toán màu sắc bằng dữ liệu Spectral - giá trị tristimulus. Đây là một dự án giáo dục để nghiên cứu OpenGL.
Fabrizio Duroni

Tôi nghĩ rằng cách tiếp cận đầu tiên tốt có thể là sử dụng phần mở rộng phổ biến mà bạn đã đề cập: SH hoặc sơ đồ khối nhỏ + bản đồ khối môi trường (để phản xạ và khúc xạ). Bạn nghĩ gì về nó? (Tôi đang phát triển ứng dụng này sau khi làm việc trong những đêm không ngủ :)). Cảm ơn bạn một lần nữa cho bộ sưu tập các nguồn bạn liên kết ở trên (tôi có rất nhiều tài liệu để nghiên cứu bây giờ).
Fabrizio Duroni

@FabrizioDuroni Yep! Đối với người xem BRDF, môi trường định hướng đơn giản cộng với sơ đồ khối môi trường sẽ rất tuyệt.
Nathan Reed

Có lẽ điều này rơi vào một trong các danh mục của bạn, nhưng không phải là kết xuất đồ họa theo kiểu khuôn mặt cũ kỹ về mặt kỹ thuật là một kỹ thuật hoàn toàn theo thời gian thực? Ngoài ra, không phải là có thể tăng môi trường xung quanh cơ bản với sơ đồ khối môi trường để phản xạ khuếch tán không?

@racarate Xin lỗi, tôi mất một lúc để trả lời, nhưng đúng vậy, bạn đã đúng! Tôi nghĩ rằng tôi có ý đề cập đến điều đó, nhưng quên. :) Dù sao, tôi đã thêm nó. (Tôi đã đề cập đến việc sử dụng một sơ đồ khối để khuếch tán, trong điểm đầu tiên.)
Nathan Reed

5

Đây là vấn đề 'khó khăn' chính còn lại trong CG thời gian thực và có rất nhiều nghiên cứu đang tiếp tục giải quyết nó.

Rào cản lớn nhất là trong đồ họa raster, mỗi thành phần của cảnh được hiển thị 'trong chân không' - mỗi tam giác được hiển thị mà không cần tham chiếu đến bất kỳ tam giác nào khác trong cảnh, và tương tự đối với các pixel, trái ngược với các phương pháp dò tia trong đó mỗi tia có quyền truy cập vào toàn bộ cảnh trong bộ nhớ. Vì vậy, các lập trình viên thời gian thực cần sử dụng các thủ thuật hacky để làm những thứ như phản xạ và bóng tối, và điều tương tự cũng áp dụng cho chiếu sáng toàn cầu.

Phương pháp thời gian chạy giá rẻ là sử dụng bản đồ ánh sáng nướng, trong đó bạn chạy thứ gì đó chậm nhưng tuyệt vời như tính phóng xạ hoặc theo dõi đường dẫn ngoại tuyến trước, sau đó lưu thông tin ánh sáng cùng với dữ liệu đỉnh thông thường của bạn. Điều này rất tốt cho hình học tĩnh, nhưng trở nên có vấn đề ngay khi bạn thêm các đối tượng chuyển động. Michal Iwanicki đã trình bày tốt về cách họ giải quyết vấn đề này cho 'The Last of Us'.

Hình cầu hài được sử dụng rất nhiều trong các công cụ trò chơi để thể hiện ánh sáng gián tiếp. Về cơ bản, chúng là một biến đổi Fourier trên bề mặt của một hình cầu, bằng cách loại bỏ các thành phần tần số cao, bạn có thể nhận được trực quan, chủ yếu là ánh sáng môi trường chính xác chỉ với 9 hệ số cho mỗi màu. Chẳng hạn, Unity sử dụng SH để nướng 'đầu dò ánh sáng' tại các điểm khác nhau trong cảnh, các vật thể chuyển động sau đó có thể nội suy giữa các đầu dò gần đó để có được xấp xỉ ánh sáng gián tiếp ở vị trí của chúng. Bài viết của Robin Green về cơ bản là kinh thánh về kỹ thuật này, nhưng nó khá nặng nề.

Kỹ thuật nóng tại thời điểm này dường như là Voxel Cone Trace, không liên quan đến bất kỳ bước nướng trước nào. Bản thân tôi không quá quen thuộc với nó, nhưng theo tôi hiểu, nó liên quan đến việc hóa giải cảnh của bạn vào một thế giới theo phong cách Minecraft có độ phân giải thấp, đặt các voxels vào một cấu trúc không gian có thể di chuyển nhanh như một quãng tám, sau đó đúc một vài chiều rộng các tia (hình nón) từ mỗi điểm và kiểm tra các voxels mà chúng chạm vào để thu thập ánh sáng dội lại. NVidia đang thúc đẩy điều này khá khó khăn vào lúc này, và có những bài báo về nó ở đâyđây .

Mong rằng sẽ giúp :)


0

Truy tìm đường dẫn là một thuật toán rất tốn kém về mặt tính toán và không phù hợp với thời gian thực. Kiến trúc của PBRT cũng không phù hợp với thời gian thực, mục tiêu chính của PBRT là giải phương trình kết xuất, sử dụng tích hợp không thiên vị Monte Carlo. Xem https://en.wikipedia.org/wiki/Unbiased_Vndering để biết thêm thông tin.

Nếu không có nhiều tối ưu hóa và ràng buộc, tôi nghi ngờ bạn sẽ có thể đạt được hiệu suất tốt trên thiết bị di động.

Trong mọi trường hợp, theo dõi đường dẫn có thể được thực hiện trong OpenGL, tôi khuyên bạn nên xem xét các shader tính toán rất mạnh. OpenGL ES 3.1 hỗ trợ tính năng đổ bóng với một số hạn chế nhỏ, trái ngược với Desktop GL.

Hãy đọc qua trang này để biết thêm thông tin: https://github.com/LWJGL/lwjgl3-wiki/wiki/2.6.1.-Ray-tracing-with-OpenGL-Compute-Shaders-(Part-I)

May mắn nhất!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.