Tại sao các trò chơi hiện đại sử dụng phương pháp kết xuất đồ họa cho gương?


40

Khi nhìn vào các trò chơi cũ như Mario64 hay DukeNukem3D, tất cả các gương trong trò chơi về cơ bản chỉ là các lỗ trên tường với một bản sao hình học được nhân đôi ở phía trước gương đặt phía sau chúng. Trong trường hợp DukeNukem3D, người ta thậm chí có thể kích hoạt không có clip và đi vào phòng được nhân đôi.

Ngược lại, các trò chơi hiện đại sử dụng phương pháp kết xuất đồ họa cho gương. Điều này dẫn đến các gương bị pixel đáng chú ý khi đến gần chúng. Một trong những trò chơi đầu tiên tôi nhận thấy cách tiếp cận này là Luigi's Mansion, nhưng dường như nó được sử dụng trong hầu hết các trò chơi hiện đại.

Những thay đổi trong phần cứng hoặc động cơ làm cho cách tiếp cận thứ hai trở nên chiếm ưu thế trong những ngày này và những lợi ích của nó là gì? Về mặt hình ảnh thuần túy, cách tiếp cận đầu tiên có vẻ tốt hơn, vì nó không gặp phải vấn đề pixel.


14
Điều gì nếu bạn muốn một tấm gương trên một cánh cửa giữa hai phòng?
Tuyệt vời nhất

Câu trả lời:


37
  1. Sử dụng RTT (render-to-texture) cho phép dễ dàng chia tỷ lệ chất lượng kết xuất (độ phân giải, LOD, độ phức tạp ánh sáng) để điều chỉnh hiệu suất. RTT cũng giúp dễ dàng thay thế bề mặt bằng sơ đồ khối ở một khoảng cách nhất định, nơi khó có thể nhìn thấy sự phản chiếu chính xác.
  2. Vì đầu ra là một kết cấu, nên có nhiều tùy chọn hơn liên quan đến những gì có thể được thực hiện với nó sau đó (chiếu sáng, đổ bóng, trộn, méo, v.v.).
  3. Nếu một phiên bản nhân đôi của hình học được đặt trong cảnh, nó sẽ yêu cầu loại bỏ phức tạp hơn khi nó giao với hình học thực và có thể được nhìn thấy phía sau góc. Trong các trò chơi cũ hơn, các cấp được thiết kế để tránh điều này. Chưa kể rằng ai đó phải làm phản chiếu thực tế.
  4. Nếu hình học không được nhân đôi thủ công, việc kết xuất phải được thực hiện bằng cách thay đổi ma trận chế độ xem và chế độ loại bỏ (để bù cho sự đảo ngược không gian trong ma trận) và sử dụng bộ đệm stpson để cắt gương. Các công cụ hiện đại thích tạo ra tất cả các trạng thái kết xuất trước, do đó sẽ có một vấn đề nhỏ với việc tạo các bản sao của mọi trạng thái kết xuất cảnh với các thay đổi bắt buộc để hiển thị gương.

Vì vậy, về cơ bản sử dụng RTT mang lại nhiều tự do hơn cho mọi người.


Vào ngày 3.: Hầu hết các công cụ trò chơi FPS (cũ hơn) đã sử dụng thuật toán chia đôi (như "công cụ cổng thông tin" nổi tiếng mà DOOM sử dụng) đã thực hiện việc cắt các đa giác (rất có thể là bốn) để loại bỏ khả năng hiển thị. Những động cơ như vậy có thể dễ dàng bước vào một "gương" tứ giác như một cổng nhìn vào một căn phòng phía sau gương mà không phải lo lắng về hình học được nhân đôi bên ngoài gương.
dronus

@dronus Gì? Tại sao lại bận tâm làm một "tấm gương" ngay từ đầu? Chỉ cần mở một lỗ trên tường.
S. Tarık Çetin

Bởi vì hình học thực sự có thể không để lại không gian phía sau bức tường gương, giống như một chiếc gương thực sự không cần phải có một căn phòng phía sau để làm việc.
dronus

29

Không, bạn đã sai - đó không phải là cách mà gương của Duke Nukem 3D hoạt động.

DN3D đã sử dụng một công cụ cổng thông tin . Sự kết hợp giữa hai lĩnh vực bất kỳ là tùy ý ở một mức độ nào đó và khi công cụ kết xuất đến một cổng thông tin, nó biết rằng nó phải bắt đầu kết xuất một khu vực khác trong đó. Khu vực phía sau tấm gương về cơ bản là một nơi giữ để giải quyết vấn đề trong động cơ - điểm duy nhất của khu vực là lớn hơn bất cứ thứ gì bạn cần "phản ánh". Nó không chứa bất kỳ hình học thực sự. Trên thực tế, nó hoạt động khá giống với cách "cổng" hoạt động trong Portal - ngoại trừ Portal (chính nó dựa trên công cụ cổng thông tin) tạo ra các cổng khi chạy và có giới hạn số lần cổng có thể lặp lại (ví dụ A -> B -> A -> B -> A ...), trong khi Build (DN3D) sẽ chỉ bị sập khi ngăn xếp của nó bị tràn nếu bạn chĩa gương vào một gương khác.

Rõ ràng là đơn giản như thế nào khi thực hiện một tấm gương với điều đó - tạo ra một cổng thông tin quay trở lại phòng. Điều này có nghĩa là việc dựng lại chiếc gương sẽ có giá chính xác bằng chính việc dựng lại căn phòng, mang lại hiệu suất tuyệt vời và nhất quán. Miễn là bạn không chỉ gương vào một gương khác, đó là. Nếu bạn xem qua mã nguồn của Công cụ xây dựng, bạn sẽ thấy không có gương xử lý mã nào cả - không cần phải có, vì đó là cách các cổng hoạt động LƯU Ý: thực sự, có mã để lật các pixel được hiển thị - đó là chỉ không lật hình học và tất cả các họa tiết và hiệu ứng khác nhau. Mặc dù vậy, biên tập viên đã có thể tạo ra các cổng "giả" này - nhìn lại chính nó. Nếu bạn muốn biết thêm về công cụ Build khá thông minh, có một phân tích tuyệt vời của Fabien Sanglard tại bộ phận Build engine . Toàn bộ động cơ đã được mở nguồn và chuyển sang các nền tảng hiện đại, mặc dù thế hệ cũ vẫn hoạt động hoàn hảo trên Windows 10 (đã thử nghiệm cho bạn: P). Nhiều trò chơi dựa trên Build cũng đã được mở nguồn và / hoặc làm lại.

Tại sao điều này không còn được sử dụng? Vâng, một số động cơ không còn thích cổng, cho một. Thật khó để áp dụng nhiều hack và tối ưu hóa đồ họa - Tôi không thể chỉ cho bạn bất cứ điều gì cụ thể, nhưng rất nhiều xử lý hậu kỳ phụ thuộc vào các hack không hoạt động trong một công cụ cổng thông tin thực sự (chúng đưa ra rất nhiều giả định rằng không còn giữ). Về cơ bản, đây là loại vấn đề tương tự mà các trò chơi này gặp phải với hình ảnh lập thể - các bản hack không còn hoạt động.

Quan trọng nhất, gương đã phức tạp hơn. Chúng có thể có hình dạng, kết cấu phức tạp, chúng có thể ở trên mặt đất (còn được gọi là "nước"), v.v. Mặc dù tất cả những vấn đề đó đều có thể giải quyết được trong một công cụ cổng thông tin, RTT trở thành lựa chọn đơn giản hơn ở một số điểm và GPU đủ nhanh để xử lý nó.

Tuy nhiên, ngay cả với tất cả những điều đó, có rất nhiều trò chơi với khả năng tăng tốc 3D phần cứng làm mọi thứ "thật". Ví dụ, trong số các game cũ, Quake 3 hoặc Alien vs. Predator. Theo tôi biết, các trò chơi Source engine vẫn sử dụng gương "thật". Nếu bạn mong đợi rằng mọi người sẽ đến gần gương và bạn có thể đảm bảo rằng không có quá nhiều bề mặt phản chiếu cùng một lúc (ví dụ như thông qua thiết kế cấp độ), gương cổng vẫn rất hấp dẫn.


