Ngân sách mô hình 3D. Điều gì quan trọng hơn số lượng hình tam giác hoặc đỉnh


12

Khi tôi tạo mô hình cho trò chơi 3D, tôi nên lấy số đo nào trong Đa giác ngân sách (hình tam giác) hoặc đỉnh của mình? Tôi đã thực hiện một thí nghiệm với hai bộ 40000 hình khối một với 8 đỉnh và 12 hình tam giác, một bộ khác có 24 đỉnh và 12 hình tam giác. Tất cả đã được thực hiện trong Unity và cả hai đều được tạo theo thủ tục. Thật ngạc nhiên, cả hai bộ đều thực hiện gần như giống nhau, có một sự khác biệt rất nhỏ giữa chúng.

Có nghĩa là tôi không nên lo lắng về số lượng đỉnh và chỉ nhìn vào số lượng tam giác?

EDIT: Tôi đã thực hiện một thí nghiệm khác, tôi đã tạo ra một mặt phẳng với 19602 tam giác và 10000 đỉnh và một đỉnh khác có cùng số lượng tirangles nhưng 39204 đỉnh. Tôi đã tạo ra 4000 của cả hai. Bây giờ ít đỉnh hơn giành được 14 khung hình / giây đến 19 khung hình / giây. Vì vậy, tôi đoán nói chung ít hơn là tốt hơn, nhưng chỉ trong sự khác biệt lớn.


9
Viết trò chơi của bạn và khắc phục các vấn đề khi chúng phát sinh. Loại vấn đề này có thể không bao giờ xuất hiện và bạn đang lãng phí thời gian của mình: P
Vaillancourt

Câu trả lời:


16

Chúng ta hãy tưởng tượng một lưới lưới lớn, giống như một lưới chúng ta có thể sử dụng cho địa hình. Chúng tôi sẽ hiển thị nhình tam giác có giá trị của nó, bao gồm một nửa màn hình 1080p của chúng tôi, trong một cuộc gọi rút thăm duy nhất.

Nếu chúng ta hàn tất cả các đỉnh của chúng ta và không có đường nối làm mịn / kết cấu, thì mỗi tam giác có 3 đỉnh và mỗi đỉnh được chia cho 6 tam giác, vì vậy chúng ta có n/2các đỉnh.

Để kết xuất này, chúng ta cần phải:

  • Chạy shader đỉnh ít nhất một n/2lần

    ("ít nhất" bởi vì bộ nhớ cache của chúng tôi cho kết quả đỉnh chỉ quá lớn. Đôi khi, cuối cùng chúng tôi sẽ gỡ bỏ một đỉnh mà chúng tôi đã chuyển đổi, sau đó cần một lần nữa cho một tam giác sau đó chia sẻ nó và do đó chạy lại trình tạo bóng đỉnh trên nó Vì vậy, chúng tôi không nhận được nhiều tiền tiết kiệm như trên giấy)

  • Clip & cull ntam giác.

  • Rasterize & nội suy trên ít nhất 1920x1080 / 2 hoặc khoảng 1 triệu pixel của bộ đệm khung (vì chúng tôi đã nói rằng địa hình của chúng tôi chiếm khoảng một nửa màn hình).

    ( "ít nhất" vì các GPU cách làm việc trên quads của pixel , một số mảnh vỡ ngay bên ngoài các cạnh của đa giác vẫn được rasterized nhưng sau đó đeo mặt nạ, có nghĩa là chúng tôi xử lý các mảnh vỡ hai lần. Đối với một gập ghềnh lưới chúng ta cũng sẽ nhận được mức vẽ quá bất cứ nơi nào lưới đôi khi chính nó, nếu chúng ta không đủ may mắn để vẽ đa giác phía trước vào bộ đệm sâu trước)

  • Chạy shader mảnh cho tất cả những người> = 1 triệu mảnh.

  • Trộn ~ 1 triệu kết quả vào bộ đệm khung & độ sâu.

Được rồi, bây giờ chúng ta hãy mở ra tất cả các đỉnh của chúng ta để bây giờ chúng ta có 3ncác đỉnh để kết xuất, gấp sáu lần so với trước đây! Các bước của chúng tôi là ...

  • Chạy shader đỉnh 3nlần.

    (Không có dấu sao do bộ đệm vì mỗi đỉnh chỉ được sử dụng một lần, mặc dù điều này có nghĩa là bộ đệm không thể cứu chúng tôi bất cứ lúc nào)

  • Clip & cull ntam giác.

  • Rasterize & nội suy trên ít nhất 1920x1080 / 2 hoặc khoảng 1 triệu pixel của bộ đệm khung.

  • Chạy shader mảnh cho tất cả những người> = 1 triệu mảnh.

  • Trộn ~ 1 triệu kết quả vào bộ đệm khung & độ sâu.

