2009-06-18 41 views
8

Tiền đề cơ bản đằng sau công nghệ như được tìm thấy trong Oblivion (và các trò chơi khác, tôi chắc chắn là không đủ), trong đó các đối tượng từ xa được hiển thị mơ hồ bạn xem chúng từ xa? Ví dụ, một tòa tháp lớn cách đó một dặm và bạn thấy hình chữ nhật mơ hồ của nó dính lên từ đường chân trời ... Rõ ràng là một cảnh 3D khổng lồ không thể được kết xuất, và tôi biết rằng trong trường hợp các bản đồ cao độ chỉ có các thuật toán xấp xỉ được sử dụng để giảm chất lượng bản đồ chiều cao xa khỏi máy ảnh, nhưng đối với các đối tượng cụ thể, cách tốt nhất để hiển thị chúng là gì? Tôi đã suy nghĩ có lẽ là một kỹ thuật dựng trước, trong đó bạn chọn những địa điểm cụ thể xung quanh cảnh quan và sau đó tạo một chương trình vẽ tất cả các mô hình chiều cao và 3D xung quanh điểm đó và chụp ảnh. Nó sẽ chụp một vài bức ảnh, và sau đó khi người chơi ở gần chỗ đó, những bức ảnh sẽ được sử dụng như một skybox.Dựng hình đối tượng 3D ở xa [trò chơi]

Một kỹ thuật rõ ràng hơn là lưu trữ các mô hình 3D thực sự thô, nhưng sau đó hệ thống dựng hình 3D đặc biệt chọn hiển thị mô hình thô của tòa nhà chứ không phải các mô hình thô khác ít quan trọng hơn (và có thể không xem được) từ các đối tượng đó)? Làm thế nào bạn sẽ lưu trữ một cái gì đó như thế cùng với chiều cao của bạn? Có thể bởi thiết kế, chỉ có một vài mốc quan trọng như vậy và sau đó chỉ lưu trữ danh sách của chúng trong một tập tin nhỏ, và trên mỗi khung render những cái nhỏ hơn x thực sự-xa-xa?

Tôi biết rằng chuỗi Halo chọn chia trò chơi thành các cấp độ và sau đó mỗi cấp có hộp bầu trời làm bằng tay khác nhau. Đây là những gì tôi đã đi cho trong đề nghị đầu tiên, nhưng tôi không chắc chắn về nó. Tôi đoán tôi thực sự chỉ đang cố gắng thu thập các ý tưởng hoặc tinh chỉnh hoặc các vấn đề khác trong ý tưởng của mình, để tôi có thể chọn cái nào để làm mẫu với thời gian và kiến ​​thức hạn chế của mình.

Một chủ đề liên quan khác là cách hiển thị ngọn núi ở khoảng cách, vì chúng sẽ là một phần của mô hình chiều cao chứ không phải mô hình 3D trên đầu, vì vậy chúng sẽ không thể có phiên bản thô và bản đồ chiều cao thuật toán xấp xỉ có thể vít lên núi từ một khoảng cách thực sự xa như vậy (giả sử bạn thậm chí sẽ cố gắng để gần đúng và render hình học xa như vậy, mà bạn có thể sẽ không). Điểm thưởng nếu bạn bao gồm điều này trong câu trả lời của bạn quá. :)

Cảm ơn!

P.S. Tôi đang sử dụng OpenGL. Tôi chỉ đang tìm kiếm các khái niệm cơ bản nhưng nếu bạn chọn đăng mã ví dụ, vui lòng sử dụng các hàm và thuật ngữ OpenGL! :)

EDIT: Cảm ơn bạn đã trả lời! Đối với mục đích tài liệu ở đây là một tài nguyên khác mà tôi đã tìm thấy: Chương 4.9 trong Lập trình trò chơi Đá quý 2 bao gồm khái niệm dựng hình phong cảnh ở xa trên bầu trời: http://books.google.com/books?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq=render%20distant%20to%20skybox&pg=PA416 (tiếc là xem trước chỉ là trang đầu tiên của chương ... phải lấy cuốn sách đó từ thư viện của trường đại học ngay sau khi tôi trở lại vào tháng 8)

Sau khi đọc những điều này, tôi vẫn cho rằng LOD là dành cho các đối tượng ở khoảng cách gần đúng. Nếu các đối tượng thậm chí không lớn một pixel, nhưng bạn vẫn cho chúng vào card đồ họa, bạn chỉ lãng phí năng lượng, cho dù sử dụng LOD hay không. Và đó sẽ là trường hợp cho tất cả mọi thứ nhưng các đối tượng xa lớn nhất tuyệt đối; một vài tòa nhà cao tầng và một số ngọn núi, trong hầu hết các trường hợp, nhưng các mô hình chi tiết nhỏ (bụi cây, thậm chí cả cây cối, đá, bất kỳ cảnh quan nào khác ...) sẽ không được nhìn thấy từ khoảng cách như vậy. Vì vậy, tôi thích dựng hình kỹ thuật skybox, và khi tôi đến cây cầu này, đó là cách tôi sẽ vượt qua nó; và tôi sẽ đảm bảo sử dụng LOD cho tất cả các mô hình, tôi sẽ không tạo ra khoảng cách như vậy.

