Материалы используются для выражения того, как графический компонент (спрайт, тайловая карта, шрифт, GUI-нода, модель и т.д.) должны быть отрендерены.
Метариал содержит теги, информацию, которая применяется конвейером рендеринга для отбора объектов для рендера. Также он содержит ссылку на шейдерные программы, которые компилируются через доступные графические драйверы и загружаются на графическое аппаратное обеспечение и запускаются в каждом кадре, когда компонент рендерится.
Чтобы создать материал, кликните правой кнопкой мыши по нужной папке в секции Assets и выберите New... ▸ Material. (Вы также можете выбрать File ▸ New... из меню и затем выбрать Material). Дайте имя новому файлу материала и нажмите Ok.
Новый материал откроется в Material Editor.
Файл материала содержит следующую информацию:
render.enable_material()
. Имя должно быть уникальным.render.predicate()
для отбора компонентов, которые должны быть отрисованы вместе. Смотрите Документацию по рендерингу, описывающую как это делается. Максимальное число тегов, которое вы можете использовать в проекте — 32.Шейдерные константы или “uniform”-ы — это значения, которые передаются из движка в вершинные или фрагментные программы шейдеров. Для использования константы вы задаете ее в файле материала либо через свойство Vertex Constant либо через свойство Fragment Constant. Соответствующие uniform
переменные должны быть определены в программе шейдера. Следующие константы могут быть установлены в материале:
Example:
go.set("#sprite", "tint", vmath.vector4(1,0,0,1))
go.animate("#sprite", "tint", go.PLAYBACK_LOOP_PINGPONG, vmath.vector4(1,0,0,1), go.EASING_LINEAR, 2)
Сэмплеры используются для отбора цветовой информации из текстуры (тайловый источник или атлас). Цветовая информация может далее быть использована для вычислений в программе шейдера.
Компоненты типа спрайт, тайловая карта, GUI или эффект частиц автоматически получают набор sampler2D
. Первый объявленный sampler2D
в программе шейдера автоматически привязывается к изображению, на которое ссылается графический компонент. Поэтому сейчас нет необходимости указывать какие-либо сэмплеры в файле материалов для этих компонентов. Более того, эти типы компонентов сейчас поддерживают только одну текстуру. (Если вам нужно множество текстур в шейдере, вы можете использовать вызов render.enable_texture()
и устанавливать текстурные сэмплеры вручную из своего рендер скрипта.)
-- mysprite.fp
varying mediump vec2 var_texcoord0;
uniform lowp sampler2D MY_SAMPLER;
void main()
{
gl_FragColor = texture2D(MY_SAMPLER, var_texcoord0.xy);
}
Вы можете задать настройки сэмплера для компонента добавив сэмплер по имени в файле материалов. Если вы не устанавливаете свой сэмплер в файле материалов, будут использованы глобальные настройки graphics проекта.
Для компонентов типа модель, вам необходимо задать ваши сэмплеры в файле материала с теми настройками, которые вы хотите. Далее после этих действий редактор позволит вам выставить текстуры для любого модельного компонента, который использует этот материал:
-- mymodel.fp
varying mediump vec2 var_texcoord0;
uniform lowp sampler2D TEXTURE_1;
uniform lowp sampler2D TEXTURE_2;
void main()
{
lowp vec4 color1 = texture2D(TEXTURE_1, var_texcoord0.xy);
lowp vec4 color2 = texture2D(TEXTURE_2, var_texcoord0.xy);
gl_FragColor = color1 * color2;
}
sampler2D
переменной.WRAP_MODE_REPEAT
– повторит данные текстуры вне диапазона [0,1].WRAP_MODE_MIRRORED_REPEAT
– повторит данные текстуры вне диапазона [0,1], но каждое второе повторение будет зеркально отражено.WRAP_MODE_CLAMP_TO_EDGE
— будет приводить данные текстуры со значениями больше 1.0 к значению 1.0, а любые значения меньше 0.0 будут приводиться к значению 0.0 — то есть крайние пиксели будут повторяться до края.FILTER_MODE_NEAREST
– использует тексель с координатами ближайшими к центру пикселя.FILTER_MODE_LINEAR
– устанавливает взвешенное линейное среднее для массива текселей 2x2, которые лежат ближе всего к центру пикселя .FILTER_MODE_NEAREST_MIPMAP_NEAREST
– выбирает ближайшее значение текселя в отдельной MIP-карте.FILTER_MODE_NEAREST_MIPMAP_LINEAR
– выбирает ближайший тексель из двух ближайших лучших вариантов MIP-карт и затем линейно интерполирует между этими двумя значениями.FILTER_MODE_LINEAR_MIPMAP_NEAREST
– линейное интерполирование в пределах отдельной MIP-карты.FILTER_MODE_LINEAR_MIPMAP_LINEAR
– использует линейную интерполяцию для вычисления значения на каждой из двух карт, а затем выполняет линейную интерполяцию между этими двумя значениями.Когда конвейер рендеринга отрисовывает, он берет значения констант из буфера по-умолчанию — системного буфера констант. Вы можете создать собственный буфер констант, чтобы перекрыть константы по-умолчанию и вместо этого выставить uniform-ы для программы шейдера программно в рендер скрипте:
self.constants = render.constant_buffer() -- <1>
self.constants.tint = vmath.vector4(1, 0, 0, 1) -- <2>
...
render.draw(self.my_pred, self.constants) -- <3>
tint
в ярко-красныйУчтите, что элементы констант буфера ссылаются как обычная Lua таблица, но вы не можете итерироваться по буферу с помощью вызовов pairs()
или ipairs()
.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB