Найти в Дзене

Unity 6 tips: Combine Meshes

Unity 6 tips: Combine Meshes https://www.youtube.com/watch?v=vPhRADmT-zs Кто-то пустил маркетологов в советчики? Охххх, на сколько же опасно давать такие советы. В целом это может быть правдой. В определенном контексте. Но джуниор разработчики люди творческие. По себе помню, когда я какого-то подрядчика ругал за new SomeData внутри цикла, так как не разбирался в памяти, куче и стеке. И по привычке из плюсов new - это в среднем зло 🙂 А оказалось потом, неожиданно, что когда SomeData это структура, то там аллоцируется на стеке и это условно ничего не стоит (ну к фризам из-за памяти и фрагментации хипа не приводит точно, так как куча не задействована). Но это и было 9 лет тому назад :) И вот этот видос мне показался чем-то подобным. Рассказали про функционал. Классно. Для тех кто не знал. Даже не обязательно погружаться в детали и контекст рендера. Но это не совет, это обзор функционала. Потому что для этого надо понимать ответ на вопрос. Представим вы делаете экшн рпг и у вас огромный

Unity 6 tips: Combine Meshes

https://www.youtube.com/watch?v=vPhRADmT-zs

Кто-то пустил маркетологов в советчики? Охххх, на сколько же опасно давать такие советы. В целом это может быть правдой. В определенном контексте. Но джуниор разработчики люди творческие. По себе помню, когда я какого-то подрядчика ругал за new SomeData внутри цикла, так как не разбирался в памяти, куче и стеке. И по привычке из плюсов new - это в среднем зло 🙂 А оказалось потом, неожиданно, что когда SomeData это структура, то там аллоцируется на стеке и это условно ничего не стоит (ну к фризам из-за памяти и фрагментации хипа не приводит точно, так как куча не задействована). Но это и было 9 лет тому назад :)

И вот этот видос мне показался чем-то подобным. Рассказали про функционал. Классно. Для тех кто не знал. Даже не обязательно погружаться в детали и контекст рендера. Но это не совет, это обзор функционала. Потому что для этого надо понимать ответ на вопрос. Представим вы делаете экшн рпг и у вас огромный замок. Почему весь замок мы не можем сделать одним мешем? Ну типа даже мы проходим по ограничению на число вертексов, у нас не самый высокополигональный замок. Почему если в нём много комнат и мы находимся внутри, а не снаружи, так делать объективно плохо?

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

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

Стандартный меш загружается целиком. Вы не можете загрузить в VRAM только часть его вершин произвольным образом. GPU работает с мешами как с едиными объектами данных. Если вы видите часть одного объекта (например, половину дома), это означает, что его bounding box попал во фрустум. На GPU будет отправлен весь меш дома, обработаны все его вершины вершинным шейдером, но отрисованы (растеризованы) будут только те треугольники, которые прошли тест глубины и попали в экранные границы.

#новости