Доброго времени суток,

Успех новой версии Unreal Engine не оставил без внимания профессионалов всех мастей. Попытки поддать, происходящую революцию, рациональному объяснению - затмило умы самых упрямых юнити-делов. Журналисты проводят сравнения со всем подряд, что только подвернётся, чтобы попытаться перевести технологии из мира идей в любое доступное пространство. Ходят слухи, что пара кодеров поступила в клинику, они лишь запинаясь, повторяли о mesh-шейдерах. А те кто видел исходники, поговаривают о необычайном цвете кода, явно, не из нашего мира, возможно тема была, даже - светлой.

Всё это безумие - породило мифы и целые культы, рей-трейсер пошёл на рей-трейсера, рей-кастера размазало между кадрами, Z-брашер, с диким смехом, скопипастил два мазка кистью по фотоскану непристойных моделей, прямо в игру, даже Чат-GPT назвала демонстрацию - deep-fake’ом, а новости - вбросом. Кроллики и драконы стали жить вместе, собаки и кошки.. а да, о чём это я..

В общем, я не могу вам сказать, чем является на самом деле этот ваш Nanite, но я могу вам сказать, чем он точно не является. И так..

Сама технология Nanite или на русском Нанит(-ов), это технология виртуальной или виртуализированной геометрии, пришедшая к нам с альфа-версией Unreal Engine 5, на данный момент доступна уже версия 5.3. Главные плюсы, которые даёт Нанит - это просто колоссальное количество отображаемой геометрии. Настолько отличающееся от обыденного, что встаёт резонный вопрос - “А что так можно было?”.

Обычные игры могут отображать до нескольких сотен тысяч полигонов(x100k), а на одну модель выходит бюджет в несколько десятков тысяч(x10k) для самых детализированных моделей.

Игры на Unreal Engine - тем временем могут отображать миллиарды(kkk) полигонов на одну модель, а топовые версии видеокарт могут в режиме отладки отображать триллион(kkkk) полигонов с частотой 60 герц. Вот схема, который что-то да доказывает:

И к всеобщей неожиданности, Нанит не потребовалось атомного реактора для запуска. Более того, отполированные версии демонстраций запускались на консолях последних версий. Не отполированные тоже, но это было потом.

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

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

С прелюдиями закончили, можно перейти к мифам.

Миф первый: Нанит - это кастомный mesh-шейдинг

Это пожалуй самый распространённый миф, и это первое, за что пытаются выдать технологию Нанитов, лица выдающие себя за экспертов в чём бы, то ни было. Миф этот породила команда несогласных Юнитишников. И секта журналистов-свидетелей гонки нового поколения.

Дело тут состоит в презентации Unreal Engine 5, презентация была настолько разгромной и восхитительной, что все конкуренты и их обслуга обнаружили себя проигравшими в гонке, о которой они даже не знали. Но о ней знали журналисты, точнее они её придумали, но они придумали её так, что это не они её придумали, а что она была реальной, а они просто были её свидетелями. Так или иначе, журналисты начали приставать ко всем с вопросами, “а что там остальные покажут?”. И тут появился новый миф, миф внутри мифа - скам-матрёшка получается. Новый миф гласил о неком ответе со стороны главным образом Юнити и всех остальных, кого только могли найти. Миф, той самой гонке.

Не то, чтобы новые версии Юнити после мая 2020 года не выходили, они выходили, но как показала история на саму гонку - никто не пришёл. Поэтому этот миф даже разрушать не приходится.

Однако, в потоке этих самых вопросов, журналисты сами создали череду ответов. Ответы о технологии были следующие, якобы, Нанит - это очередная итерация обычных технологий и вот-вот у конкурентов появится точно такая же технология. А Юнити сделают такой ответ.. Но каких обычных технологий? Технологий, которые показывали Nvidia на презентации в 2018 году. Ведь там были показаны лоды и отсечение геометрии. Почти как в UE5 или нет?

GDC 2018 / Nvidia / Asteroids

В 2018 году, Nvidia представила новую технологию реализованную на уровне железа, конкретно, в чипах Turing и никаких больше. Технология и называлась Mesh-шейдинг, она добавляла некие Сеточные-шейдеры вместо стандартного конвейера. В частности, заменялось всё связанное с вертексами и до растеризатора.

И это вся технология. Вообще вся. Буквально. Без нюансов. Прям, совсем вся. Если так будет понятнее - больше человечество, включая Хуанга, о mesh-шейдерах в пределах видимой вселенной не знает ничего. Вся остальная демонстрация - это уже произвольный код работающий поверх самих сеточных-шейдеров.

Сеточные-шейдеры решают конкретную проблему, известную с DirectX 3D 9, то есть с очень давнего времени. Но что касается мифа, уже на этом этапе его можно опровергнуть множеством способов:

  1. Демо Asteroids можно скачать с сайта Nvidia, как и части исходного кода отвечающие за автолодинг и отсечение геометрии. С подробнейшими пояснениями и целой статьёй о том как там всё работают. С 2018 года.

  2. Сеточные-шейдеры доступны любому желающему в составе DirectX 12 Ultimate и при наличии видеокарты поддерживающей их аппаратно. С 2018 года.

Как известно, никто ничего подобного Нанитам больше не показывал. С 2018 года. Миф разрушен.

Тем кому совсем интересно как работают, конкретно сеточные-шейдеры и почему это точно не они, продолжение.

