2014-09-23 21 views
7

Tôi hiện đang làm việc trên một dự án WebGL, mặc dù tôi tưởng tượng câu hỏi này là chung chung trên nhiều API đồ họa.Chia sẻ các đỉnh giữa các khuôn mặt có đáng giá không?

Hãy để tôi sử dụng ví dụ về khối lập phương đơn giản để minh họa những gì tôi đang yêu cầu.

Khối lập phương có 6 mặt với 4 đỉnh trên mỗi khuôn mặt, vì vậy tổng cộng chúng tôi có 24 đỉnh tạo thành hình lập phương. Tuy nhiên, chúng ta có thể giảm tổng số đỉnh chỉ còn 8 nếu chúng ta chia các đỉnh giữa các khuôn mặt. Như tôi đã đọc, điều này có thể tiết kiệm rất nhiều bộ nhớ GPU quý giá đặc biệt là khi làm việc với các mô hình và cảnh phức tạp.

Mặt khác, tôi đã trải nghiệm trực tiếp một số nhược điểm với chia sẻ đỉnh giữa các khuôn mặt. Chúng bao gồm:

  • đỉnh Complex tính toán bình thường như chúng ta phải tìm ra 'trung bình' bình thường đối với mỗi đỉnh, có tính đến normals mặt của mỗi mặt mà nói đỉnh là một phần của.

  • Một số đỉnh phải được sao chép để 'khớp' với tọa độ UV tương ứng của chúng.

  • Là một đỉnh có thể được chia sẻ bởi nhiều khuôn mặt, chúng tôi không thể chỉ định một màu khác nhau cho mỗi khuôn mặt sử dụng cho mỗi màu đỉnh.

Cuốn sách Tôi đã được đọc thực sự nhấn mạnh tầm quan trọng của việc chia sẻ đỉnh để giảm thiểu sử dụng bộ nhớ, vì vậy khi tôi đi qua một số trong những nhược điểm của việc chia sẻ đỉnh Tôi đã không chắc chắn như thế nào khả thi/hữu ích đỉnh bóng thực sự là và khi tác giả không đề cập đến bất kỳ nhược điểm nào của việc chia sẻ đỉnh, tôi muốn nhận được ý kiến ​​của các bạn. Vậy là việc tiết kiệm bộ nhớ được tạo ra từ việc tô bóng đỉnh thực sự quan trọng?

Trả lời

5

Những nhược điểm bạn đặt tên thực sự là rất thực tế, đặc biệt là đối với các hình dạng có nhiều cạnh sắc nét hoặc họa tiết khác nhau. Một khối lập phương là ví dụ tồi tệ nhất có thể để chia sẻ đỉnh, mỗi đỉnh có 3 chuẩn khác nhau và có thể là tọa độ kết cấu. Nó là cơ bản không thể chia sẻ các đỉnh.

Tuy nhiên, hãy nghĩ đến một số hình dạng không phải trả tiền. Giống như một quả bóng, cơ thể của một số động vật, xe hơi, cây cối hay thậm chí một cái gì đó đơn giản như sa mạc hay gì đó. Những hình dạng này có thể cần một số lượng lớn các đỉnh để trông giống như bất cứ điều gì phong nha, nhưng rất nhiều các đỉnh được chia sẻ giữa các khuôn mặt. Họ cần chính xác cùng một normals, kết cấu tọa độ và whatevers để trông mịn.

Hơn nữa, bất lợi đầu tiên không thực sự quan trọng. Tính toán các đỉnh có thể được thực hiện trong quá trình tiền xử lý, trong hầu hết các trường hợp, ngay cả bởi người mod. Điều này về cơ bản không bao giờ được thực hiện theo thời gian thực, thay vào đó bạn chỉ đơn giản là đã có nó trong định dạng này. Tuy nhiên nếu nó cần phải được thực hiện thời gian thực, bạn có thể tưởng tượng điều này trở thành một vấn đề thực tế, và bạn cần phải bắt đầu suy nghĩ về việc cắt giảm giao dịch và hồ sơ. Nhưng thậm chí sau đó nó có thể có thể được xử lý bằng cách sử dụng shader hình học, nếu sự trung thực thị giác là cần thiết này có thể là một giải pháp thích hợp hơn.

Kết luận phụ thuộc rất nhiều vào những gì bạn đang làm. Trong một số trường hợp, chia sẻ đỉnh không thực sự khả thi vì những lý do bạn đã đề cập. Bất kể, trong nhiều trường hợp, nó có khả năng tiết kiệm rất nhiều bộ nhớ.

+1

Cảm ơn câu trả lời của bạn. Tôi chỉ giả định rằng tất cả các đối tượng được xử lý chính xác theo cùng một cách khi được nhập khẩu, nhưng tôi đoán một động cơ có thể được sửa đổi để xử lý các cấp chia sẻ đỉnh khác nhau. Bạn nhấn móng tay trên đầu khi bạn đề cập đến một khối lập phương - đó là hình dạng gây ra cho tôi những vấn đề.Vì vậy, nếu tôi thực hiện điều này trong công cụ của mình, bạn nên thêm chức năng để nhập các đối tượng có mức độ chia sẻ đỉnh tùy chỉnh, để các đối tượng đó, chẳng hạn như hình khối, có thể được xử lý chính xác, trong khi nhiều đối tượng hữu cơ sử dụng mức độ chia sẻ cao? – Armada

+1

Chắc chắn, chia sẻ đỉnh là tương đối đơn giản, và nên chắc chắn là tùy chọn/biến trong động cơ. Cho phép bạn chia sẻ (hoặc không chia sẻ) bất kỳ đỉnh nào theo ý muốn là điều cần thiết trong việc tối ưu hóa việc sử dụng bộ nhớ. – Invalid

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