Roughness cut-off
Roughness cut-off (он же отсечение по шероховатости, мыльный горизонт, убийца графония) — величайший технический костыль и самая циничная оптимизация в новейшей истории компьютерных игр, придуманная для того, чтобы твоя видеокарта не превратилась в доменную печь при виде заветных букв RTX ON. Суть этого шаманства проста до безобразия: если внутриигровая поверхность недостаточно гладкая и блестящая, как лысина маркетолога NVIDIA, то движок, лениво махнув рукой, просто отказывается считать для неё честные отражения. Зачем напрягаться, если хомячок всё равно будет считать кадры, а не блики на асфальте?
Куда деваются лучи[править]
Для понимания всей глубины этого наглого обмана, необходимо натужно включить свой моск. Возьмём идеальное зеркало. Луч света, как послушный мальчик, отскакивает от него под тем же углом, под которым прилетел. Рассчитать траекторию такого паиньки для компьютера — задача тривиальная. А теперь представь себе не зеркало, а, скажем, бетонный пол в промзоне, потёртый деревянный стол или шершавый пластик на твоём стволе. Луч света, попадая на такую шероховатую (англ. rough) поверхность, бьётся об неё в истерике и разлетается в тысячи разных направлений, как гости со свадьбы после драки.
Чтобы твой мощнейший ПеКа смог отрисовать этот хаос, ему нужно для каждого пикселя просчитать судьбу целого вороха таких обезумевших лучей. Увидев подобную перспективу, даже самая топовая видеокарта начинает громко выть кулерами, ронять FPS в район плинтуса и угрожать термическим коллапсом. И тут, в лучах божественного света (который они, кстати, тоже сэкономили), появляются гении оптимизации из Epic Games и прочих контор.
Великая иллюзия и её разоблачение[править]
Разработчики игр — народ прагматичный. Они прекрасно понимают, что 95 % игроков скорее пожертвуют реалистичными отражениями на матовой стене, чем возможностью похвастаться стабильными 60 кадрами в секунду. Так и родилась циничная в своей гениальности идея — отсечка по шероховатости. В настройках движка, например Unreal Engine, есть специальный параметр, который так и называется: r.RayTracing.Reflections.MaxRoughness. Он задаёт пороговое значение.
Когда рендерится кадр, движок смотрит на каждый материал и думает: «Так, что у нас тут? Пол. Коэффициент шероховатости — 0.6. А порог у нас стоит 0.5. Это что же, мне для этой раздолбанной плитки считать все эти диффузные отражения? А не пошли бы вы… к старым добрым кубическим картам?». И всё. Вместо честного, физически корректного, но дико затратного отражения ты получаешь в лучшем случае мутное пятно из какого-нибудь Reflection Probe или, что чаще, вообще ничего. PROFIT! Производительность спасена, игрок доволен циферками в углу экрана.
На пикче справа можно наблюдать, как это должно выглядеть в светлом будущем победившего паттрейсинга. Трассировка пути, в отличие от своего кастрированного младшего брата, не признаёт компромиссов. Она честно, как японский инженер, симулирует всю эту вакханалию отскочивших лучей, создавая мягкие, правдоподобные, слегка размытые отражения даже на самых, казалось бы, неотражающих поверхностях. Выглядит это божественно. И так же божественно ставит на колени любую современную систему. Разница в производительности между «обычным» RTX и полноценным PT может достигать десятков раз.
В сухом остатке имеем, что хвалёный Ray Tracing в 9 из 10 игр — это не более чем красивая демка настоящей технологии. Тебе дают поиграться с самыми очевидными её проявлениями, вроде идеальных отражений в лужах или на стекле, а всю сложную и по-настоящему красивую физику света прячут за ширмой roughness cut-off. Это как купить Феррари, у которой в целях экономии топлива и сохранения ресурса двигателя активны только две передачи из восьми. Ездить можно, но ощущение, что тебя где-то обманули, не покидает. И пока наши кремниевые друзья не научатся считать со скоростью света, этот компромисс будет с нами, превращая потенциально фотореалистичные миры в слегка замыленные декорации.