Просто к сведенью. Видеокарта не работает с png от слова совсем. Браузер каждую png распаковывает в битмап. 1024x760 RGBA8 UNorm это 3.0 MB. На некоторых мобильных устройствах размер текстуры будет изменён до квадрата двойки по большей стороне. Т.е. станет 1024x1024 4.0 MB. А сжатая текстура будет весить 0.7 MB в ETC2 и отправляется в память видеокарты как есть. Но сжатые текстуры придётся делать в разных форматах под разные платформы. В идеале этим должен заниматься движок на котором делается игра.
Ваша демка, что на i7-7700, что на Snapdragon 835 при попытке зума уходит в загрузку на 30 секунд. Я, конечно, не эксперт, но с такими таймингами тут оптимизацией даже не пахнет. И там, и там Chrome последней версии.
2-3 фпс при таком масштабе и погрузка около минуты если сдвинуть карту хоть немного.
Откуда вообще берутся такие юзеры на хабре. И кто-то плюсует комментарий.
Под рукой в данный момент открытая unity. Создал простейший шейдер, который берет uv координаты и выводит x. Т.е. на выходе линейное изменение от 0 до 1. Но вообще такое даже проверять глупо. Всё равно, что подвергать сомнению высказывание "земля круглая".
Результат
Шейдер
Скрин того, что лежит в 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.
Сменить пайплайн с built-in на URP. SRP-batcher даёт очень сильный буст при использовании разных мешей с одинаковым шейдером.
Отказаться от GameObject и использовать CommandBuffer для отрисовки объектов.
Отказаться от хранения данных в текстуре. Эпоха dx9 давно ушла. Используете structured buffer.
Переход на структурные буферы открывает возможность хорошо перепаковать данные. Вместо 4 каналов png по 8 бит, вы можете использовать структуры любой сложности. С помощью квантизации разместить их максимально компактно. По ссылке пример упаковки данных для сетевой передачи, для видеокарты это конечно же не подходит. Упаковать данные можно лишь в пределах одного элемента структуры. Но принцип тот же.
Чтобы получить все преимущества 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 не надо включать для всего проекта.
Поддержка hlsl это очень крутая фича. Когда начал писать шейдеры, столкнулся с отсутствием нормальной ide. Поддержка unity cg будет или ограничитесь чистым hlsl?
Всегда думал, что векторные вычисления это настоящее gpu, а скалярные это пережиток прошлого, а оказывается всё с точностью до наоборот.
А как обстоят дела на ПК? Компилятор под directx выдаёт векторные инструкции. Означает ли это, что современные gpu их используют?
Просто к сведенью. Видеокарта не работает с 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.
>>Могли сразу просто прямую поддержку плюсов впилить да и всё на этом.
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 кругов ада. Невозможно разместит каретку ввода текста куда нужно, ни мышкой, ни клавиатурой. Как разместить изображение в спойлере я так и не понял.
В общем это даже не бета сайта, это пре альфа.
Курсор мыши никак не меняется над кликабельными изображениями. Без этого вообще не очевидно, что их можно кликнуть.
Думаю под капотом math.asfloat скрывается тоже самое.
Поддержка hlsl это очень крутая фича. Когда начал писать шейдеры, столкнулся с отсутствием нормальной ide. Поддержка unity cg будет или ограничитесь чистым hlsl?
Всегда думал, что векторные вычисления это настоящее gpu, а скалярные это пережиток прошлого, а оказывается всё с точностью до наоборот.
А как обстоят дела на ПК? Компилятор под directx выдаёт векторные инструкции. Означает ли это, что современные gpu их используют?