... Đợi đã, mọi bước trừ bước đầu tiên đều giống nhau! Vì vậy, hầu hết các công việc mà GPU thực hiện trong lệnh gọi rút thăm thông thường không liên quan trực tiếp đến số lượng đỉnh được sử dụng. Số lượng bảo hiểm màn hình, rút ​​tiền và tổng số tam giác chiếm nhiều hơn chi phí.

Điều đó không có nghĩa là đỉnh hoàn toàn miễn phí. Nếu bạn chia sẻ các đỉnh khi bạn có thể nhận được một số tiền tiết kiệm khiêm tốn từ bộ nhớ đệm, đặc biệt là nếu các trình tạo bóng đỉnh của bạn phức tạp hoặc đường ống đỉnh của phần cứng của bạn yếu (như trường hợp trên một số máy chơi game cũ). Nhưng với số lượng đỉnh theo dõi tỷ lệ thuận với số lượng tam giác cộng hoặc trừ đi một yếu tố không đổi, thường sẽ không thú vị bằng một thước đo chi phí lưới tổng thể.


Còn chi phí gửi những đỉnh đó vào bộ nhớ thì sao?
Michał Leszczyński

7
Trừ khi bạn thay đổi bộ đệm đỉnh của bạn mỗi khung hình, bạn sẽ trả chi phí tải lên đó một lần. Hoạ tiết và bộ đệm khung của bạn có khả năng là bộ nhớ video và băng thông lớn hơn trong bất kỳ khung nào. Điều đó vẫn có nghĩa là các đỉnh chắc chắn không miễn phí, và tốt hơn là chia sẻ chúng khi thực tế, nhưng các đỉnh không được chia sẻ sẽ hiếm khi là lý do khiến trò chơi hoạt động kém.
DMGregory

Sẽ thêm vào điều này, khi tôi đang làm rừng, vv trong trò chơi của tôi. Khi tôi bắt đầu, ban đầu tôi sử dụng các cuộc gọi rút thăm (tôi sử dụng công cụ của riêng tôi, điều này có thể không hoàn toàn phù hợp với câu hỏi của bạn) để vẽ các mô hình chỉ bằng các câu, điều này là ổn, hiệu suất vẫn ổn. Nhưng, khi tôi bắt đầu sử dụng lập chỉ mục, tôi đã có được sự cải thiện hiệu suất vì một số câu được chia sẻ và được lưu trong bộ nhớ cache, vì vậy một số tính toán không được thực hiện hai lần. Điểm mấu chốt là gì, bài kiểm tra thô đó chỉ là câu không phải là chỉ số tốt nhất so với số lần tri. Đường ống của bạn có thể bị ảnh hưởng bởi quá nhiều một trong hai. Như những câu trả lời khác ám chỉ.
ErnieDingo

2

Cũng không.

Trừ khi bạn đang nói về số lượng lớn tris (hàng triệu), điều bạn quan tâm là:

  • Số pixel được hiển thị
  • Chi phí của shader mảnh
  • Số lượng cuộc gọi rút thăm (với giới hạn mạnh tùy thuộc vào thiết bị).

24 đỉnh lần 4000 khối cho 96'000 đỉnh.

640x380 pixel cung cấp cho 243'200 mảnh và hầu hết các thiết bị đều hỗ trợ độ phân giải lớn hơn đáng kể.

Bạn có thể chạy lại thử nghiệm của mình với 1000'000 khối, được chia theo đợt để tránh tắc nghẽn cuộc gọi rút thăm (1 mô hình duy nhất cho 1000 khối).


2
Điều này phụ thuộc rất nhiều vào cảnh và cách bạn kết xuất. Nếu bạn có một cảnh tự nhiên có quá ít rút tiền, xử lý đỉnh chắc chắn có thể chi phối hiệu suất của bạn. Ngoài ra, số lượng cuộc gọi rút thăm không phải là vấn đề (đối với một số API) nhiều như trạng thái thay đổi giữa các cuộc gọi rút thăm.
Nicol Bolas

1

Đáng lưu ý rằng nếu bạn đang làm một ứng dụng WebGL, số lượng đỉnh nhanh chóng trở thành nút cổ chai về kích thước tệp để người dùng tải xuống. Cùng số lượng hình tam giác nhưng thường gấp 2-3 lần so với đỉnh được hiển thị trong phần mềm DCC. Unrapping tốt hơn có thể giúp rất nhiều trong trường hợp này bằng cách có ít đường may.

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.