2009-06-12 36 views
31

Tôi đã đọc rất nhiều về việc sử dụng tiềm năng của octrees thưa thớt voxel trong các công cụ đồ họa trong tương lai.octrees thưa thớt voxel là gì?

Tuy nhiên, tôi không thể tìm thấy thông tin kỹ thuật về chúng.

Tôi hiểu voxel là gì, tuy nhiên tôi không biết octrees voxel thưa thớt là gì hoặc chúng hiệu quả hơn các kỹ thuật đa giác hiện đang sử dụng như thế nào.

Ai đó có thể giải thích hoặc chỉ cho tôi giải thích về điều này?

Trả lời

26

Dưới đây là một đoạn về id Software on this subject.

id Tech 6 sẽ sử dụng một kỹ thuật cao cấp hơn mà xây dựng dựa trên ý tưởng MegaTextures và virtualizes cả hình học và các kết cấu để có được hình dạng độc đáo xuống tương đương với Texel: Voxel Octree (SVO) thưa thớt.

Nó hoạt động bằng cách chiếu hình học được đại diện bởi voxels (thay vì hình tam giác) được lưu trữ trong một octree.

Mục đích là để có thể truyền các phần của quãng tám vào bộ nhớ video, đi xa hơn dọc theo cây cho các đối tượng lân cận để cung cấp thêm chi tiết và sử dụng voxels cao hơn, lớn hơn cho các đối tượng khác. hệ thống mức chi tiết (LOD) tự động cho cả hình học và kết cấu cùng một lúc.

Cũng here's a paper on this.

Tìm thấy thêm thông tin trong great blog entry.

Vâng này, voxels một mình không phải là thú vị, bởi vì đối với bất kỳ lý chi tiết mô hình, bạn sẽ cần một lượng rất lớn các voxels (nếu sử dụng lưới đồng nhất).

Vì vậy, một hệ thống phân cấp là cần thiết, mang đến cho chúng tôi đến bát độ. Một octree là một cấu trúc dữ liệu không gian rất đơn giản, mà chia nhỏ mỗi nút thành 8 subnodes lớn như nhau.

Một octree thưa thớt là một octree nơi mà hầu hết các nút là trống rỗng, tương tự như các ma trận thưa thớt mà bạn nhận được khi discretizing Differential Equations

+0

tôi đã đọc trước đó nhưng điều đó thực sự không cung cấp bất kỳ chi tiết kỹ thuật cứng nào. như những gì 'thưa thớt' về cây cối? tại sao octree và không phải cây nhị phân hay cây 'hexa'? – pdeva

+0

Cập nhật với một bài báo về điều này. –

+1

Chúng được gọi là octree vì không gian được chia thành 8 không gian con có kích thước bằng nhau mỗi lần. – schnaader

4

trên thực tế, các 1,15 bit làm cho tôi nghi ngờ họ chỉ lưu trữ những thứ tuần tự, trong một số cách đơn giản rực rỡ. có nghĩa là, nếu chúng chỉ lưu trữ dữ liệu khối lượng và không phải là dữ liệu màu hoặc kết cấu.

suy nghĩ về nó như thế này: 1 voxel chỉ cần phải là 1 bit: là nó có hoặc là nó không có? (có hoặc không, nói cách khác: P). nút octree nó được tạo thành từ 8 voxels và một chút để lưu trữ cho dù điều có chứa bất cứ điều gì cả. đó là một bit cho mỗi voxel cộng một cho mỗi 8. 1 + 1/8 = 1,125. thêm một nút cha khác với 7 anh chị em và bạn nhận được 1 + 1/8 + 1/8/8 = 1,140625. đáng ngờ gần với 1,15 họ đã đề cập. mặc dù tôi có lẽ là cách tắt, nó có thể cung cấp cho ai đó một số đầu mối.

+0

1 + 1/8 + 1/8/8 + 1/8/8/8 + 1/8/8/8/8 + 1/8/8/8/8/8 + 1/8/8/8/8/8/8 + 1/8/8/8/8/8/8/8 + 1/8/8/8/8/8/8/8/8 + 1/8/8/8/8/8/8/8/8/8 = 1.14285714179277420043 – nonchip

+0

đã thực hiện một số tính toán, 1.14285714285714285705 là giá trị chính xác nhất mà tôi nhận được với máy tính cơ bản của GNU và mathlib. Tôi đoán chúng ta có thể làm việc với điều đó. – nonchip

+0

@nonchip Sum từ 0 đến Inf (1/(8^n)) == 8/7 bit trên mỗi voxel. Nhưng bạn thực sự có thể làm tốt hơn đại diện cho các tọa độ không gian thưa thớt ngắn gọn với 9/8 bit trên mỗi voxel. Bạn có thể sử dụng một mảng của một mảng gồm 8 đơn vị 9 bit được thu thập liên tục thành một siêu đơn vị 72 bit (64 voxels). Trong đơn vị 9 bit, bit 0 chuyển đổi nếu nút octree hạ xuống sâu hơn thông qua 8 con của nó (có nghĩa là một siêu đơn vị 72 bit khác được nối vào mảng) hoặc đột ngột kết thúc (cho phép thưa thớt), với bit 1-8 toggling voxels hiện tại của trẻ em . Chỉ số thanh lịch từ tọa độ voxel thành màu/họa tiết LUT. – user13972

1

