СПОСОБ АНАЛИЗА ГРАФИКИ
GRAPHICS ANALYSIS METHOD

Уровень техники
Графика, используемая в компьютерных приложениях, становится все более сложной. Например, в игровых приложениях, как правило, используется трехмерная графика, которая анимирована на основе реального времени. Такая графика продолжает становиться все более реалистичной.
По мере того как повышается сложность такой графики, также увеличиваются проблемы для разработчиков приложений. Например, разработчики должны отлаживать графические изображения, которые работают или выглядят неправильно. Кроме того, разработчики должны учитывать ограниченную производительность обработки. Поэтому нагрузка на обработку, связанная с графическими изображениями, должна быть проанализирована и зачастую оптимизирована для того, чтобы соответствовать такой ограниченной производительности.
Инструменты для тестирования, анализа и отладки графических изображений важны для разработки графических приложений.
Краткое описание чертежей
На чертежах одинаковыми номерами ссылочных позиций в общем обозначены идентичные, функционально аналогичные и/или структурно похожие элементы. Чертеж, на котором элемент появляется впервые, обозначен левыми цифрами в номере ссылочной позиции. Настоящее изобретение будет описано со ссылкой на приложенные чертежи, на которых:
на фиг.1 показана схема примерной операционной среды;
на фиг.2 показана схема варианта выполнения, который может быть включен в инструмент анализа графики;
на фиг.3 показана схема примерного интерфейса пользователя;
на фиг.4-9 показаны блок-схемы последовательности операций; и
на фиг.10 показана схема примерной платформы.
Подробное описание изобретения
Варианты выполнения направлены на создание способов анализа графических приложений. Например, устройство может включать в себя графический прикладной программный интерфейс (API), графическую машину и инструмент анализа графики. Инструмент анализа графики может принимать множество вызовов отрисовки, выдаваемых графическим API, и размещать эти вызовы отрисовки во множестве последовательностей так, что каждая последовательность соответствует определенному буферу визуализации. На основе этой информации могут быть выполнены различные задачи анализа. Например, могут быть сгенерированы перерисовывающие изображения. Кроме того, предыстория пикселей может быть сгенерирована на основе соответствующих выборов пикселей. Кроме того, также может быть определено влияние вызова отрисовки для выбранных пикселей. Кроме того, такие задачи могут быть выполнены на побуферной основе с использованием буферов визуализации.
Ссылки в данном описании на "один вариант выполнения" или "вариант выполнения" означают, что конкретный признак, структура или характеристика, описанная в связи с этим вариантом выполнения, включена по меньшей мере в один вариант выполнения. Таким образом, появление фраз "в одном варианте выполнения" или "в варианте выполнения" в различных местах настоящего описания не обязательно относится к одному и тому же варианту выполнения. Кроме того, конкретные свойства, структуры или характеристики могут быть скомбинированы любым подходящим образом в одном или больше вариантах выполнения.
На фиг.1 показана схема примерной операционной среды 100, в которой могут использоваться описанные здесь способы. Среда 100 может включать в себя различные элементы. Например, на фиг.1 показана среда 100, которая включает в себя графическое приложение 102, графический прикладной программный интерфейс (API) 104, графическую машину 106 и инструмент 110 анализа графики. Эти элементы могут быть реализованы в любой комбинации аппаратных и/или программных средств. Кроме того, варианты выполнения не ограничиваются элементами, показанными на фиг.1.
В вариантах выполнения графическое приложение 102 представляет собой компьютерное приложение (например, пользовательское приложение), в котором используется графика (например, трехмерная графика), которую выводят на один или более дисплеев устройств отображения. Примеры пользовательского приложения включают в себя (но не ограничивается этим) видеоигры и инструменты имитационного моделирования.
Графический API 104 обеспечивает графическое приложение 102, в котором используется графическая машина 106. В вариантах выполнения это может обеспечиваться посредством различных программ, структур данных, классов объектов и/или протоколов. Такие применения графического API 104 называются здесь "вызовами отрисовки". В вариантах выполнения могут использоваться (но не ограничиваются этим) коммерчески доступные API. Примеры таких API включают в себя OpenGL, DirectX и другие.
В целом при работе графическое приложение 102 может использовать множество буферов визуализации при генерировании графики. Буфер визуализации представляет собой буфер (поддерживаемый графической машиной 106), на который влияют операции отрисовки, которые инициирует графическое приложение 102 через графический API 104.
Множество буферов визуализации могут использоваться различными способами. Например, в графическом приложении 102 может использоваться множество буферов визуализации, причем каждый буфер визуализации соответствует определенному эффекту. Примеры эффектов включают в себя (но не ограничиваются этим) затенение, туман, подсветку, размытие, связанное с движением, и т.д. Кроме того или в качестве альтернативы, каждый из множества буферов визуализации может соответствовать одному или более визуализируемым объектам или примитивам. Варианты выполнения, однако, не ограничиваются этими примерными вариантами использования буферов визуализации.
Графическая машина 106 выполняет графические операции для графического приложения 102. Как описано выше, такие операции могут быть выполнены в ответ на вызовы отрисовки, принимаемые и обрабатываемые через графический API 104. Примеры операции включают в себя визуализацию и вывод изображений (кадров) на устройство отображения. Таким образом, графическая машина 106 использует графический конвейер. Как описано выше, графическая машина 106 может быть реализована любой комбинацией аппаратных и/или программных средств. Таким образом, в вариантах выполнения графическая машина 106 включает в себя графический процессор (GPU).
На фиг.1 показано, что инструмент 110 анализа графики соединен как с графическим API 104, так и с графической машиной 106. Инструмент 110 анализа графики может выполнять операции, включающие в себя анализ графических приложений. С этой целью инструмент 110 анализа графики может получать вызовы отрисовки со стороны графического приложения 102. На основе таких вызовов отрисовки инструмент 110 анализа графики может использовать графическую машину 106 для генерирования оперативной информации, относящейся к вызовам отрисовки. Такая информация может включать в себя (но не ограничивается этим) изображения с перерисовкой и предысторию пикселей.
Кроме того, инструмент 110 анализа графики может получать (или захватывать) кадры, визуализируемые графической машиной 106. Кроме того, инструмент 110 анализа графики может получать вызовы отрисовки, относящиеся к таким захваченным кадрам. Кроме того, инструмент 110 анализа графики может управлять скоростью, с которой генерируют кадры, соответствующие приложению 102. Посредством такого управления кадры могут быть последовательно представлены с требуемой скоростью. Такая скорость может быть установлена пользователем.
Как описано выше со ссылкой на фиг.1, инструмент 110 анализа графики может выполнять операции, включающие в себя анализ графических приложений. На фиг.2 показана схема примерного варианта 200 выполнения, который может быть включен в инструмент 110 анализа графики. На фиг.2 показан вариант 200 выполнения, включающий в себя модуль 202 перехвата графического API, базу данных 204 регистрации вызовов графического API, модуль 206 восстановления, модуль 207 анализа перерисовки, модуль 208 анализа предыстории пикселей, модуль 210 воспроизведения и модуль 212 интерфейса пользователя. Эти элементы могут быть воплощены в любой комбинации в виде аппаратных и/или программных средств.
Модуль 202 перехвата графического API копирует операции графического API (называемые здесь вызовами отрисовки), которые генерирует графическое приложение (такое как графическое приложение 102). Кроме того, модуль 202 перехвата графического API передает скопированные вызовы отрисовки в базу данных 204 регистрации вызовов графического API. В свою очередь, база данных 204 регистрации вызовов графического API сохраняет эти принятые вызовы отрисовки.
База данных 204 регистрации вызовов графического API может сохранять принятые вызовы отрисовки различными способами. Например, база данных 204 регистрации вызовов графического API может сохранять вызовы отрисовки в хронологическом порядке. Кроме того, такое сохранение в хронологическом порядке может быть предусмотрено вызовами отрисовки для каждого из множества буферов визуализации.
Модуль 206 восстановления может генерировать различные изображения (кадры) на основе вызовов отрисовки, сохраненных в базе данных 204 регистрации вызовов API. Такое восстановление подразумевает использование графической машины, такой как графическая машина 106. Кроме того, при генерировании таких изображений модуль 206 восстановления может задавать для графической машины использование определенных параметров. Например, параметры могут быть изменены таким образом, чтобы визуализируемые изображения указывали количество определенных произошедших событий (например, перерисовок). Кроме того, модуль 206 восстановления может включить или отключить различные проверки конвейера в рамках графической машины.
Модуль 207 анализа перерисовки определяет (на основе каждого буфера визуализации) перерисовки, связанные с определенными вызовами отрисовки. Это может включать в себя указание модулю 206 восстановления генерировать различные изображения с перерисовкой на основе выбранных (пользователем или автоматически) вызовов отрисовки и буферов визуализации. Примерные операции, относящиеся к таким характеристикам, описаны ниже со ссылкой на фиг.4.
Модуль 208 анализа предыстории пикселей определяет последовательность вызовов отрисовки, которые обеспечивают запись в пиксель ("затронутый"). Это может включать в себя указание модулю 206 восстановления сгенерировать определенные изображения в соответствии с различными параметрами. Примерные операции, относящиеся к таким характеристикам, описаны ниже со ссылкой на фиг.5, 6 и 7.
Модуль 210 интерфейса пользователя обеспечивает взаимодействие пользователя с инструментом 110 анализа графики. Например, в вариантах выполнения модуль интерфейса 210 пользователя обеспечивает графический интерфейс пользователя, который обеспечивает эффективное управление пользователем описанными здесь способами.
Модуль 212 сохранения кадров сохраняет один или более кадров (изображений), генерируемых графической машиной (например, графической машиной 106). Эти кадры содержат множество пикселей, соответствующих положениям, которые могут быть выведены на устройство отображения (не показано). Кадры могут иметь различные форматы. Примеры форматов включают в себя (но не ограничиваются этим) различные форматы RGB И CMYK. Кроме того, база данных 108 захвата кадров может использовать различные схемы сжатия и/или кодирования для сохранения кадра (кадров).
В вариантах выполнения эти кадры могут быть сгенерированы в соответствии с описанными здесь способами. Например, модуль 212 сохранения кадров может сохранять кадры, генерируемые при нормальной работе приложения 102, графического API 104 и графической машины 106. Кроме того, модуль 212 сохранения кадров может сохранять кадры, соответствующие кадрам перерисовывающего изображения, кадрам предыстории пикселей и другим типам кадров.
Варианты выполнения обеспечивают интерфейс пользователя, который отображает для пользователя информацию, относящуюся к графике. На фиг.3 показана схема примерного интерфейса 300 пользователя (также называемого интерфейсной консолью). Интерфейсная консоль 300 позволяет пользователю просматривать различную информацию, связанную с операциями над графикой. Как показано на фиг.3, интерфейсная консоль 300 включает в себя поле 302 вызовов отрисовки, поле 304 буфера визуализации, поле 306 визуализации изображения и поле 308 предыстории пикселей.
Поле 304 буфера визуализации обозначает множество буферов визуализации, связанных с конкретным изображением. В вариантах выполнения такие буферы визуализации могут быть обозначены пиктограммами или могут использоваться другие варианты графического представления. Пользователь может выбирать определенный вызов отрисовки посредством взаимодействия с GUI (например, путем наведения курсора с двойным щелчком).
В вариантах выполнения поле 302 вызовов отрисовки обозначает вызовы отрисовки (например, вызовы отрисовки, соответствующие буферу визуализации, выбранному в поле 304) в виде хронологической (например, слева направо) столбчатой диаграммы. Так, каждый столбик соответствует определенному вызову отрисовки. Кроме того, высота каждого столбика обозначает количество операций графической машины (например, конвейерных операций), вызванных соответствующим вызовом отрисовки. В вариантах выполнения пользователь может выбирать определенный вызов отрисовки путем взаимодействия с GUI (например, путем наведения курсора и двойного щелчка).
На основе выбранного вызова отрисовки пользователь может просматривать изображение перерисовки в поле 306 визуализации изображения. Характеристики, относящиеся к изображениям, описаны ниже со ссылкой на фиг.4. Из таких изображений перерисовки пользователь может выбрать определенный пиксель для анализа. В результате такого выбора пикселей изображения предыстории пикселей могут отображаться в поле 306 визуализации изображения. Кроме того, соответствующая предыстория пикселей для вызовов отрисовки может отображаться в поле 308 предыстории пикселей. Примеры подробных сведений, относящихся к предыстории пикселей, представлены ниже со ссылкой на фиг.5-7.
Операции для различных вариантов выполнения могут быть дополнительно описаны со ссылкой на нижеследующие чертежи и соответствующие примеры. Некоторые из чертежей могут включать в себя логическую блок-схему. Хотя такие чертежи, представленные здесь, могут включать в себя определенную логическую блок-схему, следует понимать, что логическая блок-схема представляет собой всего лишь пример реализации общих функциональных возможностей, описанных здесь. Кроме того, заданная логическая блок-схема не обязательно должна выполняться в представленном порядке, если не указано другое. Кроме того, заданная логическая блок-схема может быть реализована аппаратным элементом, программным элементом, выполняемым одним или более процессорами, или любым их сочетанием. Варианты выполнения не ограничены данным контекстом.
В вариантах выполнения предусмотрены различные способы анализа графических приложений. Такие способы включают в себя анализ перерисовок, предыстории пикселей, вызовов отрисовки и т.д. Кроме того, в таких способах могут использоваться альтернативные варианты восстановления и представления изображения.
Эти альтернативные варианты восстановления и представления могут предпочтительно обеспечивать более быстрое извлечение информации, относящейся к характеристикам, из графической сцены. Пример таких альтернативных вариантов восстановления и представления включает в себя анализ перерисовок, выполняемый отдельно для каждого буфера визуализации. По результатам анализа могут быть сгенерированы соответствующие предыстории пикселей. Эти свойства предпочтительно могут обеспечивать извлечение в противном случае скрытой информации из последовательности графических операций. Пример, включающий в себя такой анализ перерисовок и генерирования предыстории пикселей, описан ниже со ссылкой на фиг.4.
На фиг.4 показана логическая блок-схема 400 последовательности операций, которые могут представлять операции, выполняемые в одном или более вариантах выполнения. Эта блок-схема последовательности операций описана в контексте фиг.1 и 2. Однако эта блок-схема последовательности операций может использоваться и в других контекстах. Хотя на фиг.4 показана конкретная последовательность, можно использовать другие последовательности. Кроме того, представленные операции могут быть выполнены в различных параллельных и/или последовательных сочетаниях.
В блоке 402 сохраняют последовательность вызовов графических API (вызовов отрисовки). Такая последовательность может соответствовать определенному изображению (кадру). В контексте фиг.2 это может подразумевать перехват модулем 202 перехвата API этих вызовов отрисовки и сохранение их в базе данных 204 регистрации вызовов графических API.
В блоке 404 сохраненную последовательность вызовов API распределяют по последовательностям для каждого из множества буферов визуализации. Как показано на фиг.2, это может включать в себя модуль 206 восстановления, определяющий буферы визуализации из каждого вызова API. В вариантах выполнения модуль 206 восстановления может для этой цели использовать графическую машину (например, графическую машину 106).
Для каждой из этих групп буферов визуализации формируют изображение перерисовки в блоке 406. Как снова показано на фиг.2, это может подразумевать указание модуля 206 восстановления графической машины (например, графической машины 106) выполнить вызовы отрисовки для каждого из буферов визуализации. Однако вместо нормальной работы графическая машина выполнена с возможностью накопления пиксельных значений. Более конкретно, графическая машина может быть выполнена так, что вызовы отрисовки обеспечивают накопление соответствующих пиксельных значений буфера визуализации (с приращением величины подсчета обращений к пикселю) каждый раз, когда в них производится запись ("затрагивается"). Таким образом, в каждом буфере визуализации генерируют величину подсчета для каждого пикселя. Такая величина подсчета обозначает, сколько раз был затронут данный пиксель.
В блоке 408 выбирают один из буферов визуализации. Этот выбор может быть выполнен пользователем или автоматически. В вариантах выполнения буфер визуализации может быть выбран из списка множества буферов визуализации, представленного на дисплее (например, как пиктограммы или другие графические представления).
В блоке 409 изображение перерисовки для выбранного буфера визуализации может быть визуально улучшено. Такое улучшение может включать в себя увеличение динамического диапазона изображения перерисовки. Подробности, относящиеся к такому улучшению, описаны ниже со ссылкой на фиг.8.
В блоке 410 изображение перерисовки отображают для выбранного буфера визуализации. Как описано выше, изображения перерисовки представляют, сколько раз были затронуты пиксели. В вариантах выполнения такие количества могут быть представлены яркостью пикселя в отображаемом изображении перерисовки. Однако варианты выполнения не ограничиваются этой возможностью.
Один или более соответствующих пикселей этого изображения перерисовки может быть выбран в блоке 412. Этот выбор может быть выполнен пользователем или с помощью автоматических методов. Выбор пользователя может включать в себя взаимодействие с изображением перерисовки через графический интерфейс пользователя (GUI). Например, пользователь может выбрать пиксель с помощью курсора, с помощью графического перекрестия, путем ввода числовых координат и/или используя другие методы. В качестве альтернативы автоматический выбор может предусматривать автоматически выбор пикселя (пикселей) на основе их значений перерисовки. Например, можно автоматически выбирать пиксели, которые затрагивались чаще всего.
В блоке 414 для пользователя получают предысторию пикселей для каждого из одного или более выбранных пикселей. Предыстория пикселей может содержать каждый вызов отрисовки, который затронул (или вызвал запись в) пиксель. В вариантах выполнения вызовы отрисовки могут быть ограничены только теми вызовами, которые затрагивают буфер отрисовки, выбранный в блоке 408. Однако вместо или в дополнение к этому варианты выполнения могут, в качестве альтернативы, обеспечивать соответствующие вызовы отрисовки, затрагивающие другие буферы визуализации.
Предыстория пикселей может отображаться в блоке 416. В вариантах выполнения такое отображение может быть выполнено в форме последовательности пиктограмм, каждая из которых представлена вызовом отрисовки. Пользователь может выбрать (например, путем двойного щелчка) такую пиктограмму просмотра подробной информации, относящейся к вызову отрисовки. Однако также можно использовать другие способы отображения предыстории пикселей (например, текстовые листинги).
Блок-схема последовательности операций, показанная на фиг.4, предпочтительно обеспечивает непосредственный способ извлечения информации из наиболее сложных пикселей в сцене. Например, из изображения перерисовки, отображаемого в блоке 410, может быть выбран пиксель, который был затронут относительно большое количество раз (также называется пикселем, имеющим высокую сложность). Как обозначено выше, такие пиксели могут быть сделаны заметными при помощи яркости их отображения.
После выбора пикселя, имеющего высокую сложность, пользователь может просмотреть вызовы API, которые повлияли на пиксель (предыстория пикселя). Кроме того, пользователь может просматривать нормальное представление изображения (представление без перерисовки). В результате анализа вызовов отрисовки пользователь может определить, можно ли создать более эффективный набор вызовов API. Таким образом, путем выявления таких пикселей разработчики могут улучшить приложения для уменьшения количества прорисовываемых пикселей. Это предпочтительно позволяет повысить характеристики графического приложения.
Как описано выше, варианты выполнения обеспечивают извлечение информации, относящейся к пикселям. Кроме того, варианты выполнения могут информировать пользователей, какое количество раз пиксели были затронуты вызовами отрисовки. Одиночный вызов отрисовки может затрагивать определенный пиксель более одного раза. Например, вызовы отрисовки, указывающие графической машине (например, графической машине 106) визуализировать трехмерный объект, могут повлечь прорисовку графической машиной поверхности, которая имеет места с накладывающимися друг на друга пикселями. Например, в прорисованном кубе могут быть наложены друг на друга передняя и задняя стороны. Варианты выполнения могут (для определенного буфера визуализации) обнаруживать и указывать каждый раз, когда пиксель был затронут определенным вызовом отрисовки. Пример, включающий в себя такие характеристики, описан ниже со ссылкой на фиг.5.
На фиг.5 показана логическая блок-схема 500 последовательности операций, которые могут представлять операции, выполняемые в одном или более вариантах выполнения. Этот поток обработки описан в контексте фиг.1 и 2. Однако этот поток обработки можно использовать в других контекстах. Хотя на фиг.5 показана конкретная последовательность операций, можно использовать другие последовательности. Кроме того, представленные операции могут быть выполнены в различных параллельных и/или последовательных сочетаниях.
В блоке 502 выбирают буфер визуализации. Такой выбор может быть выполнен пользователем. В качестве альтернативы, такой выбор может быть выполнен автоматически. Кроме того, в блоке 504 выбирают один или более пикселей. Этот пиксель может быть выбран различными способами. Например, этот пиксель может быть выбран пользователем или может быть выбран автоматически на основе перерисовок, как описано выше со ссылкой на фиг.4. Однако варианты выполнения не ограничены этим контекстом.
В блоке 506 пользователь выбирает вызов отрисовки, соответствующий выбранному пикселю. Например, пользователь может выбрать этот вызов отрисовки из множества вызовов отрисовки (например, из последовательности вызовов отрисовки), указанных как предыстория пикселя, такой как предыстория пикселя, сгенерированная в блоке 414 по фиг.4. Соответственно, если этот выбор представляет собой первый выбор в последовательности, варианты выполнения могут обозначать его как начальный выбранный вызов отрисовки в блоке 507.
В этот момент в блоке 509 может быть определена информация в отношении того, сколько раз был затронут выбранный пиксель (в выбранном буфере визуализации). В вариантах выполнения это определение может быть выполнено для выбранного вызова отрисовки. В качестве альтернативы, это определение может быть выполнено для последовательности вызовов отрисовки, начиная с начального вызова отрисовки, указанного в блоке 507, и заканчивая вызовом отрисовки, выбранным в блоке 506.
Как показано на фиг.5, такие определения могут включать в себя множество проходов. Например, первый проход может включать в себя выполнение вызова (вызовов) отрисовки без запуска каких-либо тестов графического конвейера. Кроме того, второй проход может включать в себя выполнение вызова (вызовов) отрисовки с запуском тестов определенного графического конвейера. Кроме того, третий проход может включать в себя выполнение вызова (вызовов) отрисовки с альфа-смешением. Эти три прохода в блоке 509 описаны с целью иллюстрации, а не для ограничения. В соответствии с этим в вариантах выполнения могут использоваться другие сочетания проходов и/или другие последовательности. Дополнительные подробности в отношении этих проходов представлены ниже со ссылкой на фиг.6.
В блоке 510 пользователь может выбрать новый вызов отрисовки. Этот новый вызов отрисовки может находиться в хронологической последовательности вызовов отрисовки, которые затрагивают выбранный пиксель в выбранном буфере визуализации. Например, этот следующий вызов отрисовки может представлять собой вызов отрисовки, следующий после вызова отрисовки, который был выбран последним (либо в блоке 506, или в блоке 510). Как показано на фиг.5, если будет выбран следующий вызов отрисовки, тогда операция возвращается в блок 509.
Таким образом, элементы на фиг.5 позволяют пользователю выбирать один или более представляющих интерес вызовов отрисовки и анализировать его (или их) влияние на конкретные пиксели. Такие элементы предпочтительно позволяют выполнять оценку сложности сцены для любого пикселя конкретного буфера визуализации. Эта информация предпочтительно может помочь пользователям принять решение, следует ли уменьшить сложность конкретной сцены или изменить параметры приложения для повышения производительности конкретных 3D операций.
Как описано выше, определение, сколько раз выбранный пиксель (в выбранном буфере визуализации) был затронут, могут быть выполнены путем множества проходов. Пример такого множества проходов представлен на фиг.6.
В частности, на фиг.6 показана блок-схема 600 последовательности операций, которая включает в себя первый проход 602, второй проход 604 и третий проход 606. Каждый из этих проходов подразумевает выполнение множества операций. Например, на фиг.6 представлены первый проход 602, включающий в себя блоки 610-614. В блоке 610 определенные тесты графического конвейера (например, тест ножницы, тест прямоугольник, z-тест, тест трафарет и/или α-тест) отключены. В блоке 612 определяют, сколько раз вызов (вызовы) отрисовки затрагивал выбранный пиксель при отключенных тестах. Это может включать в себя выполнение вызова (вызовов) отрисовки с модифицированными операциями визуализации. Например, код затенения пикселя может быть модифицирован таким образом, что оттенок выбранного пикселя возрастает (например, повышается на единицу) каждый раз, когда затрагивается пиксель вызовом отрисовки. Однако варианты выполнения не ограничены этим способом.
Результаты этого определения выводят пользователю в блоке 614. Эти результаты могут быть выведены в графической форме (например, отображены в местах расположения выбранных пикселей в виде соответствующих значений яркости, оттенка или уровня прозрачности). В качестве альтернативы эти результаты могут быть выведены в текстовой форме.
На фиг.6 показан второй проход 604, включающий в себя блоки 620-632. В блоке 620 пользователь может запустить определенный тест. Например, пользователь может запустить ранжированный тест ножницы, тест z или тест шаблон. В блоке 622 определяют, был ли выбран тест. Если да, операция переходит в блок 624. В противном случае операция переходит в третий проход в блоке 640.
В блоке 624 очищают выбранный буфер визуализации. После этого выбранный тест запускают в графической машине в блоке 626. В блоке 628 выполняют вызов (вызовы) отрисовки.
Результаты этого (этих) вызова (вызовов) отрисовки выводят пользователю в блоке 630. Эти результаты могут быть выведены в графической форме (например, отображены в местах расположения выбранных пикселей в виде соответствующих уровней яркости или прозрачности). В качестве альтернативы результаты могут быть выведены в текстовой форме. Если результат равен нулю (отсутствует значение пикселя), это обозначает, что выбранный тест не прошел при каждом вызове. Однако если результат не равен нулю, то выбранный тест прошел по меньшей мере один раз при его вызове.
Как обозначено блоком 632, пользователь может выбрать другой тест. Если выбрал, то операция возвращается в блок 620. В противном случае операция переходит к третьему проходу в блоке 640.
На фиг.6 показан третий проход, включающий в себя блок 640. В этом блоке выполняют нормальную визуализацию для определения выходного цвета пикселя.
Кроме потока обработки, показанного на фиг.6, теперь будут приведены различные неограничивающие иллюстративные примеры, относящиеся к количеству раз, когда пиксель был затронут. Например, количество "затрагиваний" может представлять собой количество раз, когда визуализируемая структура пересекает пиксель. Например, когда визуализируемая структура представляет собой сферу, содержащую двусторонние треугольники, тогда центральные пиксели будут иметь величину подсчета перерисовки, равную двум: один для передней части, один раз для задней части (z-тест отключен в этом случае). Кроме того, если визуализируемая структура представляет собой сферу, содержащую односторонние треугольники, тогда центральные пиксели будут иметь величину подсчета перерисовки, равную единице: один для передней части, ноль для задней части (поскольку задняя часть была отбракована (в данном случае разрешена отбраковка)).
Кроме того, количество "затрагиваний" может представлять собой количество раз, когда пиксель был фактически записан в буфер (за вычетом количества, когда для структуры не прошла z-тест). Например, когда изображают три треугольника друг над другом от наблюдателя, количество затрагиваний будет зависеть от порядка прорисовки. Например, если самый дальний будет нарисован первым, а затем средний и после этого ближний, тогда величина подсчета составит 3 для пикселей, в которых все три треугольника перекрываются. Однако, если ближайший будет нарисован первым, после чего средний и затем самый дальний, величина подсчета будет равна единице для одних и тех же пикселей. Это связано с тем, что последние два будут отброшены по результатам z-теста.
Как описано выше, варианты выполнения позволяют пользователям определять влияние вызовов отрисовки для конкретных пикселей. Кроме того, варианты выполнения позволяют отключать вызовы отрисовки. Например, пользователь может отключить один или более вызовов отрисовки и определять влияние такого отключения на обработку пикселей. Таким образом, могут быть определены различия в вычислительных затратах. Например, можно определить, становится ли визуализация сцены более быстрой. Кроме этого пользователь может визуально определить влияние такого запрета на визуализируемое изображение. Например, пользователь может определить, делает ли запрет вызова (вызовов) отрисовки неприемлемым вид сцены. Пример, включающий в себя такие характеристики, описан ниже со ссылкой на фиг.7.
На фиг.7 приведена блок-схема 700 последовательности операций, которая может представлять собой пример операций, выполняемых в одном или более вариантах выполнения. Эта блок-схема последовательности операций описана в контексте фиг.1 и 2. Однако эта блок-схема последовательности операций может использоваться в других контекстах. Хотя на фиг.7 показана конкретная последовательность операций, могут использоваться другие последовательности. Кроме того, представленные операции могут быть выполнены в различных параллельных и/или последовательных сочетаниях.
Как показано на фиг.7, буфер визуализации выбирают в блоке 702. Такой выбор может быть выполнен пользователем или автоматически. Кроме того, в блоке 704 выбирают пиксель. Этот пиксель может быть выбран различными способами. Например, пиксель может быть выбран пользователем или может быть выбран автоматически, как описано выше со ссылкой на фиг.4. Варианты выполнения, однако, не ограничиваются этим контекстом.
В блоке 706 пользователь выбирает один или более вызовов отрисовки, которые должны быть отключены. Такой выбор может быть выполнен из последовательности вызовов отрисовки. В блоке 708 определяют предысторию пикселя для последовательности вызовов отрисовки. В вариантах выполнения это может включать в себя выполнение операций, описанных выше со ссылкой на фиг.5. Таким образом, может быть определено, сколько раз пиксель затрагивался с запрещенным вызовом (вызовами) отрисовки. Как описано выше со ссылкой на фиг.5, такое определение может быть выполнено с использованием различного(ого) теста (тестов) графического конвейера (например, теста ножниц, теста прямоугольника, z-теста, теста шаблона и/или α-теста), подключенного или отключенного. Поскольку отключенные вызовы прорисовки не визуализируются, такие тесты для последующих вызовов отрисовки могут иметь разные результаты тестирования. Таким образом, запрещенные вызовы отрисовки обеспечивают динамическую предысторию пикселя.
В блоке 710 визуализируют изображение для последовательности вызовов отрисовки с отключенными выбранными вызовами отрисовки. Такое визуализируемое изображение отображают для пользователя в блоке 712.
Как описано выше, варианты выполнения обеспечивают изображения перерисовки. Кроме того, варианты выполнения обеспечивают возможность подключения или отключения любых выбранных пользователем вызовов отрисовки для разрушения композиции изображения перерисовки и более глубокого исследования визуализируемых пикселей.
Изображения перерисовки могут содержать незначительные различия, которые трудно визуально идентифицировать. Например, одна область может быть несколько более темной, чем соседняя область (это обозначает различия в том, сколько раз эти области были затронуты). Варианты выполнения могут визуально усиливать эти различия. Например, в блоке 409 по фиг.4 было усилено изображение перерисовки.
Такие усиления могут увеличивать динамический диапазон изображения перерисовки. В результате незначительные различия изображений перерисовки становится значительно проще видеть. Можно использовать различные приемы для получения такого увеличения динамического диапазона. Например, в вариантах выполнения могут использоваться операции фиксации.
На фиг.8 приведена блок-схема 800 последовательности логической обработки, которая может представлять собой операции, выполняемые в одном или больше вариантах выполнения. Хотя на фиг.8 показана конкретная последовательность, можно использовать другие последовательности. Кроме того, представленные операции могут быть выполнены в различных параллельных и/или последовательных сочетаниях.
В блоке 802 обеспечено изображение перерисовки. В блоке 804 определяют минимальные и максимальные значения изображения перерисовки.
В блоке 806 генерируют матрицу на основе минимального и максимального значений. Изображение перерисовки затем обрабатывают с помощью матрицы в блоке 808. В результате такой обработки формируют улучшенное изображение перерисовки, которое может быть отображено в блоке 810.
Пример такого приема будет представлен ниже. Этот пример включает в себя матрицу размером 5×5. Это стандартный подход к выполнению линейных операций над данными изображениями. Если предположить, что значения пикселя находятся в диапазоне [0, 255], а значения матрицы представляют собой коэффициенты масштабирования с плавающей точкой, используется следующая формула:
Здесь представлена обычная операция матричного умножения, когда исходное значение изображение RGBA (Ir, Ig, Ib, Ia) умножают на матрицу M размером 5×5 для расчета скорректированных цветов (Or, Og, Ob, Oa) изображения в формате RGBA. В результате коррекции значений 20 переменных элементов матрицы М может быть выполнено множество операций коррекции цветов. В случае изображений перерисовки значения матрицы корректируют для масштабирования изображения перерисовки для расширения диапазона интересующих данных.
На примере предположим, что каждый пиксель во всем буфере визуализации был записан до 20 раз (предположим, что полные четверки цветов буфера визуализации были смешаны поверх друг друга), и затем предположим, что 3 или более небольших треугольника были записаны в буфер визуализации, два из которых имеют некоторую степень перекрытия. В этом примере большая часть пикселей будет иметь степень перерисовки, равную 20, некоторое количество будет иметь степень перерисовки, равную 21 (те, которые были затронуты небольшими треугольниками), и некоторое количество будет иметь степень перерисовки 22 (те, которые находились в месте пересечения двух небольших треугольников, перерисовывающих друг друга).
Если пользователь просматривает такое изображение как обычно, оно выглядит темным, и на нем очень трудно видеть участки кадра, имеющие значения, равные 21 и 22 перерисовкам. В данном варианте выполнения просматривают скорректированное изображение, в котором каждый из пикселей на нормальном изображении был умножен на матрицу М для расчета скорректированных цветов изображения перерисовки. В данном случае использовали значения в предположении 8 битных каналов цветов (каждое из значений RGBA на исходном изображении и на изображении перерисовки имеет значение в диапазоне [0, 255]), но этот способ не ограничен этим случаем и может работать при использовании другой степени глубины цветности:
Описанный выше способ предпочтительно позволяет расширить небольшой диапазон значений до максимального диапазона для обеспечения максимальной видимости. Этот способ приведен для иллюстрации, а не для ограничения. Соответственно можно использовать другие способы для повышения видимости изображений.
Как описано выше, элементы вариантов выполнения (например, элементы на фиг.1 и 2) могут быть воплощены с использованием любого сочетания аппаратных и/или программных средств. Соответственно на фиг.10 показана схема примерной платформы 1002, в которой могут быть реализованы функциональные возможности настоящего изобретения, как описано здесь.
Как описано выше, варианты выполнения обеспечивают способы для захвата кадров. Кроме того, варианты выполнения обеспечивают способы для пошагового перемещения через графические кадры (например, один графический кадр за один раз), генерируемые приложением. Такие характеристики предпочтительно позволяют захватывать полезную нагрузку приложения "на лету", обеспечивая, таким образом, захват в точности того кадра, который представляет интерес.
В вариантах выполнения таким одиночным пошаговым перемещением можно управлять при взаимодействии с пользователем. Например, пользователю могут быть предоставлены кнопка паузы, кнопка пошагового перемещения и кнопка захвата. Такие кнопки могут быть предусмотрены в графическом интерфейсе пользователя (например, на интерфейсной консоли 300 по фиг.3). Однако варианты выполнения не ограничиваются этим контекстом. Кроме того, варианты выполнения не ограничиваются использованием графических интерфейсов пользователя.
Функция кнопки паузы позволяет пользователю дистанционно приостанавливать приложение (например, графическое приложение 102) на текущем кадре. В свою очередь, функция кнопки пошагового перемещения позволяет пользователю выполнять пошаговое перемещение вперед ровно на один кадр. Кнопка/функция захвата позволяет пользователю принять решение, следует ли сохранять данные кадра (а также их соответствующие вызовы отрисовки) для анализа.
На фиг.9 приведена блок-схема 900 последовательности операций, которая может представлять операции, включающие в себя такие функции пошагового перемещения и захвата кадра. Эта последовательность операций описана в контексте фиг.1 и 2. Однако такую последовательность операций можно использовать в других контекстах. Кроме того, хотя на фиг.9 показана определенная последовательность, можно использовать другие последовательности. Кроме того, представленные операции могут быть выполнены в различных параллельных и/или последовательных сочетаниях.
В блоке 902 начинается работа графического приложения (например, игры). Например, в контексте фиг.1 это может содержать выполнение запуска графического приложения 102.
В блоке 904 пользователь активирует кнопку паузы. В результате в блоке 906 графическое приложение приостанавливает работу после выполнения текущего кадра. Такая функция может использовать инструмент 110 анализа графики, ожидающий, когда графическое приложение 102 выполнит "вызов наличия" (через графический API 104). Такой вызов указывает, что его вызовы отрисовки для текущего кадра завершены и текущий кадр готов к визуализации с помощью графической машины 106. После размещения такого вызова инструмент 110 анализа графики может перевести графическое приложение 102 в режим паузы. Это может быть выполнено, например, при помощи одного или более вызовов операционной системы. Например, инструмент 110 анализа графики может приостановить все выполняющие в ЦПУ программные потоки, связанные с графическим приложением. После такого перевода в режим паузы может отображаться текущий кадр.
В блоке 907 пользователь активирует кнопку. Если это кнопка шагового перехода, тогда операция переходит в блок 909, где графическое приложение возобновляет работу, и следующий кадр становится текущим кадром. В контексте фиг.1 это может включать в себя размещение инструментам 110 анализа графики одного или более вызовов операционной системы. После этого операция возвращается в блок 906, и графическое приложение снова переводят в режим паузы, после того как оно завершит обработку этого кадра.
Однако, если пользователь активирует кнопку захвата, кадр, генерируемый графической машиной (например, графической машиной 106), сохраняют в блоке 910. Как показано на фиг.2, это может включать в себя сохранение пиксельных данных текущего кадра в модуле 212 сохранения кадра. Кроме того, в блоке 912 сохраняют дополнительную информацию, относящуюся к текущему кадру. Такая информация может включать в себя (но не ограничивается этим) вызовы отрисовки, соответствующие текущему кадру, информацию о состоянии, относящуюся к графической машине (например, информацию о состоянии конвейера), графический API и/или графическое приложение. Кроме того, такая информация может включать в себя ресурсы, предоставляемые приложением (например, информация о модели внешнего мира, информация о вершинах, информация о тенях, информация о текстуре и т.д). Варианты выполнения не ограничиваются этими примерами. В контексте фиг.2, часть такой информации может быть перехвачена и идентифицирована модулем 202 перехвата вызова отрисовки графического API и сохранена в базе данных 204 регистрации вызовов графического API.
На фиг.9 показано, что после блоков 910 и 912 операция может перейти в блок 909, где возобновляется работа графического приложения, и следующий кадр становится текущим кадром. После этого операция возвращается в блок 906, и графическое приложение снова переводят в режим паузы, после того как оно завершает обработку кадра.
В качестве дополнительной альтернативы на фиг.9 показано, что если пользователь активирует кнопку паузы, то нормальная операция графического приложения возобновляется в блоке 914. В контексте фиг.1 это может включать в себя размещение инструментом 110 анализа графики одного или более вызовов операционной системы. После этого блок 916 указывает, что операция может вернуться в блок 904 для выполнения дальнейших операций перехода к следующему кадру и захвата кадра.
Таким образом, такие технологии пошагового перехода по кадрам и захвата кадра позволяют пользователю точно определять, в отношении какого именно кадра осуществляется редактирование и формирование профиля. В результате пользователь может находить и исправлять узкие места и/или удалять избыточные или несущественные графические операции. Последовательность операций по фиг.9 описана в контексте кнопок GUI. Это представлено для иллюстрации, а не для ограничения. Соответственно, могут использоваться другие технологии/устройства взаимодействия пользователя. Таким образом, варианты выполнения могут обеспечивать различные элементы управления пользователя для различных упомянутых выше характеристик, таких как установка режима паузы, пошаговый переход, захват и возобновление работы.
В вариантах выполнения платформа 1002 может содержать ЦПУ 1012, ГПУ 1013, один или более драйверов 1014, одно или более сетевых соединений 1015, операционную систему 1016, накопитель 1018, устройство 1019 отображения.
ЦПУ 1012 может содержать один или более процессоров, таких как двухъядерные процессоры. Примеры двухъядерных процессоров включают в себя процессор Pentium D и процессор Pentium Extreme Edition, оба производства компании Intel Corporation, которые могут называться, например, процессорами Intel Core Duo.
ГПУ 1013 может содержать различные графические процессоры, такие как графическая карта Express для шины межсоединения периферийных компонентов (PCI). Однако варианты выполнения не ограничиваются этим примером. Как показано на фиг.1, ГПУ 1013 может обеспечивать характеристики графической машины 106.
В одном варианте выполнения сетевые соединения 1015 могут содержать сетевые соединения PRO/1000 РМ или PRO/100 VE/VM, оба производства Intel Corporation.
В вариантах выполнения операционная система 1016 может содержать Windows ХР Media Center производства Microsoft Corporation. В дополнительных вариантах выполнения операционная система 1016 может содержать Linux, а также операционные системы других типов.
В одном варианте выполнения накопитель 1018 может содержать различные материальные носители информации. Такие носители информации могут включать в себя данные (например, изображения или кадры), а также команды или управляющую логику (например, программное средство) для реализации различных характеристик, описанных здесь (например, элементы фиг.1 и 2). Такие команды или управляющая логика могут быть выполнены с помощью ЦПУ 1012 и/или ГПУ 1013. Примеры носителей информации дополнительно описаны ниже.
Устройство 1019 отображения может выводить информацию пользователю. Кроме того, устройство 1019 отображения может обеспечивать взаимодействие с пользователем, как описано здесь. Например, такое взаимодействие с пользователем может быть выполнено через примерный интерфейс 300 пользователя.
Как описано здесь, различные варианты выполнения могут быть реализованы с использованием аппаратных элементов, программных элементов или любой их комбинации. Примеры аппаратных элементов могут включать в себя процессоры, микропроцессоры, схемы, элементы схем (например, транзисторы, резисторы, конденсаторы, индуктивности и т.д., интегральные схемы, специализированные интегральные схемы (ASIC), программируемые логические устройства (PLD), цифровые сигнальные процессоры (DSP), программируемую пользователем вентильную матрицу (FPGA), логические вентили, регистры, полупроводниковое устройство, микросхемы, интегральные микросхемы, наборы микросхем и т.д.).
Примеры программных элементов могут включать в себя программные компоненты, программы, приложения, компьютерные программы, программные приложения, системные программы, машинные программы, программное обеспечение операционной системы, промежуточное программное обеспечение, встроенное программное обеспечение, программные модули, процедуры, подпрограммы, функции, методы, процедуры, программные интерфейсы, прикладные программные интерфейсы (API), наборы инструкций, вычислительный код, код компьютера, кодовые сегменты, сегменты кодов компьютера, слова, значения, символы или любые их комбинации.
Некоторые варианты выполнения могут быть выполнены, например, с использованием физического считываемого компьютером носителя информации (носителя информации) или изделия, которое может сохранять инструкции или наборы инструкций, которые при выполнении их в устройстве могут обеспечивать выполнение устройством способа и/или операций в соответствии с вариантами выполнения. Такое устройство может включать в себя, например, любую соответствующую платформу обработки, вычислительную платформу, компьютерное устройство, устройство обработки, компьютерную систему, процессорную систему, компьютер, процессор или тому подобное и может быть реализовано с использованием любой из соответствующих комбинаций аппаратных и/или программных средств.
Считываемый компьютером носитель (носитель информации) или изделие может включать в себя, например, любой модуль памяти запоминающего устройства соответствующего типа, запоминающее устройство, изделия памяти, носители информации, устройство накопитель, изделие накопитель, носитель записи и/или модуль сохранения, например запоминающее устройство, съемное или несъемное запоминающее устройство, стираемое или нестираемое запоминающее устройство, носитель с возможностью записи или с возможностью перезаписи, цифровой или аналоговый носитель, жесткий диск, гибкий диск, постоянное запоминающее устройство на компакт-диске (CD-ROM), компакт-диск с возможностью записи (CD-R), компакт-диск с возможностью перезаписи (CD-RW), оптический диск, магнитный носитель, магнитооптический носитель, съемные карты памяти или диски, различные типы цифрового универсального диска (DVD), магнитную ленту, кассету или тому подобное. Команды могут включать в себя код любого соответствующего типа, такой как исходный код, оттранслированную программу, интерпретируемый код, исполнительный код, статический код, динамический код, зашифрованный код и т.п., выполненные с использованием любого соответствующего языка высокого уровня, низкого уровня, объектно-ориентированного, визуального, компилируемого и/или интерпретируемого языка программирования.
Некоторые варианты выполнения могут быть описаны с использованием выражения "связанный" и "соединенный", вместе с их производными. Эти термины не предполагается использовать как синонимы друг друга. Например, некоторые варианты выполнения могут быть описаны с использованием терминов "соединенный" и/или "связанный" для обозначения, что два или больше элемента находятся в непосредственном физическом или электрическом контакте друг с другом. Термин "связанный", однако, также может означать, что два или больше элемента не находятся в непосредственном контакте друг с другом, но все еще при этом взаимодействуют или влияют друг на друга.
Хотя выше были описаны различные варианты выполнения настоящего изобретения, следует понимать, что они были представлены только в качестве примера, а не для ограничения. В соответствии с этим, для специалиста в данной области техники будет понятно, что различные изменения в форме и деталях могут быть выполнены без выхода за пределы сущности и объема изобретения. Таким образом, широта и объем настоящего изобретения не должны быть ограничены ни одним из описанных выше примерных вариантов выполнения, но должны быть определены только в соответствии со следующей формулой изобретения и ее эквивалентами.