Làm thế nào City-sim có thể mô phỏng hàng trăm ký tự?


8

Các trò chơi của tôi thường bắt đầu tụt hậu khá dễ dàng khi có vài trăm hộp đại diện cho các nhân vật có thể. Trong khi các trò chơi như SimCity hay thậm chí Anno có hàng trăm nhân vật.

Tôi nhận ra rằng những trò chơi đó không cập nhật mọi thứ ở mọi tic, các nhu cầu được xử lý theo từng khoảng thời gian và đó không phải là vấn đề kết xuất, nhưng tất cả những sinh vật nhỏ bé đó đều có cách tìm đường riêng lẻ, v.v.
Tôi chỉ đơn giản là không thể hiểu làm thế nào chúng có thể kéo Điều đó cho hàng ngàn ký tự ngay cả trên các máy cũ. Làm thế nào để họ làm điều này?

Câu hỏi này đã được cập nhật để đề cập đến những con số khổng lồ nơi các cá nhân không thực sự đếm và chỉ đơn giản là mô phỏng cho sự đắm chìm và thẩm mỹ.

(Liên quan nếu đề cập đến các nhân vật riêng lẻ: Làm thế nào Pháo đài Lùn theo dõi rất nhiều thực thể mà không làm giảm hiệu suất? )

(Câu hỏi khác nhau nhưng có thể liên quan?: Hiển thị hàng trăm nhân vật hoạt hình trong Unity3D )


2
Điều này thực sự không giống như một bản sao với tôi. Mặc dù các trò chơi như Pháo đài lùn thực hiện mô phỏng hành động của từng tác nhân, nhưng một khi chúng ta bắt kịp các trò chơi quy mô thành phố như được mô tả trong câu hỏi này, điều đó không còn thực tế nữa. Thay vào đó, những chiếc sim này thường hoạt động ở mức độ "chunk" hơn của xu hướng dân số, điền vào các chi tiết của từng người theo những xu hướng đó chỉ khi bạn nhìn kỹ. Do những khác biệt trong chiến lược, tôi nghĩ rằng điều này đáng để mở lại và trả lời riêng biệt với câu hỏi được liên kết.
DMGregory

Tôi đã thực hiện một số thay đổi để làm nổi bật sự khác biệt. Làm thế nào để tôi bỏ liên kết các câu hỏi?
MisteriosM

Tối ưu hóa hiệu suất là một lĩnh vực rất rộng. Có một triệu điều bạn có thể làm sai hiệu năng trong trò chơi của mình. Nhưng không nhìn vào trò chơi của bạn và đầu ra profiler cho nó, thật khó để biết được nút thắt của bạn có thể ở đâu. Bây giờ chúng ta có thể chụp trong bóng tối và suy nghĩ về địa phương bộ nhớ, song song hoặc thuật toán tìm đường nâng cao cho nhiều tác nhân, nhưng thật khó để nói những gì bạn đã biết và những gì áp dụng cho trò chơi của bạn. Vì vậy, tôi sợ rằng câu hỏi này quá rộng.
Philipp

Bạn đã thử đối tượng tổng hợp chưa? Việc khởi tạo là tốn kém, kích hoạt và hủy kích hoạt các đối tượng đã được khởi tạo không phải là (nhiều)

Bạn cũng có thể sử dụng một bộ phát hạt. Vì chúng thực sự chỉ là biểu diễn trực quan của dữ liệu nhân khẩu học, chúng không cần phải thông minh hay phức tạp.
Stephan

Câu trả lời:


12

Giống như rất nhiều gamedev, câu trả lời cho cách các trò chơi sim thành phố thực hiện được kỳ tích dường như không thể này là: có lẽ chúng không. Họ chỉ giả vờ tốt thôi. ;)

Những chiếc sim như thế này thường sẽ hoạt động ở mức độ "chunked", mô hình hóa các nhóm người, khu phố, hành lang giao thông hoặc các động lực khác của thành phố nói chung, thay vì xử lý AI cho mỗi một trong số hàng ngàn hoặc hàng triệu cư dân.

