Làm thế nào tôi có thể tạo ra những địa hình to lớn trong Unity?


19

Làm thế nào tôi có thể tạo ra những địa hình cực kỳ lớn trong Unity? Có vẻ như tôi có thể đặt chiều rộng và chiều dài thành giá trị lớn. Nhưng độ phân giải Chiều cao chỉ lên tới 4097 và Độ phân giải chi tiết chỉ lên tới 4048.

Có ý kiến ​​gì không?


Tôi xin lỗi vì một buzzkill: sol.gfxile.net/mmorpg.html
thợ làm đinh

Câu trả lời:


21

Chia địa hình thành các "khối" vuông, tải những người bạn quan tâm (chủ yếu: Những người ở gần máy ảnh hiện đang hoạt động) trong Cập nhật () và - nếu bạn bị buộc không gian (có thể bạn sẽ bị), hãy dỡ những thứ không cần thiết ở xa .

Sử dụng các mô hình low-poly được tính toán trước cho LoD địa hình xa, trừ khi bạn không có khoảng cách xem thấp. Ngoài ra, nếu bạn cần bản đồ độ cao địa hình của địa hình ở xa cho mọi thứ (như chuyển động NPC hoặc một số mô phỏng khác), hãy tạo một biến thể độ phân giải thấp hoặc độ phân giải biến đổi của địa hình để lưu trong bộ nhớ; không sử dụng dữ liệu địa hình đầy đủ cho nó. Điều này có thể được thực hiện tự động khi tải trò chơi, nhưng nói chung, nên tạo một công cụ tạo dữ liệu được tạo trước này trong quá trình xây dựng hoặc gói.

Cuối cùng: Để tránh các vấn đề chính xác về điểm nổi, bạn sẽ phải định vị lại toàn bộ cảnh mỗi khi máy ảnh chính của bạn di chuyển ra xa (0,0f, 0,0f, 0,0f).

Câu hỏi có thể có liên quan về Câu trả lời của Unity http://answers.unity3d.com/questions/17225/dynamic-terrain-loading.html


Cảm ơn bạn! câu trả lời chính xác. Chỉ một câu hỏi, khi tôi đặt hàng xóm của các địa hình, điều gì sẽ xảy ra nếu các địa hình không cùng độ cao ở các cạnh?
Daniel Pendergast

1
@Dan: Bạn sẽ nhận được lỗ hổng trong cảnh quan. Có nhiều cách khác nhau để giải quyết vấn đề này, đại khái dọc theo dòng chữ "đảm bảo cảnh quan có cùng chiều cao ở các cạnh", "thêm váy chạy dọc từ mép xuống cho một số chiều cao để che giấu các lỗ" và "thêm các dải tam giác được tạo để khâu các lỗ lại với nhau. " Cái nào bạn sử dụng là tùy thuộc vào bạn (và động cơ, một phần). Cái thứ hai, với váy, là cái tôi thấy thường xuyên nhất.
Martin Sojka

1
hoặc như tôi đã nói, bạn muốn sử dụng một tập lệnh để xử lý các địa hình :-)
Valmond

Có ai có bất kỳ kịch bản?
Daniel Pendergast

@Dan: Có một số tập lệnh tại liên kết Câu trả lời Unity trong câu trả lời. Bên cạnh đó, tôi không thể giúp bạn viết mã cho Unity vào lúc này, tất cả các chương trình trò chơi (cấp độ sở thích) của tôi được thực hiện với Ogre3D làm công cụ kết xuất.
Martin Sojka

3

Bạn sẽ cần phải phá vỡ các địa hình trong khối, tức là. một vài địa hình nhỏ hơn. Bạn sẽ cần phải 'tạo đường nối' cho nhau một lần nữa (với một tập lệnh) để không có 'lỗ hổng' giữa chúng nhưng nếu không, bạn có thể bắt đầu thực hiện chúng ngay lập tức.

Bạn cũng có thể muốn biết rằng vì Unity3D ~ 3.0 bạn không thể di chuyển vật phẩm (đọc địa hình và vật phẩm) quá xa (như +/- 100000 bước IIRC) nên điều này sẽ ảnh hưởng đến kích thước tối đa của thế giới của bạn.

Dù sao tôi cũng đang sử dụng điều này trong trò chơi RPG trực tuyến của mình (ngoại trừ tôi chỉ sử dụng Unity3D cho thiết kế cấp độ, không phải cho trò chơi thực tế).

