Trong động cơ của tôi, tôi tạo địa hình vô hạn với việc sử dụng thuật toán nhiễu Perlin được tính toán trên CPU.
Tạo địa hình như thế này:
- Nếu máy ảnh gần bản vá không tải, hãy tạo nó
- Tính toán mảng nhiễu 513x513 với các ranh giới đã cho
- Tính toán chuẩn, tiếp tuyến, nhị phân, chỉ số
- Truyền dữ liệu cho vbo
Ưu điểm:
- Chỉ cần được kết xuất khi cần
- Dễ va chạm
Con
- Các bản vá chậm 64 513x513 được tạo trong 3,1 giây (một luồng). Đối với mỗi ô tạo ra tiếng ồn ~ 20ms, đỉnh ~ 25ms, quy tắc, tiếp tuyến, bitangent, chỉ số. Khi camera di chuyển nhanh, người dùng có thể nhận thấy tải gạch.
- tiêu thụ bộ nhớ ???
Bây giờ tôi đã tự hỏi làm thế nào để tăng tốc độ này bằng cách tạo địa hình hoàn toàn trên GPU Nhưng có một số nghi ngờ:
- Nếu các shader chạy mọi khung hình, thì đây có phải là sự lãng phí năng lượng tính toán để tính toán tiếng ồn nhiều lần không? Điều này có thể tránh được bằng cách ghi kết quả vào kết cấu RBGA và được sử dụng sau này trong shader đỉnh để dịch chuyển, nhưng tăng mức sử dụng bộ nhớ. Mặt khác, nếu việc tạo ra sẽ siêu nhanh, chỉ có các ô hiển thị sẽ nằm trong bộ nhớ. Tuy nhiên, bộ đệm tách rời gây ra đồng bộ hóa gpu-cpu có thể làm chậm ứng dụng (tôi có đúng không?)
- Nếu địa hình chỉ là một lưới phẳng được dịch chuyển bởi bộ đổ bóng đỉnh, thì công việc tương tự cần được thực hiện trên CPU để tính toán chiều cao và bình thường tại điểm đã cho khi va chạm.
- Đây chỉ là một khái niệm, nhưng để tăng tốc mọi thứ, tôi đã nghĩ về việc chiếu lưới trên khung nhìn để chỉ sử dụng số lượng đỉnh tối thiểu. Bạn có nghĩ rằng điều này sẽ làm việc?
Câu hỏi cuối cùng của tôi là:
Kỹ thuật nào tốt nhất / nhanh nhất / được sử dụng rộng rãi để tạo địa hình vô hạn trên GPU?