Mesh-шейдеры и геометрия

С начала существования графического конвейера, всё было просто - есть вершины и есть пиксели, мы загружаем в видеокарту вершины и получаем пиксели. Мы можем делать что угодно с вершинами и пикселями. И всё шло хорошо, пока не появился закономерный вопрос. А, что если мы хотим - хоть как-то менять число самих вершин? Менять количество пикселей можно через вершины, но сами вершины берутся из памяти видеокарты. И половина всех технологий с тех пор введённых в DirectX 10 и 11, половина всего что различает поколения графических API - это решение проблемы динамического изменения вершин.

Первое решение это прямое чтение вершин из оперативной памяти центрального процессора. И это самый затратный способ на синхронизацию между GPU и CPU, ограничения на пропускную способность шины и памяти процессора. Попытки применить этот способ к моделям массово - дорога к слайд-шоу.

C выходом DirectX 10 появилось ещё одно прямолинейное решение - геометрический шейдер. Геометрический шейдер - это программа, которая запускается на видеокарте после вершинного шейдера. Геометрический шейдер может проводить дополнительную работу и добавлять/удалять вершины. Проблема почти была решена в DirectX 10.

Однако, на данный момент, согласно документации, любой кто использует геометрические шейдеры - совершает преступление против чести, совести, народа и бога.

Стоит углубится в работу видеокарты, чтобы осознать проблему.

Первый двухъядерный потребительский процессор
Первый двухъядерный потребительский процессор

Ой, не то:

И так, перед нами один из больших блоков (SMM) чипа поколения Nvidia Maxwell 2010-х годов. В одном таком SMM - 4 блока SM, именно они нас и интересуют. Оранжевым цветом отмечены Warp Scheduler, который создаёт потоки, а зелёные Core ядра - это те самые Cuda-ядра, которые и производят вычисления.

Вершинные и пиксельные шейдеры запускаются на зелёных Core-ядрах, и в данном случае, один большой блок может обрабатывать 128 вершин или пикселей разом. Но добавить поток на исполнение - может только Warp Scheduler, которых всего четыре на большой блок, и добавляет потоки он - по одному потоку за раз. Как раз тут и создаётся узкое горлышко, ведь именно на Warp Scheduler запускаются инструкции геометрического шейдера, которые добавляют вершины. После добавления вершин, над ними могут запускаться ещё и вычисления, которые могут не попадать в размер одного малого блока - 32 потока. В итоге, геометрический шейдер - это игра в “пол это лава”, где программист должен учитывать условности конкретного железа, а любое другое железо, может, вызывать неконтролируемые лаги.

Для решения проблем геометрического шейдера, который уже был под большим вопросом, с DirectX 10.1 появился - вычислительный шейдер. Вычислительный шейдер работает ещё проще - пишется программа, которая исполняется как угодно, главное, что на выходе получается массив вершин, который уже передаются в обычный конвейер.

Конечно, если бы всё было так просто, мы бы и остановились на DirectX 10.1. Вычислительные шейдеры обладают своей самой большой проблемой - они унифицированы, они запускаются на ядрах для общих вычислений и все специализированные блоки (отмечены жёлтым) видеокарты, которые намного дешевле в транзисторном бюджете, энергоэффективности и производительности - стоят без дела, пока универсальные блоки перегружены. Более того, иногда, приходится повторять поведение специализированных блоков - программным способом, что становится похоже на Уробороса производительности. Потом результат опять должен быть отправлен в стандартный конвейер, где опять пройдёт специализированные этапы. В ранних версиях видеокарт, ещё и не все блоки были доступны для вычислительных шейдеров, но это нюансы, которые со временем были исправлены.

Тесселяция - герой ситуации, который смог, но оказался никому не нужен. Она же шейдер-замощения и она решала вопрос динамической генерации геометрии, причём, через специализированные блоки, а выбор уровня детализации и итоговые трансформации - программируемые блоки, которые идеально ложатся на ядра видеокарты. Это было настолько хорошее решение с точки зрения архитектуры, что лучше придумать - сложно, даже, сейчас. Ровно настолько же это всё оказалось, большим набором недостатков на практике.

В современной графике, вся геометрия на уровне может по несколько раз вызываться для отрисовки за один кадр и даже так, обработка вершин - может занимать 10% от общей работы, остальные 90% уходят на работу пиксельных шейдеров. Тесселяция переломила ситуацию и смогла сделать обработку вершин настолько же медленной как и обработку пикселей.

Просто невероятно, но тесселяция разбивает каждый полигон(треугольник) на устанавливаемое количество от 1 до 32 частей, ну то есть, просто чтоб понятно было - на каждый полигон создается 32 полигона, каждый из которых проходит полную обработку и отсекается только на этапе растеризации. Сцена, которая весит в 32 раза больше, чем обычная, половину которой не видно. Так фиксированная функция оказалась ещё и шаблоном (патчем), патч применялся фиксированным для модели шаблоном, то есть вы изначально создаёте некую 3d текстуру или узор, и он ровно как обычная текстура применялся, только не к пикселю, а к полигону. Шаблон/патч делит каждый полигон и получается эдакая маленькая модель/копия шаблона из 32-ух вершин с координатами полигона.

Разработчики попытались, честно пытались сделать для моделей 3D текстуры/патчи, чтобы улучшить графику. Они честно пытались поменять саму структуру обработки сцены, чтобы хоть как-то использовать тесселяцию. Как показала история - не все модели поддаются шаблонизации. Но самый большой удар, удар, который не могла пережить ни одна видеокарта - это удар по производительности. Такой была тесселяция, которую мы знали, такой её больше нет.

И вот, 2018 год, момент, когда победитель, герой - некогда низвергнувший самые первые в индустрии принципы, геометрические шейдеры, тот кто должен был быть спасителем всех, кто обязан был быть безупречным - сам оказался в статусе “Устаревший интерфейс” / ”Не рекомендовано к использованию”. 

Встречайте Mesh-шейдинг! наконец-то! Шейдер, который решил все проблемы кардинально и просто. Он полностью убирает все этапы обработки вершин классического конвейера, прямо до растеризации. В итоге, на вход подаётся массив полигонов, для каждого полигона запускается тот самый сеточный-шейдер. Уже из сеточного-шейдера можно запускать под-потоки и обрабатывать полигоны дальше как вздумается. Выходные значения будут переданы напрямую в растеризатор.

Вы правильно поняли, тот самый громогласный, разрекламированный Mesh-шейдер на деле - старый добрый вычислительный шейдер для полигонов. Это

int Main(Triangle Args)

Говорить, что что-либо вообще запущено на mesh-шейдерах, тоже самое как сказать “это работает на вычислительном шейдере“ / “это работает на видеокарте” / “это работает на компьютере“. Объясняет это ровно ничего.

На вычислительных шейдерах можно создать куллинг, свой, кастомный, который напишите вы используя свои алгоритмы. Как и было на презентации Nvidia, где исходный код куллинга - доступен всем.

Все связи между технологией Nanite и Mesh-шейдингом - мистификация. Nanite - это технология, сам алгоритм. Mesh-шейдер и вычислительный-шейдер - это платформа, на которой алгоритмы запускаются. Одно - другим - быть не может.

Сходство замечаете?

Теперь вы понимаете тех гениальных аналитиков, которые всё это придумали? Они же разноцветные! Значит Nanite - это mesh-шейдеры!

Последний гвоздь в крышку этого сравнения - Мешлеты (Meshlets). Мешлеты в mesh-шейдерах - это любая группа вершин обрабатываемая параллельно, это WorkGroupID. Кластеры в Nanite - это часть иерархии видимости модели, это структурная часть самой модели. Всё что связывают эти два явления - они оба показаны разноцветными, только для разметки, в реальной программе у них всех, даже, цвета нет.

Миф Второй: Наниты - это авто-LoD 

Не последний, я вас обманул. Вторым объяснением поразительного качества моделей Nanite, стал - автоматический уровень детализации. Отличительной особенностью Nanite является отсутствие LoD’ов. 

Соответственно, миф гласит - Наниты, это якобы, некие скрытые ЛоДы, где вся работа с лодами скрыта от разработчика и автоматизирована движком, то есть где, то внутри Unreal Engine сам создаёт менее детализированные версии моделей и сам определяет для них расстояние, причём используется подход показа избыточной версии модели из-за чего как раз и не видно их смены.

Угадайте откуда взялось это предположение? Да - GDC 2018 / Nvidia / Asteroids.

В демонстрации показывают LoD’ing, причём обычный, не что-то похожее на LoD’ing, а именно его. Простой программный лодинг запускаемый на видеокарте, а не на процессоре:

Самый обычный ЛоДинг, даже не авто-ЛоДинг - проще некуда. 

В данном случае миф больше всего форсили Юнитишники. Так как в Юнити отдельным плагином можно купить плагин авто-LoD’ing, а значит Юнити тоже так умеет. А значит и фраза, что в “Unreal Engine LoD’ов нету” - просто рекламный трюк. Сами Юнитишники пошли дальше в своих фантазиях и уже нарекли сам авто-LoD - не популярным в самом Юнити, а значит у него якобы есть какая-то там куча минусов => в Unreal Engine его тоже все будут отключать и вообще он отбирает производительность, так что это вообще минус Unreal Engine, а не плюс. Всё это вкидывалось на правах - “фантазирую что хочу”.

С выходом движка в публичный доступ, конечно же, сразу выяснилось, что ЛоДов действительно не существует ни в каком виде. И весь этот вброс Юнити-пользователей исчез так же быстро, как и появился. Но до сих пор, попадаются Юнити-филы, которые зачем-то продолжают рассказывать про авто-ЛоДы и “Юнити тоже так умеет, но не хочет”.

Наниты на само деле не имеют ничего общего с лодами, Наниты разбивают модель на кластеры точек, которые уже в свою очередь используются для куллинга. И если, считать подобное ЛоДами, то с тем же успехом можно считать любой алгоритм кулинга - лодингом. Тесселяция, тоже становится ЛоДингом, так как там тоже есть уровни детализации.  И вы можете, только это теряет смысл, так как сам термин ЛоД больше ничего конкретного не значит, а становится некой абстракцией обозначающий что угодно, и применять его не будет иметь смысла. Более того, можно также применять термин Анизотропной Фильтрации, которая будет иметь даже больше общего с Нанитами. Так как кластеры разного качества используются для формирования конечной сетки, чего нет у ЛоДов.

Миф третий: Nanite - это трюк с качеством