Tôi, bằng cách này, suy nghĩ nhiều hơn dọc theo các dòng của trò chơi Oblivion, vì vậy câu trả lời có thể phụ thuộc vào thể loại trò chơi.

Trả lời

7

Một vài kỹ thuật, bao gồm cả những người bạn đã đề cập:

  • Mức độ chi tiết. Đã nêu ở trên.
  • Lập bản đồ. Đối với kết cấu.
  • Trường xem. Hạn chế số lượng máy ảnh của bạn có thể 'xem' bằng cách chọn mức thu phóng thích hợp. Xem thêm xem culling culling.
  • Máy bay cắt ngắn. Loại trừ các địa điểm xa xôi: hầu hết các trò chơi đều sử dụng sương mù, núi hoặc một số lý do khác để cắt giảm khó khăn về mức độ bạn có thể nhìn thấy. Điều này có thể được thực hiện bằng cách sử dụng octrees, hoặc một số kỹ thuật khác như vậy.Điều này có thể được dựa trên toàn bộ các đối tượng, hoặc đa giác, hoặc bất cứ điều gì, và thường được thiết lập để xảy ra ngay phía sau những ngọn núi nói trên.
  • Đấu trường/cấp độ/khu vực/bất cứ điều gì - một lần nữa hầu hết các trò chơi giả tạo giới hạn bạn chơi trong một đấu trường tại một thời điểm; lợi ích là hiển nhiên (bạn có thể bỏ qua các đối tượng trong tất cả các đấu trường khác)
  • Hiển thị trước - đây là những gì bạn đang đề xuất ở trên. Đối với các cảnh tĩnh ở xa, hiển thị cảnh trong chế độ xem 'điển hình' và làm cho khung cảnh đó ở chế độ nền hoặc sử dụng nó cho bản đồ bầu trời/phản chiếu/v.v.

Ý tưởng là vứt bỏ càng nhiều chi tiết càng tốt trước khi người dùng bắt đầu nhận thấy.

Có một số bộ công cụ có sẵn sẽ tự động thực hiện những việc này, nhưng chúng có xu hướng tốn tiền. Nếu bạn đang xem xét một ứng dụng nghiêm túc, tôi khuyên bạn nên nghiên cứu các giải pháp mà họ đưa vào.

+1

Tôi nghĩ rằng Field of View point của bạn hơi không chính xác. FOV thường đề cập đến góc của "máy ảnh" mà bạn đang xem xét.Điểm mà tại đó bạn cắt bỏ các vật thể xa được gọi là "Máy bay cắt xa" –

+0

@NeilN, bạn nói đúng; Tôi sẽ sửa đổi câu trả lời. –

0

Một kỹ thuật là LOD (mức độ chi tiết). Đối tượng xa hơn là từ máy ảnh, các hình tam giác nhỏ hơn được vẽ. Dưới đây là một liên kết: http://www.stefan-krause.com/

7

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm Level of Detail (LOD)

+0

Vâng, tôi nghĩ đó là một quy mô nhỏ hơn chút ... Tôi đang nói về quy mô thực sự lớn, và LOD sẽ không hoạt động bởi vì đó có ngụ ý rằng tất cả các mẫu dặm vẫn đang được rút ra, đó sẽ không phải là trường hợp. – Ricket

+2

có tại một thời điểm nhất định bạn đã tiêu hủy tất cả các đối tượng quá xa với vật chất. Điều này đôi khi được tìm thấy trong các thiết lập của các chương trình 3D như là khoảng cách vẽ. khi một cái gì đó vượt quá mà bạn chỉ cần ngừng hiển thị nó. – AvatarOfChronos

+0

Oblivion thực sự sử dụng LoD cho dựng hình địa hình ở xa. Có một số thông tin về elderscrolls.com, vd. http://cs.elderscrolls.com/constwiki/index.php/Landscape_LOD_Tutorial – Kylotan

4

Đối với mô hình 3d, kỹ thuật này được gọi là level of detail. Về cơ bản, nhiều mô hình phiên bản được lưu giữ có sẵn một cách sử dụng phù hợp dựa trên ngữ cảnh. Nó không phải lúc nào cũng chỉ cho khoảng cách, nó cũng có thể được sử dụng để maintiain framerate trong các tình huống khác.

Hãy cẩn thận, bạn nên bật tính năng lập bản đồ hoặc bạn sẽ lấp lánh trên các họa tiết lớn hơn trên các mẫu có độ phân giải thấp hơn và cẩn thận với hoạt ảnh. Việc chuyển đổi mô hình bên dưới một bộ xương hoạt hình rất khó khăn nên một kỹ thuật là duy trì cùng một bộ xương ngay cả khi LOD-ing mô hình.

