UV Polar Coordinates

Полярный 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;
}

UV Polar Coordinate

Описание параметров:

ПараметрНазначение
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.