Наиболее правдоподобный миф, который сложно раскритиковать, если не знать точно. Миф цепляется за факт того, что Нанит - это алгоритм отсечения и заявления в презентациях, которые гласят “Nanite преобразует миллиард полигонов до 5-6 млн. отображаемых в кадре” и “Nanite может отображать столько полигонов, сколько может видеть глаз”. И Юнити-пыхатели наряду с журналистами сразу же окрестили Нанит - потерей качества и чуть ли не аналогом реконструкции кадра и апскейла, за счёт чего и достигается производительность. Значит Нанит - плохой, и его будут выключать для качества. 

Конечно и это не так, Нанит имеет настройку по уровню качества. И при 100% качестве, Нанит отображает геометрию в эталонном качестве. То есть изображение построенное Нанитами - пиксель в пиксель равняется изображению нарисованному классическим конвейером.

Уловка тут присутствует, но эта уловка принадлежит классическим API. Которые и так отбрасывают полигоны при сэмплировании. В классическом конвейере существует - Sample Point, это точка сэмплирования для каждого пикселя, которую должен пересекать полигон, обычно это центр пикселя. Если полигон её пересекает, то он отправляется в растеризатор, а если нет, то просто отбрасывается.

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

Миф четвёртый: Наниты - это очередная итерация технологий, скоро у всех так будет

В первом абзаце, я уже касался этого момента, так и общей нитью через всю статью идёт этот посыл. Как я отмечал, на гонку никто не пришёл. Хотя, до сих пор журналисты, в надежде, постоянно пророчат, что выйдет новая версия какого-нибудь, обычно очень конкретного движка, которая станет не хуже, а то и лучше этого вашего Unreal Engine. В ход идёт всё подряд, попытки выдать фотограмметрию и 3D сканы за “такое же как в Анриале”, попытки говорить, что остальные тоже показывают хорошую и красивую графику. И сложно с ними не согласиться, однако, отрыв Анриал - просто колоссален, и существует пропасть между хорошей и потрясающей графикой.

Как я уже замечал, все предрекаемые в будущем технологии, существовали задолго до выхода Нанитов. Юнити очень продвинутый игровой движок, в последних версиях, которого доступен, чуть ли не полностью, кастомный рендер. Любой желающий может подключить как Mesh-шейдеры, так и любую другую технологию к Юнити.

Никто за всё это время не сделал ничего подобного Нанитам. Нанит - это полностью новая, отдельная технология, созданная с нуля. Разработанная целыми отделами R&D. И никто даже заявок не делал на реализацию, хоть чего-то революционного, а говорить об конкуренте Нанитам - не приходится вовсе. Все остальные делают очередную итерацию, Unreal Engine 5 - выкатил революцию.

Малые мифы

Дальнейшая “критика” в адрес Анриала, это эксплуатация его ограничений, которые обычно выражаются “ну анриал - это не серебряная пуля”. Однако, несложно заметить, что серебряных пуль не существует вовсе. Более того, универсальность технологий обычно идёт в ущерб производительности. И тут только вам делать выбор.

Технология Нанит, действительно, накладывает множество ограничений, но Unreal Engine 5 находится на стадии разработки и развивается постоянно. Так к примеру до последнего времени, на сетки с Нанит было нельзя накладывать кастомные атрибуты, что накладывало просто огромные ограничения, а потом с версией 5.2 их просто добавили в полной мере и теперь Нанит можно применять к растительности.

Всвязи с этим у журналистов сложился очень крепкий миф о высокой прожорливости Unreal Engine 5. И это вообще не так. Новые технологии опциональны. На голом Анриал 5, игра перенесённая с Анриала 4 - будет работать быстрее. Нанит - это тоже технология снижающая потребление ресурсов, она может выдавать не только модели высокого качества, но и огромное количество самих моделей, включение технологии Нанит для проекта на Анриал 5 - увеличит производительность. Прожорливыми технологиями, являются, только технологии глобального освещения - рейтрейсинг и его более быстрый аналог Lumen.

Образы будущего

Немного о том, что нас ждёт. Во-первых, Нанит не присутствует на мобильных устройствах. Для работы Нанит требуется поддержка виртуальных ресурсов, они же тайловые ресурсы, которые существуют в DirectX с версией 11.2 и из видеокарт поддерживается начиная с поколения Nvidia Maxwell 2 (900-серия). Последние версии мобильных устройств и VR, поддерживают их, и выход Нанит на мобильные устройства - просто вопрос времени.

Unreal Engine развивается дикими темпами, подминая рынок под себя. На данный момент почти все новости и события, указывают, что доминирование Unreal Engine только растёт. Теперь, даже, крупные студии переходят со своих самописных движков на Unreal Engine, и более того, Unreal Engine всегда был наиболее похож на кастомные движки крупных компаний. Поэтому, если перед вами вдруг стоит вопрос выбора технологий на будущее, не важно при этом обучаетесь вы или выбираете двигло для себя - вам определённо стоит сделать выбор в пользу Unreal Engine, хотя бы в тестовых проектах, чтобы не обнаружить себя в подвешенном состоянии, когда тот или иной движок неожиданно утонет.

