Bóng trong kết xuất hoãn lại


12

Tôi đã đọc một số tài liệu về kết xuất hoãn lại và tôi nghĩ rằng tôi có ý chính của nó. Nhưng điều tôi không hiểu là làm thế nào nó hoàn thành bóng tối. Bộ đệm G, theo như tôi biết, không liên quan đến việc tạo một bóng tối cho mỗi ánh sáng, vì vậy tôi bối rối không biết làm thế nào để vượt qua ánh sáng nhận biết liệu mỗi pixel có bị chặn hay không. Rốt cuộc, một pixel nhất định có thể nhìn thấy từ phối cảnh của máy ảnh có thể không thực sự nhìn thấy được từ phối cảnh của bất kỳ ánh sáng nào - và hình học ẩn đó có thể không nhìn thấy được từ phối cảnh của máy ảnh và do đó không có gì được viết về nó trong bộ đệm G .

Nếu bạn bắt đầu kết xuất bóng tối, thì nó có vẻ khá giống với kết xuất chuyển tiếp - bạn kết xuất tất cả hình học trong cảnh cho mọi ánh sáng để hiển thị bóng tối.

Vậy làm thế nào để kết xuất hoãn hoàn thành bóng tương đương với kết xuất chuyển tiếp?

Câu trả lời:


14

Bóng mờ bị trì hoãn không làm gì đặc biệt cho bóng tối. Bạn vẫn cần hiển thị bản đồ bóng bình thường và sau đó kết xuất từng ánh sáng với bản đồ bóng thích hợp được ràng buộc dưới dạng kết cấu.

Nó vẫn tốt hơn so với kết xuất phía trước vì bạn không cần vẽ lại cảnh trong chế độ xem chính để áp dụng ánh sáng. Vẽ bản đồ bóng thường rẻ hơn nhiều so với vẽ nhiều đường chuyền trong chế độ xem chính vì bạn không cần thực hiện bất kỳ thao tác đổ bóng pixel nào và bản đồ bóng thường chứa ít cảnh hơn (bạn có thể loại bỏ nhiều thứ hơn).

Mọi người đôi khi làm "bóng mờ" cho một ánh sáng, điển hình là ánh sáng định hướng chính. Lý do chính để làm điều này là sử dụng bản đồ bóng xếp tầng hoặc một phương pháp khác sử dụng nhiều bản đồ bóng cho cùng một ánh sáng. Bạn có thể dự trữ một kênh trong bộ đệm G cho mặt nạ bóng (màu trắng ở nơi sáng, tối khi có bóng) và áp dụng tất cả các bản đồ bóng xếp tầng vào kênh bộ đệm G này; sau đó, shader cho ánh sáng chỉ cần đọc mặt nạ bóng và nhân nó thành màu sáng. Điều này thật tuyệt vì nó tách bóng khỏi bóng, nhưng bạn vẫn vẽ tất cả các bản đồ bóng giống nhau.


1
Nếu bạn cực kỳ thông minh, bạn có thể thử sử dụng trình tạo bóng hình học trong quá trình tạo GBuffer để 'nội tuyến' việc tạo bản đồ bóng (giống như mẫu DX10 của bản đồ khối). Tôi không chắc liệu nó đã được thực hiện chưa, nếu có thể hoặc cuối cùng nó sẽ chậm hơn - nhưng nó sẽ mang lại việc tạo ra các bản đồ bóng gần hơn với bóng mờ bị trì hoãn, hoặc vào định nghĩa tùy thuộc vào tôn giáo của bạn.
Jonathan Dickinson

6

Chà, bản đồ bóng tối là gì? Bản đồ bóng tối là một kết cấu mà texels trả lời một câu hỏi đơn giản: ở khoảng cách nào với ánh sáng, dọc theo hướng được biểu thị bởi texel, ánh sáng có bị che khuất không? Các tọa độ kết cấu được tạo bằng các phương tiện kết cấu chiếu khác nhau, tùy thuộc vào thuật toán ánh xạ bóng cụ thể.

Hoạ tiết chiếu chỉ đơn giản là một cách biến đổi một vật thể vào không gian của kết cấu (và vâng, tôi biết rằng âm thanh ngược. Nhưng đó là cách nó hoạt động). Các thuật toán ánh xạ bóng sử dụng một số loại biến đổi khác nhau. Nhưng cuối cùng, đây chỉ là những biến đổi từ không gian này sang không gian khác.

