Как стать автором
Обновить

Разбор рендеринга в Unity, часть вторая: посмотрим на Genshin Impact

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров13K
Всего голосов 48: ↑47 и ↓1+55
Комментарии13

Комментарии 13

Genshin Impact на Unity сделан? Пойду ребенку расскажу, чтобы дурью не маялся.

Ну нормально, я автору плюс в карму, а мне минус за вопрос...

Ну минус не от меня был. Поставил плюс от себя, чтоб нейтрализовать..

Спасибо ))! Вопрос, то вполне серьезный был, у меня ребенок три скечбука персонажами из геншина изрисовал, и сейчас опять кого-то рисует. Я думал у них свой движок, а если это Unity - то это в корне меняет дело. Спасибо за статью!

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

Загрузка локаций там совсем не бешовная - при входе в подземелья и интерьеры возникает лоадер-бар - явно загружается отдельная сцена. Именно по рендерингу не видел ничего такого, что нельзя было бы сделать на Scriptable Pipeline. Но думаю что возможность купить сорцы у китайцев точно есть)), так что могли что-то и переписать

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

кучность нормалей(на 1 квадратик который состоит из 2 треугольников) ну тоесть не 4 нормали а допусти 20

ошибся не кучность а всё таки 4 нормали

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

Загрузка локаций там совсем не бешовная

Собственно загрузка происходит в нескольких случаях - загрузка катсцены/скрипта, подгрузка подземелий (коими в том числе являются и некоторые дома, типа чайного домика в Инадзуме), вход другого игрока в мир и быстрое перемещение между локациями. В остальном можно пробежать из одного края карты в другой абсолютно без загрузок. На тот момент не существовало нормальных механизмов, которые позволяли бы проворачивать нормальную бесшовность в Unity. Именно это они и допиливали в том числе, чем вызвали восторг множества других разработчиков.

 что нельзя было бы сделать на Scriptable Pipeline

Учитывая сколько лет самой игре многих возможностей и оптимизаций под мобильные устройства могло попросту не существовать. Плюс у них есть порт под Playstation, который вроде как китайцы допиливали совместными усилиями с командой Unity. Тамошний пайплайн отличается от того что используется не десктопе/мобилках.

А чем плох unity? Современный, мощный 3d двигатель) иль вы думали это что-то вроде майнкрафта ахаха

Как так же разбираться в юнити и в целом в программировании? Сколько раз я не пробовал, столько же раз и забрасывал. Сейчас делаю с помощью ИИ, но не оставляет в покое то, что это написал не я и сам бы я этого в жизни не написал

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

  • матеша - векторы, матрицы, кватернионы

  • вершины, треугольники, квадраты, линии, точки - в пространстве

  • две матрицы проекции 2D/3D**

  • матрица вида

  • построение буфера желательно соприкоснуться лично с отрисовкой тоесть - это этап про пока математику как вектор матрица и кватернион превращается в 3матрицу*(матрица модели, матрица вида, матрица проекции - какая последовательность)

  • планомерно понять как найти матрицу нормали от модели, нужно для света

  • плоские операции двумерности(картинки из 2д в 1 мерную последовательность)

  • ну на старте вам должно этих чаптеров хватить

  • соотв вы сразу подтяните базу так как вам преодолеть базову отрисовку и понять основные операции через юниформы воздействуя на вершины и смешивание цветов внутри вершин - тоесть шейдеры, тоесть путь чтоб понять построение 3д не тривиален но там есть уже гайдлайн четкий, тут стоит вопрос на что вы будете обращать внимание и сразу ли переварите всю инфу

*при участии вершин

**1 матрица проекции на модель

соотв API даёт доступ к отрисовке +- путь матеша-3д одинаковый разные только API

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

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории