Pull to refresh

Введение в Renderscript

Reading time3 min
Views8.2K
Original author: R. Jason Sams
Renderscript — это важная особенность Honeycomb, которая не обсуждалась ранее. Всего будет две статьи, эта — простой обзор Renderscript, следующая же будет содержать больше технических подробностей и простой пример.

Renderscript — это новый API, направленный на высокую производительность при 3D рендеринге и сложных вычислительных операциях. Renderscript будет интересен разработчикам, пытающимся максимизировать производительность их приложений и чувствующим себя комфортно при работе на низком уровне. Для разработчиков доступны три инструмента: простой API для 3D рендеринга, поддерживающего аппаратное ускорение, API для моделирования сложных вычислений (похожий на CUDA), и язык стандарта близкого к C99.

Renderscript уже использовался ранее для создания новых, более красивых визуально, приложений Books и YouTube. Также, он уже использовался для написания живых обоев, поставляемых с Honeycomb.

Улучшение производительности достигается путем выполнения нативного кода на устройстве. Однако, в отличии от NDK, это решение кроссплатформенно. Язык разработки для Renderscript — это C99 с некоторыми расширениями, во время процесса разработки, он компилируется в аппаратно-независимом промежуточном формате и размещается в пакете приложения. Когда приложение запускается, то скрипт компилируется в машинный код и оптимизируется. Это позволяет избежать проблем, связанных с необходимостью выбирать какую-то определенную машинную архитектуру.

Renderscript не предназначен для замены существующего высокоуровневого API, его следует использовать в тех случаях, когда текущая необходимость в производительности не обеспечивается с помощью API.

Может показаться интересным, что ранее ничего не говорилось о том, где выполняется код — на GPU или CPU. Причина в том, что это определяется на устройстве во время выполнения. Когда есть соответствующая аппаратная поддержка, то простые скрипты могут выполняться на GPU в качестве небольшой вычислительной нагрузки. Более сложные скрипты запускаются на CPU (или на нескольких CPU). Роль CPU в данном случае также заключается в том, чтобы обеспечить резерв, если нет дополнительной аппаратной поддержки в виде подходящих GPU. На самом деле, всё это должно быть незаметно для разработчика. Вообще, в дальнейшем простые скрипты смогут запускаться во многих местах, но пока всё что нужно на практике — распределить нагрузку между несколькими CPU, поддерживаемыми на устройстве.



Это видео получено перехватом изображения с HDMI выхода планшета на Honeycomb. Оно показывает Renderscript в работе. Здесь мы представляем «брутфорсную» реализацию физики для 900 частиц. Вычислительный скрипт запускает каждый кадр картинки и автоматически использует преимущество двух ядер. Как только симуляция физики завершается, второй графический скрипт рендерит изображение. В видео мы толкаем одну из больших частиц, для того чтобы показать их взаимодействие. После этого, наклоняем планшет, чтобы часть работы за нас сделала гравитация. Весь этот процесс демонстрирует неплохую вычислительную мощь нового процессора A9.

На Honeycomb мы перешли с GL ES 1.1 на 2.0 в качестве рендера для Renderscript. С версией 2.0 мы смогли добавить программную поддержку шейдеров, загрузку 3D моделей, и более эффективное управление памятью. Однако, самое важное изменение — это то, что Renderscript и сопутствующие инструменты теперь общедоступны.

image


Скриншот демонстрирует одно из наших тестовых приложений. Приложение реализует трехмерную сцену, которая демонстрирует рекурсивный вызов скриптов. Андроиды, изображенные на скриншоте, загружаются из A3D файла, созданного в Maya и транслированного из файла Collada. A3D — это формат для хранения объектов Renderscript на устройстве.

Позднее, будет представлена статья с информацией более технического характера и примером кода.
Tags:
Hubs:
+19
Comments4

Articles

Change theme settings