Skip to content

Справочник API: Шейдеры

Шейдеры определяют цвет каждого пикселя в зависимости от его положения на холсте. Они в основном используются для градиентов, паттернов и шума. Шейдеры назначаются объекту Paint через paint.setShader(shader).

Градиенты

Градиенты — самый распространенный тип шейдеров. Skija поддерживает несколько видов:

Линейный градиент

Создает плавный переход между двумя точками.

Визуальный пример: См. examples/scenes/src/ShadersScene.java для примеров линейных, радиальных, круговых и конических градиентов, а также шумовых шейдеров.

java
Shader linear = Shader.makeLinearGradient(
    0, 0, 100, 100,      // x0, y0, x1, y1
    new int[] { 0xFFFF0000, 0xFF0000FF } // Цвета (от Красного к Синему)
);

Радиальный градиент

Создает круговой переход от центральной точки.

java
Shader radial = Shader.makeRadialGradient(
    50, 50, 30,          // центр x, y, радиус
    new int[] { 0xFFFFFFFF, 0xFF000000 } // Цвета (от Белого к Черному)
);

Круговой градиент (Sweep)

Создает переход, который "проходит" вокруг центральной точки (как цветовое колесо).

java
Shader sweep = Shader.makeSweepGradient(
    50, 50,              // центр x, y
    new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 }
);

Двухточечный конический градиент

Создает переход между двумя кругами (полезно для 3D-подобного освещения или бликов).

java
Shader conical = Shader.makeTwoPointConicalGradient(
    30, 30, 10,          // начальная точка x, y, радиус
    70, 70, 40,          // конечная точка x, y, радиус
    new int[] { 0xFFFF0000, 0xFF0000FF }
);

Шум и паттерны

Шум Перлина

Генерирует текстуры, похожие на облака, мрамор или огонь.

java
// Фрактальный шум
Shader noise = Shader.makeFractalNoise(
    0.05f, 0.05f,        // baseFrequencyX, baseFrequencyY
    4,                   // numOctaves
    0.0f                 // seed
);

// Турбулентность
Shader turb = Shader.makeTurbulence(0.05f, 0.05f, 4, 0.0f);

Шейдер изображения

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

java
// Доступ через класс Image
Shader imageShader = image.makeShader(
    FilterTileMode.REPEAT, 
    FilterTileMode.REPEAT, 
    SamplingMode.DEFAULT
);

Композиция и модификация

  • Shader.makeBlend(mode, dst, src): Комбинирует два шейдера, используя режим наложения.
  • shader.makeWithLocalMatrix(matrix): Применяет преобразование к системе координат шейдера.
  • shader.makeWithColorFilter(filter): Применяет цветовой фильтр к результату шейдера.

Режимы заполнения (FilterTileMode)

Когда шейдеру (например, градиенту или изображению) нужно заполнить область, превышающую его заданные границы:

  • CLAMP: Использует цвет края для заполнения остального пространства.
  • REPEAT: Повторяет паттерн.
  • MIRROR: Повторяет паттерн, зеркально отражая его на границах.
  • DECAL: Отображает прозрачность за пределами границ.