2012-03-30 33 views
5

Tôi tạo một ứng dụng iPhone 3D sử dụng nhiều biển quảng cáo. Bộ đệm khung của tôi lớn gấp hai lần trên màn hình võng mạc vì tôi muốn tăng chất lượng của chúng trên iPhone 4. Vấn đề là các bộ đổ bóng phân đoạn tiêu thụ nhiều thời gian hơn do kích thước bộ đệm khung. Có cách nào để quản lý màn hình võng mạc và kết cấu độ nét cao mà không tăng độ chính xác của bóng đổ không?Tối ưu hóa bóng đổ cho màn hình võng mạc trên iOS

Trả lời

9

Nếu bạn đang kết xuất với bộ đệm khung ở độ phân giải đầy đủ của màn hình Retina, nó sẽ có độ phân giải gấp bốn lần pixel so với cùng vùng vật lý của màn hình không phải của Retina. Nếu bạn có tỷ lệ lấp đầy giới hạn do độ phức tạp của các trình đổ bóng, điều này sẽ khiến cho mỗi khung hình mất nhiều thời gian hơn để hiển thị.

Trước tiên, bạn sẽ muốn xác minh rằng bạn thực sự bị giới hạn bởi phần xử lý phân đoạn của đường dẫn hiển thị. Chạy công cụ trình điều khiển OpenGL ES đối với ứng dụng của bạn và xem số liệu thống kê sử dụng Tiler và Renderer. Nếu sử dụng Renderer gần 100%, điều đó cho biết rằng bạn bị giới hạn bởi các trình đổ bóng phân đoạn và khả năng tổng thể của bạn để đẩy pixel. Tuy nhiên, nếu bạn thấy tỷ lệ phần trăm Tiler Utilization của bạn ở đó, điều đó có nghĩa rằng bạn là hình học hạn chế và thay đổi độ phân giải màn hình sẽ không ảnh hưởng đến hiệu suất nhiều như giảm độ phức tạp và kích thước của dữ liệu đỉnh của bạn.

Giả sử rằng bạn bị giới hạn bởi trình đổ bóng phân đoạn, có một vài điều bạn có thể làm để cải thiện đáng kể hiệu suất trên GPU iOS.

Trong trường hợp của bạn, có vẻ như kích thước họa tiết có thể là vấn đề. Điều đầu tiên tôi muốn làm là sử dụng kết cấu PowerVR Texture Compressed (PVRTC) thay vì các nguồn bitmap chuẩn. Kết cấu PVRTC được lưu trữ ở định dạng nén trong bộ nhớ và có thể nhỏ hơn nhiều so với các bitmap tương đương. Điều này có thể cho phép truy cập nhanh hơn nhiều bằng cách tăng số lần truy cập bộ nhớ cache trên lần đọc kết cấu.

Làm cho họa tiết của bạn có sức mạnh hai kích thước và bật mipmaps. Tôi đã nhìn thấy mipmaps thực sự giúp đỡ cho các kết cấu lớn hơn thường được thu nhỏ lại để xuất hiện trên các đối tượng nhỏ hơn. Điều này chắc chắn giống như trường hợp cho ứng dụng của bạn mà có thể cần phải hỗ trợ các thiết bị Retina và không phải Retina.

Tránh đọc kết cấu phụ thuộc vào trình đổ bóng phân đoạn của bạn như bệnh dịch hạch. Bất kỳ điều gì thực hiện phép tính để xác định tọa độ kết cấu hoặc bất kỳ kết cấu nào đọc phần tử nằm trong câu lệnh phân nhánh, sẽ kích hoạt kết cấu phụ thuộc đọc có thể nhiều hơn mức độ chậm hơn để thực hiện trên GPU iOS. Trong khi đọc kết cấu bình thường, GPU PowerVR có thể đọc một chút trước các giá trị kết cấu, nhưng nếu bạn sử dụng làm cho kết cấu phụ thuộc đọc thì bạn có thể mất tối ưu hóa đó.

Tôi có thể tiếp tục về các tối ưu hóa khác nhau (sử dụng độ chính xác thấp hoặc trung bình thay vì highp khi thích hợp, v.v.), tôi đã had a little help in this area myself, nhưng chúng dường như là những thứ đầu tiên tôi tập trung vào. Cuối cùng, bạn cũng có thể thử chạy các trình đổ bóng của mình thông qua PowerVR's profiling editor có thể cung cấp cho bạn ước tính thời gian chu kỳ cho hiệu suất trường hợp tốt nhất và xấu nhất của các trình đổ bóng này.

Thiết bị hiển thị võng mạc thậm chí không phải là những kẻ phạm tội tồi tệ nhất khi nói đến giới hạn đổ bóng phân đoạn. Hãy thử tải một thứ gì đó lên màn hình đầy đủ của iPad 1 để thực hiện, bởi vì nó có nhiều pixel hơn so với iPhone 4/4S, nhưng GPU chậm hơn nhiều so với iPad 2/3 hoặc iPhone 4S. Nếu bạn có thể có được một cái gì đó để chạy tốt trên iPad 1, nó sẽ được tốt trên tất cả mọi thứ khác ra khỏi đó (ngay cả iPad Retina).

+0

Cảm ơn tất cả các phương án này. Việc sử dụng renderer là khoảng 99% và Tiler khoảng 5%. Tôi nghĩ rằng mipmapping sẽ không cải thiện hiệu suất bởi vì hầu hết các biển quảng cáo của tôi được hiển thị như 2D sprites (kết cấu không được thu nhỏ). Tôi sẽ thử trình soạn thảo hồ sơ của PowerVR và thử nghiệm ứng dụng của tôi trên iPad 1. – Klem

+0

Cảm ơn Brad. Tôi đã viết mã shaders như điên trong 6 tháng qua và khi tôi học được cách sửa đổi các tọa độ kết cấu nó giống như một ánh sáng được bật trong não của tôi. Nhưng tôi đã tự hỏi gần đây nếu nó tốt hơn để đọc từ hai kết cấu khác nhau hoặc ốp lát các bản đồ cơ bản và bình thường trong một kết cấu duy nhất. Đó là nhanh hơn. Thực hành tốt nhất của Apple cho hướng dẫn shaders ngụ ý rằng nếu sửa đổi để texcoord được thực hiện trong đổ bóng đỉnh nó không phải là một kết cấu phụ thuộc đọc. Tôi sẽ cố gắng để xem nếu iphone4 rendering tăng tốc độ. Và có thể thử các bản đồ khác nhau. – badweasel

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