Làm cách nào để tạo Lưới điều hướng cho thế giới 3D?


11

Tôi đang cố gắng tìm một giải pháp cho vấn đề này. Tôi đang cố gắng xây dựng một lưới điều hướng theo định dạng của một lưới các đỉnh được khóa thành x, y thả các tọa độ theo hình vuông cho không gian 3D. Nhưng tôi đang gặp vấn đề khi cố gắng tìm ra cách để giải quyết nó.

Tôi đã thử nhìn vào thư viện Recast. Đây là một phương pháp khá mạnh mẽ, nhưng dường như nó chậm lại với bản đồ lớn hơn và không gian mở. Tôi cũng không biết làm thế nào họ tạo ra các đỉnh và cạnh cho không gian thế giới với bản đồ chiều cao.

Suy nghĩ tiếp theo của tôi là làm những gì Unreal Engine 3 đã từng làm.

https://udn.epicgames.com/Three/NavulationMeshReference.html

Đó là sử dụng các sóng để tạo lưới. Tôi không thể tìm ra làm thế nào để các kênh phát sóng dừng lại.

Vì vậy, ... lựa chọn tiếp theo của tôi là hộp, có thể là hộp đúc. Tạo một thể tích được chia nhỏ với kích thước có công suất là 2. Căn chỉnh hộp vào lưới và bắn các lăng kính hình chữ nhật xuống dưới như một tia. Nếu nó nằm trên một mảnh hình học là một phần của mặt đất và hình chữ nhật không bị cắt nhau, hãy để một hình vuông ở đó. Và tiếp tục xuống cho đến khi đạt đến giới hạn của âm lượng. Để kiểm tra xem các cạnh có cần được liên kết hay không, tôi cho rằng tôi có thể kiểm tra xem độ dốc giữa hai cặp đỉnh có nằm trong độ dốc có thể đi bộ hay không, hợp nhất chúng nếu điều này là đúng.

Vấn đề chính của tôi là ... điều này dường như không được tối ưu. Không cần nghĩ về nó, khi ước tính quá trình là O (N ^ 3) cho mức độ nhiều lớp. Mà có thể nhận được khá khó chịu.

Và bit cuối cùng là để tự động tạo các nhóm hình chữ nhật của các hình vuông này. Tôi không hoàn toàn chắc chắn làm thế nào để làm điều này. Việc thực hiện Unreal ngăn cách chúng bằng các sườn dốc. Tuy nhiên, tôi đang cố gắng giữ định dạng lưới. Vì vậy, điều đó không hoàn toàn cần thiết. Vấn đề vẫn còn là việc tạo ra các ô hình chữ nhật lớn để phân chia quá trình tìm đường thành cơ sở trên mỗi ô. Gạch không thể quá lớn, cũng không quá nhỏ.

Vì vậy, các câu hỏi là ...

Điều gì sẽ là một cách hiệu quả để tạo ra navmesh dầm này? Và điều gì sẽ là một cách tốt để tạo ra gạch?


Khi nào bạn muốn tạo lưới? Biên dịch thời gian, thời gian tải hoặc thời gian thực? Chúng tôi đã vật lộn với vấn đề tương tự và cuối cùng quyết định rằng nó quá mức cho kịch bản của chúng tôi (tạo thời gian tải trong một game bắn súng từ trên xuống mà không có các đường dẫn chồng chéo), chúng tôi quyết định thực hiện theo cách tiếp cận dựa trên bốn cây. Điều này làm việc đủ tốt cho chúng tôi. Vì vậy, tôi đoán những gì tôi đang hỏi là, bạn có thực sự cần điều này không, hoặc giải pháp đơn giản nhất đáp ứng yêu cầu ban đầu của bạn là gì vì đây có thể là một khoảng thời gian. Nếu bạn quản lý một giải pháp tốt, tôi rất muốn nghe cách bạn sửa nó.
Niels

@Niels Tôi dự định xây dựng trước, sau đó tải nó vào trò chơi.
moonshineTheleocat

Sau đó, thời gian tiêu thụ không nên quá nhiều nhược điểm ban đầu, vì người chơi sẽ không chờ đợi nó. Bạn luôn có thể tối ưu hóa sau khi bạn có một cái gì đó làm việc.
Niels

Cấp độ của bạn lớn như thế nào? Chúng tôi đã sử dụng recast trên các trò chơi lớn và không có vấn đề gì - bạn chỉ cần điều chỉnh các giá trị tiie, v.v.
Steven

Tôi nghĩ rằng bạn đang thiếu bit "gridded". Điều này không hoàn toàn giống với gạch mà sử dụng lại. Tôi đang cố gắng tìm ra cách phục hồi lại để làm một việc như vậy. Nhưng nó chủ yếu là một cơn ác mộng.
moonshineTheleocat

Câu trả lời:


1

