Pull to refresh
8
0
Send message

Как я понимаю, этот код работает попиксельно для каждого пикселя сообщения, и смещает его в bitmap'е. Выглядит как действительно большое колличесто операций, при худшем сценарии, когда сообщение занимает почти весь экран.

В телеграмме, мне кажется, не так много операций на процессоре, как в юнити, где надо постоянно обсчитывать физику, плюс каждый кадр проверяется каждый monobehavior и исполняется его код в update. Но из относящегося чисто к графике, каждый кадр надо рассчитвать: матрицы преобразования из 3д в экранное 2д, затем Particle System повершинно рассчитывает положение для частиц в 3д (гравитация, вращение, энерция, размер(это всё разные функции)), цвет, uv, применяет матрицы преобразования и делает draw call после расчёта всех вершин. Колличество итераций той функции из телеграмма здесь заменяется сложностью каждой. Ну и на практике, уже при 10к частиц на среднем телефоне могут быть серьёзные просадки, и вам нужно оставаться в пределах пары тысяч, чтобы везде шло плавно. Это не так много, вы вполне можете упереться в этот лимит.

На больших платформах, для сравнения, на среднем цп 300к частиц в пустой сцене подарят почти кинематографический эскпириенс в 40 кадров. В то время как уже довольно старенькая gtx 1080 обрабатывает 5 миллионов частиц в VFX graph в 47 кадров. (см видео https://www.youtube.com/watch?v=0deXRHX9C08&ab_channel=Brackeys )

Так что разница есть, и в зависимости от сложности поведения частиц она может быть довольно разительной. И на мобильных устройствах приходиться использовать любые ухищрения, чтобы повысить fps.

Естественно, любой шейдер повышает нагрузку на гпу, по скольку на нём и исполняется. Здесь скорее дело в эффективности. На экране 1000 частиц, у каждой по 4 вершины, для каждой вершины нужно сделать расчёт положения. У процессоров нет столько ядер, чтобы параллельно их обработать. А видеокарта может.

Конечно может быть такая ситуация, что у вас распределён бюджет на кадр. Цель 60 фпс, значит один кадр видеокарта и процессор не должны обрабатывать дольше 16 милисекунд(по отдельности, грубо говоря). И так вышло, что видекарта уже занята все 16 милисекунд, тогда конечно нет выбора, исполняем на цп. Просто на цп это займёт больше времени, вот и всё.

Специально для тебя выкладываю на гитхаб билд с пустой сценой и двумя системами частиц, которые выполняют одинаковые действия (двигаются, меняют цвет и размер, используют одну текстуру и т.д.). Менять активную систему можно по пробелу.

Диваны, конечно, плоские, но само помещение выглядит объёмным. Параллакс это смещение близкого объекта относительно дальнего, и тут я никого не обманываю, дальняя стена двигается медленнее боковых, перспектива создаётся.

А если для игрока не принципиально или невозможно близко подойти к окну и рассмотреть, то плоскость дивина относительно стены будет незаметна.

Information

Rating
Does not participate
Registered
Activity

Specialization

Game Developer
C#
Game Development
Unity3d
.NET
OOP
Algorithms and data structures
Computer graphics