Có một vài cách chúng ta có thể tiếp cận điều này:

  • Từ dưới lên "thưa thớt": ở đây chúng tôi vẫn mô phỏng từng cư dân thành phố, nhưng không "quá nhiều" trong số họ, và không phải mọi khung hình. Bạn có thể nghĩ về điều này giống như một cuộc thăm dò ý kiến ​​hoặc điều tra dân số được ban hành cho một mẫu người ngẫu nhiên mỗi tuần. Bạn nội suy các kết quả để đưa ra ước tính về dân số ảo rộng hơn - nơi họ sống, nghề nghiệp, thu nhập, nhân khẩu học, v.v.

    Vì vậy, ví dụ, nếu bạn chỉ mô phỏng một trăm cư dân trong thành phố của bạn và 5 người trong số họ là sinh viên, thì bạn có thể ước tính rằng khoảng 5% dân số thành phố của bạn là sinh viên và nhu cầu mô hình cho các trường học phù hợp.

    Thỉnh thoảng, bạn có thể cần phải tạo lại các mẫu ngẫu nhiên từ phân phối dân số của thành phố để tránh phân cụm / thưa thớt quá mức (ví dụ: nếu một khu phố trở nên không phổ biến và tất cả cư dân điều tra dân số của bạn chuyển đi, bạn muốn lưu ý đến cuộc di cư mà không để lại hoàn toàn không có đại diện trong sim của bạn!)

  • Từ trên xuống: Ở đây bạn đưa ra một công thức tổng thể nhìn vào thành phố của bạn và mô hình hóa toàn bộ động lực của nó. Theo một phong cách tương tự như kinh tế vĩ mô, chúng ta bỏ qua các chi tiết của từng tác nhân, hoặc coi chúng là một loại "chất lỏng" liên tục phân chia của hoạt động kinh tế chảy theo các quy luật dựa trên nguyên tắc.

    Thay vì suy nghĩ về sở thích cá nhân và sự thay đổi của mọi người, các quy tắc trò chơi của bạn có thể trông giống như các phương trình vi phân liên quan đến sự gần gũi về thuế và thuế suất và năng suất và giá trị tài sản và tỷ lệ tội phạm và ...

  • Giữa chừng: Có thể có nhiều loại lai giữa hai loại - ví dụ, mô phỏng từng "phe phái", "ngành công nghiệp" hoặc phân khúc nhân khẩu học của thành phố với tư cách là siêu nhân của chính nó, đưa ra quyết định riêng của mình, nhưng trải ra trong một bản đồ nhiệt hoặc hàm sóng trên toàn thành phố chứ không tồn tại trong bất kỳ một cơ quan nào. Hoặc phân chia thành phố thành các khu phố mà mỗi khu vực xử lý các quy tắc quy mô nhỏ hơn của riêng mình để tương tác với các nước láng giềng.

Bây giờ, khi người chơi phóng to đủ gần để xem từng người hoặc xem báo cáo thống kê trích dẫn số lượng cá nhân - những điều đó không nhất thiết là sự thật cơ bản được sử dụng để chạy sim. Thay vào đó, họ có thể là một sản phẩm suy luận của nó.

Giả sử chúng ta phóng to một khối thành phố cụ thể. Từ sim thành phố tổng thể của chúng tôi, chúng tôi biết dân số đông của khu vực này, các loại hoạt động xảy ra ở đó, thời gian trong ngày khi nó hoạt động. Vì vậy, theo yêu cầu, chúng tôi có thể sinh ra một số lượng người thích hợp của các nhân khẩu học phù hợp thực hiện các loại hoạt động đó. AI của chúng có thể đơn giản, có thể ít như chơi một hình ảnh động tại chỗ hoặc đi theo một điểm đến cạnh cửa / cạnh màn hình gần nhất nơi chúng có thể sinh sản.

Điều này có nghĩa là chúng ta thường sẽ không cần phải tìm đường cho mọi đại lý. Thay vào đó, chúng ta có thể thực hiện một lần chuyển bản đồ luồng chính trên toàn bộ mạng lưới đường, để xác định khối lượng chung của các loại lưu lượng khác nhau dọc theo mỗi đoạn. Sau đó, chúng ta có thể sinh ra đủ các loại xe đúng loại trong các phân khúc đó để phản ánh mật độ đó. Sau khi sinh sản, các đặc vụ chỉ có thể nhận được bằng chỉ đạo địa phương hoặc các điểm tham chiếu được tạo trước để đến điểm sinh sản. Giữ các tủ sinh sản dọc theo mỗi phân đoạn được cân bằng chính xác với tỷ lệ sinh sản cho phép chúng tôi duy trì bất kỳ lưu lượng truy cập ổn định nào chúng tôi muốn.

Theo cách này, con người và phương tiện mà người chơi nhìn thấy là những hình vẽ, giống như một hệ thống hạt được cải tiến tạo ấn tượng về những đám mây thực tế mà không thực sự tính toán động lực học chất lỏng đầy đủ trên mỗi phân tử hơi. ;) Chúng tôi sắp xếp chúng như mặc quần áo để truyền đạt trạng thái mô phỏng, thay vì lái nó.

Đối với nhiều trò chơi, điều này là đủ. Người chơi thường không thể chọn một tác nhân riêng lẻ để thẩm vấn họ về những gì họ đang làm ở đó hoặc nơi họ sẽ đến, vì vậy thật khó để phát hiện ra các đường nối và chú ý nếu một đặc vụ làm điều gì đó không có ý nghĩa, như lái xe xung quanh cùng một khối ba lần.

Nhưng nếu bạn cần các tác nhân hoàn toàn phù hợp trong một môi trường đông dân, bạn có thể xem xét một kỹ thuật gọn gàng có tên là " Thế hệ Alibi ". Đây là một kỹ thuật lấy mẫu tinh vi cho phép bạn tạo ra các tác nhân mà bạn mong muốn tìm thấy trong một tình huống nhất định. Sau đó, nếu người chơi cố gắng điều tra chi tiết hơn, bạn có thể lấy mẫu hồi tố chi tiết hơn về những gì họ đang làm, theo cách phù hợp với những gì người chơi đã quan sát về họ cho đến nay. Ý tưởng là bạn vẫn đạt được những lợi ích nhẹ của những người "đứng trong các tông", nhưng tại chỗ họ có thể tạo ra một bằng chứng ngoại phạm hợp lý để vượt qua như những tác nhân được mô phỏng hoàn toàn.

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.