Một thế giới 3D cơ bản có thể được thể hiện bằng một lưới điều hướng có thể được xây dựng thuận tiện trong hầu hết các công cụ trò chơi. Các diễn viên có thể đi dọc theo các cạnh của đa giác.

Đó sẽ là một giải pháp đơn giản. Có nhiều thuật toán để tìm đường và tạo ra một navmesh.

Tôi muốn chia sẻ một cái gì đó tôi đọc cách đây một thời gian.

Ví dụ01

Điều này mô tả một giải pháp khả thi, nơi chúng ta có thể phá vỡ thế giới trò chơi của mình thành các ô vuông. Bất cứ khi nào một ô vuông được thêm vào trò chơi (khi người chơi đến gần một khu vực / địa hình thủ tục), một ô vuông sẽ được thêm vào. Tuy nhiên, chúng tôi không phải tính toán toàn bộ navmesh nữa. chúng ta chỉ cần tính toán cho ô đó và thêm nó vào biểu đồ hiện có. Hiệu suất tăng đáng kể ở đó.

Ví dụ02

Vấn đề tiếp theo được giải quyết là chuyển động lởm chởm từ ví dụ trước. Tôi có thể hiểu rằng bằng cách xem xét các ngã rẽ trong tương lai và khái quát hướng sẽ làm giảm chuyển động ngoằn ngoèo rất nhiều và làm cho chất lỏng chuyển động. Các trò chơi với hình ảnh động chi tiết không cho nó đi nhưng bạn có thể nhận thấy điều này trong một số trò chơi thế giới mở, nơi tôi cho rằng điều hướng là chủ yếu.

Đối với câu hỏi, tôi khuyên bạn nên kiểm tra câu trả lời của Kromster trong danh sách các thuật toán tạo navmesh .

Ngoài ra hãy xem Hệ thống AI của Left 4 Dead trong đó các ví dụ là một phần của. Nhiều chủ đề thú vị hơn được đề cập

Chúc may mắn.


0

Có nhiều cách, tại sao không làm cho nó trở thành cục bộ cho người chơi, tạo một lưới nhỏ theo sau người chơi và kiểm tra dưới mỗi giao lộ xem có thể chuyển đổi được hay không, giống như có một tầng ở đó và thực hiện chiếu tia để xem có một bức tường / tòa nhà ở bất kỳ phía nào sắp tới ..


Một ý tưởng tốt, nhưng không phải là một ý tưởng khả thi cho các mục tiêu cuối cùng. Tôi cần phải hỗ trợ một thế giới rộng lớn và cho phép AI điều hướng từ một phía của lục địa này sang một phía khác của lục địa. Điều đó là có thể làm được nhưng tôi cần phải có một lưới điều hướng cố định để tạo ra các nút cao hơn.
moonshineTheleocat

0

Đây là một vấn đề tôi đã thấy ở khắp mọi nơi. Bí quyết là "tách mối quan tâm". "Nói gì?", Tôi nghe bạn nghĩ. Những gì được hiển thị trên màn hình KHÔNG phải là "cấu trúc dữ liệu". Giữ hình ảnh tách biệt với dữ liệu để xây dựng hình ảnh là điều quan trọng. Làm như vậy sẽ luôn "bằng chứng trong tương lai" trò chơi của bạn khi các phiên bản phần mềm cơ bản mới được phát hành.

Xây dựng cấu trúc dữ liệu (hay còn gọi là mô hình) sẽ đại diện cho thế giới trò chơi của bạn. Sau đó, xây dựng một "khung nhìn" của mô hình cấu trúc dữ liệu. Nếu bạn muốn thay đổi thế giới từ lưới bàn cờ sang lưới lục giác, cấu trúc dữ liệu (kiểu máy) vẫn giữ nguyên, nhưng màn hình sẽ "vẽ" (hiển thị) một chế độ xem khác.


4
Mặc dù việc phân tách mối quan tâm thực sự là một thông lệ tốt nói chung, câu trả lời này hiện đang xem nhẹ chi tiết cụ thể để trả lời câu hỏi (ví dụ: làm thế nào để tạo mô hình tìm đường dựa trên lưới phù hợp từ một tập hợp hình học thế giới nhất định). Bạn hoàn toàn đúng khi mô hình này là gì, nó có thể tách biệt với dữ liệu được sử dụng để vẽ mức, nhưng để trả lời câu hỏi chúng ta vẫn cần một phương pháp để tạo mô hình tìm đường này.
DMGregory

-2

Tạo một mảng kép. Và sau đó nếu một đối tượng / đối tượng không thể vượt qua, có một metode để báo cho mảng đó vị trí không thể vượt qua. Khi một AI cố gắng di chuyển, chúng sẽ nhìn vào mảng kép và xem liệu nó có thể vượt qua được không.


4
Phương pháp để điền vào mảng này là phần khó. ;)
DMGregory
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.