Если коротко: трассировка лучей — это способ считать освещение в игре так, как ведёт себя свет в жизни: от источника к поверхностям и дальше в глаз. Обычная графика (растеризация) освещение не считает, а имитирует набором приёмов. Поэтому трассировка даёт честные отражения, мягкие тени и свет, «затекающий» за угол, — и поэтому она так сильно съедает кадры: на каждый луч нужно много вычислений. Включать её стоит там, где разница видна глазом, а не «потому что Ultra».
Я веду канал «Во что поиграть», и вопрос «а оно мне надо?» про трассировку приходит чаще всего. Давайте разберём не рекламный слоган, а механизм: из него сам собой вытекает и «где красиво», и «почему тормозит».
Ага-момент: дело не в текстурах, а в том, как считается свет
Самое частое заблуждение — думать, что трассировка делает картинку «чётче» или «детальнее». Нет. Модели, текстуры и разрешение остаются теми же. Меняется ответ на один вопрос: откуда в этой точке кадра взялся свет и сколько его пришло.
Классическая растеризация устроена так: трёхмерные объекты проецируются на плоский экран, превращаются в пиксели, и дальше каждый пиксель красится по правилам. Сам Microsoft, анонсируя в марте 2018 года DirectX Raytracing, описывал растеризацию как тридцатилетнюю технику, которая работает в 2D, тогда как трассировка сохраняет трёхмерный мир, и тени, отражения и непрямой свет получаются в ней как естественное следствие самого алгоритма. Вот эта фраза и есть суть: в растеризации эффекты — отдельные трюки, в трассировке — побочный результат одного процесса.
Как растеризация «подделывает» свет
Игра должна показать тень от дерева. Растеризатор о свете «ничего не знает», поэтому разработчики придумали обходные пути:
Карты теней. Сцену заранее рисуют «с точки зрения лампы» и запоминают, что лампа видит. Всё, что она не видит, — в тени. Работает быстро, но у края тени бывают лесенки и странные «отрывы» от предмета.
Запечённый свет. Для неподвижных помещений освещение считают заранее, при создании игры, и «вклеивают» в текстуры. Выглядит прекрасно — пока ничего не двигается. Откройте дверь или включите фонарик, и запечённая картинка не отреагирует.
Отражения «по экрану». Лужа отражает только то, что уже нарисовано на экране. Повернитесь спиной к зданию — и его отражение в воде исчезает, потому что здания в кадре больше нет.
Это не плохая работа, а очень остроумная инженерия: десятилетиями она позволяла рисовать красивые миры на скромном железе. Но каждый приём — отдельный костыль со своими границами, и художники вручную прячут швы.
Что делает трассировка: путь света, но задом наперёд
Идея до смешного проста. Из «камеры» через каждый пиксель экрана пускают луч в сцену и ищут, во что он попал первым. Дальше из этой точки пускают ещё лучи: к источнику света (чтобы понять, освещена точка или заслонена — это и есть тень) и в сторону, куда луч отразился (так появляются отражения и непрямой свет). Учебник по физически корректному рендерингу описывает ровно эту схему: камера, поиск пересечения, «теневой» луч к лампе и рекурсивное отражение дальше.
Свет в жизни идёт от лампы к глазу, а считать выгоднее наоборот — от глаза к лампе: иначе почти все лучи улетели бы мимо камеры и вычисления пропали впустую. Но результат тот же. И вот что важно: все эффекты получаются из одного набора лучей. Не нужно отдельно изобретать карту теней, отдельно — отражения, отдельно — запекание. Лучу всё равно, подвинули дверь или нет: он честно летит по сцене в текущем состоянии.

Почему это так дорого по кадрам
Теперь понятно, откуда берётся нагрузка. Для каждого луча нужно ответить на вопрос «во что он попал?» — среди миллионов треугольников сцены. Перебирать их все невозможно, поэтому сцену заранее упаковывают в иерархию ограничивающих коробок (BVH), и луч «спускается» по ней, как по дереву решений. Всё равно это тысячи операций на один луч.
Поэтому в 2018 году в видеокартах NVIDIA серии Turing появились отдельные RT-ядра. В техническом разборе архитектуры NVIDIA пишет, что RT-ядра берут на себя проверки пересечения с ограничивающими коробками и треугольниками, избавляя обычные шейдерные блоки от тысяч программных инструкций на каждый луч, и приводит оценку: около 1,1 гигалуча в секунду у Pascal против 10+ у Turing. Это цифры производителя для его тестов, но порядок понятен: без специального железа трассировка в реальном времени просто не помещалась бы в кадр. У AMD аналогичную роль играют блоки Ray Accelerator в архитектуре RDNA 2 и новее.
Но даже с RT-ядрами лучей хватает только на «горсть» на пиксель. Это второй источник сложностей: картинка получается зернистой, с дырами. NVIDIA в материале про Ray Reconstruction прямо пишет, что пускать лучи для каждого пикселя слишком дорого даже для офлайн-рендера, поэтому игры бросают лишь немного лучей по сцене, а зашумлённый результат чистят денойзерами — они копят данные с прошлых кадров и смешивают соседние пиксели. У такой очистки своя цена: возможны «призраки» от старых кадров и смазанные детали, а несколько денойзеров одновременно ещё и снижают частоту кадров.
Итог: нагрузка складывается из трёх частей — сами лучи, упаковка сцены (она обновляется, когда что-то движется) и очистка шума. Растеризация таких расходов не имеет, поэтому и нагружает видеокарту иначе.
Отражения, тени, свет и «полная» трассировка: что из этого что
Слово «трассировка» в настройках игры скрывает совсем разные вещи, и цена у них разная.
Тени. Лучи от точки к лампе. Плюс — мягкие края и правильные контакты предмета с полом. Минус для вашего восприятия: хорошие карты теней уже неплохи, и в динамике разница часто невелика.
Затенение углов (ambient occlusion). Тонкое потемнение в щелях. Разницу чаще замечаешь, когда её выключили, а не когда включили.
Отражения. Здесь заметнее всего: лужи, стёкла, глянцевый пол показывают то, чего нет на экране. Это ровно то, что «экранные» отражения сделать не могут.
Глобальное освещение. Свет, отражённый от стен, окрашивает соседние предметы и заходит за угол. Для сцен без запекания (меняющихся, с множеством ламп) — самое впечатляющее.
Path tracing: когда считают всё
Верхняя ступень — трассировка путей (path tracing): практически весь свет сцены считается лучами. В заметке NVIDIA про режим Overdrive в Cyberpunk 2077 это объясняется как переход от отдельно трассируемых теней, отражений и глобального освещения для малого числа источников к «физически корректным» теням, отражениям и освещению от практически неограниченного числа источников — тысяч неоновых вывесок и фар.
Цена — на виду в самой же заметке. NVIDIA сообщает, что с DLSS 3 в 4K на RTX 4090 производительность вырастает в 4,6 раза до 103 кадров в секунду. Простая арифметика: без этих технологий речь идёт примерно о 22 кадрах — это расчёт по её же цифрам, а не измерение. Так что path tracing сегодня — это «трассировка плюс апскейл плюс, как правило, генерация кадров». Про последнюю у нас есть отдельный разбор, и тут важно не путать: трассировка определяет, как считается свет, а генерация кадров — как достраиваются дополнительные кадры. Это разные вещи, они лишь часто включаются в паре.
Как «спасают» кадры: апскейл и умная очистка шума
Раз лучей мало и считать их дорого, логично считать их на меньшем разрешении и потом достраивать картинку. Так делают апскейлеры вроде DLSS: игра рендерится в сниженном разрешении, а нейросеть восстанавливает детали. С трассировкой это особенно уместно — лучей нужно меньше.
NVIDIA пошла дальше. DLSS 3.5 с функцией Ray Reconstruction заменяет ручные денойзеры одной нейросетью, обученной на офлайновых изображениях: она «достраивает» пиксели между пущенными лучами. По заявлению компании, это поддерживают все видеокарты GeForce RTX. Идея красивая: меньше шума при той же цене в лучах. А вот насколько это помогает в вашей конкретной игре, зависит от самой игры.

Когда разница заметна, а когда нет
Из механизма следует практическое правило: трассировка выигрывает там, где запечённый свет бессилен.
Заметна: глянцевые полы и лужи после дождя, окна и зеркала, ночные города с множеством источников света, тёмные помещения с одним-двумя лампами, динамические сцены (разрушаемое окружение, двери, подвижные лампы), игры, которые изначально проектировались под трассировку.
Почти не видна: яркая солнечная открытая местность, где запечённый свет и так выглядит правдоподобно; быстрые шутеры, где вы мчитесь вперёд и не рассматриваете лужу; игры, где трассировку «приклеили» ради галочки одним эффектом.
Есть и обратный эффект, неочевидный: удачно запечённая сцена с руками художников иногда выглядит лучше сырой трассировки с шумом. Реализм и красота — не одно и то же.
Стоит ли включать: короткий алгоритм
Не нужно решать «трассировка вообще, да или нет». Решайте по игре:
1. Запустите без трассировки и зафиксируйте кадры. Если и так ниже 60, трассировка — не про вас, она сделает хуже.
2. Включайте по одному эффекту и смотрите на сцены, которые вам нравятся. Отражения обычно дают больше всего за свою цену, затенение углов — меньше всего.
3. Если нужна полная трассировка, добавьте апскейл. Это не «читерство», а часть задумки: без него путь света просто не успевает посчитаться.
4. Помните: апскейл и генерация кадров не отменяют цену, а перекладывают её на качество картинки и задержку.
Чтобы понять, куда на самом деле упирается ваш ПК, пригодится наш разбор узких мест игрового ПК, а чтобы не обмануться чужими графиками — как читать тесты видеокарт: в них трассировка и апскейл часто смешаны в одну цифру.
Коротко
Что это: трассировка лучей считает свет как путь луча от источника через отражения до глаза. Растеризация имитирует свет заранее подготовленными приёмами.
Почему красиво: тени, отражения и непрямой свет получаются из одного процесса и реагируют на всё, что происходит в сцене.
Почему дорого: лучей нужно много, каждый требует поиска пересечений, а шум чистят отдельно. Эту нагрузку частично снимают RT-ядра, апскейл и нейросетевая очистка шума.
Включать ли: да — где есть лужи, стёкла, ночь и динамика, и если базовые кадры у вас уже комфортные. Нет — если приходится жертвовать плавностью ради эффекта, который вы не заметите.
Не путайте: трассировка — про свет, генерация кадров — про количество кадров.


Пока нет комментариев