Hiệu suất tạo địa hình vô hạn: một chiều cao lớn hoặc một vài chiều cao nhỏ hơn?


7

Tôi đang tạo một địa hình thủ tục bằng cách sử dụng (một fBm tự chế tạo dựa trên) tiếng ồn Perlin làm sơ đồ chiều cao. Để làm cho địa hình vô tận, tôi vẽ lại một phần của nó trong khi máy ảnh di chuyển.

Có hai lựa chọn thay thế:

  1. hoặc có một vài (ví dụ 9) họa tiết chiều cao và xoay chúng trong khi máy ảnh di chuyển;
  2. hoặc chỉ có một sơ đồ chiều cao (lớn hơn 9 lần) và chỉ vẽ lại một phần của nó khi cần thiết.

Ghi chú:

Hai cách tiếp cận vẽ lại chính xác cùng một lượng pixel mỗi lần.

Nhưng:

  1. trong trường hợp đầu tiên, tôi phải liên kết 3 kết cấu nhỏ và vẽ lại hoàn toàn chúng để vẽ lại một đường lưới của tôi;
  2. trong trường hợp thứ hai, tôi liên kết toàn bộ kết cấu lớn hơn và chỉ vẽ lại một đường bên trong nó.

Câu hỏi: Tôi có nên mong đợi cái này nhanh hơn cái kia không? Có glBindTexturechi phí cao hơn cho kết cấu lớn hơn?


Nếu bạn đang sử dụng Perlin, tại sao không tạo nó trong shader? Không cần một kết cấu nào cả.
3Dave

@DavidLively thực sự là một fBm dựa trên perlin với một vài quãng tám, vì vậy tôi hy vọng nó sẽ đắt hơn một tra cứu kết cấu. Thậm chí nhiều hơn kể từ khi tôi cần truy cập các pixel neighbooring để tính toán các quy tắc.
Julien__

Bạn có thể tính toán các chỉ tiêu trong PS của mình cho loại điều này với dFdx / dFdy, việc này sẽ nhanh hơn đáng kể so với lấy mẫu một kết cấu vì chúng chỉ nhìn trộm tệp đăng ký của các làn liền kề thay vì phải đi ra bộ nhớ kết cấu.
3Dave

@DavidLively bạn có nghĩa là tính toán dẫn xuất của tiếng ồn? Điều này nghe có vẻ rất thú vị, nhưng tôi không chắc là hiểu
Julien__

Bạn đang sử dụng tiếng ồn để tạo ra một kết cấu, sau đó lấy mẫu tiếng ồn đó để tạo ra các quy tắc, phải không? Bạn có thể làm điều tương tự trong trình đổ bóng và sử dụng các hướng dẫn phái sinh để lấy các giá trị nhiễu từ các pixel liền kề trong bộ tứ và tạo các quy tắc từ đó. Đó là quá trình tương tự như thực hiện ngoại tuyến, nhưng bỏ qua bước tạo kết cấu. Điều này cũng cung cấp cho bạn địa hình vô tận thực sự. Hoặc, ít nhất, trong phạm vi của điểm nổi chính xác đơn.
3Dave

Câu trả lời:


1

Tôi biết đây là một câu hỏi cũ, nhưng tôi đã chơi xung quanh với việc tạo địa hình thủ tục rất nhiều. Vì vậy, tôi muốn giới thiệu tùy chọn nhỏ hơn (tức là chín "khối"). Có một vài lợi ích chính của việc sử dụng chunk.

  • Modularity - Bạn có thể ghép các hình vuông của địa hình lại với nhau như những mảnh ghép.
  • Tốc độ - Bạn không cần tính toán lại số lượng lớn địa hình xung quanh người chơi bất cứ khi nào anh ấy / cô ấy di chuyển.

Họ làm việc cùng nhau, tất nhiên. Đây là cách bạn có thể tải / dỡ khối, tùy thuộc vào vị trí của người chơi. Lưu ý: một đoạn có thể được tải nếu nội dung của nó được tạo bằng thuật toán tạo ngẫu nhiên hoặc tạo tiếng ồn nhất quán (như tiếng ồn Perlin); sau đó chúng có thể được tải lại và trông giống nhau.

Khởi tạo

Người chơi = P, Chunk = -:

  ---  
 --P-- 
  ---  

Phong trào cầu thủ

Chunk không tải = X; mỗi hình minh họa diễn ra sau vài giây kể từ lần cuối cùng.

                   ---
  --- | --P | --P--
 --P-- | ----- | XX ---
  --- | --- | XXX
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.