Trạng thái của nghệ thuật trong Phân vùng không gian cho các trò chơi là gì? [đóng cửa]


18

Tôi biết về cây BSP, Octrees và Portal được sử dụng trong một thời gian dài. Nhưng các game hiện đại vẫn sử dụng hệ thống này hay họ đang sử dụng những thứ mới?

Nếu có thể với ưu và nhược điểm, hãy xem xét kết xuất và phát hiện va chạm.


Nó không đảm bảo một câu trả lời đầy đủ, nhưng băm không gian dường như là một ý tưởng mới; hoặc đã rơi vào sự ủng hộ. Nó không dành cho tất cả mọi thứ, nhưng một mặt lớn là nó rất dễ thực hiện.
Jonathan Dickinson

Câu trả lời:


15

Có, ví dụ, công cụ Unreal 3 vẫn sử dụng BSP - chủ yếu vì nó được sử dụng trong quá trình CSG. Doom3 / id tech 4 sử dụng cổng và tôi nghĩ rằng tôi đã đọc một cái gì đó mà id Tech 5 đã trở lại với cây BSP. Có một số trò chơi cũng sử dụng octrees. Trong trò chơi, sự hiểu biết của tôi là UE3 đã chuyển sang một cách tiếp cận năng động hơn với các truy vấn tắc, nhưng tôi sẽ ngạc nhiên nếu họ không sử dụng BSP để ít nhất xác định được các lưới tĩnh nào trong tầm nhìn. Các trò chơi khác chỉ có thể sử dụng loại bỏ chế độ xem (ví dụ: Civilization). Nó thực sự phụ thuộc vào loại trò chơi mà bạn nhìn.

Lý do mà các BSP và công cụ vẫn còn đó là vì bạn không thể làm tốt hơn nhiều. Nếu bạn có hình học tĩnh, một BSP là tuyệt vời nếu bạn xây dựng nó đúng. Mặc dù vậy, nó yêu cầu bạn phải viết trình xây dựng BSP, rất khó (nhưng có thể xảy ra miễn phí nếu giải pháp CSG của bạn sử dụng một!) Các giải pháp linh hoạt và linh hoạt hơn (như dựa vào truy vấn tắc cho mọi thứ) đơn giản hơn để thực hiện chi phí nhưng không yêu cầu (đắt) tiền xử lý các cấp. Đó là một sự đánh đổi mà một số trò chơi sẵn sàng thực hiện (ví dụ Crytek muốn mọi thứ chạy trong thời gian thực, vì vậy họ không dành thời gian xử lý để xây dựng cấu trúc tăng tốc tĩnh.) Các cách tiếp cận thời gian chạy khác là rasterization phần mềm CPU và thực hiện các truy vấn tắc trên CPU (điều này được sử dụng bởi công cụ Frostbite.)

Đối với một cách tiếp cận thực sự hiện đại, hãy xem Umbra , một phần mềm trung gian cho các truy vấn khả năng hiển thị. Nếu bạn tìm kiếm trên web một chút, bạn sẽ tìm thấy một số luận điểm chính mô tả sự khởi đầu sớm của Umbra.

Điểm mấu chốt: Việc bạn có muốn sử dụng BSP / Octree / không AS hay không sẽ phụ thuộc nhiều vào loại trò chơi bạn muốn tạo. Nếu các cấp của bạn chủ yếu là tĩnh, bạn nên tận dụng điều đó và xây dựng một số cấu trúc gia tốc tĩnh. Nếu tất cả mọi thứ là năng động, tất nhiên bạn cần một cách tiếp cận khác.

Để phát hiện va chạm, tôi sẽ xem qua Bullet và PhysX và các thuật toán phát hiện va chạm của chúng. Nhưng cảm giác của tôi là các giải pháp vật lý ít bị ràng buộc với khả năng hiển thị hơn trước đây - một giải pháp vật lý có thể muốn sử dụng một BVH dựa trên GPU, trong trường hợp đó, không có ý nghĩa gì khi cố gắng sử dụng nó cho các truy vấn khả năng hiển thị.


15

Tôi thực sự không biết những gì các công cụ thế hệ tiếp theo đang sử dụng những ngày này, nhưng tôi sẽ cho bạn biết những gì tôi biết. Rất dễ bị nhầm lẫn giữa tối ưu hóa và cấu trúc dữ liệu được sử dụng để hỗ trợ tối ưu hóa đó. Tất cả những điều được đề cập dưới đây là để tối ưu hóa, nhưng tôi sẽ chỉ ra cái nào là cấu trúc dữ liệu cụ thể.

