4.4 KiB
Текстурные программы (TexturePipelineProgram)
Текстурная программа — это строка, описывающая источник текстуры и цепочку операций
над ней. Такие строки используются в textures моделей и компилируются
TexturePipelineProgram.
Общая форма
[tex] <base> [|> op(...)]*
tex в начале необязателен.
Базовые выражения
nameили"name.png"— ссылка на текстуру из assets. Расширение .png/.jpg/.jpeg допустимо.anim(...)— анимация из спрайт-листа (см. ниже).<w>x<h> <#RRGGBB|#RRGGBBAA>— заливка цветом.
Примеры:
stone
tex "core:stone.png"
32x32 "#FF00FF"
Аргументы операций
- Позиционные:
op(1, 2, "str") - Именованные:
op(w=16, h=16) - Значения: числа (uint32), строки в кавычках, либо идентификаторы.
Цвета задаются #RRGGBB или #RRGGBBAA.
Операции пайплайна
Операции без аргументов можно писать без (): brighten и т.п.
В подвыражениях текстур (см. ниже) операции без аргументов нужно писать со скобками:
brighten().
Операции, принимающие текстуру
overlay(tex)— наложение с альфой.mask(tex)— применение альфа-маски.lowpart(percent, tex)— смешивание нижней части (percent 1..100).
tex может быть:
- именем текстуры:
overlay("core:stone") - именованным аргументом:
overlay(tex="core:stone") - вложенной программой:
overlay( tex stone |> invert("rgb") )
Геометрия и альфа
resize(w, h)— ресайз до размеров.transform(t)— трансформация (значение 0..7).opacity(a)— прозрачность 0..255.remove_alphaилиnoalpha— убрать альфа-канал.make_alpha(color)— сделать альфу по цвету (цвет в#RRGGBB).
Цвет и яркость
invert(channels="rgb")— инверсия каналов (r,g,b,a).brighten()— лёгкое осветление.contrast(value, brightness)— контраст и яркость (-127..127).multiply(color)— умножение на цвет.screen(color)— экранный режим.colorize(color, ratio=255)— тонирование цветом.
Анимация
anim можно использовать в базе (с указанием текстуры) или в пайплайне
над текущим изображением.
База:
anim(tex, frame_w, frame_h, frames, fps, smooth, axis)
Пайплайн:
... |> anim(frame_w, frame_h, frames, fps, smooth, axis)
Именованные аргументы:
tex— имя текстуры (только для базовогоanim).frame_wилиwframe_hилиhframesилиcountfpssmooth(0/1)axis— режим нарезки:gили пусто: по сетке (слева направо, сверху вниз)x/h: по горизонталиy/v: по вертикали
Если frames не задан, количество кадров вычисляется автоматически:
- сетка:
(sheet.W / frame_w) * (sheet.H / frame_h) - ось X/Y:
sheet.W / frame_wилиsheet.H / frame_h
Примеры:
anim("core:sheet", 16, 16, fps=8) # сетка по умолчанию
anim("core:sheet", 16, 16, axis="x") # по горизонтали
stone |> anim(16, 16, fps=10, smooth=1) # анимировать текущую текстуру
Вложенные текстурные выражения
Некоторые операции принимают текстуру в аргументах. Чтобы передать не только имя,
но и полноценную программу, используйте префикс tex:
overlay( tex "core:stone" |> resize(16,16) |> brighten() )