Разработка игр

3D рендеринг в играх

Cyberpunk 2077 использует 3.2 миллиона линий кода шейдеров только для эффектов освещения. Каждый кадр - 60 миллионов треугольников, 50+ источников света с ray tracing, 100+ слоёв post-processing. Всё это за 16 миллисекунд на RTX 4090.

  • **Unreal Engine 5 Lumen:** полностью динамическое глобальное освещение в реальном времени через smart ray tracing. Fortnite использует Lumen с 2022 года
  • **Unity HDRP:** PBR физически корректный pipeline с Deferred Shading. Используется в Shadowlands WoW-подобных играх для консолей PS5/XSX
  • **Roblox:** custom forward shading pipeline для 5+ миллионов пользователей одновременно на очень разном железе - от смартфонов до RTX

Исторический контекст

В 1975 году Буй Туонг Фонг опубликовал диссертацию с моделью освещения, которая стала стандартом на 40 лет. Модель Phong: ambient + diffuse + specular. Просто, быстро, неплохо выглядит. До 2010-х большинство игр использовали именно её. Революция произошла в 2012: Disney публикует принципы PBR (Physically Based Rendering) для фильма «Ральф», Epic Games внедряет PBR в Unreal Engine 4 (2014). С тех пор PBR - индустриальный стандарт. Ray Tracing в реальном времени стал доступен с NVIDIA RTX (2018) - первые GPU с hardware ray tracing cores.

Mesh: геометрия как треугольники

**Unreal Engine 5, 2022. Nanite - виртуальная геометрия из миллиардов полигонов. Статуя The Matrix Awakens содержит 1.5 миллиарда треугольников.** Но базовый строительный блок не изменился с 1970-х: треугольник. Любая 3D форма - набор вершин (vertices) соединённых рёбрами в треугольники (faces). Треугольник всегда планарный и всегда растеризуется в пиксели корректно - потому GPU оптимизированы именно под него.

Атрибут вершиныТипНазначение
Position (xyz)float3Позиция в 3D пространстве
Normal (xyz)float3 normalizedНаправление поверхности для освещения
UV (uv)float2 [0..1]Координаты текстуры
Tangent/Bitangentfloat3+float3Normal mapping: локальная система координат
Color (rgba)float4 или uint8×4Vertex color для ручной покраски или ambient occlusion

Почему GPU рендерит треугольники, а не quads (четырёхугольники) или n-gons?

PBR материалы: физически корректное отражение

**2012 год. Disney публикует принципы Physically Based Rendering (PBR) для фильма Wreck-It Ralph.** До PBR каждый художник задавал произвольные параметры шейдеров. Результат выглядел по-разному при разном освещении. PBR вводит физически корректную модель: каждый материал описывается несколькими интуитивными параметрами, и результат корректен при любом освещении.

**PBR параметры (Metallic-Roughness workflow):** Albedo - базовый цвет без освещения. Metallic [0-1]: 0=пластик/камень, 1=металл. Roughness [0-1]: 0=зеркало, 1=полностью матовый. Normal map: детали геометрии без полигонов. AO: предрассчитанные тени в углах. Эти параметры интуитивны для художников и физически корректны.

Roughness=0 и Roughness=1 в PBR материале. Чем они отличаются визуально?

Освещение: от Phong до Ray Tracing

**Minecraft RTX, 2020. Та же игра с кубиками выглядит как фотография после добавления Path Tracing.** Освещение - самая вычислительно дорогая часть рендеринга. Реалистичный свет физически означает симуляцию миллиардов фотонов. Игры используют аппроксимации: от простой модели Phong (1975) до глобального освещения с ray tracing в реальном времени (NVIDIA RTX, 2018+).

Метод освещенияГлобальное освещениеСкоростьИспользование
Phong/Blinn-PhongНетОчень быстроМобильные игры, ретро-стиль
Deferred ShadingНет (только direct)БыстроAAA игры с множеством источников
Screen Space GIАппроксимацияСреднеCyberpunk 2077, Forza Horizon
Ray Traced GIДа (частичный)МедленноMetro Exodus Enhanced, RTX игры
Path TracingПолноеОчень медленноMinecraft RTX, Portal RTX

Deferred Shading рендерит освещение после геометрии. В чём главное преимущество перед Forward Shading?

Камера: projection, FOV и post-processing

**God of War (2018). Кратос и Атрей проходят весь игровой мир без единого cut - камера никогда не режет. Технически: один непрерывный render pass.** Камера в 3D - математическая модель: откуда смотрим (view matrix), что видим (projection matrix), и как обрабатываем финальный кадр (post-processing). Это последний этап перед пикселем на экране.

**Reverse-Z depth buffer:** стандартный depth buffer теряет точность для далёких объектов (z-fighting). Reverse-Z (используется в Unreal, Unity HDRP): near=1, far=0. Число с плавающей точкой более точно представляет значения близкие к 1 - это устраняет z-fighting на больших дистанциях без infinite far plane trick.

Больше полигонов в mesh всегда означает лучшую графику

Визуальное качество определяется комбинацией: качество текстур, точность освещения и нормальные карты. Персонаж с 5000 полигонов + качественный PBR материал выглядит лучше чем 100 000 полигонов без нормалей и плохим освещением.

Normal mapping добавляет визуальную детализацию без полигонов: карта нормалей 1024×1024 содержит ~1 миллион виртуальных «граней», не требуя реальной геометрии. Микрополигоны Nanite (UE5) работают - но только потому что сочетают их с aggressive LOD и clustering, а не просто добавляют полигоны.

Какое значение FOV обычно вызывает «fish-eye» эффект и головокружение при быстром движении?

3D рендеринг: главное

  • Mesh: треугольники из вершин (позиция + нормаль + UV). LOD управляет количеством полигонов на расстоянии
  • PBR материалы: albedo + metallic + roughness + normal map. Физически корректны при любом освещении
  • Deferred Shading: G-buffer (геометрия) + lighting pass. Стоимость O(pixels × lights), не O(polys × lights)
  • Camera: view matrix (откуда) + perspective projection (FOV, near/far) + post-processing stack
  • Ray Tracing (RTX): физически корректные тени, отражения и GI. Цена: 2-4x дороже растеризации

Вопросы для размышления

  • Path Tracing (Minecraft RTX) даёт фотореалистичную графику, но работает при 30 FPS на RTX 4090. Deferred Shading работает при 120 FPS на RTX 3060. Какие конкретные visual эффекты теряются при отказе от Path Tracing в пользу Deferred?

Связанные уроки

  • gd-03
  • gd-05
  • arvr-04
  • sci-04
  • dsp-04
  • la-06-transformations
3D рендеринг в играх

0

1

Войти