Разбираем демку NEON NOIR на CryEngine: поддерживает ли Vega 56 трассировку лучей?
Вы наверняка слышали, что разработчики игрового движка CryEngine от компании Crytek показали отражения, создаваемые методом трассировки лучей в реальном времени. На канале CRYENGINE видео с этой демонстрацией единственное которое набрало много просмотров почти 500 тысяч, и до меня эта новость дошла в первый раз в субботу, а потом в искаженном виде в воскресение: в тот день она звучала как «Vega 56 поддерживает трассировку лучей в реальном времени – Хуанг нам врал». Да, в этой демке действительно используется Vega 56 для демонстрации, но, как и написано в описании, так может работать и любая другая видеокарта.
В основе предложенного метода лежит уже не новая технология, которую можно наблюдать в демках: например, 2013 года (см. в видео ниже с 1:10 мин:сек) — это тоже трассировка лучей в реальном времени, только демка не такая красивая. В играх, в которых применяется Physically Based Shading (физически корректный рендеринг) — концепция, при которой соблюдаются основные физические принципы, — одним из важных параметров является шероховатость поверхности. Чем она выше, тем более матовое отражение будет, так как лучи после падения отражаются в разные стороны, а это требует от вашего видео ускорителя значительных ресурсов.
И вот я дошел до самого главного — разница с методом предлагаемым NVIDIA, конечно же есть, но снова все дело в производительности. В демо NEON NOIR: Real-Time Ray Traced Reflections обратите внимание, что все поверхности абсолютно зеркальные, матовых поверхностей с отражениями нет, лучи идут в одном направлении и универсальным блокам проще просчитать такие отражения. Но при этом отражающей способностью могут обладать объекты с искривленной геометрией – это хорошо видно в демке: например, на окнах. Вот как раз такой подход добавляет реализма и дает преимущество перед методами, где отражения только на ровных плоскостях.
С матовой поверхностью сразу потребуется больше вычислительных способностей, потому что лучи будут лететь в разные стороны, и на производительности это скажется не лучшим образом. Тогда как для абсолютно зеркальных поверхностей группы лучей, летящих в одну сторону, уже проще обрабатывать на широких вычислительных блоках видеокарты.
Давайте представим игру, в которой нужно расставить зеркальные отражения – они могут быть на окнах, лужах, водной глади с идеальной отражающей способностью и пожалуй все. В помещениях применений гораздо больше конечно же, но все-равно абсолютно гладких материалов очень мало и встречаются они относительно редко. Жесткие тени также просто сделать с помощью софтовой трассировки лучей, но для мягких опять потребуется больше ресурсов, и быстро это работать не будет. Если вы хотите добиться корректных теней, полутеней и их смешения – то быстро софтовым методом обрабатываться они не будут. Надо будет использовать поддельные тени. Это снова кропотливая работа гейм-дизайнеров. И в случае с отражениями, и в случае с тенями.
У NVIDIA кстати есть технология Frustum Traced Shadows, которую, пользуясь современной терминологией, можно назвать трассировкой “для бедных”. Она создает идеально жесткие, но корректные тени при помощи трассировки. Чтобы их сгладить и рассеять нужно прибегать к смешиванию этих теней с теневыми картами с размытием. Работает это быстрее честной трассировки, но подходит только для некоторых источников света: например, для теней от Солнца.