BSP : Cấu trúc dữ liệu - Để phát hiện giao điểm giữa một đối tượng chuyển động và hình học thế giới tĩnh. Được sử dụng để phát hiện va chạm và kết xuất hình học một cách chính xác mà không cần zbuffer, nhưng nó không còn được sử dụng để kết xuất nữa vì chúng ta có đủ bộ nhớ cho bộ đệm az ngày nay. Về mặt kỹ thuật, chúng được tạo ra hơi khác nhau nhưng vẫn được coi là cùng loại cây. Yêu cầu tiền xử lý.

Octree hoặc Kd-Tree : Cấu trúc dữ liệu - được sử dụng để xác định đối tượng nào trong cùng một "ô" hoặc khu vực để tránh thực hiện kiểm tra n ^ 2 trên tất cả các đối tượng động.

Đây không phải là những người duy nhất, nhưng có lẽ là phổ biến nhất. Ngoài ra còn có rất nhiều tối ưu hóa cho phép động cơ tránh kết xuất hình học nói chung. Nhưng những điều sau đây chỉ loại bỏ hình học và đó thường là tất cả những gì nó được sử dụng cho:

Cổng thông tin : Không phải là một cấu trúc dữ liệu, nhưng đòi hỏi một cấu trúc đặc biệt để loại bỏ. Được sử dụng để loại bỏ khả năng hiển thị của hình học thế giới và hình học đối tượng động từ chế độ xem. Yêu cầu tiền xử lý để phân chia thế giới thành các khu vực tôi nghĩ. Nhưng tôi chưa thực sự thực hiện điều này, vì vậy tôi không biết.

Loại trừ loại trừ : Tối ưu hóa - được sử dụng để loại bỏ khả năng hiển thị cho bất cứ thứ gì bạn muốn, có thể là các đối tượng động.

Loại bỏ chế độ xem thường xuyên : Tối ưu hóa - loại bỏ các đối tượng không có trong chế độ xem của máy ảnh.

Thêm loại bỏ chế độ xem : Tối ưu hóa - Loại bỏ chế độ xem thường xuyên có thể được tối ưu hóa hơn nữa bằng cách sử dụng một octree. Bạn có thể loại bỏ toàn bộ các ô của octree phía sau camera hoặc không trong chế độ xem của nó. Điều này bao gồm các bản vá địa hình (nếu bạn ở bên ngoài). Bất cứ điều gì không được loại bỏ bởi octree, bạn sẽ thực hiện "loại bỏ khung nhìn thông thường". Sau đó, bất cứ điều gì còn lại, bạn sẽ kết xuất.

Loại bỏ backface : Tối ưu hóa - loại bỏ hình học quay mặt ra khỏi máy ảnh để ngăn ngừa rasterization. Thường được thực hiện trong phần cứng nếu trạng thái kết xuất được đặt đúng.

Cấu trúc dữ liệu trường hợp đặc biệt:

Cây AABB hoặc cây Sphere : Đây là loại cấu trúc dữ liệu trường hợp đặc biệt. Chúng biến hình dạng lõm thành hình lồi. Ví dụ, một nhân vật có xương là kỹ thuật lõm. Nó phá vỡ nó thành những mảnh lồi nhỏ hơn. Có thể được sử dụng như một tối ưu hóa để phát hiện va chạm, loại bỏ khả năng hiển thị của các đối tượng động (thường) và giúp thực hiện các thử nghiệm giao nhau dễ dàng hơn kể từ khi nó lồi. Chúng sẽ đi vào bên trong, một quãng tám vì chúng thường là các vật thể động. Chúng cũng có thể được sử dụng để hỗ trợ tối ưu hóa loại bỏ tắc.

Không có lý do tại sao bạn phải sử dụng một cấu trúc duy nhất để thể hiện mọi thứ (chẳng hạn như biểu đồ cảnh). Theo tôi, bạn nên sử dụng các cấu trúc dữ liệu khác nhau cho các nhiệm vụ khác nhau thay vì cố gắng sử dụng một cây mục đích chung nào đó. Ví dụ, công cụ hiện tại tôi đang làm việc, tôi dự định thực hiện kết hợp Cây BSP / Octree / AABB với các tối ưu hóa sau: loại bỏ tắc nghẽn, chế độ xem, và, tất nhiên, loại bỏ backface. Điều này có nghĩa là tôi sẽ có một cây bsp, một octree và có thể nhiều cây aabb trong octree đó.

Việc lựa chọn các cấu trúc dữ liệu và thuật toán / tối ưu hóa tốt nhất có lẽ là điều lớn nhất và có lợi nhất mà bạn có thể làm cho công cụ của mình.

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.