Chỉnh sửa: Đây chỉ là kinh nghiệm học tập của riêng tôi, nó KHÔNG phải vì lý do hiệu suất mà tôi đặt câu hỏi này.
Điều này liên quan đến một động cơ địa hình giống như Minecraft. Tôi lưu trữ các khối trong khối (khối 16x256x16 trong một khối). Khi tôi tạo ra một đoạn, tôi sử dụng nhiều kỹ thuật thủ tục để đặt địa hình và đặt các đối tượng. Trong khi tạo, tôi giữ một mảng 1D cho toàn bộ khối (rắn hoặc không) và một mảng khối 1D riêng biệt.
Sau thế hệ, tôi lặp lại qua các khối rắn kiểm tra hàng xóm của họ để tôi chỉ tạo các mặt khối không có hàng xóm rắn. Tôi lưu trữ khuôn mặt nào sẽ tạo trong danh sách của riêng họ (đó là 6 danh sách, mỗi khuôn mặt có thể / bình thường). Khi kết xuất một đoạn, tôi kết xuất tất cả các danh sách trong đoạn hiện tại của máy ảnh và chỉ các danh sách đối diện với máy ảnh trong tất cả các đoạn khác. Tôi làm điều này bằng cách lưu trữ tất cả 6 danh sách trong một bộ đệm, sau đó tôi chỉ cần thay đổi phạm vi tôi vẽ.
Sử dụng một 2D atlas với này lừa shader chút Andrew Russell đề nghị, tôi muốn kết hợp khuôn mặt tương tự nhau hoàn toàn. Đó là, nếu chúng nằm trong cùng một danh sách (giống nhau bình thường), liền kề nhau, có cùng mức độ ánh sáng, v.v ... Tôi biết tôi vẫn sẽ kết thúc với hình chữ nhật, nhưng nó sẽ dễ dàng giảm 50% số đỉnh của tôi hoặc tốt hơn nếu ước tính của tôi là chính xác.
Giả định của tôi sẽ có mỗi danh sách trong số 6 danh sách được sắp xếp theo trục mà chúng nằm trên, sau đó theo hai trục còn lại (danh sách cho đỉnh của một khối sẽ được sắp xếp theo giá trị Y, sau đó là X, sau đó là Z).
Chỉ với điều này, tôi có thể dễ dàng hợp nhất các dải khuôn mặt, nhưng tôi đang tìm cách hợp nhất nhiều hơn là chỉ các dải với nhau khi có thể. Tôi đã đọc về thuật toán chia lưới tham lam này , nhưng tôi gặp nhiều khó khăn để hiểu nó.
Vì vậy, câu hỏi của tôi: Để thực hiện hợp nhất các khuôn mặt như được mô tả (bỏ qua liệu đó có phải là một ý tưởng tồi cho địa hình / ánh sáng động), có lẽ có một thuật toán đơn giản hơn để thực hiện không? Tôi cũng sẽ khá vui vẻ chấp nhận một câu trả lời đưa tôi qua thuật toán tham lam theo cách đơn giản hơn nhiều (một liên kết hoặc giải thích).
Tôi không ngại giảm hiệu suất một chút nếu nó dễ thực hiện hơn hoặc thậm chí nếu nó chỉ tốt hơn một chút so với chỉ thực hiện các dải. Tôi lo lắng rằng hầu hết các thuật toán tập trung vào hình tam giác chứ không phải hình tứ giác và sử dụng tập bản đồ 2D theo cách của tôi, tôi không biết rằng tôi có thể thực hiện một hình tam giác nào đó dựa trên các kỹ năng hiện tại của mình.
PS: Tôi đã cullull cull mỗi chunk và như được mô tả, tôi cũng cull mặt giữa các khối rắn. Tôi không tắc nghẽn cull chưa và có thể không bao giờ.
* Chỉnh sửa: Tôi đã thực hiện kỹ thuật nhỏ của riêng mình, có thể có tên, nhưng tôi chỉ cần xem qua 6 danh sách được sắp xếp theo các trục mà chúng nằm trên, theo sau là loại khối và sau đó là mức độ chiếu sáng. Tôi lặp lại qua chúng, tạo ra các hình chữ nhật mới khi tôi đi và phát triển chúng đồng thời (với sự thiên vị nặng nề đối với một trục nhất định). Nó chắc chắn là không tối ưu, nhưng nó thực sự khá nhanh và nó làm giảm trung bình đỉnh của tôi xuống gần 50%. Nhận xét của Byte56 là tủ quần áo tôi nghĩ đến một câu trả lời thực sự, nhưng tôi không thể chọn nó cho câu trả lời / tiền thưởng.
Đây là cách nhanh chóng và đơn giản của tôi Tôi đang xử lý vấn đề này SAU khi tạo ra địa hình ban đầu đầy đủ mà không có bất kỳ tối ưu hóa nào. Giả sử tất cả các hình vuông được đưa ra là cùng một hình ảnh, mức độ ánh sáng, bình thường, v.v. mỗi màu là một hình tứ giác khác nhau tôi sẽ đưa ra. Với danh sách của tôi được sắp xếp theo cách của họ, đây là một cách tiếp cận rất dễ dàng / nhanh chóng.