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

_

2
Subscribers
Send message

Просто к сведенью. Видеокарта не работает с 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.

А 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 не надо включать для всего проекта.
Вот ещё простой способ конвертации:
public static unsafe int SingleToInt32Bits(float value)
{
    return *(int*) &value;
}
        
public static unsafe float Int32BitsToSingle(int value)
{
    return *(float*) &value;
}

Думаю под капотом math.asfloat скрывается тоже самое.
Речь всё ещё о c#? Таких функций как math.asuint и math.asfloat в Math не существует. Можно ссылку на документацию или пример рабочего кода на шарпе?

Поддержка hlsl это очень крутая фича. Когда начал писать шейдеры, столкнулся с отсутствием нормальной ide. Поддержка unity cg будет или ограничитесь чистым hlsl?

Всегда думал, что векторные вычисления это настоящее gpu, а скалярные это пережиток прошлого, а оказывается всё с точностью до наоборот.
А как обстоят дела на ПК? Компилятор под directx выдаёт векторные инструкции. Означает ли это, что современные gpu их используют?

Information

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