Mặc dù tôi đồng ý với tình cảm: "đừng lo lắng về điều đó trừ khi đó là vấn đề đã được chứng minh", tôi nghĩ rằng đáng để suy nghĩ về việc sớm: lắp giải pháp trở nên đau đớn hơn nhiều. Và vâng, chỉ cập nhật gạch 'gần đó' là cách họ sẽ đi. Nhưng lưu trữ và địa chỉ của các mục trong thế giới trò chơi của bạn một cách hiệu quả là rất quan trọng vì lý do hiệu suất.
Điều bạn thực sự nghĩ đến ở đây là một tập dữ liệu thưa thớt: thứ gì đó mà các chỉ mục tiềm năng lớn (hoặc không giới hạn), nhưng chỉ một tỷ lệ nhỏ thực sự được sử dụng. Điểm mấu chốt là bạn không biết chính xác tỷ lệ nào sẽ được sử dụng.
Giải pháp chuẩn cho một vấn đề tập dữ liệu thưa thớt là tách chỉ mục / địa chỉ khỏi lưu trữ dữ liệu thực tế. Vì vậy, nếu đối tượng gạch đắt tiền, thì lưu trữ nó ở dạng nhỏ gọn (ví dụ: một mảng phẳng). Nhưng cho phép nó được lập chỉ mục thông qua một đối tượng rẻ hơn. Ở dạng đơn giản nhất, đây có thể là ma trận 2D (hoặc 3D) mà bạn có thể dễ dàng lập chỉ mục theo tọa độ, nhưng mỗi mục trong ma trận chỉ đơn giản là một chỉ mục. Sau đó, bạn sử dụng chỉ mục đó để tra cứu nội dung ô thực tế trong một mảng nhỏ gọn, riêng biệt. Nếu nội dung ô chưa tồn tại, sau đó thêm chúng vào cuối mảng và lưu chỉ mục trong ma trận 3D.
Giải pháp trở nên phức tạp hơn nếu bạn muốn hỗ trợ xóa nội dung (vì nó dẫn đến sự phân mảnh của mảng nội dung) và nếu nội dung ô của bạn rẻ, thì trọng số thêm của chỉ mục (chỉ số 32 bit hoặc 64 bit) có thể sẽ áp đảo các khoản tiết kiệm từ việc không lưu trữ từng ô tiềm năng. Đây cũng là một tra cứu bổ sung, điều này sẽ làm giảm hiệu suất bộ nhớ cache của bạn.
Bạn có thể nhận được nhiều hiệu quả lưu trữ hơn bằng cách giới thiệu thêm các lớp cảm ứng. Giả sử bạn sắp xếp các ô của mình thành các khối và các khối có độ chi tiết là 64x64x64. Cho một ô ở 125, 1, 132, bạn biết nó thuộc chunk (1,0,2). Vì vậy, bạn có một thế giới, bao gồm một mảng chunk nhỏ gọn và một ma trận các chỉ số chunk (-1 nếu chunk không tồn tại). Nội dung của mỗi khối (nếu có) là một ma trận 64x64x64 của các chỉ số gạch (-1 nếu gạch chưa tồn tại) và một mảng nhỏ của các ô được sử dụng. Bằng cách này, bạn không đốt một lượng lớn các chỉ số gạch cho các khối không bao giờ được sử dụng. Bằng cách làm theo cách tiếp cận này và chọn các số hợp lý cho độ chi tiết khối, bạn có thể mở rộng quy mô vũ trụ của mình một cách ồ ạt và kiểm soát việc sử dụng bộ nhớ của bạn. Trên thực tế, nếu bạn tạo khối 32x32x32,
Bạn cũng có thể thực hiện các thủ thuật lén lút, như sử dụng bit thứ tự cao của các chỉ số chunk hoặc gạch của bạn để có nghĩa là một cái gì đó đặc biệt. Vì vậy, nếu một mục trong ma trận ô có tập bit trên cùng, thì 31 bit thấp hơn không có nghĩa là chỉ mục ô, thay vào đó chúng có nghĩa là 'chỉ số dọc' hoặc một cái gì đó tương tự, và bạn có thể tra cứu nó trong một danh sách được duy trì riêng để tìm ra tọa độ nó dẫn đến.