Bộ phận Octree


7

Tôi có một octree, với một con thỏ poly cao bên trong nó, và một nền tảng 12 đa giác.

Thỏa thuận này là. Bạn đang bắn một tia vào con thỏ. Anh ấy tất nhiên né tránh (hoặc bạn bỏ lỡ).

bắn thỏ

Các tia màu vàng là tia laser tử thần của bạn.

Các tam giác "ứng cử viên" được chọn do các phần của quãng tám bạn nhấn được hiển thị bằng màu tím.

bắn thỏ 2

Vì vậy, rõ ràng bạn có sự phân chia này xảy ra, bởi vì nút gốc đã bị tấn công, cuối cùng bạn đã kiểm tra bất kỳ polys nào trong nút gốc. Và các polys nằm trên đường viền của phân khu octree kết thúc ở nút gốc, với thuật toán phân chia tôi đang sử dụng.

Vì vậy, tôi muốn giảm số lượng polys trong nút gốc.

Nếu tôi chỉ di chuyển con thỏ đến góc, thỏ góc

Với chú thỏ ở góc raytracing, toàn bộ cảnh mất 1/3 thời gian (35 giây so với 95 nếu chú thỏ ở giữa). Tôi tin rằng điều này là do ít hình tam giác của chú thỏ nằm trong thư mục gốc và các lần truy cập gốc của octree kiểm tra ít đa giác hơn.

Tôi đang khảo sát các cách để cải thiện hiệu suất. Về cơ bản để đẩy tris càng xa cây càng tốt, để các đối tượng chủ yếu ở trong lá.

Tôi đã thử làm điều này một cách ngây thơ, và sử dụng thuật toán phân chia này mà tôi đã tạo nên:

split root into 8 CANDIDATE CHILDREN
foreach TRI in root:
  foreach of the 8 CANDIDATE CHILDREN
    if the CANDIDATE CHILD partially contains TRI (at least one vertex of TRI)
      add TRI to CANDIDATE CHILD
CLEAR tris in root

Điều này đẩy các hình tam giác xuống thứ bậc vào các nút lá. Nhưng tôi nhận được lỗ hổng từ các góc độ nhất định, với các mẫu bỏ lỡ kỳ lạ:

(hy vọng) cảnh vô vọng

lỗ từ một góc:

lỗ từ một góc

cùng cảnh, góc khác nhau:

cùng một cảnh, góc khác nhau

Tôi nghĩ rằng đó là vì tôi đang xóa gốc. (Bởi vì khi tôi không xóa gốc, raytracing hoạt động chính xác, mọi góc độ)

Tôi đã "đẩy" các đa giác xuống cây một cách chính xác chưa? Có ai có thể đoán tại sao tôi có lỗ không?

Làm thế nào để bạn cải thiện hiệu suất của octree của bạn?

Tôi có phải chia các hình tam giác không? Tôi đang cố gắng tránh điều đó, vì vậy tôi không nhận được các hình tam giác mỏng hơn và mỏng hơn / nhân hình học cảnh nhiều hơn tôi cần.

Tôi cũng nhận thức được rằng cây KD và chúng nên vượt trội hơn quãng tám, nhưng chúng cũng yêu cầu chia poly, tôi thực sự đang tìm cách cải thiện quãng tám của mình ở đây.


2
Người nguyên thủy phải luôn ở trong lá. Ngoài ra, hãy cân nhắc sử dụng Cây B + với phân vùng không đồng nhất (hình khối trong hình khối không cần phân phối đều) và phân vùng không gian tùy theo nó có nguyên thủy hay không. Ngoài ra -1 để bắn tia tử thần vào những con thỏ vô tội :).
Jonathan Dickinson

Tôi nghĩ phần 'chỉnh sửa' của bạn đã trả lời khá nhiều câu hỏi của riêng bạn; bạn nên đăng nó như một câu trả lời, và chấp nhận nó.
Trevor Powell

Câu trả lời:


2

Tôi hiểu tại sao tôi nhận được lỗ. Tôi đang sử dụng sơ đồ ngăn chặn một phần tam giác AABB xấu: AABB "chứa một phần" một tam giác nếu AABB chứa ít nhất một đỉnh của tam giác. hầu hết trống rỗng

E là "trống rỗng", theo sơ đồ phát hiện "Tam giác một phần trong AABB" xấu.

Tôi đoán điều này có nghĩa là nếu bạn muốn đẩy mọi thứ xuống các nút lá, bạn phải chia các hình tam giác.


4
Tách các hình tam giác, hoặc đẩy hình tam giác vào mỗi nút lá mà chúng giao nhau; không chỉ những cái có chứa đỉnh của chúng.
Trevor Powell
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.