Почему фотошоп такой быстрый?

Суть:
1. открываем любое изображение
2. накидываем сверху 10 корректирующих слоев с различными эффектами
3. до кучи сверху еще 5 слоев с различными режимами смешивания, но так, чтобы сквозь них хоть как то просвечивал самый первый слой
4. меняем, например, яркость/контрастность самого первого слоя.

А теперь вопрос: каким образом фотошоп так быстро применяет эффекты от всех этих 15 слоев сверху к исходному изображению? Мы меняем его, эффекты пересчитываются в реальном времени для всего изображения (пусть даже только для вьюпорта). ГПУ ускорение? Нет, потому что лайтрум работает по схожему образу с выключеным ГПУ ускорением.

Интересует ответ с алгоритмической точки зрения
  • Вопрос задан
  • 1895 просмотров
Пригласить эксперта
Ответы на вопрос 4
Ничего в Фотошопе сверхбыстрого нет. Его просто не на JS пишут, а на C/C++, и, я уверен, с ассемблерными вставками там, где надо. Хотя, и без них я думаю он бы хорошо справлялся.

Да, кстати, о GPU. В современных CPU тоже достаточно много векторных инструкций, SSE там всякие. Если их умело применить, то для обработки несложных изображений никакого GPU не надо будет. Я уверен, что в Фотошопе эти наборы команд также применяются.

Добавим к этому лучших разработчиков в индустрии - они не то что хорошо знают алгоритмы обработки изображений, они сами их изобретают. Кому еще, как не им?

Выводы:
а) вы возможно привыкли к тормозам современного ПО, пишущегося на высокоуровневых языках криворукими ребятами. Не всё ПО такое. Как заметили предыдущие отвечающие, Фотошоп работал и на 32 метрах оперы, сейчас он тот еще монстр;
б) можно сильно по-разному реализовать алгоритмы обработки. Если вы поймете, какой потенциал у современных чипов, вы перестанете удивляться скорости обработки изображений.
Ответ написан
maaGames
@maaGames
Погроммирую программы
Одна из причин скорости фотошопа - использование вещественных чисел с фиксированной точностью. Причём, очень-очень низкой точностью. Во многих алгоритмах для расчётов используются 16 битные числа. Плюс блокирование памяти.
Ответ написан
@AndreyMyagkov
Секрет прост: эффекты накладываются на сначала превью, потом в фоне просчитываются на всю картинку в полном размере. И быстро просчитать эффекты наложения и коррекцию с современными мощностями не сложно в режиме HLS или в другом более подходящем для нужного эффекта. Да чего уж там говорить, когда браузер умеет это всё делать очень быстро. Основные эффекты уже реализованы в CSS3 - градиенты, фильтры, прозрачность, кроп, блюр - всё работает быстро.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Рассчитывается для рендеринга - только верхний слой, все остальное - рассчитывается в памяти и результат каждого шага и порядок слоёв сохраняется в виде матрицы преобразований относительно предыдущего шага.
Как только Вы переставляете слои:
1. из кэша берется матрица преобразований того, что находится под тем, что Вы переставили только что
2. суммируются матрицы от этого слоя и вверх
3. подготавливается результирующая матрица преобразований
4. выполняется рендеринг с верхнего слоя и вниз (убирая слои результирующей матрицы) до тех пор, пока есть "непокрытое" пространство в области видимости

По-скольку рендерится только то, что Вы видите - это делается очень быстро.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы