Самым известным является то, что движок Unity использует только один поток обработки информации при работе с процессором.
Если unity работает только в одном потоке, то как я сделал этот скриншот профайлера, где видно, что загружены все ядра процессора?
Автор статьи вообще знает о юнити хоть что-то кроме домыслов сделанных на основе даже не знаю чего? Вопрос риторический.
За последние годы в unity проделана огромная работа, делающая движок многопоточным. Есть шикарный инструментарий для программистов Job system. Есть компилятор burst который выдаёт производительность в 10-20 раз большую чем il2cpp и сравним по скорости с нативным плюсовым кодом. Нативные библиотеки такие как физика, система частиц, звук используют дополнительные потоки для своих вычислений. В 23 версии появился Awaitable. А использовать родные Thread никто никогда не запрещал. В каждой новой версии юнити появляется всё большее количество апи которые позволяют работать с движком вне основного потока. Но автор с абсолютной уверенностью пишет, что unity это однопоточный движок, который не умеет в мультипоточность. И эта статья заплюсована.
Просто к сведенью. Видеокарта не работает с png от слова совсем. Браузер каждую png распаковывает в битмап. 1024x760 RGBA8 UNorm это 3.0 MB. На некоторых мобильных устройствах размер текстуры будет изменён до квадрата двойки по большей стороне. Т.е. станет 1024x1024 4.0 MB. А сжатая текстура будет весить 0.7 MB в ETC2 и отправляется в память видеокарты как есть. Но сжатые текстуры придётся делать в разных форматах под разные платформы. В идеале этим должен заниматься движок на котором делается игра.
Ваша демка, что на i7-7700, что на Snapdragon 835 при попытке зума уходит в загрузку на 30 секунд. Я, конечно, не эксперт, но с такими таймингами тут оптимизацией даже не пахнет. И там, и там Chrome последней версии.
Откуда вообще берутся такие юзеры на хабре. И кто-то плюсует комментарий.
Под рукой в данный момент открытая unity. Создал простейший шейдер, который берет uv координаты и выводит x. Т.е. на выходе линейное изменение от 0 до 1. Но вообще такое даже проверять глупо. Всё равно, что подвергать сомнению высказывание "земля круглая".
Результаты тестирования unsafe методов абсолютно неверны, потому что сами методы написаны неправильно. Закрепление объекта внутри цикла так себе идея, fixed нужно вынести на уровень выше.
public unsafe string Unsafe_ReadOnlySpan_NewString()
{
ReadOnlySpan<char> chars = Content.AsSpan();
fixed (char* baseChar = chars)
for (int i = 0; i < chars.Length; i++)
{
if (baseChar[i] == ' ') baseChar[i] = ',';
}
return new string(chars);
}
Структурные буферы поддерживаются на всех платформах и для всех графических апи. Для доступа к ним из вершинного шейдера нужна Shader Mode 5.0 и выше. Единственное исключение это мобильники из низкого ценового сегмента, работающие на OpenGL ES 2.0.
Сменить пайплайн с built-in на URP. SRP-batcher даёт очень сильный буст при использовании разных мешей с одинаковым шейдером.
Отказаться от GameObject и использовать CommandBuffer для отрисовки объектов.
Отказаться от хранения данных в текстуре. Эпоха dx9 давно ушла. Используете structured buffer.
Переход на структурные буферы открывает возможность хорошо перепаковать данные. Вместо 4 каналов png по 8 бит, вы можете использовать структуры любой сложности. С помощью квантизации разместить их максимально компактно. По ссылке пример упаковки данных для сетевой передачи, для видеокарты это конечно же не подходит. Упаковать данные можно лишь в пределах одного элемента структуры. Но принцип тот же.
Умер, потому что после 14 минут в игре стало 5 фпс. Если бы не проблемы с оптимизацией, то игра суперпростая. Это была моя первая попытка.
Попробуйте для просчёта логики врагов и пуль использовать Unity Job System и Burst. Если делать такие вычисления в основном потоке, нормального фпс можно не ждать.
Чтобы получить все преимущества Jobs и Burst, к счастью, необязательно использовать DOTS.
>>Могли сразу просто прямую поддержку плюсов впилить да и всё на этом.
Unity очень долго развивалась, а Burst появился не так давно. Менять сейчас c# на c++ не лучшая идея. Поэтому Burst это отличное решение.
>>C# для GameDev (в Unity он смотрится откровенно плохо)
В статье про манипулятивные техники используются манипулятивные техники. Вот это поворот.
Чем плох шарп в юнити? После того как появился Burst (трансляция IL/.NET в LLVM) и Jobs system (многопоточный код), то о каких-либо проблемах с производительностью можно забыть. С каждой версией Unity всё большее количество апи поддерживает работу с NativeContainer. Даже если не утруждать себя написанием многопоточного кода, а только пропустить тяжёлый метод через Burst, можно получить буст производительности в 10-20 раз. Также в методах, которые невозможно вынести из основного потока можно использовать unsafe context. В результате на выходе получится игра сравнимая по производительности с аналогом на c++.
Win 10 x64 Pro 20H2 19042.928, установлены все обновления.
Google Chrome 90.0.4430.93 x64
Microsoft Edge 90.0.818.56 x64
Курсор не изменятся в обоих браузерах. Тема и настройка курсоров дефолтные. Во время проверки в браузерах были отключены все расширения.
Вот такую нагрузку создаёт текущая вкладка. Это очень много. Chrome 90.0.4430.93. Раньше с телефона невозможно было читать комментарии т.к. телефон нагревался как от 3д шутера. Теперь это перенесли на пк.
Пока писал комментарий. Прошёл через 7 кругов ада. Невозможно разместит каретку ввода текста куда нужно, ни мышкой, ни клавиатурой. Как разместить изображение в спойлере я так и не понял.
Создаёте Assembly Definition, настраиваете зависимости, включаете unsafe. В итоге получаете более быструю компиляцию. И unsafe не надо включать для всего проекта.
Зачем размещать статью в хабе Unity, если внутри статьи нет ни слова о Unity?
Если unity работает только в одном потоке, то как я сделал этот скриншот профайлера, где видно, что загружены все ядра процессора?
Автор статьи вообще знает о юнити хоть что-то кроме домыслов сделанных на основе даже не знаю чего? Вопрос риторический.
За последние годы в unity проделана огромная работа, делающая движок многопоточным. Есть шикарный инструментарий для программистов Job system. Есть компилятор burst который выдаёт производительность в 10-20 раз большую чем il2cpp и сравним по скорости с нативным плюсовым кодом. Нативные библиотеки такие как физика, система частиц, звук используют дополнительные потоки для своих вычислений. В 23 версии появился Awaitable. А использовать родные Thread никто никогда не запрещал. В каждой новой версии юнити появляется всё большее количество апи которые позволяют работать с движком вне основного потока. Но автор с абсолютной уверенностью пишет, что unity это однопоточный движок, который не умеет в мультипоточность. И эта статья заплюсована.
Job system и burst вышли из чата.
Просто к сведенью. Видеокарта не работает с png от слова совсем. Браузер каждую png распаковывает в битмап. 1024x760 RGBA8 UNorm это 3.0 MB. На некоторых мобильных устройствах размер текстуры будет изменён до квадрата двойки по большей стороне. Т.е. станет 1024x1024 4.0 MB. А сжатая текстура будет весить 0.7 MB в ETC2 и отправляется в память видеокарты как есть. Но сжатые текстуры придётся делать в разных форматах под разные платформы. В идеале этим должен заниматься движок на котором делается игра.
Ваша демка, что на i7-7700, что на Snapdragon 835 при попытке зума уходит в загрузку на 30 секунд. Я, конечно, не эксперт, но с такими таймингами тут оптимизацией даже не пахнет. И там, и там Chrome последней версии.
Только не рассказывайте автору статьи про RaycastCommand в Unity. А то он совсем в депрессию впадёт.
Откуда вообще берутся такие юзеры на хабре. И кто-то плюсует комментарий.
Под рукой в данный момент открытая unity. Создал простейший шейдер, который берет uv координаты и выводит x. Т.е. на выходе линейное изменение от 0 до 1. Но вообще такое даже проверять глупо. Всё равно, что подвергать сомнению высказывание "земля круглая".
А вот с гамма-коррекцией:
Результаты тестирования unsafe методов абсолютно неверны, потому что сами методы написаны неправильно. Закрепление объекта внутри цикла так себе идея, fixed нужно вынести на уровень выше.
Структурные буферы поддерживаются на всех платформах и для всех графических апи. Для доступа к ним из вершинного шейдера нужна Shader Mode 5.0 и выше. Единственное исключение это мобильники из низкого ценового сегмента, работающие на OpenGL ES 2.0.
Что можно сделать ещё, чего я не увидел в статье.
Сменить пайплайн с built-in на URP. SRP-batcher даёт очень сильный буст при использовании разных мешей с одинаковым шейдером.
Отказаться от GameObject и использовать CommandBuffer для отрисовки объектов.
Отказаться от хранения данных в текстуре. Эпоха dx9 давно ушла. Используете structured buffer.
Переход на структурные буферы открывает возможность хорошо перепаковать данные. Вместо 4 каналов png по 8 бит, вы можете использовать структуры любой сложности. С помощью квантизации разместить их максимально компактно. По ссылке пример упаковки данных для сетевой передачи, для видеокарты это конечно же не подходит. Упаковать данные можно лишь в пределах одного элемента структуры. Но принцип тот же.
Файлы с данными можно запаковать с помощью Deflate или GZip.
Умер, потому что после 14 минут в игре стало 5 фпс. Если бы не проблемы с оптимизацией, то игра суперпростая. Это была моя первая попытка.
Попробуйте для просчёта логики врагов и пуль использовать Unity Job System и Burst. Если делать такие вычисления в основном потоке, нормального фпс можно не ждать.
>>Могли сразу просто прямую поддержку плюсов впилить да и всё на этом.
Unity очень долго развивалась, а Burst появился не так давно. Менять сейчас c# на c++ не лучшая идея. Поэтому Burst это отличное решение.
В статье про манипулятивные техники используются манипулятивные техники. Вот это поворот.
Чем плох шарп в юнити? После того как появился Burst (трансляция IL/.NET в LLVM) и Jobs system (многопоточный код), то о каких-либо проблемах с производительностью можно забыть. С каждой версией Unity всё большее количество апи поддерживает работу с NativeContainer. Даже если не утруждать себя написанием многопоточного кода, а только пропустить тяжёлый метод через Burst, можно получить буст производительности в 10-20 раз. Также в методах, которые невозможно вынести из основного потока можно использовать unsafe context. В результате на выходе получится игра сравнимая по производительности с аналогом на c++.
Google Chrome 90.0.4430.93 x64
Microsoft Edge 90.0.818.56 x64
Курсор не изменятся в обоих браузерах. Тема и настройка курсоров дефолтные. Во время проверки в браузерах были отключены все расширения.
Вот такую нагрузку создаёт текущая вкладка. Это очень много. Chrome 90.0.4430.93. Раньше с телефона невозможно было читать комментарии т.к. телефон нагревался как от 3д шутера. Теперь это перенесли на пк.
Пока писал комментарий. Прошёл через 7 кругов ада. Невозможно разместит каретку ввода текста куда нужно, ни мышкой, ни клавиатурой. Как разместить изображение в спойлере я так и не понял.
В общем это даже не бета сайта, это пре альфа.
Курсор мыши никак не меняется над кликабельными изображениями. Без этого вообще не очевидно, что их можно кликнуть.