Thao tác chia lưới trên GPU vs CPU


9

Chỉ cần tò mò một chút - bạn thực hiện các thao tác lưới ở đâu, trên CPU hoặc trong trình đổ bóng? Tôi đã làm mọi thứ trên CPU và một người bạn đề nghị chuyển mọi thứ sang phía GPU.

Nếu bạn đang làm những việc như hoạt hình xương ... trên GPU, làm thế nào để bạn lấy lại lưới? (vì tôi đang phát hiện va chạm ...)

Câu trả lời:


13

Điều này thường xảy ra trên GPU, nhưng có sự đánh đổi cho cả hai và tùy bạn quyết định cái nào sẽ hoạt động tốt nhất cho bạn.

Thực hiện thao tác trên GPU có nghĩa là bạn chỉ cần gửi dữ liệu lưới một lần, sau đó bạn có thể gửi biến đổi ma trận để làm biến dạng nó. Điều này thật tuyệt vời vì nó làm giảm đáng kể băng thông cần thiết giữa CPU-> GPU. Điều đó cũng có nghĩa là bạn có thể tải lên chỉ một bản sao của lưới lên GPU và áp dụng các biến đổi cho nhiều trường hợp khác nhau của lưới. Tuy nhiên, khó có va chạm "lưới chính xác" hơn. Vì các biến đổi được thực hiện trên GPU, bạn không có sẵn chúng để kiểm tra trên CPU.

Thực hiện thao tác trên CPU có nghĩa là bạn có quyền truy cập vào lưới được chuyển đổi. Bạn có thể truy cập mọi thứ bạn cần biết về nó. Tuy nhiên, điều đó có nghĩa là bạn cần tải toàn bộ lưới đó lên GPU từng khung. Điều đó cũng có nghĩa là bạn phải tải lên một lưới được chuyển đổi cho mỗi phiên bản của lưới đó. Tóm lại đây không phải là danh sách đầy đủ các ưu và nhược điểm.

  • Ưu điểm cho GPU

    • Tải lên dữ liệu lưới một lần
    • Chuyển đổi nó cho nhiều trường hợp
    • Chỉ cần gửi các biến đổi ma trận
    • GPU rất tốt trong việc song song hóa các loại điều này
  • Nhược điểm cho GPU

    • Các lưới biến đổi không có sẵn để thử nghiệm trên CPU
  • Ưu điểm cho CPU

    • Các lưới biến đổi có sẵn để thử nghiệm va chạm và bất cứ điều gì khác cần thiết.
  • Nhược điểm cho CPU

    • Cần tải lên toàn bộ lưới biến đổi từng khung
    • Cần tải lên toàn bộ lưới cho mỗi phiên bản của lưới

Tuy nhiên, có nhiều cách để khắc phục nhược điểm của GPU.

  • Không có va chạm chính xác lưới . Sử dụng một cái gì đó "đủ gần" như một hộp giới hạn cho toàn bộ lưới hoặc có các hộp giới hạn cho mỗi xương của lưới. Dưới đây là sử dụng trên các biến đổi GPU cho lưới và trên CPU biến đổi cho các hộp giới hạn căn chỉnh trục đại diện cho lưới. Bạn thậm chí có thể nhận được giới hạn chính xác hơn bằng cách sử dụng các AABB không.

xương yêu tinh

  • Chuyển đổi một bản sao của lưới trên CPU khi và chỉ khi cần va chạm chính xác với lưới . Sau khi va chạm hộp giới hạn đã trở lại đúng, hãy chuyển đổi một lưới để khớp với các biến đổi trên GPU, sau đó kiểm tra các va chạm với điều đó để có được dữ liệu va chạm chính xác hơn.

Tất cả trong tất cả tôi cho rằng bạn có thể thấy lý do tại sao việc biến đổi trên GPU lại phổ biến hơn


1
Vì tò mò, có thực sự thực tế cho các lưới được chuyển đổi trên CPU khi tính đến độ phức tạp của các lưới trong các trò chơi hiện đại, sức mạnh và khả năng đa lõi của CPU hiện đại và các nhiệm vụ khác mà CPU phải làm không? Ngoài ra, việc tải lên GPU chậm đến mức ý tưởng này thậm chí sẽ không được thực hiện?
R4D4

Nó sẽ phụ thuộc vào trò chơi, nhưng nó thường không thực tế đối với các trò chơi có độ phức tạp vừa phải. Khi có một lựa chọn dễ dàng như vậy để thực hiện các biến đổi trên GPU, thật khó để tìm ra lý do để biện minh cho các yêu cầu tài nguyên bổ sung khi thực hiện các biến đổi trên CPU. Vấn đề là nhiều hơn với việc gửi lưới được chuyển đổi tới GPU mọi khung hình, điều đó trở nên đắt đỏ nhanh chóng. Như thường thấy với phần mềm, nhà phát triển phải đưa ra quyết định giữa độ phức tạp và hiệu suất.
MichaelHouse
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.