Loại phần cứng nào sẽ được yêu cầu để hiển thị một minecraft có kích thước Trái đất như bản đồ?


10

Tôi đã suy nghĩ về vấn đề này. Có thể với công nghệ hiện tại để tạo một bản sao 1: 1 của trái đất trong trò chơi dựa trên voxel? Cấu trúc dữ liệu tốt nhất để lưu trữ bản đồ khổng lồ này là gì? Thuật toán nào nên được sử dụng để kết xuất cấu trúc dữ liệu này trong thời gian thực?

Những câu hỏi này đưa ra những giả định:

  • Mỗi voxel có độ phân giải 1 mét khối.

  • Để đơn giản, mỗi voxel chỉ cần 1 byte thông tin siêu dữ liệu. Thông tin này sẽ được sử dụng để lưu trữ nhận dạng "loại" của voxel (đất, nước, đá, v.v.).

  • Thể tích trái đất là 1 * 10ˆ21 mét khối.

  • Bằng "công nghệ hiện tại" tôi bao gồm mọi thứ có sẵn trên thị trường, nhưng không phải là siêu máy tính.

  • Chỉ địa hình và độ sâu của Trái đất sẽ được sử dụng để tạo bản đồ. Xây dựng con người, thực vật hoặc hang động được loại trừ. Các khối ngầm sẽ được chọn dựa trên các nghiên cứu địa chất, ví dụ: nếu độ sâu lớn hơn 3000km sẽ tạo ra một voxel 'magma'.

  • Giống như trong Minecraft, bản đồ không tĩnh, nó có thể được sửa đổi trong trò chơi.

  • Khoảng cách vẽ 'vô hạn' là một điểm cộng lớn, điểm quan trọng của việc có toàn bộ trái đất trong bản đồ là gì nếu bạn không thể bay lên và quan sát toàn bộ hành tinh?

Kết luận đầu tiên mà tôi đưa ra khi tôi nghĩ về vấn đề này là việc lưu trữ dữ liệu Trái đất theo cách tuyến tính là không khả thi, giả sử rằng mỗi voxel chỉ chiếm 1 byte bộ nhớ, điều này vẫn sẽ cần 1 zettabyte để lưu trữ bản đồ. Vì vậy, một số loại nén được yêu cầu.

Tôi nghĩ rằng một octree voxel có thể nén bản đồ, nhưng tôi không chắc bao nhiêu. Entropy của bản đồ voxel này có lẽ rất thấp, vì vậy tôi đoán rằng mức độ nén rất cao có thể đạt được.

Khước từ

Đây là một câu hỏi lý thuyết, tôi không có ý định viết một voxel trái đất

BIÊN TẬP

ESA GOCE đã lập bản đồ Geoid Trái đất với độ chính xác 1cm - 2cm. Tôi tin rằng thông tin này có thể được sử dụng để tạo ra một sơ đồ chiều cao rất chính xác của Trái đất. Điều này sẽ loại trừ sự cần thiết phải sử dụng một thuật toán để lấp đầy các khoảng trống trong địa hình Trái đất.


1
Đối với những gì có giá trị thì thế giới trong Minecraft lớn hơn trái đất, thứ bạn thực sự đang cố gắng có được là bản đồ voxel đa độ phân giải của trái đất để bạn có thể xem tất cả cùng một lúc thay vì phạm vi xem giới hạn được tìm thấy trong trò chơi đó Điều này đi xuống một mức độ chi tiết thực sự .. Khi nào bạn hiển thị các voxels riêng lẻ hoặc khi nào tất cả các voxels đó được lấy trung bình trong một đoạn và được hiển thị dưới dạng một điểm trong bản đồ có độ phân giải thấp hơn. Làm thế nào để bạn chia tỷ lệ giữa các cấp độ chi tiết nhanh, v.v.
James

@James, Bạn quên rằng Minecraft được tạo theo thủ tục, có nghĩa là không cần lưu trữ bộ nhớ / dữ liệu cho đến khi bạn thực sự ghé thăm một khu vực. Anh ta muốn có trái đất của chúng ta, có nghĩa là bạn sẽ cần dữ liệu cho toàn hành tinh, xuống kích thước mét khối.
William Mariager

1
"điều này vẫn sẽ cần 1 zettabyte để lưu trữ bản đồ. Vì vậy, một số loại nén là bắt buộc." Tôi không biết tại sao, nhưng điều này làm tôi mỉm cười :) bạn cũng có thể quan tâm đến việc giữ các tab trên infinite-universe.com/Infinity
Ray Dey

@RayDey Cảm ơn liên kết, video xem trước của họ rất ấn tượng! infinity-universe.com/Infinity/...
Cesar Canassa

Phụ thuộc. Trên màn hình của tôi, một mô hình sao chép 1: 1 của Trái đất với 1m voxels sẽ chỉ có khả năng hiển thị một phần của một voxel tại một thời điểm ...
Peter Taylor

Câu trả lời:


6

Điều đó phụ thuộc vào phương pháp phân chia không gian mà bạn sử dụng, mặc dù tất cả các phương pháp phân chia (giống như bất kỳ phương pháp nén nào) cuối cùng đều không thể nén được nữa, do chi phí cấu trúc dữ liệu và các yếu tố logic / toán học khác. Một ví dụ có thể được tìm thấy trong octrees. Đối với mỗi nút trong octree, một con trỏ phải được giữ cho cha mẹ và / hoặc con cái (tùy thuộc vào cách bạn đi về kiến ​​trúc cấu trúc dữ liệu của bạn), để cho phép truyền tải có ý nghĩa. Bất kỳ cấu trúc cây có thể chứa n trẻ em. Tỷ lệ 1: n càng thấp, bạn sử dụng không gian càng hiệu quả và do đó, tổng chi phí trong giao dịch cây càng lớn vì bạn phải có nhiều nút tổ tiên hơn để chứa cùng số lượng voxels lá (trong trường hợp của bạn, khoảng 510 nghìn tỷ trong số này đại diện cho diện tích bề mặt).

Xem xét rằng trong trường hợp của bạn, các vấn đề chính là chi phí lưu trữ và khiến toàn bộ hành tinh (hoặc các bộ phận của chúng) từ một khoảng cách hợp lý, không có cấu trúc dữ liệu nào tôi muốn giới thiệu trong một quãng tám. Mipmapping là một điều cần thiết: đường kính 12,8 triệu mét ở công suất cao nhất gần nhất là 2 ^ 24 = 16,8 triệu. 24 cấp độ tám để đi qua sẽ tương đương với số lượng phân nhánh khổng lồ - rất tốn kém cho GPU và CPU như nhau. Nhưng với điều kiện bạn làm đúng, bạn sẽ chỉ cần vượt qua một vài cấp độ tại một thời điểm. Tuy nhiên, với số lượng không gian cần thiết, các lựa chọn thay thế là rất ít và xa (xem bên dưới).

Khả năng mipmapping của octrees là những gì làm cho nó trở thành một công cụ vô cùng mạnh mẽ cho khối lượng lớn như bạn mô tả. Không giống như tất cả các phương pháp phân chia đã biết khác (ngoại trừ cây KD), octree giữ phân chia theo cấp độ tối thiểu, có nghĩa là sự khác biệt về thị giác và vật lý giữa các cấp độ mipmap cũng được giữ ở mức tối thiểu, có nghĩa là các vùng đồng bằng mịn hơn khi bạn đi lên và xuống cây.

Mặt khác, nếu bạn muốn tạo ra một thế giới nơi truyền tải lưới phân cấp được giữ ở mức tối thiểu, thì bạn sẽ cần phải đánh đổi không gian để tăng tốc độ.

Nói về tỷ lệ 1: n lý tưởng, không có cấu trúc tốt hơn cây kd về mặt này. Trong đó octree chia làm 2 cho mỗi trục, dẫn đến 2 ^ 3 = 8 ô con riêng lẻ, cây kd phân chia chính xác một lần cho mỗi cấp độ phân chia. Vấn đề với điều này là bạn phải chọn một siêu phẳng để phân chia và siêu phẳng này có thể được chọn xung quanh bất kỳ trong số 3 trục. Mặc dù tối ưu về mặt không gian, nhưng nó tạo ra các đường ngang 3D (chẳng hạn như trong raymarches, op cơ bản khi sử dụng octrees cho vật lý hoặc kết xuất) khó khăn hơn nhiều so với trong một octree, vì cấu trúc kiểu cổng động phải được lưu giữ để ghi lại giao diện giữa các nút kd-cây riêng lẻ.