Bạn thậm chí có thể chỉ đơn giản là raster tất cả các điểm, bạn cần raytrace hoặc raycast những ngày này, kể từ khi thẻ video có thể dự án số tiền khiêu dâm của các điểm. Bạn sử dụng một hình bát giác vì hình dạng khối lập phương của nó, liên tục chia làm các hình khối nhỏ hơn và nhỏ hơn. (voxels) Tôi có một động cơ trên đường bây giờ bằng cách sử dụng một kỹ thuật rastered và tìm kiếm của nó tốt. Đối với những người nói rằng bạn không thể animate voxels tôi nghĩ rằng họ thực sự havent nghĩ nhiều về chủ đề, tất nhiên nó có thể.Như tôi thấy, làm cho thế giới là rất nhiều như "vô hạn 3d-coat" vì vậy nhìn lên áo 3d và thiết kế cấp độ sẽ rất giống với cách chương trình này hoạt động. Độ phân giải chính liên quan đến tốc độ truyền không đủ nhanh, việc rám nắng hoặc rastering không hoàn toàn tạo ra 60 khung hình/giây và vẽ các đối tượng voxel thực tế rất tốn kém tính toán, tại thời điểm này tôi có thể vẽ một quả cầu 1024x1024x1024 trong khoảng 12 giây, Nhưng tất cả những vấn đề này có thể được khắc phục, một tương lai thú vị của nó. Kích thước tối đa của tôi vào thời điểm này là một meg bởi một meg bởi một meg, nhưng tôi thực sự có thể làm cho nó 8 lần lớn hơn này. Tất nhiên các vấn đề khác mà thực sự là khá nghiêm trọng là phải mất khoảng 100 meg để lưu trữ một nhân vật 8192x8192x8192 ngay cả sau khi nén, do đó, một môi trường sẽ được nhiều hơn thế này. Mặc dù, nói rằng bạn sẽ có các ký tự 8192x8192x8192 hoàn toàn vô lý so với những gì chúng ta thấy trong trò chơi ngày nay ... toàn bộ thế giới đã từng là 8192x8192x8192 :)

Làm thế nào bạn làm điều đó bằng cách chỉ lưu trữ bit trên mỗi con trỏ được xây dựng tại thời gian chạy trong bộ nhớ video ... có được tâm trí của bạn xung quanh đó và bạn có thể có động cơ của riêng bạn. :)

17

một octree có 8 người hàng xóm vì nếu bạn tưởng tượng một hình vuông, được cắt thành 4/4 bình đẳng như vậy

______________ 
|  |  | 
|  |  | 
|_____|______| 
|  |  | 
|  |  | 
|_____|______| 

sau đó nó sẽ là một "quad" (bốn) -cây.

nhưng trong 3 kích thước, bạn có cho mình, một khối lập phương, chứ không phải sau đó một hình vuông, vì vậy cắt nó theo chiều ngang, chiều dọc, và dọc theo trục Z, bạn sẽ tìm thấy 8 khối chứ không phải sau đó 4 như vậy

_____________ 
/ / /| 
    /-----/-----/ | 
/_____/_____/ | | 
|  |  | |/| 
|-----|-----|/| | 
|  |  | |/ 
|_____|_____|/ 

hy vọng rằng làm từ ..

những gì làm cho SVO độc đáo, là nó lưu trữ thông tin voxel, mà là một điểm trong không gian, có các tính chất như màu, bình thường, vv ..

ý tưởng đằng sau SVO là bỏ qua hình tam giác và nhu cầu kết cấu, bằng cách đặt t kết hợp với nhau thành một SVO đơn có chứa Tam giác Voxelized (Mô hình) và bề mặt của nó kết cấu tất cả trong một đối tượng.

Lý do một octree là cần thiết ở đây, là trường hợp một cấu trúc lưới điện thống nhất sẽ đòi hỏi xa để nhớ nhiều cho card đồ họa để xử lý hiện có ..

nên sử dụng SVO cho phép một loại 3D Mip-Mapped texture ..

mipmapping về cơ bản là hình ảnh tương tự, nhưng tại sự khác biệt quy mô, một trong đó có chi tiết hơn, và mới nhất trong đó có các chi tiết tối thiểu (nhưng nhìn khá tương tự từ một khoảng cách)

cách mà gần đối tượng có thể truyền trực tiếp từ SVO với chi tiết hơn, trong khi các đối tượng tiếp tục phát trực tuyến với ít chi tiết hơn. nếu bạn đang sử dụng Ray-Casting .. càng xa tia sáng từ máy ảnh, chúng tôi càng đào sâu vào Mega-Texture/SVO

Nhưng nếu bạn nghĩ bên ngoài hộp như "Euclideon" với "không giới hạn" -detail ", bạn sẽ chỉ sử dụng cắt bực bội, và giao điểm máy bay/aabb, với tia UV dự kiến ​​của biển quảng cáo đã cắt của chúng tôi để tìm từng màu của texels trên màn hình, trái ngược với chiều rộng * Chiều cao pixel, chụp tia, với" tối ưu hóa chùm "ngây thơ của nvidia ".

PS (chủ đề sắp xếp): cho bất kỳ ai không hiểu Euclideon làm shi như thế nào, tôi tin đó là giải pháp thực tế nhất và tôi có lý do để sao lưu (rằng họ KHÔNG dùng ray casting)

Bí ẩn lớn nhất mà họ có, không hiển thị, nhưng lưu trữ dữ liệu của họ .. RLE chỉ đơn giản là không cắt nó ..bởi vì một số dữ liệu về khối lượng/voxel có thể ngẫu nhiên hơn và ít "rắn" hơn, trong đó RLE là vô dụng, việc nén cho tôi thường đòi hỏi ít nhất 5 byte vào bất kỳ thứ gì ít hơn. họ nói rằng họ sản xuất khoảng một nửa của những gì được đưa vào) thông qua nén của họ .. vì vậy họ đang sử dụng 2,5 byte, mà là về giống như một Tam giác bây giờ-adays

Các vấn đề liên quan