2017-03-31 17 views
6

Tôi đang sử dụng three.js để hiển thị biểu diễn voxel dưới dạng tập hợp các hình tam giác. Tôi đã có nó làm cho 5 triệu hình tam giác thoải mái nhưng điều đó dường như là giới hạn. bạn có thể xem trực tuyến here.hiển thị hàng triệu voxels bằng cách sử dụng kết cấu 3D với ba.js

chọn mô hình Dublin ở độ phân giải 3 để xem nhiều hình tam giác được vẽ.

screenshot

Tôi đã sử dụng mọi thủ đoạn để có được nó xa này (hình học đệm, voxel tiêu huỷ, nhiều bộ đệm) nhưng tôi nghĩ rằng nó đã đạt số tiền tối đa mà OpenGL tam giác có thể thực hiện.

Số lượng lớn voxels thường được hiển thị dưới dạng bộ ảnh trong kết cấu 3D và trong khi có một số bài viết về cách kết cấu 2d thành hoạ tiết 3D nhưng dường như chúng có giới hạn tối đa về kích thước họa tiết.

Tôi đã tìm kiếm các hướng dẫn hoặc ví dụ sử dụng cách tiếp cận này nhưng chưa tìm thấy bất kỳ hướng dẫn nào. Có ai đã sử dụng phương pháp này trước đây với ba.js

+2

Tôi nghĩ bạn đã hết may mắn khi cố gắng hiển thị chúng trực tiếp. Bạn có thể cần một số loại hệ thống LODING, một số cách để hiển thị chi tiết hơn đóng lên và ít chi tiết hơn trong khoảng cách. [Đây là một trình xem dựa trên dữ liệu chuyên sâu khác] (http://potree.org/demo/potree_1.3/showcase/ca13.html), khi bạn phóng to, bạn sẽ thấy nó tải chi tiết hơn. Có vẻ như nếu bạn chọn "Apparence-> Materials-> Tree Depth", nó sẽ cho bạn thấy các LOD. – gman

+0

Cảm ơn bạn đã liên hệ lại với tôi. Nó thực sự được xây dựng trên một mô hình LOD bằng cách sử dụng một biến thể của octrees và Potree đã truyền cảm hứng cho tôi để làm một trình xem dựa trên web. Tôi nghĩ rằng tôi đã đạt đến giới hạn khó khăn của webgl khi hiển thị dữ liệu này. – jonathanbyrn

Trả lời

6

Cảnh của bạn được hiển thị hai lần vì SSAO cần kết cấu độ sâu. Bạn có thể sử dụng tiện ích mở rộng WEBGL_depth_texture - which have pretty good support - vì vậy bạn chỉ cần một lần hiển thị. Bạn có thể stil dự phòng thành low-perf-double-pass nếu tiện ích mở rộng không khả dụng.

Tài liệu của voxel của bạn là hai mặt. Nó có thể có mục đích, nhưng nó có thể tạo ra một sự rút tiền rất lớn.

Trong bản trình diễn của bạn, bạn sử dụng đèn MeshPhongMaterial và hướng. Đó là một vật liệu không cần thiết phức tạp. Hình học của bạn không có bất kỳ chuẩn mực nào để bạn không thể có bất kỳ ánh sáng nào. Cố gắng sử dụng một vật liệu không đơn giản hơn.

Mục tiêu của bạn là để render một số lượng lớn các đỉnh, vì vậy giả định tốc độ khung hình bị ràng buộc bởi vertex:

  • thử những thứ như https://github.com/GPUOpen-Tools/amd-tootle preprocess hình học của bạn. Tập trung vào bộ nhớ cache vertex vertex và cache vertex.

  • giảm băng thông được bộ đệm đỉnh của bạn sử dụng. Vì các đỉnh của bạn được căn chỉnh trên một "lưới", bạn có thể lưu trữ vị trí đỉnh như 3 Quần short thay vì 3 phao, giảm kích thước VBO của bạn xuống 2. Bạn có thể sử dụng một thủ thuật tương tự nếu bạn có tiêu chuẩn vì tất cả các chuẩn sẽ được căn chỉnh theo trục (hình khối))

  • thường làm giảm lượng varyings cần thiết bởi fragment shader

  • nếu bạn cần thuộc tính hơn vị trí chỉ vec3, sử dụng một đơn xen kẽ VBO thay vì một mỗi attrib.

+1

Cảm ơn bạn đã trả lời chi tiết. Hầu hết mã của tôi đã được sao chép từ các hướng dẫn mà không nhận ra hiệu ứng về thời gian xử lý.Tôi sẽ bắt đầu refactoring mã của tôi và nhìn vào di chuyển trên để kết cấu sâu và tiền xử lý các hình học. – jonathanbyrn

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