RLE là một cách tiếp cận khác để nén, nhưng theo nhiều cách khó hơn để áp dụng cho một vấn đề như thế này (trong đó cơ sở hoạt động là hình cầu), vì nén RLE là một chiều và bạn phải chọn trục mà nó hoạt động. hành tinh, người ta có thể chọn trục cực, nhưng bất kỳ lựa chọn trục đơn nào cũng sẽ đưa ra một số vấn đề nhất định với các đường ngang để kết xuất và vật lý khi hành động từ các góc không tối ưu nhất định. Tất nhiên, bạn cũng có thể chạy RLE theo 3 trục đồng thời, tăng gấp ba chi phí lưu trữ hoặc trong 6 trục (-x, + x, -y, + y, -z, + z) để tối ưu hóa thêm.

Vì vậy, để trả lời câu hỏi của bạn (hoặc không!)

Tôi sẽ không đi thẳng vào việc trả lời loại phần cứng nào, nhưng tôi nghĩ rằng việc nhìn nó từ góc độ tám phần bắt đầu cho bạn ý tưởng về những gì thực tế có thể có trên loại phần cứng nào. Tôi sẽ khuyến khích bạn đi theo con đường này, nếu bạn thực sự muốn biết, có thể dễ dàng nhất để thực hiện một quãng tám thưa thớt đơn giản(xem bài viết của Laine trong tài liệu tham khảo) và đặt một lớp vỏ hình cầu của các voxels bề mặt vào đó, và xem việc sử dụng không gian kết quả là như thế nào. Bước lên từ đó. Xem khoảng cách bạn có thể nhận được trước khi bộ nhớ hệ thống của bạn bắt đầu phát hành. Điều này không yêu cầu bạn phải viết trình kết xuất trừ khi bạn muốn trực quan hóa. Cũng nên nhớ rằng điều này được thực hiện tốt nhất trên CPU - GPU và lớn không có dung lượng bộ nhớ để xử lý các vấn đề ở quy mô này. Đây là một trong những lý do Intel đang hướng tới việc chuyển sang các bộ xử lý song song ồ ạt: những lợi ích của GPGPU, tốt hơn ở loại này, có thể được áp dụng cho một không gian bộ nhớ xa hơn mà không bị tắc nghẽn hệ thống. Có lẽ có những người khác ở đây, hoặc trên math.stackexchange.com,

Về mặt yêu cầu khoảng cách xem vô hạn của bạn, chắc chắn, nhưng câu hỏi luôn luôn đi đến, "bao nhiêu chi tiết ở khoảng cách nào". Kết xuất chi tiết vô hạn sẽ yêu cầu tài nguyên vô hạn. Đó là nơi mà mipmapping biến đổi theo cảnh diễn ra. Cũng nên nhớ rằng tất cả các cấu trúc dữ liệu thể hiện một số sự đánh đổi tốc độ cho không gian hoặc ngược lại. Điều đó có nghĩa là kết xuất ít hơn / chậm hơn, nếu bạn muốn một thế giới rộng lớn hơn cho cùng một nỗ lực kỹ thuật.


4

Kết luận đầu tiên mà tôi đưa ra khi tôi nghĩ về vấn đề này là việc lưu trữ dữ liệu Trái đất theo cách tuyến tính là không khả thi, giả sử rằng mỗi voxel chỉ chiếm 1 byte bộ nhớ, điều này vẫn sẽ cần 1 zettabyte để lưu trữ bản đồ. Vì vậy, một số loại nén được yêu cầu.

Vì rất có thể bạn sẽ không bao giờ tìm ra các thuộc tính của mỗi mét khối của thế giới thực, nên bạn sẽ cần một số cách để tạo dữ liệu không chắc chắn dựa trên các giả định. Vì vậy, nếu bạn đã tìm ra điều đó, không cần phải tính toán và lưu trữ tất cả dữ liệu đó, nhưng bạn có thể tạo nó một cách nhanh chóng.

