Pull to refresh
16
0
Денис Тулупов @viruseg

_

Send message

Зачем размещать статью в хабе Unity, если внутри статьи нет ни слова о 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 последней версии.

2-3 фпс при таком масштабе и погрузка около минуты если сдвинуть карту хоть немного.
2-3 фпс при таком масштабе и погрузка около минуты если сдвинуть карту хоть немного.

Только не рассказывайте автору статьи про RaycastCommand в Unity. А то он совсем в депрессию впадёт.

Откуда вообще берутся такие юзеры на хабре. И кто-то плюсует комментарий.

Под рукой в данный момент открытая unity. Создал простейший шейдер, который берет uv координаты и выводит x. Т.е. на выходе линейное изменение от 0 до 1. Но вообще такое даже проверять глупо. Всё равно, что подвергать сомнению высказывание "земля круглая".

Результат
Результат
Шейдер
Шейдер
Скрин того, что лежит в uv. Чтобы не было сомнений.
Скрин того, что лежит в uv. Чтобы не было сомнений.

А вот с гамма-коррекцией:

Результаты тестирования 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.

Что можно сделать ещё, чего я не увидел в статье.

  1. Сменить пайплайн с built-in на URP. SRP-batcher даёт очень сильный буст при использовании разных мешей с одинаковым шейдером.

  2. Отказаться от GameObject и использовать CommandBuffer для отрисовки объектов.

  3. Отказаться от хранения данных в текстуре. Эпоха dx9 давно ушла. Используете structured buffer.

  4. Переход на структурные буферы открывает возможность хорошо перепаковать данные. Вместо 4 каналов png по 8 бит, вы можете использовать структуры любой сложности. С помощью квантизации разместить их максимально компактно. По ссылке пример упаковки данных для сетевой передачи, для видеокарты это конечно же не подходит. Упаковать данные можно лишь в пределах одного элемента структуры. Но принцип тот же.

  5. Файлы с данными можно запаковать с помощью Deflate или GZip.

Умер, потому что после 14 минут в игре стало 5 фпс. Если бы не проблемы с оптимизацией, то игра суперпростая. Это была моя первая попытка.

Попробуйте для просчёта логики врагов и пуль использовать Unity Job System и Burst. Если делать такие вычисления в основном потоке, нормального фпс можно не ждать.

А Graphics.CopyTexture разве не делает то, что вам было нужно?
Чтобы получить все преимущества 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 кругов ада. Невозможно разместит каретку ввода текста куда нужно, ни мышкой, ни клавиатурой. Как разместить изображение в спойлере я так и не понял.

В общем это даже не бета сайта, это пре альфа.

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

А какой смысл в подсчёте хеша библиотек? Взломщик возьмёт эталонные контрольные суммы и будет отправлять их на ваш сервер.
В DS настолько «гениальный» левел-дизайн, что на каждом шагу упираешься в невидимые стены. Такое AAA игры не позволяют себе уже лет 15 минимум.
Создаёте Assembly Definition, настраиваете зависимости, включаете unsafe. В итоге получаете более быструю компиляцию. И unsafe не надо включать для всего проекта.
1
23 ...

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity