Làm thế nào là kết xuất phần mềm được thực hiện?


15

Tôi muốn khám phá rasterization dựa trên phần mềm thời gian thực. Tôi biết mọi thứ đang hướng tới GPU ngày nay nhưng có một vài trò chơi vẫn sử dụng trình kết xuất phần mềm.

Ví dụ: Voxeltron

Voxatron là một game bắn súng đấu trường diễn ra trong một thế giới được làm bằng voxels (hình khối nhỏ, loại). Mọi thứ trong trò chơi được hiển thị trong màn hình voxel ảo 128x128x64, bao gồm các menu và kho đồ chơi của người chơi. Nếu bạn nhìn kỹ, đôi khi bạn có thể thấy kho đồ (điểm / tuổi thọ / đạn) tạo bóng trên một số vật thể trên mặt đất.

Tôi đã làm việc trên các công cụ mô hình hóa và mô hình hóa voxel từ lâu, với mục tiêu cuối cùng là tạo ra một trò chơi phiêu lưu khám phá lớn. Khoảng nửa năm trước, nó hợp nhất với công việc tôi đang làm trên các game bắn súng trên đấu trường cho Conflux, và đây là kết quả.

Đây là một trò chơi khá đơn giản - chủ yếu chỉ là Robotron trong một thế giới hủy diệt 3d với những sinh vật ngớ ngẩn. Tôi không chắc ý nghĩa của sự hủy diệt sẽ lớn đến mức nào đối với trò chơi, nhưng chắc chắn sẽ rất vui khi làm nổ tung các mảnh tường. Tôi cũng đã thêm một chiếc bán tải xây dựng tường thử nghiệm mà bạn có thể sử dụng để xây dựng các rào chắn để ẩn nấp khỏi những con quái vật đáng sợ.

Trò chơi diễn ra trong một tập hợp nhỏ của đấu trường. Một số trong số họ có các phòng với các bộ hành động, ở đâu đó giữa Knightlore và Smash TV. Đây là một số thiết kế dựa trên cuộc phiêu lưu ban đầu lẻn vào và là một cái cớ để tạo ra các môi trường theo chủ đề.

Đặc trưng:

  • Kết xuất phần mềm tùy chỉnh với bóng mềm.
  • Bộ tổng hợp âm thanh và âm nhạc tích hợp (cũng được sử dụng để tạo nhạc trailer).
  • Phát lại và đăng trò chơi ghi âm.

1
Liên kết gọn gàng đến một trò chơi. Lưu ý không cần thiết phải sử dụng trình kết xuất phần mềm để có được bóng mềm trên GPU . Anh ta sẽ gặp phải một số hạn chế về hiệu suất từ ​​phía vòng lặp kết xuất, không thể chạy trên các máy cơ bản hơn như máy tính xách tay 1.6 GHz hoặc thiết bị cầm tay, khi anh ta thực sự có thể nếu anh ta khai thác phần cứng có sẵn.
bobobobo

Câu trả lời:


11

Tôi sẽ giả định rằng bạn đã biết một số đại số tuyến tính cơ bản, loại liên quan đến: phép chiếu 3d, thiết lập máy ảnh, chuyển đổi các đỉnh thành vị trí thế giới, v.v ... Nếu bạn không, có rất nhiều nơi tuyệt vời để học hỏi. Đây là hai cái mà tôi thích:

Kiến trúc game Engine

  • Giới thiệu tóm tắt về đại số tuyến tính cơ bản nhưng không bao gồm mọi thứ bạn cần biết. Cuốn sách đáng để có vì nhiều lý do khác nữa.

Kết xuất thời gian thực

  • Bảo hiểm chi tiết hơn một chút nhưng một lần nữa chỉ bám vào những gì bạn có thể cần biết. Một lần nữa, tôi đề nghị cái này cho các chủ đề trong phần còn lại của các chương.

Khi bạn biết về cách thể hiện và xử lý các đối tượng 3d, bạn đã sẵn sàng xem xét cách vẽ chúng lên màn hình. Thông thường, điều này được thực hiện với một kỹ thuật rasterization tam giác dòng quét. Nó thực sự là một khái niệm khá đơn giản. Bạn vẽ một hàng của một hình tam giác tại một thời điểm trong khi nội suy tọa độ màu và kết cấu uv. Quá trình này được tiếp tục cho tất cả các hình tam giác trên màn hình. Bạn thậm chí có thể thực hiện một bộ đệm sâu để xử lý kết xuất theo thứ tự.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Điều này được đề cập chi tiết hơn trong các bài viết này:

Hướng dẫn - Giới thiệu về Kết xuất dựa trên phần mềm: Rasterization tam giác

Trường dựng hình phần mềm: Phần I


Và chỉ để cho vui, hãy xem bài viết sau:

Đánh giá mã nguồn Quake 2 3/4 (Trình kết xuất phần mềm)


Bạn đang chào đón:] (bạn có thể cũng muốn có một cái nhìn vào đây để một tổng quan chi tiết hơn về quá trình: en.wikipedia.org/wiki/Rasterisation )
zfedoran

Một số liên kết tốt đó!
Jonathan Connell

5

Đây là một chủ đề khá rộng. Mặc dù vậy, có hai phần cơ bản: lý thuyết thực tế về đường ống chuyển đổi và rasterization đồ họa và các bit thực hiện thực tế cho phép bạn tạo các pixel trên màn hình theo cách bạn chọn. Trên hết, cũng có tối ưu hóa (đặc biệt là bit sau).

Phần đầu tiên, may mắn thay, giống như lý thuyết được sử dụng cho đường ống đồ họa như được phơi bày bởi phần cứng và API hiện đại. Nếu bạn đã biết điều này rồi, bạn đã thiết lập. Nếu bạn không, tôi khuyên bạn nên một cuốn sách hay. Điều này là khá tốt.

Có rất nhiều lựa chọn cho phần thứ hai. Họ phụ thuộc rất nhiều vào lựa chọn hệ điều hành và chuỗi công cụ của bạn. Nếu bạn đang sử dụng C hoặc C ++, trên Windows, bạn có thể chỉ cần vẽ pixel trực tiếp lên bitmap GDI ( SetPixelđơn giản, nhưng rất đau, chậm vô dụng - CreateDIBSectioncung cấp cho bạn một đoạn byte thô mà bạn có thể thao tác với tốc độ nhanh hơn nhiều).

Bạn cũng có thể có được bề mặt DirectDraw và viết lên đó hoặc viết vào kết cấu Direct3D hoặc OpenGL. Trong những trường hợp sau, bạn vẫn sẽ sử dụng phần cứng, nhưng miễn là bạn tự thực hiện tất cả bố cục của hình ảnh cuối cùng trên CPU và chỉ cần sử dụng API phần cứng để sao chép kết quả ra màn hình, nó vẫn được tính. Trên các PC hiện đại, bạn không thể truy cập vào VRAM thô hoặc bất cứ điều gì trực tiếp.

Nếu bạn muốn biết thêm, có lẽ bạn nên tạo câu hỏi cụ thể hơn. Tôi hoặc những người khác sẽ rất vui khi trả lời họ.


Đối với cuốn sách: "khá tốt" như thế nào? $ 84 là một khoản tiền mặt khá lớn :)
Jonathan Connell

Đó là một trong những tôi khuyên bạn nên đánh giá cao nhất. Để có tùy chọn rẻ nhất, bạn có thể tham khảo tài liệu Direct3D trên đường ống chuyển đổi. Mặc dù nó là D3D cụ thể, 95% trong số đó là khá phù hợp với lý thuyết chung. Bạn cũng có thể kiểm tra các bản sao trực tuyến của Sách đỏ OpenGL. Chúng đã lỗi thời, nhưng lý thuyết (một lần nữa) vẫn được áp dụng.

0

Được rồi tôi sẽ tiếp cận câu hỏi này từ những điều cơ bản; bất cứ điều gì ngoài đó là cách để mở rộng cho một QA đơn giản; bạn cần mua một cuốn sách về chủ đề này

Sự khác biệt cơ bản nhất giữa kết xuất trong phần mềm và sử dụng GPU là do vẽ các pixel. Đó là, khi thực hiện kết xuất phần mềm, bạn phải chịu trách nhiệm cuối cùng về việc vẽ từng pixel chết tiệt, trong khi với GPU, việc vẽ các pixel chủ yếu được tự động hóa bởi phần cứng và bạn chỉ cần "xoa bóp" đường dẫn pixel bằng cách sử dụng trình đổ bóng.

Ví dụ, suy nghĩ về những gì bạn là một lập trình viên phải làm để hiển thị một hình tam giác 3D trên màn hình. Với GPU, bạn chỉ cần nói cho phần cứng biết tọa độ X, Y, Z của các đỉnh là gì và sau đó videocard điền vào tất cả các pixel trên màn hình bao gồm hình ảnh của một hình tam giác. Bạn có thể sử dụng trình đổ bóng để yêu cầu GPU thay đổi màu của từng pixel dựa trên kết cấu hoặc thứ gì đó, nhưng cuối cùng, nó vẫn tự động chuyển xuống GPU để điền vào tất cả các pixel cho bạn.

Khi thực hiện kết xuất phần mềm, bạn sẽ phải tính toán những pixel nào trên màn hình để điền vào, và sau đó thực hiện việc làm mờ để thực sự điền vào các pixel đó. Nghĩa là, bạn đang thực hiện phép toán ma trận để chuyển đổi từ không gian tọa độ của cảnh 3D sang không gian xem, sau đó chiếu các điểm từ không gian xem lên màn hình, v.v.

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.