Wrap mode: clamp, repeat, mirror

В графических движках и рендерерах, таких как PlayCanvas, важную роль играет то, как текстуры отображаются на объектах. Текстуры — это изображения, которые накладываются на 3D-объекты, придавая им внешний вид, детализацию или эффект. Одной из ключевых характеристик текстуры является её способ обёртки, который определяет, как текстура ведёт себя при отображении на поверхности, если координаты текстуры выходят за пределы её размеров. В PlayCanvas для управления этим процессом предусмотрены три основных режима обёртки: clamp, repeat и mirror.

1. Clamp (Зажим)

Режим clamp является наиболее простым и ограничивает координаты текстуры в пределах её диапазона. Если координаты текстуры выходят за пределы [0, 1], то она будет просто растягиваться по краям, используя последний пиксель текстуры.

Особенности:

  • Все координаты, выходящие за пределы диапазона [0, 1], будут зажаты на значении крайних координат.
  • Это означает, что на краях текстуры будет повторяться тот же пиксель, что даёт эффект «закрытия» текстуры на границах.

Пример применения: Режим clamp используется, например, для создания эффекта светящегося края на текстурах, где область за пределами текстуры не должна быть видна.

var material = new pc.StandardMaterial();
material.diffuseMap = texture;
material.diffuseMap.addressU = pc.ADDRESS_CLAMP;
material.diffuseMap.addressV = pc.ADDRESS_CLAMP;

В данном примере текстура будет зажата по обеим осям и не будет повторяться, если координаты текстуры выходят за пределы диапазона.

2. Repeat (Повтор)

Режим repeat позволяет текстуре повторяться, если её координаты выходят за пределы [0, 1]. В этом режиме текстура будет повторяться по обеим осям (U и V) многократно, создавая эффект бесконечной плитки.

Особенности:

  • Текстура будет повторяться в зависимости от координат.
  • Этот режим идеален для создания фоновых текстур, таких как плитки или мелкие узоры, которые должны покрывать большую площадь.

Пример применения: Режим repeat применяется при создании текстур, которые должны покрывать большие объекты или сцены, как, например, асфальт на дороге, плитка или трава.

var material = new pc.StandardMaterial();
material.diffuseMap = texture;
material.diffuseMap.addressU = pc.ADDRESS_REPEAT;
material.diffuseMap.addressV = pc.ADDRESS_REPEAT;

С этим кодом текстура будет многократно повторяться, создавая эффект покрытия большой поверхности однотипной текстурой.

3. Mirror (Отражение)

Режим mirror напоминает repeat, но с одним отличием: текстура будет зеркально отображаться на каждом повторе. Таким образом, если координаты текстуры выходят за пределы, она будет повторяться с отражением, что даёт эффект чередования текстур.

Особенности:

  • Текстура повторяется, но при каждом новом повторении она отражается.
  • Этот режим полезен для создания симметричных текстур, таких как зеркала, отражения воды или текстуры с особыми узорами.

Пример применения: Режим mirror может быть использован при создании текстур, которые должны отображать симметричные узоры или эффекты.

var material = new pc.StandardMaterial();
material.diffuseMap = texture;
material.diffuseMap.addressU = pc.ADDRESS_MIRRORED_REPEAT;
material.diffuseMap.addressV = pc.ADDRESS_MIRRORED_REPEAT;

В этом примере текстура будет повторяться с зеркальным отражением по обеим осям.

Как выбрать режим обёртки?

Каждый режим обёртки подходит для различных типов текстур и задач в 3D-графике. При выборе подходящего режима важно учитывать следующие факторы:

  • Clamp — используется, когда нужно избежать повторов или когда за пределами текстуры должна быть одна единичная область (например, для создания контуров или свечения).
  • Repeat — идеален для текстур с повторяющимися узорами, где важно покрытие больших площадей (например, для покрытия пола, стен или больших объектов).
  • Mirror — подходит для симметричных текстур, когда нужно создать эффект отражения или зеркальной симметрии.

Правильный выбор режима обёртки значительно влияет на визуальные эффекты и производительность игры, поэтому важно учитывать контекст использования и требуемые визуальные эффекты при проектировании текстур.