Đầu tiên và quan trọng nhất, bạn có thể loại bỏ tất cả các voxels trong trái đất, bởi vì những thứ này sẽ chỉ phải được tính nếu ai đó thực sự đào một cái hố, ví dụ. các voxels trở nên hữu hình.

Đối với bề mặt trái đất, có lẽ tôi sẽ lấy một hình ảnh làm điểm khởi đầu cho các tính toán của mình. Có thể một số loại bản đồ nhiệt độ và độ ẩm sẽ cho phép bạn tính toán loại khối để áp dụng. Ví dụ. Nước, cát (sa mạc), cỏ, tuyết, v.v. Vì hình ảnh có thể sẽ không có một pixel thông tin cho mỗi mét vuông bề mặt trái đất, bạn sẽ phải trộn lẫn điều này với một chút nhiễu để tạo ra một chút biến đổi trên bề mặt. Nếu bạn luôn sử dụng cùng một hạt giống ngẫu nhiên, tuy nhiên kết quả của bạn sẽ mang tính quyết định.

Ngoài ra, bản đồ độ cao sẽ hữu ích, để bạn có thể xác định chiều cao của các tính năng bề mặt. Bằng cách đó bạn có thể thêm núi, v.v.

Vì vậy, điều này làm giảm khối lượng dữ liệu của một số hình ảnh 2D có chứa thông tin về bề mặt trái đất. Đối với mọi thứ ở bên trong, bạn sẽ trở lại một cách tiếp cận thủ tục thuần túy, nơi bạn kết xuất các loại khối khác nhau, tùy thuộc vào khoảng cách từ tâm trái đất. Nhưng như đã nói ở trên, những điều này chỉ được tính toán, khi ai đó đào một cái lỗ.

Để thay đổi liên tục, tôi sẽ chỉ lưu các sửa đổi cho thế giới. Vì vậy, nếu ai đó đào một cái lỗ, tôi sẽ lưu trữ thông tin về loại voxels nào đã bị loại bỏ, vì tôi sẽ có thể đưa ra các voxels xung quanh theo thủ tục.

Đối với kết xuất: Bạn sẽ cần một số thuật toán mức độ chi tiết và loại bỏ tinh vi để thực hiện công việc này. Thật ngớ ngẩn khi kết xuất tất cả các voxels bề mặt, khi máy ảnh ở mức thu phóng cho thấy toàn bộ thế giới. Ở cấp độ này, các voxels nên lớn hơn nhiều, thậm chí có thể một quả cầu có kết cấu đơn giản là đủ.

Tôi đoán điều khó khăn nhất là có một trình tạo rắn cho phép bạn tính toán các thuộc tính voxel, ngay cả đối với các "độ phân giải" khác nhau, để bạn có thể sử dụng nó để tạo các mức độ chi tiết khác nhau.


Vấn đề với việc chỉ lưu các sửa đổi là một giải pháp ngắn hạn. Nếu người chơi bắt đầu sửa đổi hành tinh, cuối cùng sẽ dẫn đến tình huống dữ liệu được sửa đổi chỉ lớn bằng hành tinh.
Cesar Canassa

1
@CesarCanassa Đây không phải là một kịch bản thực tế để có nhiều dữ liệu được sửa đổi hơn dữ liệu hành tinh thực tế. Hãy nhìn những gì con người chúng ta đã thay đổi trên trái đất ... Tôi muốn nói rằng đó chỉ là một tỷ lệ nhỏ trên bề mặt trái đất. Các đại dương về cơ bản không bị ảnh hưởng đã tạo nên phần lớn hơn của bề mặt trái đất. Hãy tưởng tượng 1 triệu người chơi đang chơi trò chơi (liên tục) và 1 voxel trên mỗi m2 bề mặt trái đất (510.072.000km2). Nếu mỗi người chơi sẽ sửa đổi 1 voxel mỗi 10 giây, điều này vẫn sẽ khiến họ mất ~ 160 năm để chỉ sửa đổi bề mặt. Và đó là không kể bên trong trái đất!
bummzack