Конкуренты, не выпустят аналогов примерно - никогда. Самый главный из них Unity - всегда занимал абсолютно другую нишу. Все его странности обусловлены тем, что Unity - это компания живущая в кредит, даже в свои самые популярные годы они были убыточной компанией. Это абсолютно нормальная практика, и Unity никогда не был про графические технологии. Более того, попытка выйти на этот рынок - форменный шаг с обрыва. Им только предстоит начать зарабатывать в своей нише, и никаких огромных отделов R&D для экспансии у них не может быть, даже если бы они очень хотели. У Юнити всё ещё крепкая бизнес модель они покупают рекламные компании, а не технологические. Чтобы им конкурировать с Анриалом им нужно не быть Юнити вовсе. На данный момент в пределах 1-1,5 лет, Юнити будет оставаться в своей нише. Но именно развитие Анриала и тот самый возможный выход последних технологий на мобилки - это первый звоночек о том как всё может кончится, о чём говорят движения самой компании.

Комментарии (32)


  1. SIISII
    05.12.2023 21:04
    +10

    1. Приличное количество ошибок в плане русского языка не есть хорошо.

    2. Приличное количество смех**чков уместно (и даже прямо требуется) на лурке, но не на хабре.

    3. Геометрические шейдеры появились в DirectX 10, а не 9.


    1. Ruins007 Автор
      05.12.2023 21:04
      +1

      1) Си - мой родной, а для вашего я компилятора не нашёл

      2) Тоже так думал, но Хабр буквально рекомендует чуть ли не мемы использовать в блогах компаний, если это прямо не запрещено политикой самой компании. Решил, что Хабр лучше знает.

      3) Точно, в 9 только геометрический процессинг был. Спасибо за замечание.


  1. kovalensky
    05.12.2023 21:04
    +1

    Спасибо за статью, самого интересовали эти вопросы ????????


  1. timiryazevec
    05.12.2023 21:04
    +2

    На голом Анриал 5, игра перенесённая с Анриала 4 - будет работать быстрее.

    Но почему то сейчас нет ни одной нормальной игры в инфополе (ну кроме собственно Fortnite, но здесь понятно) которая бы была сделана на 5 анриале и при этом отличалась хорошей производительностью.

    Как я понимаю развитие UE во многом зависит от того сколько ещё школьники будут заносить денег в Fortnite. Не смотрел отчётов финансовых их последних, но все же есть подозрение что UE приносит не так много денег как хотелось бы.


    1. Ruins007 Автор
      05.12.2023 21:04

      Алексей Макаренков уже рассказывал об это нюансе. Просто могу, сославшись на него, повторить, что как правило, разработчики стараются включать Lumen - аналог трассировки. Но большая часть проектов, либо ещё не ушла с предыдущей версии, либо не так давно перешла на текущую.

      По поводу финансов - знаю куда больше. Подразделение разработки движка - очень прибыльное, настолько, что если фортнайт просто исчезнет, Epic и дальше сможет не только существовать, но и расти. С ними прям всё слишком хорошо. Одна только Microsoft имеет с ними эксклюзивный договор, и почти всё, что они делают - выпускается на анриале. Крупные студии - это молочная корова для эпиков. На данный момент с одних только отчислений за движок, эпики могут позволить финансирование всех своих текущих проектов, включая форточку. Поэтому форточка на самом деле приносит ещё больше денег, чем представлялось до этого.


      1. timiryazevec
        05.12.2023 21:04
        +1

        Спасибо за ответ. Но на мой взгляд про люмены как то принято за уши, ну или разработчики не очень умные люди поголовно, но вот реально я не назову ни одной игры вышедшей не от эпиков на UE 5 не считающиеся техническим провалом и спокойно идущие на стим дек (для меня это как критерий). При этом Fornite спокойно себя чувствует что с нанитами, что с люменами, судя по демонстрациям, сам не играю.

        По поводу прибыльности UE. На суде с Apple им пришлось раскрыть цифры и вроде как там доход не больше 300 млн енотов вышло за 2 года. Ну такое с учётом того, что доход Fornite аналогично был в районе 6 млрд. Тут интереснее конечно не какой доход, а какая прибыль. Ведь разработка движка требует немало вложений.

        При этом у меня нет сомнений что у эпиков все ещё долго будет хорошо. Просто гложет любопытство могут ли они просрать все полимеры и по какому сценарию


        1. Ruins007 Автор
          05.12.2023 21:04
          +1

          Я имел ввиду условный Люмен, там есть множество технологий те же Virtual Shadow Maps - очень прожорливые, они делаю работу с тенями очень простыми, снимая весь геморрой, но стоят они столько... Нанит имеет ограничения, на старых видеокартах - минимальная база, которая требуется для старта съедает прилично, и именно, на старых видеокартах, хотя новые, даже менее производительные - проблем не чувствуют совсем. Опять же, после короны, многие развитые страны быстро и массово обновились до железа последнего поколения, а как известно проблемы индейцев - шерифа не волнуют.

          Суд с эпл был ещё до появления UE5, и даже тогда представленные данные, были ретроспективными с лагом в пару лет. Те данные на которые вы ссылаетесь - это показатели 2019 года. Все эти акции с Нанитами и Люменом - очень хорошо продали движок, а реальные отчисления с него, Эпики начали получать всего только год назад, когда проекты увидели релиз.

          С такими бюджетами и уже наработанными технологиями, даже если они закроют разработку вообще, они ещё года 3 проедать заработанное будут. Как говорится too big to fail.

          В теории, можно предпринять меры по увеличению отчислений, конкретно политика, которую выдвинули Юнити - ровно так же убийственна и для Анриала, после такого, они бы очень сильно убавили в росте. Хотя, он навряд ли бы кончился, учитывая клиентуру, конкретно, Анриала. Можно начать увольнять разработчиков, и повышать отчисления, убрать бесплатный доступ. Но даже когда у Анриала были все эти недостатки в прошлом, он всё ещё был прибыльным и развивался. Всегда будет дешевле купить, даже дорогой Анриал, чем писать свой движок, если вам нужно, что-то более-менее мощное. Анриал после такого, может, разве что, сдать позиции в пользу Юнити.

          Просто напоминаю, гонка игровых движков существует относительно не так долго, когда-то она существовала на заре игровой индустрии в 90-х и начале 2000-х, и потом, во второй половине десятых, с появлением Юнити и только с 4 версии Анриала, движки начали вообще хоть куда-то двигаться. Поэтому в этой индустрии - не обязательно стараться как Анриал, но если кто-то старается, то он точно заберёт у вас клиентов. В этом по сути и заключалась стратегия Юнити. Ни кто не знал, что выкатят Эпики, вообще ни кто.


    1. crawlingroof
      05.12.2023 21:04
      +1

      Эх, променяли Unreal Tournament на Fortnite


  1. Robastik
    05.12.2023 21:04
    +5

    Было бы здорово вместе с уровнем сложности и прочими ярлыками показывать оценку уровня языка. Например, ярлык ???? показывал бы уровень грамотности значительно ниже среднего по Хабру.


    1. zabanen2
      05.12.2023 21:04
      +5

      да, сложно пробираться сквозь текст. но статья мне нравится: она не похожа на копроблоговскую генеративную жвачку, больше похоже на то, что автор высказывает свое личное (похоже на конструктивное) мнение по поводу UE5 и оно прямо вразрез идет с тем, что, например, высказывается от самих iXBT games: https://youtu.be/DzZF6bQjG6c
      и прошу заметить, количество просмотров тут 2к, в ролике на ютубе 500к.
      и я думаю, что мне придется еще не раз возвращаться к этой статье


  1. zabanen2
    05.12.2023 21:04

    возможно ли сравнить UE5 с Source 2?


    1. CaptGg
      05.12.2023 21:04

      А почему они нуждаются в сравнении? Они никак не пересекаются.

      Unreal Engine 5 доступен любому желающему со всеми его возможностями и отличной документацией. Ориентирован в первую очередь на передовые графические технологии и удобство кроссплатформенной разработки.

      Source 2 внутренний инструмент Valve Software, отчасти доступный сторонним разработчикам, но без толковой документации. Если индивидуально договориться с Valve, то можно получить больше поддержки и возможностей. Ориентирован на высокую производительность, хорошо зарекомендовавшие себя обкатанные технологии и наиболее распространенные графические ускорители. Valve делает его для себя и под себя, просто не против поделиться, если кому-то еще очень надо.


  1. KyHTEP
    05.12.2023 21:04
    +2

    Мешлеты в mesh-шейдерах - это любая группа вершин обрабатываемая параллельно, это WorkGroupID. Кластеры в Nanite - это часть иерархии видимости модели, это структурная часть самой модели.

    https://developer.nvidia.com/blog/introduction-turing-mesh-shaders/
    " The original mesh is segmented into smaller meshlets as figure 2 shows. Each meshlet ideally optimizes the vertex re-use within it."

    https://docs.unrealengine.com/5.0/en-US/nanite-virtualized-geometry-in-unreal-engine/
    "Nanite is Unreal Engine 5's virtualized geometry system which uses a new internal mesh format "
    "During import — meshes are analyzed and broken down into hierarchical clusters of triangle groups "

    Hierarhical clusters = LODS
    Triangle groups = Meshlets

    Разве концептуально не одно и тоже?

    Наниты на само деле не имеют ничего общего с лодами, Наниты разбивают модель на кластеры точек, которые уже в свою очередь используются для куллинга.

    https://docs.unrealengine.com/5.0/en-US/nanite-virtualized-geometry-in-unreal-engine/
    ' A Nanite mesh is still essentially a triangle mesh at its core with a lot of level of detail and compression applied to its data. On top of that, Nanite uses an entirely new system for rendering that data format in "an extremely efficient way.

    Entirely new system - скорее всего эмуляция mesh-shaders для API < DX12
    И все таки не кластеры точек, а иерархия кластеров групп треугольников.


    Как я понял, вы сравниваете готовую технологию (с лодами, стримингом, куллингом, компрессией & etc.) и отдельные высказывания от мира Unity.

    Ни кто за всё это время не сделал ничего подобного Нанитам.

    Потому что это долго и дорого. Nanite работает на API ниже DX12. Дешевле делать такую технологию сразу под DX12+. Но даже при этом это "дешево" все равно долго и дорого, т.к. нужно принять очень много решений и наложить очень много ограничений. Для многих компаний, не имеющих такой уровень финансов и кадров, проще подождать конкурентов или пользоваться Nanite. Более того, сделать саму концепцию и рендер - это пол беды. Самое тяжелое - это tools.


    1. Ruins007 Автор
      05.12.2023 21:04
      +2

      Разве концептуально не одно и тоже?

      Это хорошее замечание, я умышленно пренебрёг этим моментом, как по мне - это вводит больше непонимания и ложных параллелей. Мешлет - это локальный кусок меша, размером с блок видеокарты. То есть это выровненные данные. У мешлетов даже свойств нет, это просто массив. В то время как, Нанит использует именно иерархию и сложные взаимосвязи с компрессией и т.д. Мешлеты - это не часть меш-шейдеров вовсе, это подход Nvidia к выравниванию данных для оптимизации.

      Entirely new system - скорее всего эмуляция mesh-shaders для API < DX12

      Mesh-шейдер - это int Main(Polygon Args), я не совсем понимаю, как его можно эмулировать? Это даже в коде не отобразится, это просто декларация. У Mesh-шейдеров нет ни какого разбиения на структуру или иерархии. Голый меш-шейдер даже в теории не может рендерить что-то структурное.

      Как я понял, вы сравниваете готовую технологию (с лодами, стримингом, куллингом, компрессией & etc.) и отдельные высказывания от мира Unity.

      Нет, я сравнивал Нанит с тем, что ему приписывают. Его называют - кастомным меш-шейдером, но меш-шейдеры доступны любому разработчику, они подключаются в 5 строк кода, но они не делают ничего подобного, что делает Нанит. У вас просто эмпирический на выходе не будет Нанита. Как Нанит может быть меш-шейдером, если меш-шейдер не умеет делать то, что делает Нанит?


      1. KyHTEP
        05.12.2023 21:04

        Мешлет - это локальный кусок меша, размером с блок видеокарты. То есть это выровненные данные. У мешлетов даже свойств нет, это просто массив.

        Мешлеты - это не часть меш-шейдеров вовсе, это подход Nvidia к выравниванию данных для оптимизации.

        Но чтобы послать на рендер из движка, вы все равно будете делать структуру этих данных для меша. Это вопрос терминологии, а не концептуальная разность. Ну давайте по аналогии с пикселем-текселем (picture element / texture element) назовем эту сущность мешель-meshel (mesh element). Что поменяется с точки зрения разбиения меша (все равно надо учитывать выравнивание, локальность)? Да и нередко термин за время существования смещает свой смысл. На мой взгляд с мешлетом так и произойдет.

         В то время как, Нанит использует именно иерархию и сложные взаимосвязи с компрессией и т.д. 

        Ну правильно. Если реализовывать рендер на меш-шейдерах, это все придется делать. Они ж не из коробки дают профит. Т.е. уместно было бы сравнивать либо две технологии, либо конкретную концепцию из нанита с мифом. Просто люди, которые не разбираются в этом, могут использовать формулировки из вашей статьи, которые, на мой взгляд, имеют легкие неточности, за которые могут зацепиться и не понять основного поинта.

        Mesh-шейдер - это int Main(Polygon Args), я не совсем понимаю, как его можно эмулировать?

        Это моя кривая формулировка, я имел ввиду новый подход к рендерингу на task/mesh шейдерах. Эмулировать - это на уровне движка работать с "meshel", в вершинном буфере они будут обычными локализоваными треуглами, и далее шлём на обычный конвеер. Так же есть не нулевая вероятность, что мешели можно находить схожие и заменять на какую нибудь среднюю, интерполированную версию. Но это уже концептуальные фантазии.

        Его называют - кастомным меш-шейдером

        Ну это чушь какая-то. Сравнивать технологию с вычислительным блоком. Разве это им нужно объяснять? )

         но меш-шейдеры доступны любому разработчику, они подключаются в 5 строк кода

        А они могут показать демку, если это так просто? ) (я понимаю, что речь идет о простоте подключения, а не простоте рендера, но выйти на этот тезис несложно)

        Как Нанит может быть меш-шейдером

        Никак.

        Есть подозрение что, чтобы реально донести, нужна более сложная подробная статья, которую, я полагаю, смысла для вас писать никакого.
        Я же лишь выделил те моменты, за которые ваши опоненты могут зацепиться.
        Как минимум, мы это обсудили в комментах и дополнили общую доказательную базу )


        1. Ruins007 Автор
          05.12.2023 21:04
          +1

          (все равно надо учитывать выравнивание, локальность)?

          Нет, это полностью опционально, вы можете использовать mesh-шейдеры без мешлетов. Обычные меши так же подходят. Просто Nvidia демонстрирует, что вы имеете прямой доступ к геометрии и показывает свой подход. Это не обязательно, это просто пример от Nvidia. Вы же не ждали на презентации пустой шейдер, который ничего не делает?

          Ну это чушь какая-то

          Это буквально то, что я слышал от других разработчиков, это то, что можно найти под видео. Про это делают видео, каналы миллионники: https://youtu.be/LlnTBmPJklU?t=124&si=7H6cAnFTyh83WxSr


          1. KyHTEP
            05.12.2023 21:04

            Просто Nvidia демонстрирует, что вы имеете прямой доступ к геометрии и показывает свой подход. Это не обязательно, это просто пример от Nvidia.

            Ну подход про локальные группы треугольников тема же старая?
            Если ее брать, как концепцию, то она одинакова, что у нвидии, что у нанита - давайте группировать локально не вершины, а треугольники, т.к. есть куча профита для высокополигонального ренедринга и рейтресинга.
            Я думаю, с этой точки и идет дальнейшее ложное сравнение, что нанит - это мешшейдер.

            это то, что можно найти под видео

            Ох, там смешались в кучу люди-кони...


    1. SnakeSolid
      05.12.2023 21:04

      Возможно я ошибаюсь, но, насколько я понимаю, их концепцию: в Nanite они сделали что-то аналогичное адаптивному LOD для земли, но вместо heightmap-а использовали расстояние до базовой модели и переложили генерацию треугольников на видеокарту. А цветные кусочки - это те самые heightmap-ы на которые разбита моделька и которые использует шейдер для генерации треугольников.


      1. KyHTEP
        05.12.2023 21:04

        https://docs.unrealengine.com/5.0/en-US/nanite-virtualized-geometry-in-unreal-engine/

        • During import — meshes are analyzed and broken down into hierarchical clusters of triangle groups.

        • During rendering — clusters are swapped on the fly at varying levels of detail based on the camera view, and connect perfectly without cracks to neighboring clusters within the same object. Data is streamed in on demand so that only visible detail needs to reside in memory. Nanite runs in its own rendering pass that completely bypasses traditional draw calls. Visualization modes can be used to inspect the Nanite pipeline.

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


  1. sprayer
    05.12.2023 21:04
    -2

    Обычные движки не могут больше 100к полигонов отображать чего? Дум3 несколько миллионов вертел, у элой из хорайзон только на волосах 300к полигонов. Меш шейдеры как и все лучи это заслуга директ икса, а не анриала или нвидиа. В юнити тоже воткнуть эту преблуду если уже не воткнули какими нибудь плагинами. Статья не о чем


  1. freylis
    05.12.2023 21:04

    Так а всё же, тот видос с заброшки с пушкой от первого лица — реальное видео или нет?


    1. Ruins007 Автор
      05.12.2023 21:04

      Учитывая, что вы смотрите его на Ютуб, это абсолютно реально - видео.


    1. CaptGg
      05.12.2023 21:04

      Если вы про Unrecord, то это вполне по силам UE5. В видео вполне видны все артефакты присущие современной 3D графике, местами низкополигональные модели, физически некорректные отражения, неудачные текстуры, отсутствие поверхностного затенения у динамических объектов.

      Проблема в том, что при таком уровне детализации обеспечить приемлемую производительность этого проекта на чем-то помимо RTX 4090 может быть сложновато.


  1. kipar
    05.12.2023 21:04
    +2

    Я правильно понимаю что исходники UE5 доступны любому желающему? Тогда интереснее было бы почитать статью про то чем этот нанит все-таки является. Потому что эти "революция миллиард треугольников скоро и на мобилках где они не влезут даже в оперативную память" и "это не лоды, тут всё точно, но при этом можно выставить качество и только при 100% это эквивалентно честной отрисовке" выглядят странно.


    1. Ruins007 Автор
      05.12.2023 21:04

      Нанит производит конвертацию модели, в этот момент можно и выставить качество конвертации. Возможно, я не правильно выразился - Нанит использует уровни детализации для кластеров, но не в привычном понимании, это скорее тесселяция, чем обычные лоды.


    1. Malstream
      05.12.2023 21:04
      +3

      Тогда интереснее было бы почитать статью про то чем этот нанит все-таки является.

      Вы можете прочитать про это из первых рук.

      Да и посмотреть на исходники (при наличии доступа) тоже можете -UnrealEngine/Engine/Source/Runtime/Renderer/Private/Nanite. А здесь шейдеры - UnrealEngine/Engine/Shaders/Private/Nanite

      Если очень грубо - это хитрый софтверный растеризатор с иерархией, который конечно же эксплуатирует mesh-shader'ы, если они доступны.

      Хотел тезисно ответить на статью, но она представляет из собой какой-то бессвязный поток сознания и борьбы с Юнитишниками тезисами, которые автор непонятно где увидел.


      1. Ruins007 Автор
        05.12.2023 21:04

        Если очень грубо - это хитрый софтверный растеризатор с иерархией, который конечно же эксплуатирует mesh-shader'ы, если они доступны.

        Не совсем, там используется и софтверный, написанный на Cuda и OpenCL, и одновременно классический конвейер. Результаты объединяются, архитектура Unreal Engine - позволяет проворачивать такой трюк. Но ни какой иерархии растеризации нет, вы вероятно перепутали с Иерархичным Буфером Глубины(HZB), который используется для кулинга или вы, вообще, о геометрии.


  1. simenoff
    05.12.2023 21:04

    Графика всё круче, а игры всё хуже


  1. Mingun
    05.12.2023 21:04
    +2

    Господи, всё ждал, когда же автор наконец соизволит объяснить человеческим языком, что же за магию делают эти ваши Наниты, но, видимо, не в этой жизни… Они не это, не это и не это, ха-ха, лузеры! Ну а так что же?


    1. Ruins007 Автор
      05.12.2023 21:04

      я не могу вам сказать, чем является на самом деле этот ваш Nanite, но я могу вам сказать, чем он точно не является

      Извините, не хотел вас подводить, я просто считал, что о нанитах сказано достаточно и без меня


  1. dooMoob
    05.12.2023 21:04
    +2

    Анрил безусловно всех победит в будущем, т.к. мы живем в мире капитализма. Но пока анрил смог победить только мой пк неадекватными системками на игры, выходящие на этом волшебном движке, и мои глаза количеством мыла на экране


  1. slonopotamus
    05.12.2023 21:04
    +2

    На голом Анриал 5, игра перенесённая с Анриала 4 - будет работать быстрее. Нанит - это тоже технология снижающая потребление ресурсов, она может выдавать не только модели высокого качества, но и огромное количество самих моделей, включение технологии Нанит для проекта на Анриал 5 - увеличит производительность.

    Простите, но нет. Это вам как техлид игры на UE5 говорю. И ещё вижу двоих на работе на соседних проектах. В остальном статья хороша, пишите ещё.