Трёхмерное пространство — это геометрическая модель физического мира, в которой положение любой точки однозначно определяется тремя независимыми координатами. В отличие от плоскости, где достаточно двух чисел, здесь добавляется третья ось, отвечающая за глубину или высоту. Именно эта модель лежит в основе нашего восприятия реальности, компьютерной графики и инженерных расчётов.

Мы привыкли оперировать понятиями длины, ширины и высоты интуитивно, но строгое математическое описание требует введения системы отсчёта и базиса. В этой статье разберём, как устроено 3D-пространство изнутри: от векторной алгебры до практического применения в Blender, AutoCAD и современных VR-устройствах.

Математические основы трёхмерного пространства

С точки зрения линейной алгебры, 3D-пространство — это векторное пространство размерности три над полем вещественных чисел. Любой вектор здесь раскладывается по трём линейно независимым базисным векторам, обычно обозначаемым как i, j, k или x, y, z. Начало координат — точка (0, 0, 0) — служит единой точкой отсчёта для всех измерений.

Ключевым свойством является ориентация базиса: существует только два варианта — правое и левое правило. В классической физике и математике принято правое правило: если ось X направлена вправо, а Y — вверх, то Z смотрит на наблюдателя. Нарушение этого соглашения в коде приводит к зеркальному отображению моделей. Скалярное произведение векторов позволяет вычислять углы между гранями и длину проекций без тригонометрических функций.

Расстояние между точками A(x1,y1,z1) и B(x2,y2,z2) вычисляется через теорему Пифагора, обобщённую на три измерения: корень из суммы квадратов разностей координат. Эта метрика делает пространство евклидовым, то есть плоским в глобальном масштабе.

💡

Правое правило ориентации базиса — стандарт де-факто в математике и OpenGL; DirectX исторически использует левое правило, что требует конвертации матриц при портировании.

Геометрия в трёх измерениях: тела и их свойства

Базовыми строительными блоками 3D-геометрии являются примитивы: куб, сфера, цилиндр, конус и тор. Любая сложная модель в CAD-системах или игровых движках состоит из этих форм или их полигональных приближений. Понимание параметров примитивов — радиуса, высоты, сегментов — критично для процедурной генерации контента.

Для многогранников работает формула Эйлера: число вершин минус число рёбер плюс число граней равно двум (V - E + F = 2). Это топологический инвариант, который не зависит от формы объекта, а только от его связности. Он используется для проверки корректности мешей перед экспортом в .stl или .obj.

Основные примитивы, с которых начинается любая сцена:

  • 🟦 Куб (Hexahedron) — 8 вершин, 12 рёбер, 6 квадратных граней; эталон для воксельных структур.
  • 🟪 Сфера (UV-sphere / Icosphere) — аппроксимация идеальной формы треугольниками; icosahedron-based даёт более равномерную топологию.
  • 🟨 Цилиндр — задан радиусом основания, высотой и числом сегментов окружности; без крышек становится трубой.
  • 🟧 Конус — частный случай пирамиды с бесконечным числом граней боковой поверхности.
  • 🟩 Тор — продукт двух окружностей; задаётся большим и малым радиусами, применяется для колец и деталей креплений.
📊 Какую 3D-примитивную форму вы используете чаще всего как стартовую для моделирования?
Куб (Box modeling)
Сфера (Sculpting base)
Цилиндр (Hard surface)
Другую / Импортирую референс

Системы координат: от Декарта до сферических

Декартова прямоугольная система — стандарт для моделирования и рендеринга, но не единственная. Для задач с осевой симметрией (валы, трубы) удобнее цилиндрическая система (ρ, φ, z), где ρ — расстояние до оси Z, φ — азимутный угол. В астрономии, радиолокации и шейдерах окружения преобладает сферическая система (r, θ, φ): радиус, полярный и азимутный углы.

Переход между системами требует тригонометрических преобразований. Например, из сферических в декартовы: x = r·sinθ·cosφ, y = r·sinθ·sinφ, z = r·cosθ. Ошибки в порядке углов (θ и φ часто путают в разных библиотеках) — частая причина артефактов на полюсах текстур.

Система Параметры Область применения Сложность интерполяции
Декартова x, y, z CAD, игровые движки, 3D-печать Низкая (линейная)
Цилиндрическая ρ, φ, z Детали вращения, спирали, пружины Средняя (тригонометрия)
Сферическая r, θ, φ Небесная механика, HDRI, шейдеры Высокая (нелинейная)
Гомогенная x, y, z, w Матричные преобразования, перспектива Специфическая (проективная)

Гомогенные координаты с компонентой w позволяют объединить перемещение, поворот и масштабирование в одну матрицу 4×4. При w=1 это точка, при w=0 — направление (вектор). Это фундамент графического конвейера GPU.

💡

При импорте модели из Blender (Z-up) в Unreal Engine (Z-up) или Unity (Y-up) всегда проверяйте настройки осей в диалоге экспорта FBX — автоматическая конвертация не всегда срабатывает корректно для скелетной анимации.

Применение 3D-пространства в современных технологиях

Компьютерная графика — главной потребителем 3D-математики. Конвейер рендеринга преобразует вершины из локального пространства модели в мировое, затем в пространство камеры (view space) и наконец в отсекаемое пространство клиппинга. Каждый этап — умножение на матрицу 4×4. Вершинный шейдер выполняет эту работу миллионы раз за кадр.

В инженерном проектировании (CAE/CAD) 3D-пространство используется для расчёта напряжений методом конечных элементов (FEM). Область разбивается на тетраэдры или гексаэдры, для каждого решается система уравнений упругости. Точность результата прямо зависит от качества сетки: аспект-ratio элементов не должен превышать 1:5.

Ключевые отрасли, где 3D-пространство — рабочий инструмент:

  • 🎮 Геймдев и реальное время — оптимизация мешей, LOD, окклюзия, рейтрейсинг в Unreal Engine 5 / Unity HDRP.
  • 🏗 Архитектура и BIM — координация коллизий (clash detection) инженерных сетей в Revit / Navisworks.
  • 🏭 Промышленный дизайн и ЧПУ — CAM-стратегии фрезеровки 3-осевые и 5-осевые, генерация G-кода.
  • 🏥 Медицина — сегментация КТ/МРТ снимков, планирование операций, биопечать тканей.
  • 🕶 XR (VR/AR/MR) — трекинг позиции головы (6DoF), построение карт окружения (SLAM), окклюзия виртуальных объектов реальными.

⚠️ Внимание: при работе с большими сценами (городской масштаб) точность float32 (7 значащих цифр) становится недостаточной — вершины «дрожат» далеко от начала координат. Решение: перебазирование мира (floating origin) или использование double / float64 в шейдерах.

💡

Единица измерения в 3D-сцене (метр, сантиметр, миллиметр) должна быть зафиксирована на этапе блокинга; смена масштаба позже ломает физику, освещение и импорт ассетов.

Основы 3D-моделирования: вершины, рёбра, грани

Полигональная сетка (mesh) — я структура для представления поверхностей. Она состоит из вершин (точек в 3D), рёбер (линий, соединяющих пары вершин) и граней (полигонов, обычно треугольников или квадов). Нормаль грани — вектор, перпендикулярный её плоскости — определяет, как свет взаимодействует с поверхностью.

Топология сетки решает качество деформации при анимации. Квады (quads) предпочтительнее треугольников для субдивизион-моделирования: они предсказуемо делятся алгоритмами Catmull-Clark. Треугольники неизбежны при экспорте в игровые движки — GPU работает только с ними. Ngons (полигоны >4 вершин) допустимы только на этапе блокинга.

Чек-лист перед экспортом игрового ассета:

☑️ Подготовка меша к экспорту в FBX/GLTF

Выполнено: 0 / 5

Файловые форматы делятся на промежуточные (.blend, .max, .ma) и обменные. .fbx хранит анимацию, скелеты и блендшейпы; .gltf/.glb — стандарт веба и AR, основан на JSON + бинарных бафферах; .usd/.usdz — пиксель-ориентированный формат Pixar / Apple для сложных конвейеров VFX.

Восприятие глубины и методы визуализации

Человеческий глаз воспринимает объём за счёт стереopsis (бинокулярной диспарарности), аккомодации хрусталика, перспективы, окклюзии и привычного размера объектов. На плоском экране мы имитируем эти сигналы. Перспективная проекция сжимает дальние объекты: координата w после умножения на матрицу проекции хранит глубину, а деление xyz/w даёт NDC (нормализованные координаты устройства).

Ортогональная проекция сохраняет параллельность линий и используется в CAD-видах (вид сверху, спереди, сбоку) и изометрии. Она не имеет точки схода, поэтому не даёт ощущения глубины без дополнительных подсказок — теней, контуров, тумана. Z-буфер (depth buffer) на GPU решает задачу видимости: фрагмент с меньшим значением глубины перезаписывает пиксель.

⚠️ Внимание: Z-fighting (мерцание совпадающих полигонов) возникает при недостаточной точности буфера глубины на больших расстояниях. Лечится увеличением ближней плоскости отсечения (near plane) или использованием реверс-зу (reverse-Z) техники с float32 буфером.

Стерео-рендеринг для VR требует отрисовки сцены дважды — для левого и правого глаза — с разными матрицами вида. Разница в положении камер (IPD, межзрачковое расстояние) создаёт эффект объёма. Несовпадение IPD пользователя и настройки движка вызывает усталость и тошноту за 10–15 минут сессии.

💡

Для веб-3D (Three.js, Babylon.js) используйте DRACO-сжатие геометрии и Basis Universal для текстур — это сократит загрузку сцены в 3–5 раз без видимых потерь качества.

Современные технологии: от 3D-печати до метавселенных

Аддитивное производство (3D-печать) переводит цифровую модель в физический объект слой за слоем. Слайсер (Cura, PrusaSlicer, Bambu Studio) режет STL/3MF на горизонтальные сечения, генерирует периметры, заполнение (infill) и опоры. Критичны ориентация модели на столе и высота слоя: они определяют анизотропную прочность детали — по оси Z она в 3–5 раз ниже, чем в плоскости XY.

Обратный процесс — 3D-сканирование. Лидар (ToF) строит облако точек по времени полёта фотонов, фотограмметрия — по параллаку на сотнях фото, структурированный свет — по деформации проектируемой сетки. Результат — облако точек или полигональная сеть, требующая ретопологии для использования в CAD.

Перспективы стандартов Метавселенной (Metaverse Standards Forum)

Главная цель — интероперабельность аватар, ассетов и платежей между мирами. Ключевые форматы: glTF 2.0 с расширениями для физики/аудио, USD для сложных сцен, DID/VC для идентичности. Единого «метавселенного протокола» не существует — это набор открытых стандартов, а не платформа одной компании.

Часто задаваемые вопросы (FAQ)

В чём разница между локальными, мировыми и экранными координатами?

Локальные — относительно пивота объекта (своя система отсчёта). Мировые — в единой сцене после применения матрицы модели. Экранные (NDC/пиксели) — после проекции камеры и вьюпорта; используются для UI-наложений и пост-эффектов.

Почему нормали должны быть нормализованы (длина 1)?

Ненормализованные нормали искажают расчёт освещения (косинус угла света) и ломают карты нормалей. При неравномерном масштабировании объекта нормали нужно трансформировать обратной транспонированной матрицей (inverse transpose), а не просто матрицей модели.

Что такое UV-развёртка и зачем она нужна?

Проекция 3D-поверхности на 2D-плоскость текстуры. Каждой вершине присваиваются координаты U, V (в диапазоне 0–1). Без UV нельзя наложить диффузную текстуру, нормальную карту или маску шероховатости. Перекрытия UV (overlaps) допустимы только для зеркально-симметричных частей с одинаковой текстурой.

Как работает Z-буфер и что такое Z-fighting?

Z-буфер хранит глубину каждого пикселя. При рендеринге новый фрагмент пишется только если его глубина меньше сохранённой. Z-fighting — мерцание двух полигонов на почти одинаковой глубине из-за дискретности значений (обычно 24 бита). Решается смещением геометрии, polygon offset или reverse-Z.

Какую единицу измерения выбрать для сцены в Unity / Unreal / Blender?

Unreal Engine: 1 уу = 1 см (по умолчанию). Unity: 1 уу = 1 м. Blender: 1 уу = 1 м (Metric). Для архитектуры удобны метры/сантиметры, для микро-объектов — миллиметры. Главное — согласовать масштаб по конвейеру: моделирование → движок → физика.