Sử dụng phao hoặc đôi khi viết trò chơi di động


8

Tôi biết đối với shader, phao nên được sử dụng vì chúng là lựa chọn tối ưu cho hiệu suất. Nhân đôi chậm và sử dụng nhiều bộ nhớ hơn không lý tưởng cho các shader. Trong khi phao ít chính xác hơn và có xu hướng nổi chồng lên nhau, sự đánh đổi về tốc độ là lý tưởng trên phần cứng di động.

Nhưng những gì về mọi nơi khác trong cơ sở mã không liên quan đến đường ống đổ bóng? Tôi đang viết một công cụ và sử dụng nhân đôi cho đánh dấu cập nhật delta và cố gắng giữ tất cả các đơn vị liên quan đến loại dữ liệu đó để có nhiều nơi sử dụng gấp đôi. Tôi có nên sử dụng phao trên thiết bị di động không?

Công cụ này được viết bằng ngôn ngữ C ++


Tôi tưởng tượng nó phần lớn phụ thuộc vào ngôn ngữ bạn đang sử dụng.
DJ Spicy Deluxe

Đã thêm C ++ trong phần mô tả
Dan

Câu trả lời:


14

Bạn sẽ khó có thể tìm thấy một GPU di động có thể sử dụng gấp đôi ngay cả khi bạn muốn, do đó, một phần của sự lựa chọn được thực hiện cho bạn.

Chỉ có một vài nơi mà bạn có thể hưởng lợi từ việc chuyển đổi từ các phao chính xác đơn trong trò chơi của mình:

Đây sẽ là hai ví dụ phổ biến nhất về những thứ bạn không nên lưu trữ trong một phao có độ chính xác đơn, bởi vì chúng mất độ chính xác đáng kể trong phạm vi bạn cần che (trong giây đầu tiên của trò chơi, bạn có thể đại diện cho thời gian trôi qua thời gian trong vòng giây hoặc hàng chục nano giây, nhưng sau 2,5 giờ, bạn bắt đầu mất độ chính xác đến mili giây)2-24

Nhưng điều đó không có nghĩa là bạn cần sử dụng gấp đôi. Các kiểu số nguyên có thể xử lý các giá trị này tốt. (Một int 32 bit có thể cung cấp cho bạn độ chính xác mili giây trong 12 ngày chơi liên tục. Các int 64 bit sẽ tồn tại hàng triệu năm)

Một đồng bằng giá trị thời gian thường sẽ vào thứ tự của 16 mili giây, vì vậy lưu trữ nó trong một phao chính xác duy nhất mang đến cho bạn chính xác đến khoảng s, mà vẫn còn xuống đến mức độ nano giây - tức. có lẽ vượt xa độ chính xác mà bạn có thể tin cậy thời gian mã của mình, báo hiệu chủ đề của bạn hoặc điều phối làm mới đồ họa của bạn bằng mọi cách. Thêm độ chính xác ở đây với một cú đúp không có khả năng cải thiện trò chơi của bạn theo bất kỳ cách nào có thể đo lường được.2-29

Vì vậy, bạn có thể lưu trữ tổng thời gian đã trôi qua với độ chính xác cao hoặc sử dụng loại số nguyên, tính toán delta của bạn và chuyển đổi thành float chính xác một lần trên mỗi khung hình, sau đó sử dụng float một cách vui vẻ từ đó.

Tương tự cho các vị trí. Ngay cả với một thế giới rộng lớn, nếu bạn chia nó thành nhiều phần hoặc dài hơn vài km, thì những chiếc phao chính xác duy nhất có thể xác định vị trí so với phần gốc của nó với độ chính xác nhỏ hơn một milimet .

Độ lệch tương đối giữa các đối tượng (đối với các tiêu đề điện toán và tương tự) nói chung chỉ tốt để lưu trữ trong một phao thậm chí ra khoảng cách lớn. Lỗi tương đối của bạn, so với tổng chiều dài của vectơ, nằm trong phạm vi được kiểm soát.

Vì vậy, không có nhiều lý do để tăng gấp đôi như một mặc định. Tôi sẽ xem xét rằng chỉ khi bạn có một nhu cầu rất đặc biệt, trong đó bạn đã tính toán độ chính xác của phao sẽ không cắt nó và giữ cho việc sử dụng đôi của bạn chỉ dành cho một phần của trò chơi mà bạn chủ động cần nó.

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.