Rõ ràng lý do cho niềm tin phổ biến rằng Duke Nukem 3D hoạt động theo cách này là do trong các thiết kế cấp độ thực tế, không gian phía sau gương lớn như căn phòng mà nó phản chiếu, mặc dù công cụ kết xuất không thực sự cần đến nó.
Random832

Ngoài ra, các cổng không gương không, tốt, gương phản chiếu , vì vậy tôi không biết làm thế nào "không có gương xử lý mã" là có thể.
Random832

5
@ Random832 Đó là một loại bắt buộc - có một số đồ tạo tác trực quan nếu một số khu vực xuất hiện ở nơi mà phòng được nhân đôi. Đó là một trong những phần mà những giả định chủ yếu vô hại quan trọng rất nhiều cho hiệu suất. Nếu bạn từng chơi xung quanh với Build, bạn có thể nhận thấy rằng khi hai cung giao nhau ở cùng một độ cao, chúng sẽ không hiển thị tốt. Đối với phản chiếu, nó hoạt động giống như cách hoạt động của gương ngoài đời thực. Bạn có bao giờ tự hỏi tại sao gương chỉ "lật" trên trục y không? Đó là cùng một lý do tại sao bạn không cần phải lật một cổng thông tin kết nối bạn trở lại cùng một phòng.
Luaan

Vấn đề là, một cổng thông thường dẫn vào một căn phòng đối diện với hướng ngược lại sẽ phải xoay mọi thứ 180 độ thay vì phản chiếu chúng. Vì vậy, có khả năng không làm như vậy được coi là xử lý đặc biệt cho gương. (Không có khả năng làm như vậy có nghĩa là các cổng không hoạt động như cổng và chỉ phù hợp với gương, trong trường hợp đó, toàn bộ hệ thống xử lý đặc biệt cho gương). Và, vâng, tôi biết tại sao gương "chỉ" lật "trên trục y". Trong thực tế, họ lật trên trục z. Nhưng việc chúng lật một số trục lẻ khiến chúng khác biệt với cổng.
Random832

@ Random832 Tất nhiên phụ thuộc vào những gì bạn gọi là trục y, tất nhiên :) Và vâng, bạn nói đúng, có cách xử lý đặc biệt. Nhưng nó rất thú vị - nó lật dữ liệu được kết xuất, không phải hình học (và các họa tiết và mọi thứ ... thực sự khá nhiều công việc). Khung cổng được lật, cổng được hiển thị như bình thường và sau đó toàn bộ nội dung được hiển thị ngược, từng dòng một.
Luaan

3

RTT sẽ được sử dụng nếu có thể nhưng đường ống kết xuất phần cứng là một cách.

Phần cứng cũ hơn cũng có những hạn chế ngăn cản kết xuất đồ họa. Ghi vào RAM có nghĩa là nó không thể được đọc cùng một lúc. Để cải thiện hiệu suất kết xuất, bộ đệm đích đã bị khóa chỉ ghi, chỉ phần cứng hiển thị mới có thể đọc từ nó. Bạn có thể yêu cầu đọc, nhưng điều đó đã khóa RAM và kết xuất phải đợi khóa để xóa trước khi có thể bắt đầu khung tiếp theo. RTT sẽ gây ra một nút cổ chai lớn cho đường ống và do đó các giải pháp khác đã được sử dụng.

Bạn sẽ thấy rằng các đường ống kết xuất phần cứng là RTT thông thường đã được sử dụng vì nó cung cấp một cách để giảm tải kết xuất. 3D kết xuất với các họa tiết để cung cấp nội dung giả 3D. Kết xuất kết cấu là quá tốn kém (CPU) được sử dụng trước đó, ngoài các máy chuyên dụng nằm ngoài thị trường tiêu dùng chung.


1

Duke Nukem xử lý rằng bằng cách hiển thị lại hình học đằng sau gương, các câu trả lời khác là đúng một phần. Có những khu vực phía sau gương thực sự không chứa hình học (trong tệp dữ liệu trò chơi), hình học được hiển thị lại vào thời gian chạy nguyên vẹn, lý do cho những khu vực đó tồn tại là để tránh vô tình đặt một cấp độ ở đó khi chỉnh sửa cấp độ :

vì có một khu vực được đánh dấu, bạn sẽ không vô tình đặt bất kỳ hình học nào trong đó.

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.