"Аппаратные шейдеры", "интерактивный рендеринг", "реалтаймовое кино" - эти термины все сильнее вторгаются в область компьютерной графики, в особенности трехмерной. Начало было положено выпуском революционных видеокарт - с качественно новым уровнем поддержки 3d, разработанных Nvidia и ATI. В последнее время этот процесс "раскручивается" все сильнее как благодаря выходу все более совершенных аппаратных моделей GPU, так и разработке под них специализированного программного обеспечения. Прежде всего, Cg - "Си для графики" - от Nvidia, специализированного Си-подобного языка программирования GPU, так называемых аппаратных шейдеров, позволяющих реализовать самые фантастические спецэффекты в режиме реального времени с использованием только аппаратных возможностей видеокарт. К сожалению, Cg в силу своей специфичности узко специализирован и не годится для массового использования непрофессионалами в области программирования. Например, дизайнерами, которые имеют к графике, в том числе интерактивной, не самое последнее отношение. Поэтому, неизбежно должны были появиться дополнительные, более доступные и массовые инструменты для работы с шейдерами. Так возникла CgFX - вариация Cg, совместимая со спецификациями программ-шейдеров DirectX и требующая наличия в шейдере настраиваемых пользователем параметров, изменяющих его визуальное представление. Настраиваемость шейдеров позволяет модифицировать их графическими инструментами, более привычными для дизайнеров. Логично, что после появления CgFX были созданы и программы-плагины для работы с ним в пакетах 3d: в настоящее время такие возможности есть у Softimage XSI, Maya, 3d studio max.
Рассмотрим CgFX на примере 3d studio max.
Итак, CgFX для max - это прежде всего средство визуальной отладки аппаратных программ-шейдеров в 3d studio max 5. Nvidia гарантирует полное соответствие визуального отображения результатов работы программы-шейдера в видовом окне max и в любом интерактивном приложении или игре. Код шейдера может содержать любую поддерживаемую языком Cg команду, а также вставки на ассемблере или другом языке низкого уровня. Стандарты не стоят на месте, сегодня мы говорим уже о девятой версии DirectX и, соответственно, сами программы-шейдеры становятся все гибче и все более приобретают признаки полноценных программ с их условными переходами, циклами и т.д. и т.п. Поэтому вполне можно ожидать, что шейдерам "по плечу" довольно сложные и изощренные визуальные эффекты в реальном времени. Что регулярно и подтверждает Nvidia своими "демками", поэтому интерактивные технологии вполне могут быть интересны не только программистам, но и дизайнерам, художникам, создателям фильмов... При определенных условиях.
В целом, плагин CgFX позволяет средствами 3d studio max открывать файлы программ-шейдеров, выполнять и модифицировать их и наблюдать результаты в видовом окне в режиме реального времени. Файлы шейдеров совместимы с форматом FX, разработанным для DirectX. Каждая программа может, и должна по определению, иметь регулируемые параметры. Так что два объекта, которым назначен один и тот же шейдер, но с разными значениями регулируемых параметров, могут иметь различный вид (при этом сам код шейдера, естественно, остается неизменным). Какие именно параметры могут регулироваться, зависит от конкретного шейдера и цели, для которой он написан. В качестве самых простых примеров таких параметров можно указать текстуры и цвет. И, наконец, шейдер может иметь несколько техник. Под техникой понимается способ (кусок кода), реализующий ту или иную функцию шейдера. Поскольку шейдеры выполняются процессорами видеокарт, возникает проблема совместимости кода и возможностей видеокарты, на которой он выполняется. Наличие нескольких техник, в принципе, утяжеляет шейдер, зато позволяет ему выполняться и на GeForce 2, и на GeForce FX. Благодаря плагину можно непосредственно в видовом окне открывать и редактировать текст программы-шейдера.
CgFX работает только с пятой версией max и только с API DirectX. Если проект обязательно требует OpenGL, то излагаемый далее материал для вас бесполезен. В max этого сделать нельзя, потребуется экспортировать сцену для отдельной программы CgFX Viewer и там работать с шейдерами. Таким образом, все преимущества работы в среде max нивелируются. Однако альтернатива все же есть - nVidia выпущен соответствующий плагин для Maya, которая, как известно, работает только в OpenGL. К слову замечу, что даже в этом случае, по признанию разработчиков, все расчеты CgFX выполняет опять же в DirectX, транслируя соответствующие инструкции OpenGL.
Обязательное требование пятого max связано с тем, что только в этой версии в редакторе материалов появилась новая закладка Viewport Shader Manager, через которую осуществляется доступ к функциям аппаратного шейдера. Кроме того, если вы собираетесь полноценно использовать CgFX, то следует запастись видеокартой nVidia последнего поколения. На "старых" GPU шейдеры будут работать в режиме программной эмуляции, то есть обсчитываться центральным процессором, и говорить об интерактивности в этом случае не приходится.
Итак, 3d studio max 5 сконфигурирован для использования API DirectX, в вашей рабочей станции установлен Qudro FX (ну, или хотя бы GeForce FX), объект загружен для работы - что дальше? А дальше вызываем редактор материалов, ищем там закладку Viewport Manager и в разворачивающемся списке выбираем CgFX, а в чекбоксе "Enabled", расположенном слева, ставим галочку.
После этого в нашем распоряжении оказывается свиток Viewprot Shader - CgFX, на котором расположены свойства материалов Material Mapping Options и Connection Editor. Первый из них предназначен для работы с растровыми картами, второй - для работы с изменяемыми параметрами аппаратного шейдера. Над кнопкой Connection Editor отображается имя файла с загруженным шейдером.
Что касается растровых карт, то они перечислены и аналогичны по назначению слотам растровых карт стандартной части редактора материалов - диффузный цвет, прозрачность, светимость и т.д. Установка галочки в соответствующем чекбоксе слева разрешает шейдеру использовать это свойство при отображении, а растровая карта, которая используется для этого, должна быть загружена в соответствующий слот свойств стандартной части редактора материалов. Подчеркну, что, хотя список свойств материалов довольно внушителен, какие из них будут востребованы, определяет единственно программа-шейдер. Можно загрузить все соответствующие слоты свойств материала текстурами, но отобразятся только те из них, которые предусмотрены в коде шейдера. И обратно, если какая-то из растровых карт предусмотрена в коде шейдера, но не загружена в соответствующий слот редактора материалов, объект отобразится в видовом окне неверно (скорее всего, вообще не отобразится).
Под свойствами материалов находится кнопка Connection Editor, при нажатии которой активизируется редактор изменяемых параметров шейдера.
Диалоговое окно этого редактора разделено на две части - в левой перечислены параметры шейдера, которые можно изменять, а в правой вводятся конкретные значения параметров. Самая верхняя строка под свитком Properties в Connection Editor - CgFX Shader - показывает название файла загруженного шейдера, а щелчок в правой части этой строки приводит к появлению дополнительных элементов интерфейса - Edit и File (невидимых в других случаях), позволяющих редактировать текст программы загруженного шейдера или загрузить файл с другим шейдером.
Далее следует строка Teсhnique, показывающая используемую для отображения технику (метод, например, с использованием вершинных и пиксельных конвейеров или без них). Это разворачивающийся список, и, если позволяет видеокарта, могут быть доступны несколько методов. Как уже говорилось ранее, кодирование различных методов отображения в одном шейдере делается с целью совместимости со старыми картами. При загрузке шейдера автоматически выбирается техника, оптимальная для установленной в системе видеокарты.
Вид и значение параметров, появляющихся ниже, зависит только от конкретного шейдера.
Подводя итог вышесказанному, получается следующая схема работы с аппаратными шейдерами в 3d studio max: загружаем трехмерный объект, средствами max назначаем поверхности текстурные координаты, активизируем CgFX и загружаем из файла интересующий аппаратный шейдер. Далее изменяем параметры или редактируем программу шейдера и наблюдаем, что отображается в видовом окне. Изменение параметров локально, то есть действует только в пределах текущей сцены. Изменение программы глобально приводит к изменениям во всех сценах, где используется данный шейдер. Очевидно, что кроме параметров можно загружать свои текстуры в соответствующие слоты свойств материала. В общем, пользоваться достаточно просто. Хочу еще раз подчеркнуть, что аппаратный шейдер предназначен для отображения в видовом окне. Результат его работы, в общем случае, будет отличен от результата работы программы-рендера 3d studio max.
Слева — результат работы шейдера DiffuseBump.fx из библиотеки поставляемых с плагином готовых программ-шейдеров (скриншот видового окна max, видеокарта GeForce 2 Pro). Справа — результат просчета картинки сканлайн-рендером max. В настоящее время на рынке имеются гораздо более совершенные видеокарты, которые позволяют достичь более совершенных результатов. Но даже в случае GeForce 2, т.е. при полном отсутствии у видеокарты пиксельных шейдеров и простейших вершинных шейдерах, результаты довольно впечатляющие. |
Выводы
- CgFX является удобным инструментом отладки аппаратных шейдеров и будет полезен программистам, особенно если проект, будь то игра или интерактивная презентация, изначально разрабатывается в 3d studio max. Я думаю, что он вполне может быть востребован в компаниях, где есть и программисты Cg и 3d-дизайнеры.
- С точки зрения дизайнеров, CgFX, к сожалению, пока не может считаться полноценным рабочим инструментом в силу узкой специализации шейдеров, отсутствия общедоступных библиотек готовых шейдеров и невозможности написать их собственными силами. Нетривиальность программирования требует глубоких специализированных знаний из совершенно другой области. Впрочем, исключения, конечно же, бывают.
Та же модель с различными назначенными аппаратными шейдерами из библиотеки примеров, поставляемой вместе с CgFX-плагином для 3d studio max 5 |
Игорь СИВАКОВ,
igsiv@tut.by
Горячие темы