Полярный UV-шейдер в Godot Engine
Создание эффектов порталов, вихрей и вращающихся текстур с помощью полярных координат
Визуальные эффекты в играх — это не только текстуры и цвета, но и способ мышления. Один из таких способов — использовать полярные координаты вместо привычных декартовых. Этот подход открывает двери к целому ряду эффектов: от вращения и скручивания, до симуляции туннелей и порталов. В этом посте мы рассмотрим полярный UV-шейдер для Godot Engine, его структуру и способы применения.

Что такое полярные координаты?
Вместо координат (x, y), каждая точка описывается через:
- Радиус — расстояние от центра.
- Угол — направление от центра.
Это идеально подходит для визуальных эффектов с центральной симметрией: вращения, завихрения, расходимости и т.д.
Шейдер: UV → Polar
shader_type spatial;
uniform vec2 centerCoordinat = vec2(0.5, 0.5);
uniform float radial_scale : hint_range(0.0, 5.0) = 1.0;
uniform float length_scale : hint_range(0.0, 5.0) = 1.0;
uniform float angle_offset : hint_range(-1.0, 1.0) = 0.0;
uniform float radius_offset : hint_range(-1.0, 1.0) = 0.0;
uniform sampler2D texture_albedo : hint_default_white;
vec2 UVPolarCoordinates(vec2 uv, vec2 center, float radialScale, float lengthScale) {
vec2 m_delta = uv - center;
float m_radius = length(m_delta) * 2.0 * radialScale;
float m_Pi = 6.28318530718;
float m_angle = atan(m_delta.y, m_delta.x) / (m_Pi * lengthScale);
return vec2(m_radius, m_angle);
}
void fragment() {
vec2 polar_uv = UVPolarCoordinates(UV, centerCoordinat, radial_scale, length_scale);
polar_uv.x += radius_offset;
polar_uv.y += angle_offset;
ALBEDO = texture(texture_albedo, polar_uv).xyz;
}

Описание параметров:
Параметр | Назначение |
---|---|
Center | Центр полярной трансформации |
RadialScale | Масштаб радиального расстояния |
LengthScale | Масштаб угла (вращения) |
AngleOffset | Смещение по углу (вращение текстуры) |
RadiusOffset | Смещение по радиусу (туннельный эффект) |
Texture | Основная текстура |
Что можно сделать с этим шейдером?
Вращение:
material.set_shader_parameter("inputAngleOffset", Time.get_ticks_msec() * 0.0002)
Эффект портала:
Анимируй одновременно угол и радиус — создастся эффект «всасывания»:
gdscriptКопироватьРедактироватьmaterial.set_shader_parameter("inputAngleOffset", time * 0.1)
material.set_shader_parameter("inputRadiusOffset", sin(time * 2.0) * 0.1)
Радиальные волны или спектрограммы:
Используй текстуру спектра или шум и применяй полярный маппинг.
Заключение
Полярные координаты — мощный инструмент в арсенале художника и программиста. Они позволяют смотреть на текстуры под другим углом (буквально) и создавать уникальные визуальные эффекты, которые сложно достичь обычным способом. Попробуй добавить этот шейдер в свой проект — и ты откроешь для себя новый взгляд на дисторсию и движение.
Получить шейдер.
Перейдите чтобы скачать этот шейдер из GodotShader сайта: UV Polar Coordinates — Godot Shaders
Следи за обновлениями на arcticwolves.games или в блоге на WordPress.