Các cách để sửa đổi các voxels một cách ồ ạt được thực hiện, ví dụ như một quả bom nguyên tử phát nổ và đánh chìm cả một hòn đảo hoặc các vết nứt mở của trận động đất mạnh. Ngay cả dữ liệu được sửa đổi chỉ là 0,0001% khối lượng Trái đất vẫn còn 10 ^ 15 voxels
Cesar Canassa

Đúng là các sửa đổi nhỏ so với Trái đất, nhưng các sửa đổi chúng ta đã thực hiện trong thế kỷ qua vẫn còn khá ấn tượng: so sánh hình ảnh vệ tinh cho biển Aral từ những năm 1970 và cuối những năm 1990. (Tôi đã từng xem xét các thay đổi sẽ được yêu cầu để sao lưu hình ảnh vệ tinh có độ phân giải 100m hiện đại vào những năm 1940). Và ở độ phân giải 1m, thay đổi theo mùa trong băng và tuyết sẽ đòi hỏi hàng tấn dữ liệu, ngay cả khi bạn không đi xa đến mô hình tảng băng trôi.
Peter Taylor

0

Về cơ bản, bạn có thể làm điều tương tự như Minecraft. Thay vì tạo ra một lượng dữ liệu như vậy, bạn có thể định nghĩa một thế giới là một công thức toán học, bất cứ khi nào một phần dữ liệu được yêu cầu để hiển thị bạn tạo ra nó bằng công thức.

Một công thức như vậy thường được xây dựng bằng khái niệm tiếng ồn Perlin , điều này cho phép chi tiết ở mọi cấp độ, bạn có thể có những dãy núi lớn như trong thế giới thực, nhưng chọn chỉ tạo ra một phần nhỏ trong số chúng. Bạn có thể tạo số lượng chi tiết bạn thích, do đó có thể tạo ra các chi tiết rất tốt cho những thứ gần gũi, nhưng cũng tạo ra cảnh quan ở mức độ chi tiết cần thiết.

Minecraft lưu tất cả các khối bạn đã truy cập, hoàn thành với bất kỳ thay đổi nào đã được thực hiện, người ta chỉ có thể lưu lại sự khác biệt giữa thế giới được tạo và thế giới cập nhật, nhưng tôi đoán việc lưu các khối lớn dễ dàng hơn và chúng nén tương đối tốt.

Tôi không nghĩ có bất kỳ trò chơi nào thực sự đưa điều này đến giới hạn, nhưng việc sử dụng thế hệ công thức của tất cả các chi tiết "không quan trọng" của thế giới trò chơi lớn là điều rất phổ biến. Tôi không chắc chắn mức độ phổ biến của cách tạo khi tiếp cận cần thiết, trái ngược với việc đơn giản là tạo ra lô và đưa nó vào đĩa.


2
Tôi không biết về một công thức toán học mô tả trái đất theo kiểu 1: 1.
MichaelHouse

Không phải "Trái đất", mà là một cái gì đó tương tự.
aaaaaaaaaaaa

0

Bạn có thể tìm kiếm dữ liệu vectơ của các vùng đất trên Trái đất, vì dữ liệu vectơ có lợi thế mở rộng theo bất kỳ tỷ lệ nào bạn muốn. Kết hợp nó với bản đồ độ cao của Trái đất để tạo chiều cao của địa hình. Bước cuối cùng là một số hình ảnh vệ tinh chi tiết, từ đó bạn có thể chọn loại khối trên cùng dựa trên hình ảnh, do đó bạn lấy đá ở nơi có đá, cát nơi có cát, v.v. Có lẽ nên tạo ra bên trong thực tế của hành tinh giống như Minecraft làm điều đó, trừ khi bạn có thể tìm thấy dữ liệu địa lý chi tiết để làm việc. Về cơ bản, những gì bạn muốn làm là tìm dữ liệu địa lý và ngoại suy từ nó, chỉ đưa ra đầu vào tọa độ XYZ. Điều này có nghĩa là bạn có dữ liệu hạn chế và bạn ngoại suy phần còn lại chính xác nhất có thể.

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.