Có hệ thống LOD động cho cả địa hình và mô hình đối tượng, nhưng chúng có thể là CPU nặng.

0

Bạn có thể hiển thị kết cấu cho các đối tượng ở xa, tuy nhiên bạn phải kết xuất lại kết cấu mỗi khi phối cảnh thay đổi ngoài ngưỡng nào đó. Nó hoạt động tốt cho các đối tượng ở xa, nơi phối cảnh sẽ không thay đổi thường giống như ví dụ của bạn về các ngọn núi ở khoảng cách tuy nhiên nếu nguồn xem đang di chuyển quá nhanh hoặc bạn quá gần thì bạn sẽ có được hiệu ứng mắt cá giống như những ngày đầu bầu trời trong trận động đất. Loại hệ thống này cho vay tự nó với các thế giới như trực tuyến đêm trước có chứa khoảng cách rộng lớn.

Điều này tất nhiên là một thủ thuật khác trong kho vũ khí của bạn và bạn vẫn sẽ cần đến LOD ở một mức độ nào đó.

0

Phiên bản chi tiết thấp của các mô hình hoạt động đặc biệt tốt cho xe cộ và đối tượng Thực sự phức tạp với địa hình. Tôi đã làm việc trên các trò chơi kiểu battlezone và mô phỏng chuyến bay trên PC. Một chút sương mù giúp che phủ "các điểm" giữa các chi tiết.

Ở chi tiết thấp hơn, ánh xạ kết cấu thường được thay thế bằng một vài đa giác một màu.


"Một kỹ thuật rõ ràng hơn là để lưu trữ các mô hình 3D thực sự khó khăn, nhưng sau đó làm thế nào để hệ thống render 3D đặc biệt chọn để làm cho mô hình thô của tòa nhà và không phải là mô hình sơ bộ ít quan trọng khác (và có lẽ các đối tượng không thể xem được từ khoảng cách đó? Làm cách nào bạn lưu trữ thứ gì đó như thế cùng với chiều cao của bạn? "

Bạn có thể lưới địa hình của mình và giữ danh sách đối tượng nào hiển thị trong mỗi ô lưới.

0

Một cách để xử lý địa hình là có các ô nhiều độ phân giải. Giống như cách Trái đất ảo và Google Maps thực hiện điều đó, họ chia thế giới thành các ô xếp theo kiểu đệ quy. Vì vậy, có 4 gạch ở mức 0, 16 ở mức 1, vv ... Sau đó, sử dụng một số thuật toán LoD để xác định tỷ lệ thu phóng/thang đo, bạn sẽ tải các ô địa hình thích hợp cho khu vực đã cho.

0

Kỹ thuật tự động lưu vào bộ nhớ cache chế độ xem được hiển thị trước của các đối tượng ở xa thường được gọi là 'kẻ mạo danh'. Here's một bài viết từ sách Gems Programming Programming cũ về chủ đề này.

Có nhiều kỹ thuật để xử lý mức độ chi tiết cho địa hình độ cao. Hãy xem vterrain.org để biết tổng quan về một số kỹ thuật phổ biến. Nguyên tắc chung là giống nhau trong hầu hết các biến thể - phá vỡ địa hình thành các phần và sử dụng hình học và kết cấu có độ phân giải thấp hơn ở khoảng cách - nhưng các chi tiết khác nhau.

Để giảm số lượng đối tượng được gửi tới cạc đồ họa, một số loại sắp xếp hiển thị sẽ thường được thực hiện. Tại đơn giản nhất, điều này có thể chỉ là hoàn toàn loại bỏ các mô hình có hình cầu bao phủ ít hơn một ngưỡng nhất định của pixel màn hình (bạn sẽ vẫn tính toán điều này khi chọn LOD để sử dụng nếu bạn có hệ thống LOD). Để có hiệu quả cao hơn, có thể sử dụng cấu trúc dữ liệu không gian thứ bậc để phân loại - quadtrees hoặc octtrees, cây cầu, hệ thống cổng thông tin (thường không được sử dụng nhiều cho môi trường ngoài trời), giản đồ dựa trên lưới, v.v. bằng cách chọn một nút cấp cao hơn trong hệ thống phân cấp và do đó tránh nhìn vào nhiều nút lá. Một ví dụ đơn giản sẽ là chọn lọc một tòa nhà và hủy bỏ một cách hiệu quả tất cả các nút con của nó (các đối tượng bên trong hoặc trên đỉnh của tòa nhà) mà không cần nhìn chúng riêng lẻ.

Đối với một trò chơi như lãng quên, chúng có thể cũng đang thực hiện một số loại trừ - tiêu hủy các đối tượng trước khi gửi cho phần cứng đồ họa dựa trên việc xác định chúng bị ẩn sau các đối tượng khác. Có nhiều kỹ thuật để thực hiện việc này, một số kỹ thuật có thể khá phức tạp.

Các vấn đề liên quan