Класс MeshMaterial представляет собой
специализированный материал для работы с объектами типа
Mesh. Он определяет, каким образом текстура и цвет будут
применяться к геометрии, передаваемой в графический процессор. В
архитектуре PixiJS материал играет роль связующего звена между
геометрией (вершинами, UV-координатами, индексами) и шейдерами, формируя
итоговый визуальный результат.
MeshMaterial является реализацией на базе
Shader и автоматически формирует базовый вершинный и
фрагментный шейдеры, оптимизированные для стандартных задач отображения
текстуры на произвольной геометрии.
Объект Mesh состоит из трёх ключевых компонентов:
MeshMaterial отвечает за:
Материал не хранит геометрию и не определяет форму объекта — он описывает только визуальную составляющую.
Базовый пример:
const texture = PIXI.Texture.from('image.png');
const material = new PIXI.MeshMaterial(texture);
Минимальный конструктор принимает:
new PIXI.MeshMaterial(texture, options);
texture — объект Texture, который будет
применён к поверхности.
options — объект конфигурации:
alpha — прозрачность материала (по умолчанию 1.0)tint — цветовая тонировкаpluginName — имя плагина рендераuniforms — дополнительные uniform-переменныеmaterial.texture = newTexture;
Текстура, применяемая к поверхности. При изменении текстуры автоматически обновляются связанные uniform-переменные.
Важно учитывать:
material.alpha = 0.5;
Определяет общую прозрачность материала. Передаётся в шейдер как множитель итогового цвета.
Особенности:
material.tint = 0xff0000;
Цветовая тонировка, применяемая к текстуре. Реализуется умножением RGB-значений пикселей на цветовой коэффициент.
Принцип работы:
Тонировка позволяет использовать одну текстуру для множества цветовых вариаций без создания копий.
MeshMaterial содержит набор uniform-переменных,
передаваемых в шейдер:
Стандартные:
uSampler — текстураalpha — прозрачностьtint — цветовой множительМожно добавлять собственные:
material.uniforms.customValue = 1.0;
Uniform-переменные обновляются автоматически перед отрисовкой.
MeshMaterial ожидает, что геометрия будет содержать как
минимум два атрибута:
aVertexPositionaTextureCoordЕсли атрибут aTextureCoord отсутствует, текстура не
будет отображаться корректно.
UV-координаты определяют, какая часть текстуры соответствует каждой вершине. Их диапазон обычно лежит в пределах [0, 1].
Пример геометрии:
const geometry = new PIXI.Geometry()
.addAttribute('aVertexPosition', vertices, 2)
.addAttribute('aTextureCoord', uvs, 2)
.addIndex(indices);
MeshMaterial автоматически создаёт базовый шейдер:
При необходимости возможно создание собственного материала через
Shader, однако MeshMaterial покрывает
большинство стандартных задач.
material.pluginName = 'batch';
Определяет, каким рендер-плагином будет обработан материал.
По умолчанию используется:
batch — для батчинга,mesh — специализированный рендеринг Mesh.Изменение pluginName влияет на производительность и поведение рендера.
MeshMaterial поддерживает батчинг при соблюдении
условий:
При различиях создаются дополнительные draw calls.
Факторы, влияющие на производительность:
Материал учитывает:
blendMode).Пример:
mesh.blendMode = PIXI.BLEND_MODES.ADD;
Материал автоматически интегрируется в систему смешивания движка.
Замена текстуры:
material.texture = PIXI.Texture.from('other.png');
Важные моменты:
uSampler;Создание собственного материала:
class CustomMaterial extends PIXI.MeshMaterial {
constructor(texture) {
super(texture);
this.uniforms.time = 0;
}
}
Можно:
Sprite использует специализированный материал,
оптимизированный под прямоугольные текстурированные объекты.
MeshMaterial:
Частые сценарии:
При изменении массива вершин:
geometry.getBuffer('aVertexPosition').update();
Материал автоматически применяет текстуру к новой форме.
Материал взаимодействует с объектом State, который
контролирует:
Пример:
mesh.state.culling = true;
Материал не хранит эти параметры напрямую, но работает совместно с ними.
Для продвинутых эффектов требуется использование
Shader.
MeshMaterial.Mesh.const mesh = new PIXI.Mesh(geometry, material);
app.stage.addChild(mesh);
MeshMaterial:
Shader,Program,uniformGroup,При каждом рендере:
MeshMaterial обеспечивает баланс между простотой
использования и возможностью расширения, оставаясь базовым инструментом
для текстурированного рендеринга произвольных поверхностей.