Chỉ vì tôi tò mò, bạn có muốn chia sẻ một số thông tin về trò chơi của bạn (như sự tiến bộ, loại hình, đồ họa, phong cách, v.v.) không?


2

Chúng tôi đã triển khai các địa hình khổng lồ trong Unity5 bằng cách xử lý dữ liệu SRTM cho toàn bộ trái đất thành các bản đồ chiều cao cho TerrainDatacác đối tượng có các Mức chi tiết khác nhau [1]. Có một vài điều cần xem xét:

  1. Các cạnh của bản đồ chiều cao cần chồng chéo ít nhất một mẫu và bạn cần định vị địa hình cho phù hợp. Terrain.SetNeighborssẽ không kết nối lưới, chỉ chiếm các mức độ chi tiết khác nhau được thực hiện bởi Unity.

  2. Bạn, nhất thiết, cần 2 ^ n + 1 mẫu chiều cao cho mỗi TerrainDatađối tượng, nếu không, Unity sẽ chỉ gán chiều cao bằng 0 cho các phần chưa đặt.

  3. Nếu bạn có ít hơn 2GB TerrainData, bạn có thể thoát khỏi việc có chúng dưới dạng Tài sản trong thư mục Tài nguyên và Resource.Loadchúng khi chạy. Nếu bạn có nhiều hơn 2GB thì phương pháp này sẽ không còn hoạt động nữa vì không thể có nhiều hơn 2GB tài nguyên với các bản dựng Unity. Trong trường hợp này, bạn sẽ cần xây dựng AssetBundles và tải chúng không đồng bộ với WWWđối tượng. Điều này có tác dụng phụ không mong muốn khi gọi Shader.Parsecho mỗi người với tổng chi phí khoảng 500ms. Tôi đã báo cáo điều này trên các diễn đàn [2] và vẫn đang chờ hồi âm. Tôi sẽ gửi một báo cáo lỗi cuối cùng.

  4. Đừng nghĩ về việc sử dụng AssetDatabase.LoadAssetAtPath, nó chỉ có sẵn trong trình chỉnh sửa và không có trong các bản dựng Unity.

[1] https://www.youtube.com/watch?v=2UsyVuWoFbQ
[2] http://forum.unity3d.com/threads/shader-parse-delays-loading-of-assetbundle-contained-no-shader .358235 /


0

Có giải pháp của bên thứ ba.

mã này có thể tạo ra các địa hình có chiều rộng 99.999 mét, các ngọn núi là bất kỳ công thức tiếng ồn nào, nhưng bạn có thể trộn 100 công thức tiếng ồn vào một bản đồ nếu bạn muốn. ví dụ, trong địa hình này, tổng số hình tam giác có sẵn trong bản đồ là từ 66 triệu, độ phân giải thấp và độ phân giải trung bình 200 triệu. đây là bản đồ tam giác 66 triệu, trong đó 0,7 triệu tam giác được cập nhật xung quanh camera. địa hình khổng lồ unityplayer, WASD và không gian


Có mã nguồn cho điều đó? Tất cả những gì tôi thấy là một trò chơi plugin thống nhất.
Tấn

Tôi có mã nguồn, tôi phải mất một lúc để viết. Tôi đang ở ant d0t stewart tại yahoo d0t com
com.p Hiểu được

0

Tôi sẽ khuyên bạn nên tải địa hình của bạn trong khối. Bằng cách sử dụng các địa hình nhỏ hơn và có lẽ tập lệnh của bạn có thể kiểm tra xem bạn có ở gần địa hình nhất định hay không bằng cách sử dụng biến đổi.poseition - hell.transform.poseition. Tôi thực sự đã viết một bài đăng trên blog về cách tối ưu hóa toàn bộ trò chơi của bạn và tôi đã nói về tải chunk. Hi vọng điêu nay co ich.


Lưu ý rằng lời khuyên này đã có trong câu trả lời được chấp nhận từ Martin Sojka từ 6 năm trước. Nếu bạn chỉ muốn chia sẻ một liên kết có liên quan, một nhận xét về câu trả lời đó có thể phù hợp hơn.
DMGregory

Trong tương lai tôi sẽ. Cảm ơn bạn. Tôi vẫn chưa quen với việc đăng bài trên sàn giao dịch stack :)
Hudson
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.