Khi hiển thị bản đồ bóng, bạn lấy các đỉnh của hình học của mình và biến đổi chúng qua đường ống kết xuất chuẩn. Nhưng máy ảnh và ma trận chiếu được thiết kế cho vị trí và hướng ánh sáng của bạn, không phải cho vị trí và hướng nhìn.

Khi thực hiện kết xuất chuyển tiếp với bản đồ bóng, bạn kết xuất đối tượng như bình thường, biến đổi các đỉnh thành không gian camera xem và thông qua ma trận chiếu xem. Tuy nhiên, bạn cũng biến đổi các đỉnh thông qua máy ảnh ánh sáng và ma trận chiếu của mình, chuyển chúng dưới dạng dữ liệu theo đỉnh cho bộ đổ bóng mảnh. Nó sử dụng chúng thông qua kết cấu chiếu để truy cập vào kết cấu bóng.

Đây là điểm quan trọng. Quyền truy cập kết cấu chiếu được thiết kế sao cho vị trí mà nó truy cập trên kết cấu thể hiện hướng giữa điểm đó trên bề mặt (điểm mà bạn đang hiển thị trong trình tạo bóng mảnh) và ánh sáng. Do đó, nó tìm nạp texel đại diện cho độ sâu mà tại đó sự tắc nghẽn xảy ra đối với đoạn được hiển thị.

Nhưng không có gì đặc biệt về đường ống này. Bạn không phải chuyển đổi các vị trí đỉnh thành kết cấu bóng và chuyển chúng sang bộ đổ bóng mảnh. Bạn có thể chuyển các vị trí đỉnh của không gian thế giới cho trình đổ bóng mảnh, và sau đó trình tạo bóng mảnh biến đổi chúng thành không gian chiếu của kết cấu bóng. Cấp, bạn sẽ bỏ đi rất nhiều hiệu suất, vì bạn sẽ đưa ra các tọa độ kết cấu chính xác giống nhau. Nhưng nó là khả thi về mặt toán học.

Thật vậy, bạn có thể chuyển các vị trí đỉnh của không gian camera cho trình đổ bóng mảnh. Sau đó, nó có thể biến chúng thành thế giới, sau đó thành không gian máy ảnh ánh sáng, sau đó thành không gian kết cấu bóng chiếu. Bạn có thể đặt tất cả các phép biến đổi đó thành một ma trận (tùy thuộc vào thuật toán chiếu bóng của bạn). Một lần nữa, điều này cung cấp cho bạn chính xác những gì bạn đã có trước đây, vì vậy khi kết xuất chuyển tiếp, không có lý do gì để làm điều đó.

Nhưng trong kết xuất hoãn lại , bạn đã có các vị trí đỉnh của không gian camera. Bạn phải, nếu không bạn không thể làm ánh sáng. Bạn có thể lãng phí rất nhiều bộ nhớ và băng thông bằng cách ghi chúng vào bộ đệm, hoặc bạn thông minh và tính toán lại chúng bằng cách sử dụng bộ đệm sâu và toán học khác nhau (mà tôi sẽ không đi sâu vào đây, nhưng được đề cập trực tuyến).

Dù bằng cách nào, bạn đã xem vị trí không gian camera. Và, như đã nêu ở trên, chúng ta có thể áp dụng một ma trận để biến đổi chúng từ không gian máy ảnh thành không gian kết cấu chiếu bóng. Vì vậy, ... làm điều đó. Sau đó truy cập bản đồ bóng của bạn.

Vấn đề được giải quyết.


Có thể loại trừ hình học trên mỗi ánh sáng trong kết xuất hoãn lại (vì mục đích tối ưu hóa) không?
Samaursa

@Samaursa: "Loại trừ hình học mỗi ánh sáng" khỏi cái gì? Từ đi vào bản đồ bóng tối? Từ được thắp sáng?
Nicol Bolas

Tôi thấy bạn đã trả lời câu hỏi liên quan đến nó, cảm ơn bạn. Đối với những người khác, nếu họ muốn theo dõi câu hỏi / câu trả lời: gamedev.stackexchange.com/q/178755/2287
Samaursa
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.