Vị trí người chơi được lưu trữ trên MMORPG như WoW là loại biến nào?


18

Tôi thậm chí đã nghe J. Carmack nhanh chóng nói về nó ...

Làm thế nào một phần mềm có thể theo dõi vị trí của người chơi một cách chính xác, ở trong một thế giới rộng lớn như vậy, mà không tải giữa các khu vực và trên quy mô nhiều người chơi? Dữ liệu được định dạng như thế nào khi truyền qua mã mạng?

Tôi có thể hiểu làm thế nào các đỉnh được lưu trữ vào bộ nhớ của card đồ họa, nhưng khi nói đến việc đồng bộ hóa nhiều người chơi, tôi không thể tưởng tượng được cái gì là tốt nhất.

Câu trả lời:


26

Scott Bilas làm việc trên Dungeon Siege và viết một bài báo, "Thế giới liên tục của Dungeon Siege" . Mặc dù Dungeon Siege không phải là MMO, nhưng nó có một thế giới và anh ấy nói về định vị người chơi trong bài báo của mình. Tôi tìm thấy nó là một đọc tuyệt vời. Đây là phần có liên quan:

Vấn đề chính xác

Ngay từ đầu, nhóm kỹ sư đã biết rằng thế giới liên tục sẽ ảnh hưởng đáng kể đến thiết kế nội dung và động cơ, và vấn đề cốt lõi là sự ổn định về số. Hãy tưởng tượng hai nhân vật đi theo đội hình cách nhau hai mét, đi về hướng đông từ gốc. Tại một số điểm, khoảng cách với nhau bị áp đảo bởi khoảng cách từ gốc, và các nhân vật sẽ xuất hiện là một người khác ở cùng một vị trí.

Với điểm nổi, bạn càng nhận được nhiều hơn từ điểm gốc, bạn càng mất độ chính xác cao, điều này có thể gây ra tất cả các vấn đề khó chịu. Mọi thứ không được sắp xếp đúng, các vết nứt xuất hiện giữa các mắt lưới liền kề, không gian bắt đầu định lượng và mèo và chó bắt đầu sống cùng nhau. Dungeon Siege sử dụng FPU ở chế độ chính xác duy nhất cho các lợi ích hiệu suất rõ ràng và để phù hợp với độ chính xác tự nhiên của phần cứng video. Tuy nhiên, ngay cả khi chúng tôi tăng độ chính xác, cuối cùng nó cũng không bao giờ có thể giải quyết được vấn đề vì thế giới đã được lên kế hoạch và kết thúc, vô cùng rộng lớn.

Vấn đề chính xác có nghĩa là không thể có một không gian phối hợp thế giới thống nhất như hầu hết các trò chơi khác. Thay vào đó, giải pháp là phân chia thế giới liên tục thành một tập hợp các không gian tọa độ độc lập và chuyển đổi giữa chúng theo định kỳ để đặt lại độ chính xác. Một loạt các ý tưởng đã được thử nghiệm trong các ràng buộc này, và cuối cùng chúng tôi đã giải quyết được một biến thể của một hệ thống cổng thông tin tiêu chuẩn.

Giải pháp của chúng tôi bao gồm một hệ tọa độ dựa trên nút quan hệ, trong đó mỗi khối hình học (Siege Node) có không gian tọa độ riêng và được liên kết không gian với hình học lân cận thông qua các cửa mà nó chia sẻ với các hàng xóm. Sự sắp xếp của các nút được kết nối bởi các cửa tạo thành một biểu đồ liên tục đại diện cho toàn bộ bản đồ thế giới. Hệ thống nút này đã phát triển theo thời gian từ mục tiêu ban đầu là duy trì độ chính xác của FPU để trở thành phương pháp chính để phân chia không gian hiệu quả và là gốc rễ của vô số tối ưu hóa.

Để gói gọn khái niệm vị trí 3D so với một nút cụ thể, vectơ (x, y, z) truyền thống phải được tăng cường bằng ID nút (x, y, z, nút) và biểu thị phần bù từ gốc của một nút cụ thể thay thế. Bộ 4 này được gói gọn dưới dạng Siege Node Position, hoặc SiegePos. Sau đó, chúng tôi đã thêm một SiegeRot (quancyion, nút) để xử lý so sánh giữa các định hướng giữa các nút.

Cụm từ không có không gian thế giới mà trở thành một câu thần chú cho đội, mặc dù phải mất nhiều năm để mọi người hoàn toàn hiểu được ý nghĩa của nó.

Bạn có thể xem thêm các bài viết của anh ấy về Dungeon Siege tại đây .


Đó dường như là một câu trả lời rất goo! Cảm ơn ! Tôi đã tự hỏi nếu trò chơi ngày nay sẽ sử dụng các số bị khập khiễng như số nguyên của gmp.
jokoon

3

Đối với một thế giới không có khu vực rộng lớn, tôi sẽ chọn một đỉnh chính xác gấp đôi, hoặc điểm nổi với các phần nhỏ hơn phân chia đất.

Mỗi khối sẽ có hệ thống tọa độ riêng của nó. Khi bạn vượt qua biên giới đến từng khối này, bạn sẽ biến đổi mọi thứ thành hệ tọa độ đó. Đó là cách họ làm điều đó trong các chuyến bay sim.

Nếu bạn có vùng nhỏ, tôi đoán float sẽ là đủ.


Độ chính xác gấp đôi nhanh chóng phát sinh lợi ích lớn về hiệu năng và bộ nhớ. (x, y, z, vùng) là 16 byte; Nhân đôi (x, y, z) sẽ có ít nhất 24. Bạn không thể thực hiện toán nhanh trên chúng và bạn không thể sử dụng chúng trên thẻ đồ họa.

Chà, thẻ Fermi có thể sử dụng độ chính xác gấp đôi;) Nhưng vâng, cách tiếp cận chunk là những gì câu trả lời gợi ý nào.
Thợ làm móng

2

Tôi muốn nói rằng đối với vị trí thực tế, đó là một vectơ gồm 3 phao. Nhưng cũng sẽ có một chỉ số khu vực liên quan đến người chơi là tốt. (Nhưng không phải là một phần của vị trí vì mọi thứ được xử lý bởi máy chủ vùng đó nằm trong cùng một vùng và do đó không cần phải ở trong cùng một cấu trúc dữ liệu.)

Hãy nhớ có ít nhất 4 vùng. 4 lục địa lớn. Tôi không nghĩ bất kỳ ai trong số đó là hơn 10km ở một bên. Ví dụ, này trên blog trước sẽ tính toán mở rộng mới nhất của toàn bộ khu vực du lịch-thể như 41 dặm vuông. Tất cả các chiến trường, tất cả các trường hợp, đều có cùng khu vực và không gian phối hợp riêng.

Sử dụng API LUA, bạn có thể nhận được vị trí của trình phát GetPlayerMapP vị trí () trả về hai số float mỗi từ 0 đến 1 theo tỷ lệ trên toàn bộ bản đồ thế giới.


1

Đối với WoW, tôi hy vọng rằng họ sử dụng float x / y / z đơn giản - nhưng liên quan đến một 'vùng' cụ thể

Điều này sẽ giúp xử lý 'vùng di chuyển', ví dụ, thuyền và zeppelin


1

Thông thường các trò chơi trực tuyến như Wow, Tibia, vv Lưu trữ pos người chơi. sử dụng ba biến X + Y + Z trong bảng meta trình phát SQl. Runescape thực hiện nó mà không có Z - theo cách đó, người chơi luôn được hiển thị trên đỉnh của lưới mặt đất.


bảng meta là gì? Tôi thực sự nghi ngờ rằng nó sẽ lưu trữ nó trong một DB, nó cần được sử dụng trong thời gian thực ...
jokoon

(1) Bảng meta trong trường hợp đó là bảng DB với dữ liệu ký tự cơ bản, ví dụ: Giới tính, vị trí xyz, số lượng sức khỏe, tiền mặt trong ngân hàng, v.v. và bất cứ điều gì khác có thể có. (2) Tôi đã lưu trữ các máy chủ mở của Tibia, trong đó pos của trình phát được lưu trong bộ đệm của máy chủ. Nhưng ... cứ sau 30 ~ có một máy chủ lưu vào và POS của người chơi sẽ được thêm vào dữ liệu meta Người chơi. Vì vậy, nếu máy chủ bị tắt / nó bị sập, vị trí người chơi sẽ quay trở lại vị trí DB :)
Mikolaj Marcisz

-2

Một cái phao? Chà, một mảng 3 phao cho một trò chơi 3D. Ít nhất là đối với chúng tôi, chúng tôi sử dụng chân làm đơn vị vì vậy tất cả những gì bạn cần là 3-4 vị trí thập phân ở điểm mà tiếng ồn nổi không phải là vấn đề. Nếu một khu vực lớn chỉ là một hoặc hai dặm ở một bên, thì đó không phải là vấn đề lớn. Đối với phân vùng minh bạch trong MMO, đó là một câu hỏi hoàn toàn khác. Trong sơ đồ lớn về các vấn đề khó khăn trong MMO, vị trí lưu trữ là khá thấp trong danh sách.


Chúng tôi đã có các vấn đề chính xác về dấu phẩy động ở một số khu vực lớn trong quá trình phát triển. Tôi không biết những gì đã trở thành của họ. Nó có thể không phải là ưu tiên hàng đầu, nhưng nó cần phải được xem xét đủ sớm để thực sự tạo ra các cấp độ.
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.