Tại sao kích thước chunk thường là một sức mạnh của hai?


15

Có rất nhiều bản sao Minecraft ngoài kia và tôi đang tự mình thực hiện. Một nguyên tắc kết xuất địa hình là ốp lát toàn bộ thế giới trong các khối kích thước cố định để giảm nỗ lực thay đổi cục bộ.

Trong Minecraft kích thước chunk là 16 x 16 x 256 cho đến nay. Và trong bản sao tôi cũng luôn thấy kích thước chunk của một sức mạnh của số 2.

Có bất kỳ lý do cho điều đó, có thể liên quan đến hiệu suất hoặc bộ nhớ? Tôi biết rằng quyền hạn của 2 đóng một vai trò đặc biệt trong máy tính nhị phân nhưng điều đó có liên quan gì đến kích thước khối?


1
Thật tuyệt khi bạn có thể tiếp tục chia nó cho hai và lấy lại số chẵn. (Không phải là một câu trả lời hoàn chỉnh, nhưng một cái gì đó hữu ích về việc sử dụng một số như 2^n)
tro999

Câu trả lời:


27

Điều này phụ thuộc vào trò chơi và cấu trúc lập chỉ mục được sử dụng cho các khối. Mặc dù, ở mức cao như vậy, không có khả năng nó liên quan nhiều đến bộ nhớ hoặc tăng cường hiệu suất cụ thể. Nhiều khả năng đó là một quyết định tùy tiện cho việc định cỡ các khối theo cách có thể dự đoán được. Nó cho phép một số thủ thuật đếm và lập chỉ mục bằng cách sử dụng dịch chuyển bit không thể thực hiện được với các số không phải là lũy thừa của hai.

Ví dụ, đếm sức mạnh của hai cũng dễ như thay đổi một chút trong nhị phân:

Dec =  Bin
1   =  000001
2   =  000010
4   =  000100
8   =  001000
16  =  010000
32  =  100000

Những phím tắt này sẽ được sử dụng ở đâu sẽ phụ thuộc vào nhà phát triển và vấn đề họ đang cố gắng giải quyết.

Nếu bạn đang đưa ra quyết định về kích thước để tạo ra các khối, và nó không quan trọng trong bất kỳ khía cạnh nào khác, bạn cũng có thể sử dụng một cái gì đó quen thuộc và có lợi ích bạn đã sử dụng.


15

Đầu tiên, nhân với lũy thừa của hai giá rẻ hơn nhiều so với nhân với một số tùy ý, vì bạn có thể làm điều đó bằng cách dịch chuyển bit . Hầu hết thời gian trình biên dịch có thể làm điều này cho bạn, vì vậy bất cứ khi nào bạn viết "* 16" trong mã của mình, trình biên dịch thực sự thay đổi bốn lần và bạn không cần phải lo lắng về điều đó - bạn chỉ cần đưa ra biên dịch cơ hội bằng cách thiết kế cấu trúc dữ liệu của bạn theo cách này.

Thứ hai, vì các dòng bộ đệm, các bộ nhớ và các đường thông tin khác trong máy tính của bạn cũng có xu hướng được thiết kế để sử dụng quyền hạn của hai, bạn có thể có hiệu suất tốt hơn theo cách này.

Thứ ba, những người đam mê máy tính cũ của chúng ta chỉ quen chơi với sức mạnh của hai người, vì vậy đó là một thói quen.

(Thứ tư, các chuyên viên máy tính cũ khác thiết kế phần cứng và trình biên dịch của bạn cũng thích quyền hạn của hai, vì vậy điều này sẽ không thay đổi bất cứ lúc nào sớm).


2
+1 "Thứ ba, những người đam mê thời xưa của chúng ta chỉ quen chơi với sức mạnh của hai người, vì vậy đó là một thói quen." Đây có lẽ lý do chính .
Laurent Couvidou

9

Câu trả lời thực sự chỉ là thế này: Trên máy tính nhị phân, lũy thừa của hai là số tròn đẹp.

Khi một người bình thường cần chọn một số tùy ý cho một số mục đích, họ thường chọn các số tròn đẹp trong hệ thống số mà họ cảm thấy thoải mái, cơ sở 10. Vì vậy, họ sẽ chọn 10, 100, 1000, v.v. đơn giản và dễ dàng và không đòi hỏi nhiều suy nghĩ và giá trị chính xác không thực sự quan trọng đối với họ, họ chỉ nhắm đến một quy mô chung.

Là lập trình viên, khi chúng tôi cần chọn một số tùy ý cho mục đích nào đó, chúng tôi thường chọn số tròn đẹp trong số máy tính hệ thống sử dụng, cơ sở 2. Vì vậy, chúng tôi sẽ chọn 2, 4, 8, v.v. Vì chúng đơn giản và dễ dàng và không đòi hỏi nhiều suy nghĩ và giá trị chính xác không thực sự quan trọng đối với chúng tôi, chúng tôi chỉ nhắm đến một quy mô chung.

Nó thực sự không phức tạp hơn thế. Chúng chỉ là những số tròn đẹp.


6

Một lý do không được đề cập trong các câu trả lời khác là nếu cần, sức mạnh của hai số luôn có thể giảm đi một nửa mà không làm tròn vấn đề. Đây có lẽ không phải là một lý do trong bản sao Minecraft, nhưng trong một số trường hợp khác, chẳng hạn như trong kết cấu với mipmaps .


2

Một lý do tiềm năng khác là nó sẽ cho phép bạn mã hóa thông tin về từng đoạn trong kết cấu 3D. Nếu phần cứng mục tiêu của bạn hỗ trợ kết cấu 3D nhưng không có hỗ trợ kết cấu hoàn toàn mạnh mẽ và không có sức mạnh chung (mà tôi thừa nhận rằng bạn muốn chụp ở mức khá thấp) thì khả năng kích thước khối của bạn không phải là hai chỉ lý tưởng - đó là điều cần thiết.

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.