Главная | Форум | Мой профиль | Выход | RSS
Меню сайта
Мини-чат
200
Наш опрос
Расширение спектра деятельности. Тоесть принимать и по возможности помогать не только Ultimate 3D
Всего ответов: 298
Кабинет

Логин:
Пароль:
Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Наши друзья
  • Официальный cайт U3D
  • Лучший сайт по GM
  • Сайт по геймдеву
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Мы рады приветствовать Вас на русскоязычном официальном сайте игрового движка Game Maker+Ultimate3D. Этот сайт создан для всех тех, кто хотел бы своими силами создать хотя бы одну компьютерную 3D игру, но не знает, как это сделать и с чего начать.Вы всегда хотели заняться разработкой компьютерных игр, но не знали как?Тогда вы попали по адресу. Game Maker с Ultimate3D это микс, который позволит делать захватывающие компьютерные игры с неограниченными возможностями. Так же есть форум на котором можно задовать свои вопросы по Ultimate 3D!

    Использование шейдерных эффектов.

    Если Вы играли в некоторые текущие игры, Вы вероятно уже знаете термин shaders. Простое определение - то, что shaders - кое-что, с чем Вы можете создать визуальные эффекты. Но этот ответ не достаточно точен, столь давайте услышим детальный. Есть два различных видов shaders: вершина shaders и пиксел shaders. Вершина shaders может использоваться один, в то время как пиксел shaders всегда используется в комбинации с вершиной shaders.

    Обычно
    Ultimate 3D использование так называемый неподвижный трубопровод функции, чтобы отдать модели. Неподвижный трубопровод функции - часть Direct3D. Это вычисляет данные вершины, означая, что это вычисляет положение вершины в месте экрана, освещении вершины, и нескольких других битах информации. Тогда вычисленная информация передана и используется, чтобы потянуть единственный пиксел треугольников пикселом. Когда Вы используете shaders, Вы не используете неподвижный трубопровод функции больше, но программируемый трубопровод функции. Это означает, что путь, Ultimate 3D, вычисляет данные вершины, и цвета пиксела могут быть изменены в любом случае.

    Вершина shaders является очень короткими программами, которые выполнены для каждой отдельной вершины в каждой отдельной структуре, чтобы вычислить их данные. Этим путем Вы можете изменить геометрию объектов без функций манипуляции петли
    Ultimate 3D, и Вы можете изменить способ, которым структуры нанесены на карту на объекте, изменяя способ, которым вычислена заключительная координата структуры. В основном, Вы можете понять таможенный двигатель освещения. Пиксел shaders является еще более короткими программами, которые выполнены для каждого отдельного пиксела в каждой отдельной структуре, чтобы вычислить их данные. Они могут восстановить координаты структуры, которые были вычислены вершиной shader, и они могут получить доступ к структурам. Результатом вычислений в пикселе shader всегда является только один единственный тон краски, который будет использоваться как цвет для пиксела. Отметьте, что shaders может быть создан и отредактирован в любом редакторе текста, например. Блокнот. Следующая картина иллюстрирует, как они работают:


     
    Сначала T&L или Вершина Shader обрабатывает вершины. Тогда эти вершины передают к rasterizer. Это определяет, какие пикселы должны быть предоставлены для треугольников петли. Наконец неподвижный трубопровод функции или пиксел shader вычисляют, пиксел красят, и пишет это экрану. Фактически, есть еще несколько шагов в трубопроводе предоставления, как туман, применяемый после пиксела shader, но упоминающий, что те на иллюстрации сделали бы это более сложным чем необходимый.

    Только, чтобы дать Вам общее представление того, как shader может смотреть, вот пример. Это показывает очень простой shader. Это только отдает объект, применяющий его материальный цвет и его первую структуру. Эффект shader всегда составляется из двух или трех файлов. Вершина shader файл (*.vsh) должна быть доступной; пиксел shader файл (*.psh) является дополнительным. Также должен быть
    Ultimate 3D файл (*.ufx) эффектов, который содержит информацию о том, как вершина shader и пиксел shader должны использоваться Ultimate 3D.

    Вот вершина shader:

    // Эта строка должна быть первой в каждом вершинном шейдере
    vs.1.1
     
    // Эта строка кода трансформирует позицию вершины в меше (mesh) в
    // экранную позицию. Команда которая выполняет это называется "m4x4".
    // "oPos" это название выходного регистра, куда шейдер сохранит данные
    // об экранной позиции. Позиция вершины в меше всегда сохраняется в
    // регистр "v0". "c0" это переменная установленная перед обработкой
    // модели, так называемая "Постоянный регистр" (Constant register).
    // Константный регистр получает значение из *.ufx файла. Он содержит
    // начало матрицы трансформации (преобразования, transformation matrix),
    // которая нужна для вычисления экранной позиции.
    m4x4 oPos, v0, c0
     
    // Эта строка кода просто передает материал, копируя его из пятого
    // константного регистра в регистр вывода цвета диффузии.
    mov oD0, c4
     
    // Эта строка кода передает координаты первой текстуры меша, копируя
    // их из седьмого регистра данных вершины в регистр вывода данных текстуры
    mov oT0, v7


    Вот пиксел shader:

    // Эта строка может быть "ps.1.0", "ps.1.1", "ps.1.2", "ps.1.3", "ps.1.4"
    // и так далее. Чем больше версия шейдеров, тем меньше компьютеров её
    // поддерживают, но вы можете применять более сложные эффекты.
    // Сейчас большинство компьютеров поддерживают версию 2.0, а самые
    // современные 3.0 и даже 4.0. Этот код использует версию ps.1.4
    // потому что в этой версии этот код проще чем в предыдущих.
    // Ultimate 3D поддерживает пиксельные шейдеры до версии 1.4.
    ps.1.4
     
    // Используем первые текстурные координаты (t0), для получения цвета
    // первой текстуры (r0) и сохраняем результат во временный регистр "r0".
    // Комментарий: Регистр r0 имеет у нас две цели: Он обозначает текстуру
    // (для второй текстуры соответственно r1) и он используется как выходной
    // регистр.
    texld r0, t0
     
    // Умнажаем цвет текстуры (r0) на цвет материала (v0) и сохраняем
    // результат в регистр вывода (r0). Значение r0 на выходе из шейдера
    // будет использоваться как цвет пикселя.
    mul r0, r0, v0



    И вот файл эффекта Ultimate 3D:

    // Эта строка должна быть первой во всех файла эффектов Ultimate 3D
    Ultimate3DEffectFile 1.0
     
    // Используем вершинный шейдер (полагается, что он сохранен в этом файле)
    VertexShaderFile effects/VertexShader.vsh
    // Используем пиксельный шейдер. Как я уже сказал вершинные шейдеры
    // можно использовать и без пиксельных, хотя тут мы используем и их.
    PixelShaderFile effects/PixelShader.psh
     
    // Регистры с c0 до c3 будут содержать правильную матрицу преобразования
    // в вершинном шейдере.
    VSConstant 0 VS_CONST_WORLD_VIEW_PROJ_TRANS_1
    VSConstant 1 VS_CONST_WORLD_VIEW_PROJ_TRANS_2
    VSConstant 2 VS_CONST_WORLD_VIEW_PROJ_TRANS_3
    VSConstant 3 VS_CONST_WORLD_VIEW_PROJ_TRANS_4
    // c4 будет содержать цвет материала в вершинном шейдере
    VSConstant 4 VS_CONST_MAT_DIFFUSE


    Это - только семь линий кодекса shader, и два из них всегда - то же самое. Так, поскольку Вы можете видеть, shader программирование не слишком твердо. Однако, это требует немного математического знания. Часть этого знания может быть прочитана в обучающей программе о математических функциях Ultimate 3D. Если Вы пропускаете эту обучающую программу, это не проблема. Но однажды Вы можете заметить, что Вы стали лучшим программистом и что Вы чувствуете себя готовыми к этому теперь. И затем Вы должны возвратиться, чтобы расширить Ваш горизонт.

    В современных играх Вы не видите фактически ничего, что не использует эффекты shader. Они чрезвычайно важны для современной графики. Как только Вы в состоянии к программе shaders, у Вас есть окончательное решение для всех Ваших специальных потребностей эффекта. Только, чтобы дать Вам общее представление того, что Вы пропускаете, когда Вы пропускаете эту главу, вот несколько примеров для методов, которые могут быть поняты с shaders легко:
    - Отражение и картография преломления для прекрасной воды
    - Почтовый экран shaders для эффектов, таких как HDR и размывание движения
    - Волнение структуры для больших погодных эффектов и чрезвычайно реалистического огня

    - Почтовые эффекты деформации экрана
    - И еще много. Нет вероятно никого, кто знает обо всех возможных методах.
    Кроме того,
    Ultimate 3D демонстрационный пример содержит несколько прохладных эффектов shader. К сожалению это взяло бы слишком долго, чтобы написать полное введение в shader, программирующий здесь. К счастью другие люди сделали это прежде, а именно, Wolfgang Engel. Он написал большие обучающие программы, чтобы начать с программированием shader.

    Это - большая обучающая программа о программировании вершины shaders  Wolfgang Engel.

    Это - другая обучающая программа Wolfgang Engel о пикселе shader программирующий (отметьте, что Вы не можете использовать пиксел shaders без вершины shaders).

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

    Вы не должны пропустить вершину Microsoft shader ссылка  и пиксел shader ссылка, также. Это не обучающая программа, а место, где Вы можете искать что-нибудь о программировании shader и где Вы получаете действительно достоверную информацию.

    Как только Вы прочитали и поняли обучающие программы Wolfgang Engel's, у Вас должна быть теоретическая основа, Вы должны программировать shaders. Так или иначе обучение на практике - лучший способ изучить программирование shader. Так только игра вокруг с этим. Не каждый shader, который Вы делаете, должен выполнить некоторую цель, пока Вы изучаете кое-что при письме этого. Если у Вас есть какие-нибудь вопросы о shader программирование, Вы можете спросить их в
    Ultimate 3D сообществе наверняка. К программе shaders, которые совместимы с Ultimate 3D, Вы нуждаетесь в одной информации: Вы должны знать, который вершина shader входной регистр данных содержит какой данные. Таким образом вот небольшой список:
    v0 - Положение в месте петли
    v1 - Очищение данных веса для моделей с очищением, вторым положением для моделей с tweening
    v2 - Четыре матричных индекса для моделей с очищением, секунда, нормальная для моделей с tweening
    v3 - (Сначала) нормальный вектор
    v7 к v14 - восемь одному - к четырехмерным координатам структуры


    Введение в *.ufx формат файла

    Программирование Shader является достаточно трудным, таким образом было бы трудно, если Вы должны были заботиться о вычислении ценностей для shader констант также. Из-за этого я изобрел *.ufx формат файла. Это - формат файла, который управляет эффектами shader, включая всю информацию, которая принадлежит им. Если Вы используете *.ufx файл для своего эффекта shader, Вы ничего не должны будете сделать после погрузки его. Вы не должны вычислять большое количество shader констант, потому что Вы можете выбрать из длинного списка обычно используемых shader констант для каждого отдельного постоянного регистра в *.ufx файле. И константы, которые являются фактически постоянными для каждого использования shader, могут быть настроены в *.ufx файле или использовании инструкции определения shader. Вы можете также определить альтернативные эффекты, которые должны использоваться, если необходимая shader версия не поддержана (их также называют методами отступления).

    Таким образом Вы видите, что *.ufx формат файла может спасти Вас большая работа. К сожалению не то, чтобы легкий в использовании в настоящее время. Но не волнуйтесь, я напишу инструмент композитора эффекта, когда я получу время. В этом инструменте будет бремя и понизит систему, чтобы создать *.ufx файлы и графическую продукцию, которая немедленно показывает Вам результат.

    Давайте доберемся до объяснения *.ufx формата файла. Каждый *.ufx файл должен быть составлен из нескольких линий. Каждая линия может содержать точно один кусок. Кусок всегда начинается с названия куска. Тогда несколько параметров для куска могут следовать, который может быть последовательностями или числами. Отметьте, что Вы можете вставить комментарии везде, где Вы хотите при письме "//". Первый кусок, который должен быть в *.ufx файле:

    Ultimate3DEffectFile %version

    версия
    В настоящее время есть версии 1.0 и 1.1. Каждые 1.0 файла эффекта - также действительные 1.1 shader и собрать соответственно. Таким образом Вы должны всегда писать 1.1 здесь.


    VertexShaderFile %FileNameWithPath

    FileNameWithPath
    Имя файла и путь shader файла относительно папки, которая содержит выполнимую игру, например,
    effects\EffectVertexShader.vsh.


    Если Вы работали с
    Ultimate 3D форматом файла эффекта 1.0, Вы можете задаваться вопросом, куда параметры TextureCoordinateSize пошли. Ответ - то, что Ultimate 3D определяет их автоматически теперь, в зависимости от доступных данных вершины в модели. Это делает shader систему более предохранительной. Если Вы попытаетесь просить эффект shader о модели, у которой нет необходимых данных вершины, то сообщение об ошибке выскочит. После того, как Вы определили вершину shader, Вы можете определить пиксел shader:

    PixelShaderFile %FileNameWithPath

    FileNameWithPath
    Имя файла и путь shader файла относительно папки, которая содержит выполнимую игру, например, effects\EffectPixelShader.psh.

    Отметьте, что Вы не должны настроить пиксел shader. Затем Вы можете формировать константы, которые должны быть настроены для shaders. Есть только один кусок для этого, но он может взять длинный список параметров. Понимание, что скупые параметры требуют понимания векторных вычислений и матрицы. Вот постоянный кусок для вершины shaders:

    VSConstant %ConstantIndex %ConstantIdentifier %ManuallySettableValues

    ConstantIndex
    Индекс постоянного регистра эта константа должен быть связан с. Это может быть ценностью в диапазоне от 0 до 95.

    ConstantIdentifier

    То, что следует, является длинным списком всех постоянных регистров,
    Ultimate 3D, может вычислить для Вас автоматически. Весь matrices или векторы, которые обращаются к руководству или положению других объектов, уже преобразованы, чтобы поймать в сети место! Важно помнить это. Преобразовывая указания или положения в место петли прежде, чем передать их к вершине shader намного более эффективен чем выполнение этого для каждой отдельной вершины в вершине shader. И обычно положение в мировом месте не необходимо. В случае, если Вы должны нуждаться в этом так или иначе, Вы можете получить это, преобразовывая это назад использование петли к мировой космической матрице преобразования. Исключение от этого - модели с очищающей вершиной, потому что у тех есть многие различная петля к мировым космическим преобразованиям. Для тех постоянную информацию передают в мировом месте, и мир, чтобы поймать в сети космическую матрицу и петлю к мировой космической матрице всегда является матрицей идентичности. Цветную информацию всегда передают, используя ценности в диапазоне от 0 до 1 вместо ценностей в диапазоне от 0 до 255.
    VS_CONST_MANUAL_SETTABLE: Этот параметр говорит
    Ultimate 3D, что он, как предполагается, устанавливает константу в ценности, данные в следующем параметре (ManualSettableValues).
    VS_CONST_WORLD_VIEW_PROJ_TRANS_1: первая колонка продукта мира, представления и преобразования проектирования, которое приводит к петле к матрице преобразования места проектирования.
    VS_CONST_WORLD_VIEW_PROJ_TRANS_2: вторая колонка той же самой матрицы.
    VS_CONST_WORLD_VIEW_PROJ_TRANS_3: третья колонка той же самой матрицы.
    VS_CONST_WORLD_VIEW_PROJ_TRANS_4: четвертая колонка той же самой матрицы.
    VS_CONST_WORLD_VIEW_TRANS_1: первая колонка продукта мира и преобразования представления, которое приводит к петле, чтобы рассмотреть космическую матрицу преобразования.
    VS_CONST_WORLD_VIEW_TRANS_2: вторая колонка той же самой матрицы.
    VS_CONST_WORLD_VIEW_TRANS_3: третья колонка той же самой матрицы.
    VS_CONST_WORLD_VIEW_TRANS_4: четвертая колонка той же самой матрицы.
    VS_CONST_WORLD_TRANS_1: первая колонка петли к мировой космической матрице.
    VS_CONST_WORLD_TRANS_2: вторая колонка петли к мировой космической матрице.
    VS_CONST_WORLD_TRANS_3: третья колонка петли к мировой космической матрице.
    VS_CONST_WORLD_TRANS_4: четвертая колонка петли к мировой космической матрице.
    VS_CONST_INV_WORLD_TRANS_1: первая колонка мира, которая поймает в сети космическую матрицу.
    VS_CONST_INV_WORLD_TRANS_2: вторая колонка мира, чтобы поймать в сети космическую матрицу.
    VS_CONST_INV_WORLD_TRANS_3: третья колонка мира, чтобы поймать в сети космическую матрицу.
    VS_CONST_INV_WORLD_TRANS_4: четвертая колонка мира, чтобы поймать в сети космическую матрицу.
    VS_CONST_VIEW_TRANS_1: первая колонка мира, которая рассмотрит космическую матрицу.
    VS_CONST_VIEW_TRANS_2: вторая колонка мира, чтобы рассмотреть космическую матрицу.
    VS_CONST_VIEW_TRANS_3: третья колонка мира, чтобы рассмотреть космическую матрицу.
    VS_CONST_VIEW_TRANS_4: четвертая колонка мира, чтобы рассмотреть космическую матрицу.
    VS_CONST_PROJ_TRANS_1: первая колонка представления к проектированию делает интервалы между матрицей.
    VS_CONST_PROJ_TRANS_2: вторая колонка представления к проектированию делает интервалы между матрицей.
    VS_CONST_PROJ_TRANS_3: третья колонка представления к проектированию делает интервалы между матрицей.
    VS_CONST_PROJ_TRANS_4: четвертая колонка представления к проектированию делает интервалы между матрицей.
    VS_CONST_MATRIX_STACK: Эта константа необходима для моделей с очищающей вершиной. Это отличается от всех других констант, потому что это не использует только один постоянный регистр, но все постоянные регистры, которые находятся позади определенного постоянного регистра. Постоянный регистр, для которого это настроено, будет содержать ценности x=number переданного matrices, y=constant регистр первой матрицы, z=3, w=1. Эти ценности необходимы, чтобы преобразовать матричные индексы v2 к постоянным погашениям регистра. Все постоянные регистры позади VS_CONST_MATRIX_STACK будут переписаны с перемещенным 4x3 петля к мировому месту matrices единственных костей. Вы можете использовать m4x3, чтобы преобразовать векторы с ними.
    VS_CONST_CAMERA_POS: положение камеры (в месте петли).
    VS_CONST_MAT_AMBIENT: окружающий цвет материала.
    VS_CONST_MAT_DIFFUSE: разбросанный цвет материала.
    VS_CONST_MAT_EMISSIVE: эмиссионный цвет материала.
    VS_CONST_LIGHT_AMBIENT_COLOR: цвет рассеянного света.
    VS_CONST_LIGHT0_COLOR: легкий цвет первого источника света, настроенного для этого shader (см. ниже).
    VS_CONST_LIGHT1_COLOR: легкий цвет второго источника света, настроенного для этого shader (см. ниже).
    VS_CONST_LIGHT2_COLOR: легкий цвет третьего источника света, настроенного для этого shader (см. ниже).
    VS_CONST_LIGHT_DIRECTIONAL_DIRECTION: руководство направленного источника света настраивало как первый источник света (см. ниже).
    VS_CONST_LIGHT_POINT0_POSITION_INV_RANGE: Этот параметр сделает
    Ultimate 3D проход положением места петли первого источника света к x-, y-и z-компонентам shader константы и аналогу легкого диапазона к w-компоненту.
    VS_CONST_LIGHT_POINT1_POSITION_INV_RANGE: То же самое как выше, но для второго источника света.
    VS_CONST_LIGHT_POINT2_POSITION_INV_RANGE: То же самое как выше, но для третьего источника света.
    VS_CONST_FOG_DISTANCE: Этот параметр сделает
    Ultimate 3D проход расстоянием начала тумана к x-компоненту, расстоянием конца тумана к y-компоненту, взаимным расстоянием начала к z-компоненту и взаимным расстоянием конца к w-компоненту.
    VS_CONST_CURRENT_TIME: Этот параметр сделает
    Ultimate 3D проход временем, которое протекло, так как система была начата в секундах к x-компоненту, время, которое протекло с тех пор Ultimate 3D, калибровалось к y-компоненту, 0 к z-компоненту и 1 к w-компоненту.
    VS_CONST_CURRENT_FRAME: Этот параметр сделает
    Ultimate 3D проход, который фракционная часть текущей структуры оценивает x-компоненту и один минус содержание x-компонента к y-компоненту. Z-компонент будет содержать 0, и w-компонент будет содержать 1. Эта константа предназначается, чтобы использоваться, чтобы осуществить вершину tweening.

    ManuallySettableValues
    Этот параметр только требуется, если Вы передали VS_CONST_MANUAL_SETTABLE для предыдущего параметра. В этом случае Вы должны дать четыре реальных ценности здесь, которые будут настроены как ценности для x-, y-, z-и w-компонента shader константы.

    Настраивание пиксела shader константы легче, потому что у Вас нет этого большим выбор различных констант. Пиксел shaders работа на более низком уровне чем вершина shaders и может взять самое большее восемь shader констант. Именно поэтому выбор меньше здесь. Вот кусок, это обязано настраивать пиксел shader константы:

    PSConstant %ConstantIndex %ConstantIdentifier %ManuallySettableValues

    ConstantIndex
    Индекс постоянного регистра Вы хотите настроить. Эта ценность может быть в диапазоне от 0 до 7.

    ConstantIdentifier

    Поскольку я уже сказал, что нет то, что много различных идентификаторов что касается вершины shader константы. Вот список их:
    PS_CONST_MANUAL_SETTABLE: Этот параметр говорит
    Ultimate 3D, что он, как предполагается, устанавливает константу в ценности, данные в следующем параметре (ManualSettableValues).
    PS_CONST_LIGHT_AMBIENT_COLOR: цвет окружающего освещения.
    PS_CONST_LIGHT_AMBIENT_COLOR_MATERIAL: продукт цвета рассеянного света и окружающего цвета материала.
    PS_CONST_LIGHT0_COLOR: цвет первого источника света, это настроено для этого эффекта (см. ниже).
    PS_CONST_LIGHT1_COLOR: цвет второго источника света, это настроено для этого эффекта (см. ниже).
    PS_CONST_LIGHT2_COLOR: цвет третьего источника света, это настроено для этого эффекта (см. ниже).
    PS_CONST_LIGHT0_COLOR_MATERIAL: цвет первого источника света это настроено для этого shader, умноженного разбросанным цветом материала.
    PS_CONST_LIGHT1_COLOR_MATERIAL: цвет второго источника света это настроено для этого shader, умноженного разбросанным цветом материала.
    PS_CONST_LIGHT2_COLOR_MATERIAL: цвет третьего источника света это настроено для этого shader, умноженного разбросанным цветом материала.
    PS_CONST_MAT_AMBIENT: окружающий цвет материала.
    PS_CONST_MAT_DIFFUSE: разбросанный цвет материала.
    PS_CONST_MAT_EMISSIVE: эмиссионный цвет материала.

    ManuallySettableValues
    Этот параметр только требуется, если Вы передали PS_CONST_MANUAL_SETTABLE для предыдущего параметра. В этом случае Вы должны дать четыре реальных ценности здесь, которые будут настроены как ценности для x-, y-, z-и w-компонента shader константы.

    Они - все куски, Вы должны создать эффект shader. Но что относительно методов отступления? Они фактически весьма легки. Вы только должны написать:

    FallBackTechnique{
    }

    Между этими двумя скобками Вы можете вставить один кусок VertexShaderFile, один кусок PixelShaderFile, и так много VSConstant и куски PSConstant, как Вы хотите.

    Так как это было большим количеством определений, вот один пример для действительного *.ufx файла (предполагающий, что shader файлы он относится, чтобы существовать).

    // Это пример *.ufx файла
    Ultimate3DEffectFile 1.0
     
    // Пиксельный шейдер ниже должен использовать версию 1.4
    VertexShaderFile shaders/ShaderEffect1_4.vsh
    PixelShaderFile shaders/ShaderEffect1_4.psh
     
    VSConstant 0 VS_CONST_WORLD_VIEW_PROJ_1
    VSConstant 1 VS_CONST_WORLD_VIEW_PROJ_2
    VSConstant 2 VS_CONST_WORLD_VIEW_PROJ_3
    VSConstant 3 VS_CONST_WORLD_VIEW_PROJ_4
     
    VSConstant 4 VS_CONST_MAT_DIFFUSE
     
    // Шейдеру нужны эти значения чтобы что-то посчитать. Они так же могут быть установлены инструкцией "def" в вершинном шейдере.
    VSConstant 5 VS_CONST_MANUAL_SETTABLE 3.14 6.28 -1 5
     
    // Этот код будет использован если пиксельные шейдеры версии 1.4 не поддерживаются
    FallBackTechnique
    {
    // Пиксельный шейдер ниже использует версию 1.2
    VertexShaderFile shaders/ShaderEffect1_2.vsh
    PixelShaderFile shaders/ShaderEffect1_2.psh
    VSConstant 0 VS_CONST_WORLD_VIEW_PROJ_1
    VSConstant 1 VS_CONST_WORLD_VIEW_PROJ_2
    VSConstant 2 VS_CONST_WORLD_VIEW_PROJ_3
    VSConstant 3 VS_CONST_WORLD_VIEW_PROJ_4
     
    VSConstant 4 VS_CONST_MAT_DIFFUSE
     
    VSConstant 5 VS_CONST_MANUAL_SETTABLE 3.14 6.28 -1 5
    }

    Применение shader

    Это было большим количеством теории. Теперь давайте возвратимся к практическому использованию эффектов shader. Настраивающие эффекты shader довольно легки. Каждый материал модели может иметь свой собственный эффект shader. Чтобы установить это, Вы нуждаетесь только в одной функции:

    Эта функция загружает данный *.ufx файл и использует его для данного материала объекта, который вызывает функцию.

    LoadMaterialEffect(
    MaterialIndex,
    UFXFile
    )

    MaterialIndex
    Индекс материала Вы хотите применить эффект shader для.

    UFXFile
    *.ufx файл, который должен использоваться для этого материала. Если Вы передадите пустую последовательность для этого параметра (""), то текущий эффект будет инвалидом.


    Если вы использовали вершину shaders с Ultimate 3D v. 1.31, Вы можете помнить, что не было никакого *.ufx формата файла. Вместо этого Вы только загрузили shader, и это получило ряд заданных shader констант. Так как я не хотел ломаться вниз совместимость полностью, есть функция в
    Ultimate 3D 2.0 и выше, который работает подобным способом. Это не просит *.ufx файл, но для *.vsh файла.

    Эта функция настраивает данную вершину shader для данного материала, используя следующий набор констант:
    0: VS_CONST_VIEW_TRANS_1
    1: VS_CONST_VIEW_TRANS_2
    2: VS_CONST_VIEW_TRANS_3
    3: VS_CONST_VIEW_TRANS_4
    4: VS_CONST_WORLD_VIEW_PROJ_TRANS_1
    5: VS_CONST_WORLD_VIEW_PROJ_TRANS_2
    6: VS_CONST_WORLD_VIEW_PROJ_TRANS_3
    7: VS_CONST_WORLD_VIEW_PROJ_TRANS_4
    8: VS_CONST_WORLD_TRANS_1
    9: VS_CONST_WORLD_TRANS_2
    10: VS_CONST_WORLD_TRANS_3
    11: VS_CONST_WORLD_TRANS_4
    12: VS_CONST_MAT_DIFFUSE

    CreateMaterialVSEffect(
    MaterialIndex,
    VertexShaderFile
    )

    MaterialIndex
    К индексу материала вершина shader эффект нужно относиться.

    VertexShaderFile

    Имя файла и путь вершины shader, который должен использоваться (например, "effects\VSEffect.vsh").

    Я не рекомендую использовать эту функцию, если Вы не хотите использовать shaders, которые сделаны для
    Ultimate 3D v 1.31. Если Вы не, Вы должны создать *.ufx файл. Большая вещь о *.ufx файлах - то, что они фактически делают большую часть работы для Вас. Если Вы хотите поддержать Ultimate 3D Сообщество, и знать, как написать эффекты shader Вы должны сделать пакет хороших эффектов shader включая *.ufx файлы и отправить его на Ultimate 3D Сообществе. Наличие хорошей коллекции предварительно сделанных эффектов shader там было бы большим.


    Настраивающие shader константы

    Наиболее необходимые shader константы могут быть настроены, используя *.ufx файлы. Но что относительно тех, которые не могут быть вычислены Ultimate 3D автоматически? Для тех есть две простых функции, чтобы изменить ценности вершины и пиксела shader константы, которые не становятся настроенными Ultimate 3D автоматически. Вот описание их:

    Эта функция настраивает новую ценность для вершины shader постоянный регистр с данным индексом, в случае, если это не становится настроенным Ultimate 3D автоматически.

    SetMaterialEffectVSConstant(
    MaterialIndex,
    VSConstantIndex,
    XValue, YValue, ZValue, WValue
    )

    MaterialIndex
    Индекс материала, который использует эффект.

    VSConstantIndex

    Индекс постоянного регистра Вы хотите изменить. Это значение должно быть в диапазоне от 0 до 95.

    XValue, YValue, ZValue, WValue
    Новые ценности для постоянного регистра. Они могут быть произвольными реальными ценностями.


    Функция SetMaterialEffectPSConstant(...) делает точно ту же самую вещь для пиксела shader константы. Единственное различие - то, что постоянный индекс должен быть в диапазоне от 0 до 7. По этой причине я не собираюсь объяснять это явно здесь.

    Ранее в главе, я сказал, 'видят ниже' несколько раз, говоря о постоянных регистрах, которые дают информацию об источниках света. Так что см. здесь. Вы можете настроить три источника света, которые должны использоваться для эффекта shader. Чтобы сделать это есть следующая функция:

    Эта функция настраивает три источника света, которые должны использоваться для эффекта shader данного материала образцового объекта.

    SetMaterialEffectLightSource(
    MaterialIndex,
    LightSourceID1, LightSourceID2, LightSourceID3
    )

    MaterialIndex
    Индекс материала источники света должен быть настроен для.

    LightSourceID1, LightSourceID2, LightSourceID3
    Удостоверение личности
    Game Maker источников света, которые должны использоваться для эффекта shader. Вы можете войти в id объектов для этих параметров. Если Вы не нуждаетесь во всех трех источниках света только поместить 0 для тех, Вы не хотите.

    Если Вы прочитали целую обучающую программу и обучающие программы о shader программирование, Вы должны быть действительно счастливыми. Вы теперь знаете, как использовать самую гибкую и особенность широко годную к употреблению Ultimate 3D. Не недооценивайте это. Сначала может случиться так, что Вы не знаете, что сделать с shaders, но скоро Вы получите некоторое представление. Кроме того, есть тонны обучающих программ в Интернете о действительно больших эффектах, которые могут быть поняты, используя shaders. Обычно есть даже данный пример. Я рекомендую играть вокруг с shaders много, чтобы изучить их. Это - действительно лучший способ собрать опыт здесь. Не каждый эффект, который Вы делаете, должен иметь смысл, пока Вы изучаете кое-что из создания этого. Только, изменяя единственные линии в кодексе shader Вы можете получить интересные эффекты, которые Вы не могли сделать без shaders. Например, Вы можете войти в вершину, нормальную в качестве разбросанного цвета для вершины (в вершине shader).
    Так весело проведите время:D.







    © Макарский Роман (ASD_W_GAMES). Shkola Ultimate 3D . Все права защищены.



    Школа Ultimate3D 2009-2010 год