Что такое кэш рендеринга
Рендер (Рендеринг) — это процесс создания финального изображения или последовательности из изображений на основе двухмерных или трехмерных данных. Данный процесс происходит с использованием компьютерных программ и зачастую сопровождается трудными техническими вычислениями, которые ложатся на вычислительные мощности компьютера или на отдельные его комплектующие части.
Процесс рендеринга так или иначе присутствует в разных сферах профессиональной деятельности, будь то киноиндустрия, индустрия видеоигр или же видеоблогинг. Зачастую, рендер является последним или предпоследним этапом в работе над проектом, после чего работа считается завершенной или же нуждается в небольшой постобработке. Также стоит отметить, что нередко рендером называют не сам процесс рендеринга, а скорее уже завершенный этап данного процесса или его итоговый результат.
Этимология слова «Рендер».
Слово Рендер (Рендеринг) — это англицизм, который зачастую переводится на русский язык словом “ Визуализация ”.
Что такое Рендеринг в 3D?
Чаще всего, когда мы говорим о рендере, то имеем в виду рендеринг в 3D графике. Сразу стоит отметить, что на самом деле в 3D рендере нету трех измерений как таковых, которые мы зачастую можем увидеть в кинотеатре надев специальные очки. Приставка “3D” в название скорее говорит нам о способе создание рендера, который и использует 3-х мерные объекты, созданные в компьютерных программах для 3D моделирования. Проще говоря, в итоге мы все равно получаем 2D изображение или их последовательность (видео) которые создавались (рендерелись) на основе 3-х мерной модели или сцены.
Рендеринг — это один из самых сложных в техническом плане этапов в работе с 3D графикой. Чтоб объяснить эту операцию простым языком, можно привести аналогию с работами фотографов. Для того, чтоб фотография предстала во всей красе, фотографу нужно пройти через некоторые технические этапы, например, проявление пленки или печать на принтере. Примерно такими же техническими этапами и обременены 3d художники, которые для создания итогового изображения проходят этап настройки рендера и сам процесс рендеринга.
Построение изображения.
Как уже говорилось ранее, рендеринг — это один из самых сложных технических этапов, ведь во время рендеринга идут сложные математические вычисления, выполняемые движком рендера. На этом этапе, движок переводит математические данные о сцене в финальное 2D-изображение. Во время процесса идет преобразование 3d-геометрии, текстур и световых данных сцены в объединенную информацию о цветовом значение каждого пикселя в 2D изображение. Другими словами, движок на основе имеющихся у него данных, просчитывает то, каким цветом должен быть окрашено каждый пиксель изображения для получения комплексной, красивой и законченной картинки.
Основные типы рендеринга:
В глобальном плане, есть два основных типа рендеринга, главными отличиями которых является скорость, с которой просчитывается и финализируется изображение, а также качество картинки.
Что такое Рендеринг в реальном времени?
Рендеринг в реальном времени зачастую широко используется в игровой и интерактивной графике, где изображение должно просчитываться с максимально большой скоростью и выводиться в завершенном виде на дисплей монитора моментально.
Поскольку ключевым фактором в таком типе рендеринга есть интерактивность со стороны пользователя, то изображение приходится просчитывать без задержек и практически в реальном времени, так как невозможно точно предсказать поведение игрока и то, как он будет взаимодействовать с игровой или с интерактивной сценой. Для того, чтоб интерактивная сцена или игра работала плавно без рывков и медлительности, 3D движку приходится рендерить изображение со скоростью не менее 20-25 кадров в секунду. Если скорость рендера будет ниже 20 кадров, то пользователь будет чувствовать дискомфорт от сцены наблюдая рывки и замедленные движения.
Большую роль в создание плавного рендера в играх и интерактивных сценах играет процесс оптимизации. Для того, чтоб добиться желаемой скорости рендера, разработчики применяют разные уловки для снижения нагрузки на рендер движок, пытаясь снизить вынужденное количество просчетов. Сюда входит снижение качества 3д моделей и текстур, а также запись некоторой световой и рельефной информации в заранее запеченные текстурные карты. Также стоит отметить, что основная часть нагрузки при просчете рендера в реальном времени ложиться на специализированное графическое оборудование (видеокарту -GPU), что позволяет снизить нагрузку с центрального процессора (ЦП) и освободить его вычислительные мощности для других задач.
Что такое Предварительный рендер?
К предварительному рендеру прибегают тогда, когда скорость не стоит в приоритете, и нужды в интерактивности нет. Данный тип рендера используется чаще всего в киноиндустрии, в работе с анимацией и сложными визуальными эффектами, а также там, где нужен фотореализм и очень высокое качество картинки.
В отличие от Рендера в реальном времени, где основная нагрузка приходилась на графические карты(GPU) В предварительном рендере нагрузка ложится на центральный процессор(ЦП) а скорость рендера зависит от количества ядер, многопоточности и производительности процессора.
Нередко бывает, что время рендера одного кадра занимает несколько часов или даже несколько дней. В данном случаи 3D художникам практически не нужно прибегать к оптимизации, и они могут использовать 3D модели высочайшего качества, а также текстурные карты с очень большим разрешением. В итоге, картинка получается значительно лучше и фото-реалистичней по сравнению с рендером в реальном времени.
Программы для рендеринга.
Сейчас, на рынке присутствует большое количество рендеринг движков, которые отличаются между собой скоростью, качеством картинки и простотой использования.
Как правило, рендер движки являются встроенными в крупные 3D программы для работы с графикой и имеют огромный потенциал. Среди наиболее популярных 3D программ (пакетов) есть такой софт как:
Многие из этих 3D пакетов имеют уже идущие в комплекте рендер движки. К примеру, рендер-движок Mental Ray присутствует в пакете 3Ds Max. Также, практически любой популярный рендер-движок, можно подключить к большинству известных 3d пакетов. Среди популярных рендер движков есть такие как:
Хотелось бы отметить, что хоть и процесс рендеринга имеет очень сложные математические просчеты, разработчики программ для 3D-рендеринга всячески пытаются избавить 3D-художников от работы со сложной математикой лежащей в основе рендер-программы. Они пытаются предоставить условно-простые для понимания параметрические настройки рендера, также материальные и осветительные наборы и библиотеки.
Многие рендер-движки сыскали славу в определенных сферах работы с 3д графикой. Так, например, “V-ray” имеет большую популярность у архитектурных визуализаторов, из-за наличия большого количества материалов для архитектурной визуализации и в целом, хорошего качества рендера.
Методы визуализации.
Большинство рендер движков использует три основных метода вычисления. Каждый из них имеет как свои преимущества, так и недостатки, но все три метода имеют право на своё применение в определенных ситуациях.
1. Scanline (сканлайн).
Сканлайн рендер — выбор тех, кто приоритет отдаст скорости, а не качеству. Именно за счет своей скорости, данный тип рендера зачастую используется в видеоиграх и интерактивных сценах, а также во вьюпортах различных 3D пакетов. При наличие современного видеоадаптера, данный тип рендера может выдавать стабильную и плавную картинку в реальном времени с частотой от 30 кадров в секунду и выше.
Алгоритм работы:
Вместо рендеринга «пикселя по пикселю», алгоритм функционирования «scanline» рендера заключается в том, что он определяет видимую поверхность в 3D графике, и работая по принципу «ряд за рядом», сперва сортирует нужные для рендера полигоны по высшей Y координате, что принадлежит данному полигону, после чего, каждый ряд изображения просчитывается за счет пересечения ряда с полигоном, который является ближайшим к камере. Полигоны, которые больше не являются видимыми, удаляются при переходе одного ряда к другому.
Преимущество данного алгоритма в том, что отсутствует необходимость передачи координат о каждой вершине с основной памяти в рабочую, а транслируются координаты только тех вершин, которые попадают в зону видимости и просчета.
2. Raytrace (рейтрейс).
Этот тип рендера создан для тех, кто хочет получить картинку с максимально качественной и детализированной прорисовкой. Рендеринг именно этого типа, имеет очень большую популярность у любителей фотореализма, и стоит отметить что не спроста. Довольно часто с помощью рейтрейс-рендеринга мы можем увидеть потрясающе реалистичные кадры природы и архитектуры, которые отличить от фотографии удастся не каждому, к тому же, нередко именно рейтрейс метод используют в работе над графиков в CG трейлерах или кино.
К сожалению, в угоду качеству, данный алгоритм рендеринга является очень медлительным и пока что не может использоваться в риал-тайм графике.
Алгоритм работы:
Идея Raytrace алгоритма заключается в том, что для каждого пикселя на условном экране, от камеры прослеживается один или несколько лучей до ближайшего трехмерного объекта. Затем луч света проходит определенное количество отскоков, в которые может входить отражения или преломления в зависимости от материалов сцены. Цвет каждого пикселя вычисляется алгоритмически на основе взаимодействия светового луча с объектами в его трассируемом пути.
Метод Raycasting.
Алгоритм работает на основе «бросания» лучей как будто с глаз наблюдателя, сквозь каждый пиксель экрана и нахождения ближайшего объекта, который преграждает путь такого луча. Использовав свойства объекта, его материала и освещения сцены, мы получаем нужный цвет пикселя.
Нередко бывает, что «метод трассировки лучей» (raytrace) путают с методом «бросания лучей» (raycasting). Но на самом деле, «raycasting» (метод бросания луча) фактически является упрощенным «raytrace» методом, в котором отсутствует дальнейшая обработка отбившихся или заломленных лучей, а просчитывается только первая поверхность на пути луча.
3. Radiosity.
Вместо «метода трассировки лучей», в данном методе просчет работает независимо от камеры и является объектно-ориентированным в отличие от метода «пиксель по пикселю». Основная функция “radiosity” заключается в том, чтобы более точно имитировать цвет поверхности путем учета непрямого освещения (отскок рассеянного света).
Преимуществами «radiosity» являются мягкие градуированные тени и цветовые отражения на объекте, идущие от соседних объектов с ярким окрасом.
Достаточно популярна практика использования метода Radiosity и Raytrace вместе для достижения максимально впечатляющих и фотореалистичных рендеров.
Иногда, выражение «рендерить» используют не только в работе с компьютерной 3D графикой, но и при работе с видеофайлами. Процесс рендеринга видео начинается тогда, когда пользователь видеоредактора закончил работу над видеофайлом, выставил все нужные ему параметры, звуковые дорожки и визуальные эффекты. По сути, все что осталось, это соединить все проделанное в один видеофайл. Этот процесс можно сравнить с работой программиста, когда он написал код, после чего все что осталось, это скомпилировать весь код в работающую программу.
Как и у 3D дизайнера, так и у пользователя видеоредактора, процесс рендеринга идет автоматически и без участия пользователя. Все что требуется, это задать некоторые параметры перед стартом.
Скорость рендеринга видео зависит от продолжительности и качества, которое требуется на выходе. В основном, большая часть просчета ложиться на мощность центрального процессора, поэтому, от его производительности и зависит скорость видео-рендеринга.
Задайте установки памяти, выбрав Правка > Установки > Память (Windows) или After Effects > Установки > Память (Mac OS).
При изменении настроек в диалоговом окне «Память» After Effects динамически обновляет в диалоговом окне текстовую подсказку о том, как программа будет распределять и использовать память и процессоры.
ОЗУ, зарезервированное для установки «Другие приложения», действует независимо от того, установлен ли флажок «Выполнять рендеринг одновременно нескольких кадров».
ОЗУ, зарезервированное для других приложений
Увеличьте это значение, чтобы предоставить больший объем ОЗУ для операционной системы и для приложений, отличных от After Effects и приложения, с которым After Effects использует общий пул памяти. Если известно, что предполагается использовать конкретное приложение вместе с After Effects, проверьте его требования к системе и установите это значение не менее минимального объема оперативной памяти, требуемой для этого приложения. Поскольку производительность оказывается максимальной, когда для операционной системы оставлен необходимый объем памяти, нельзя устанавливать это значение ниже минимального базового значения.
Пул памяти, совместно используемый приложениями After Effects, Premiere Pro, Prelude, Media Encoder, Photoshop и Audition
After Effects использует пул памяти, общий с приложениями Adobe CC. Это показывается на панели установок «Память» значками для каждого из этих приложений в верхней части панели. Значки незапущенных приложений отображаются серым цветом.
Средство балансировки памяти предотвращает обмен ОЗУ с диском (свопинг) с помощью динамического управления памятью, выделяемой каждому из приложений. Каждое приложение регистрируется в средстве балансировки памяти, указывая определенные базовые данные: минимальные требования к памяти, максимальный объем памяти, который может использовать приложение, текущий объем используемой памяти и приоритет. У приоритета есть три значения: низкий, обычный и максимальный. Максимальный приоритет в настоящее время зарезервирован для приложений After Effects и PremierePro,когда они являются активными.Нормальный приоритетпредназначен для приложения After Effects в фоновом режиме или для приложения Adobe Media Encoder в режиме переднего плана. Низкий приоритет для фоновых серверов приложений Premiere Pro или Adobe Media Encoder в фоновом режиме.
Диалоговое окно «Память»
Диалоговое окно «Сведения о памяти» содержит дополнительную информацию об установленном ОЗУ, а также о текущем и разрешенном использовании ОЗУ. Оно также содержит таблицу из нескольких столбцов, представляющую процессы, связанные с приложениями. Эта таблица содержит сведения о каждом процессе, такие как идентификатор процесса, имя приложения, мин. требуемая память, макс. полезная память, макс. разрешенная память, текущий объем памяти и текущий приоритет.
Чтобы открыть диалоговое окно, выберите Правка > Установки > Память (Windows) или After Effects > Установки > Память (Mac OS) и нажмите кнопку «Сведения» в нижней части экрана установок.
Данные можно копировать в буфер обмена с помощью кнопки Копировать.
Требования к памяти (ОЗУ) для рендеринга
В один момент времени After Effects выполняет рендеринг каждого кадра одного слоя композиции. По этой причине при определении того, может ли рендеринг данного кадра выполнен в доступной памяти, требования к памяти каждого отдельного слоя оказываются более правильными, чем длительность композиции или количество слоев в ней. Требования к памяти для композиции эквивалентны требованиям к памяти, предъявляемым слоем композиции, который интенсивнее всего использует память.
Требования к памяти для слоя увеличиваются в определенных случаях, в том числе в следующих:
Увеличение битовой глубины цвета проекта
Увеличение разрешения композиции
Использование большого исходного изображения
Включение функции управления цветом
Добавление посимвольных 3D-свойств
Создание предварительной композиции без свертывающих преобразований
Использование определенных режимов наложения, стилей слоев или эффектов, особенно включающих несколько слоев
Применение некоторых параметров вывода, например, преобразования сторон 3:2, кадрирования и изменения размера
Добавление теней или эффектов глубины поля при использовании 3D-слоев
After Effects требуется непрерывный блок памяти для хранения каждого кадра — приложение не может хранить в сегментах фрагментированной памяти. Сведения о том, какой объем ОЗУ требуется для хранения несжатого кадра, см. в разделе Требования к хранилищу для выходных файлов.
Советы по уменьшению требований к памяти и увеличению производительности см. в разделе Повышение производительности с помощью упрощения проекта.
Очистка памяти (ОЗУ)
Иногда After Effects может вывести предупреждение о том, что для отображения или рендеринга композиции требуется больше памяти. Получив предупреждение о нехватке памяти, освободите память или уменьшите требования к памяти, предъявляемые слоями, которые интенсивнее всего используют память, и повторите попытку.
Можно освободить память немедленно, используя команды из меню «Правка» > «Удалить из памяти»:
- Вся память
- Кэш-память изображения
- Вся память и кэш диска
- Отменить
- Снимок
Очистка памяти осуществляется быстрее для крупных проектов. Очистка памяти не приводит к синхронизации базы данных проекта. Если нужно принудительно синхронизировать базу данных проекта, нажмите клавишу «Option» (Mac OS) или Alt (Windows) и выберите «Правка» > «Очистить» > «Вся память». Это можно сделать, если панель «Композиция» обновляется некорректно, а команда «Очистить» > «Вся память» или «Вся память и кэш диска» не помогает.
Устранение проблем памяти
Ошибка: «Невозможно выделить достаточный объем памяти для рендеринга текущего кадра. »
Либо уменьшите требования к памяти для рендеринга этого кадра, либо установите дополнительное ОЗУ.
Ошибка: «Невозможно выделить [n] МБ памяти. »
Либо уменьшите требования к памяти для рендеринга этого кадра, либо установите дополнительное ОЗУ.
Ошибка: «Размер буфера изображений [ширина] x [высота] при [глубина] бит/канал ([n] ГБ) превышает внутреннее ограничение. »
Уменьшите требования к памяти для рендеринга этого кадра.
Максимальный объем памяти, который может занять один кадр, составляет 2 ГБ.
Ошибка: «Выделенный объем памяти [n] ГБ превышает внутреннее ограничение. »
Уменьшите требования к памяти для рендеринга этого кадра.
Максимальный размер для любого отдельного выделяемого объема памяти составляет 2 ГБ.
Используйте следующую формулу для определения количества мегабайтов, необходимого для сохранения одного несжатого кадра при полном разрешении:
(высота в пикселах) x (ширина в пикселах) x (число битов на канал/2 097 152)
Значение 2 097 152 представляет собой коэффициент преобразования, учитывающий число байтов в мегабайте (2 20 ), число бит в байте (8) и количество каналов в соответствии на пиксел (4).
Несколько примеров размеров кадра и требований к памяти, в мегабайтах (МБ) на кадр:
Кадр DV NTSC (720 x 480) в проекте 8 бит/канал: 1,3 МБ
Кадр PAL D1/DV (720 x 576) в проекте 8 бит/канал: 1,6 МБ
Кадр HDTV (1920 x 1080) в проекте 16 бит/канал: 16 МБ
Кадр цифрового кино 4K (4096x2304) в проекте 32 бит/канал: 144 МБ
Поскольку видео обычно сжимается при кодировании, во время рендеринга для окончательного вывода нельзя просто умножить объем памяти, требуемый для одного кадра, на частоту кадров и длительность композиции, чтобы получить объем дискового пространства, необходимый для сохранения выводимого фильма. Но такой расчет может дать грубую оценку максимального дискового пространства, которое может понадобиться. Например, 1 секунда (приблизительно 30 кадров) несжатого видео стандартной четкости, 8 бит/канал, требует около 40 МБ. Сохранение всего полноразмерного фильма на этой скорости передачи потребовало бы более 200 ГБ. Даже при сжатии DV, уменьшающем размер файла до 3,6 МБ на секунду видео, требование к дисковому пространству превращается более чем в 20 ГБ для обычного полноразмерного фильма.
Для проекта художественного фильма — с его более высокой глубиной цвета, увеличенным размером кадра и намного меньшими коэффициентами сжатия — не является необычным требование терабайтов дискового пространства для видеоряда и вывода фильмов после рендеринга.
При работе над композицией приложение After Effects временно хранит некоторые кадры после рендеринга и исходные изображения в ОЗУ, поэтому предпросмотр и редактирование могут выполняться быстрее. Приложение After Effects не кэширует кадры, рендеринг которых занимает мало времени. Кадры в кэше изображений остаются несжатыми.
Для ускорения предварительного просмотра приложение After Effects также выполняет кэширование на уровнях видеоряда и слоев. Рендеринг измененных слоев выполняется во время предварительного просмотра, а неизмененные слои составляются из кэша.
Когда кэш ОЗУ заполнен, любой новый кадр, добавляемый в кэш ОЗУ, заменяет кадр, кэшированный ранее. Когда приложение After Effects выполняет рендеринг кадров для предпросмотра, оно перестает добавлять кадры в кэш изображений после его заполнения и начинает воспроизведение только тех кадров, которые могут поместиться в кэш ОЗУ.
Кадры, кэшированные в ОЗУ, помечаются на линейке времени панелей «Таймлайн», «Слой» и «Видеоряд» зелеными полосками. Синими полосками на панели «Таймлайн» отмечены кадры, кэшированные на диск.
Индикаторы кэша слоев
Индикаторы кэша слоев позволяют визуализировать кэшированные кадры для каждого отдельного слоя. Это полезно при попытке определить, какие слои кэшированы в композиции.
Включите параметр «Индикаторы кэша слоев», удерживая нажатой клавишу Ctrl (Windows) или Command (Mac), а затем выберите «Индикаторы кэша слоев» в меню панели «Таймлайн». Чтобы индикаторы были видны, параметр «Индикаторы кэша слоев» должен быть включен в меню.
Отображение индикаторов кэша слегка уменьшает производительность.
Кэш ОЗУ очищается автоматически при выходе из программы After Effects.
Очистку кэша ОЗУ или кэша ОЗУ и кэша диска можно выбрать в меню Правка > Очистить .
Выберите «Правка» > «Очистить» > «Вся память и кэш диска», чтобы очистить содержимое всех кэшей ОЗУ (подобно существующей команде «Вся память») и содержимое кэша диска (подобно существующей кнопке «Очистить кэш диска» в установках «Носитель и кэш диска»).
After Effects быстрее очищает память для крупных проектов. Очистка памяти не приводит к синхронизации базы данных проекта. Если нужно принудительно синхронизировать базу данных проекта, нажмите клавишу «Option» (Mac OS) или Alt (Windows) и выберите «Правка» > «Очистить» > «Вся память». Это можно сделать, если панель «Композиция» обновляется некорректно, а команда «Очистить» > «Вся память» или «Вся память и кэш диска» не помогает.
Очистка кэша диска для одной версии After Effects не очищает кэш для других версий. Например, очистка кэша диска After Effects CC не повлияет на кэш диска After Effects CS6.
Глобальный кэш производительности состоит из следующих компонентов:
Глобальный кэш ОЗУ: при редактировании композиции кадры в кэше ОЗУ автоматически не стираются и используются повторно в случае отмены изменения или восстановления предыдущего состояния композиции. Самые старые кадры в кэше ОЗУ стираются, если кэш переполнен, а After Effects требуется добавить в него новые кадры.
Постоянный кэш диска: кадры, кэшированные на диск, остаются доступными даже после закрытия приложения After Effects.
Дополнительные сведения о глобальном кэше производительности см. в записи блога группы After Effects Team, посвященной возможностям графического процессора (CUDA, OpenGL) в After Effects.
Приложение на Next.js (React) имеет из коробки серверный пререндеринг страниц. Это очень хорошо для SEO, и для FMP метрики — время от открытия страницы до первого значимого контента.
Казалось бы, фреймворк умеет в SSR из коробки, зачем вообще писать статью? Есть один нюанс, мы рендерим страницу дважды: сначала на сервере, потом на клиенте, и общее время загрузки неизбежно увеличивается.
CSR, SSR и Dynamic Rendering
Для начала небольшое отступление про клиентский, серверный и динамический рендеринги.
- Загрузка небольшого HTML
- Загрузка скриптов
- Инициализация скриптов
- Рендеринг
- Рендеринг сервером
- Загрузка большого HTML и стилей
- Загрузка скриптов
- Инициализация скриптов
- Регидрация
Гугл рекомендует использовать динамический рендеринг, если важно SEO.
Для работы динамического отображения ваш сервер должен распознавать поисковых роботов (например, проверяя агент пользователя). Запросы от роботов передаются средству отображения, а запросы от пользователей обрабатываются обычным образом. При необходимости средство динамического отображения возвращает версию контента, которая может быть обработана роботом, например статическую HTML-страницу. Динамическое отображение можно включить как для всех страниц, так и только для некоторых.
Важно не забывать, что любое приложение или сайт, мы, разработчики, в первую очередь делаем для пользователей, а не машин. Так почему бы не ускорить отображение сайта для не-роботов?
Включаем серверный рендеринг в обоих случаях: и для пользователей, и для машин.
После включения SSR оказалось, что время загрузки сайта неприлично выросло. Хотя мы добивались обратного. Почему так?
Если раньше сервер мгновенно отдавал небольшой html-файл, а дальше браузер сам загружал javascript, css и рендерил страницу, то теперь мы еще ждем, пока сервер отрендерит страницу, отправит большой html на клиент.
В чем же тогда преимущество SSR? Не использовать ли нам динамический рендеринг? Ответ зависит от вашего приложения. В нашем случае, пользователи получали контент намного раньше, ведь уже на втором шаге в случае SSR видна вся страница: со стилями и готовой разметкой. Общее время загрузки увеличилось, но оно ощущается не так критично, как время до первого значимого контента.
Уменьшаем время SSR
Если правильно приготовленный реакт на клиенте рендерится быстро, то реакт на сервере рендерится, по серверным метрикам, непростительно медленно.
Значит, нужно кешировать процесс серверного рендеринга. А вот это уже «из коробки» в next.js не работает.
Сам процесс и механизм кеширования — тема отдельной статьи. Есть множество библиотек для express-js, просто библиотек для кеширования чего угодно.
Казалось бы, кеш настроен, страницы стали грузиться мгновенно.
Кеш прогревали?
Время открытия страницы — важный показатель. И не только с точки зрения потенциального клиента, который может уйти не дождавшись загрузки. Поисковикам также не нравится медленные сайты.
На нашем проекте есть множество страниц с результатами фильтрации. И если главная страница открывается в 99,999% из кеша, то остальные страницы посещаются реже, а процент открытий на холодую, несравненно, выше. Поисковикам явно такое не понравится.
А тот пользователь, который будет менять настройки фильтра и каждый раз прогревать кеш для других, явно не позавидует своей участи.
Если сервер по рендеру реакта смасштабирован горизонтально, то случаев прогрева будет больше.
Прогревать при старте весь кеш нецелесообразно: такая операция может занять минуты. Элегантного решения здесь нет. То, к чему стоит стремиться — на основе результатов аналитики прогревать кеш по мере падения популярности страниц. Напомню, с большим количеством параметров фильтрации, зашитых в URL, количество страниц в кеше может быть неприлично большим. Поэтому стоит устанавливать некоторый порог.
Vary: user-agent
Но вот незадача, нужно кешировать не только по URL, но и по User Agent. Не нужно же нам рендерить сложные меню для мобильных девайсов, чтобы они еще и занимали процессорное время и сервера, и мобильного устройства, чтобы потом скрывать элементы по `display: none`?
Хорошо, берем express, улучшаем кеширующий middleware. В зависимости от User-Agent, рендерим 3 разных макета. Проверяем — работает.
Проверяем результат в Google Lighthouse — и, все мерцает. Проверяем результат в Google Lighthouse — и, все мерцает. Осталось только указать заголовок `Vary: user-agent`.
Кеш излучения (IC)
В версию программы Cinema 4D R15 была интегрирована новая методика для кеша излучения. Эта методика по отношению к предшествующей версии Кеш излучения (устаревший) (которая может устанавливаться на закладке Общие для параметра Первичный метод ) имеет следующие преимущества:
Все изображения данной страницы были просчитаны на основе методики кеша излучения (как первичной так и вторичной).
Что такое «Кеш излучения»?
При просчёте кеша излучения производят предварительные просчёты (так называемые «предпроходы»), при которых происходит анализ сцены с целью выявления критических участков с последующим распределением для них, так называемых точек затенения. Это показываемые точки при произведении просчёта предпроходов. Они являются особенно заметными при низких значениях для параметра Плотность ) и позволяют определить уровень необходимого для сцены диффузного (рассеянного освещения):
Значения яркости и цвета впоследствии сохраняются в кеше излучения как «записи». Этот кеш можно и в принципе необходимо (посредством закладки Файлы кеша ) всегда сохранять, с целью его последующего использования в сцене при изменении направлений просмотра в окне редактора или анимации камеры и так далее. Это повторное использование кеша происходит только в том случае, если процесс рендера вы производите в окне Менеджер изображений , но не в окне редактора программы .
При заключительном процессе рендера происходит просчёт имеющихся значений кеша, с целью назначения необходимого уровня диффузного освещения для пикселей, расположенных между точками затенения.
Недостатки кеша излучения вам также необходимо знать и учитывать: посредством просчёта между ограниченным числом точек затенения, происходит снижения уровня детализации по отношению к свету и тени (но не так интенсивно по сравнению с предшествующими версиями программы). В этом плане методика QMC имеет значительные преимущества.
Вам необходимо запомнить, что результаты GI в режиме QMC способствуют получению максимального уровня качества при просчёте изображений в плане светового уровня и распределения тени. Кеш излучения (IC) пытается всегда приблизиться к этому результату, как можно ближе.
При анимации кеш излучения приводит к созданию эффекта мерцания изображения. В новой версии программы этот эффект был снижен до минимума. В общем и целом для этого эффекта можно определить следующее направление – кеш излучения способствует созданию мерцания изображения в том случае, если при его просчёте в сцене используются очень яркие и маленькие полигональные источники. Большие и равномерные источники освещения (например, использование объекта Небо при котором свет поступает в сцену равномерно и со всех направлений) могут оптимально использоваться с новой методикой кеша излучения.
На заметку:Последующие параметры вы найдёте практически также в настройках функции Окклюзия окружения. Принцип функционирования для обоих эффектов является аналогичным ( Окклюзия окружения имеет при этом число отражений 1). На заметку:
При получении вами в результате просчёта пятен на изображении, вы можете снизить этот эффект посредством увеличения значения для параметра Число лучей . Улучшение настроек для параметра Вторичный метод в настройках GI также приводит к улучшению конечного результата. При использовании вами карт освещения с низким уровнем качества, конечный результат кеша излучения изменить практически невозможно.
Большинство из последующих параметров вам необходимо изменять только в том случае, если вы намерены произвести «тонкую настройку». Для большинства случаев параметр Плотность записи является вполне достаточным и при использовании режимов Низкая , Средняя и Высокая вы можете назначить необходимую комбинацию, которая будет сочетаться с последующими параметрами. Режим Предпросмотр предлагает режим быстрого просмотра и режим Пользовательская позволяет вам изменять отдельные и расположенные ниже параметры.
Параметр Плотность записи вы изменяете только в том случае, если имеется необходимость показа контрастной тени, создаваемой на основе полигонального источника света (или GI портала). При этом вы можете отказаться от использования установки Для пикселя .
При рендере на основе кеша излучения происходит предварительный просчёт предпроходов (фаза, на протяжении которой происходит предварительный показ грубых квадратов с последующим уменьшением их размера). На этом этапе происходит распределение плотности для точек затенения. Весь процесс в общей сложности является адаптивным, при котором внимание уделяется прежде всего для критических участков: углы, рёбра и так далее. Разность между значениями параметров Мин и Макс определяет количество просчитываемых предпроходов (посмотрите на изображение для Мин ).
0 означает полное разрешение изображения (размер пикселя 1*1), в то время как -1 означает размер пикселя «2*2», -2 «4*4» и так далее. Значение параметра Мин всегда должно быть меньшим или равно значению параметра Макс . Положительные значения также являются возможными, что позволяет использовать записи кеша для суб-пиксельного участка (например, для функции Суб-полигональное смещение это может иметь определённый смысл, если при процессе рендера происходит снижение уровня детализации).
В общей сложности для этих двух параметров на данном этапе не имеется практически никаких отличий, по сравнению с ранней версией кеша излучения. Время рендера изменяется лишь минимально и до того момента, пока значения находятся в определенных рамках ( Макс не ниже 0 ), в этом случае результаты конечного просчёта также не имеют особых отличий. При назначении для параметра Мин отрицательных значений и установки параметра Макс на 0 , наличие ошибок с вашей стороны практически исключается.
Плотность [10..1000%]
Мин. интервал [0..1000%]
Макс. интервал [0..1000%]
Параметр Плотность является регулятором, на основе которого вы производите изменение плотности распределения для точек затенения. Чем выше значение данного параметра, тем выше плотность точек затенения.
Имеет смысл объединить эти три параметра, так как они создают общее воздействие и являются взаимозависимыми. Все три предназначены для определения плотности точек затенения для критических или некритических участков:
Последующее изображение наглядно представляет для вас воздействие создаваемое на основе этих параметров:
Но каким образом распределение точек затенения может влиять на готовое и просчитанное изображение? Для идеально просчитанного изображения важным моментом является наличие максимального числа точек затенения на критических участках, и только их половина (соответственно 50% плотности) для остальной поверхности. Если вы при этом обеспечили для каждой точки затенения необходимо высокое значение параметра Образцы , в этом случае вам гарантируется получение положительного результата рендера.
Все предварительно изложенные параметры предназначаются и необходимы для размещения точек затенения и их просчёта. Диффузное (рассеянное) освещение в сцене при этом определяется и просчитывается на основе данных точек. При рендере из такого «точечного» распределения яркости производится создание равномерно и плоской, освещённой поверхности. Алгоритм сглаживания выполняет это следующим образом: для каждого просчитываемого пикселя на поверхности объекта происходит анализ кеша излучения на предмет нахождения соответствующих значений, расположенных в непосредственной близости от этой точки. Значения яркости и цвета найденного значения при этом будут использоваться для данного пикселя.
Чем выше вы устанавливаете значение для параметра Сглаживание , тем больше точек затенения будет использоваться при просчёте для актуального пикселя. Этот параметр представляет пороговое значение, которое определяет использование записей кеша при просчёте пикселей изображения. Низкие значения приводят к получению контрастных (и зачастую с пятнами) результатов, в то время как высокие значения способствуют просчёту участков с большим размером, что в свою очередь приводит к созданию равномерного освещения, но при этом к снижению уровня детализации.
В принципе Сглаживание является параметром, изменение которого вам не нужно производить постоянно.
Оптимизация цвета [0..1000%]
Посредством данного параметра вы можете значительно увеличивать качество создаваемого изображения для участков, на которых происходит резкое изменение GI (к примеру, GI с использованием ярких полигональных источников). В конечном результате для таких участков происходит создание более высокого числа точек затенения (что естественно отражается на времени просчёта). Важно при этом: необходимо устанавливать достаточно высокое значение для лучей, что приводит к равномерному распределению света. В противном случае участки с пятнами будут иметь резкие переходы. В принципе функция GI-каустики также имеет преимущества при использовании высоких значений!
В ранней версии кеша излучения, распределение точек затенения являлось независимым от заключительного размера просчитываемого изображения. Кроме этого, для изображений с размером (к примеру) 80*60 пикселей или 1024*768 пикселей, использовались аналогичные предпроходы. В новой версии программы при активной установке Размер изображения этого не происходит. Плотность точек затенения изменяется в зависимости от размера изображения. При наличии экстремально высокого размера для просчитываемого изображения, в новой версии программы происходит создание дополнительных записей в кеше излучения. При учёте такого распределения, изображения с маленьким разрешением просчитываются значительно быстрее и с высоким соответственно медленнее (но при этом с более высоким уровнем детализации для просчитываемого изображения).
Перед началом основной беседы о важности объема кэш-памяти у процессоров остановлюсь на криптовалюте Raptoreum, которая, собственно, и подтолкнула меня написать этот блог. Кто хочет узнать, что ожидает всех майнеров и геймеров в следующем году, когда появятся видеокарты на рынке, вероятный прогноз развития событий можно найти здесь.
реклама
А теперь о Raptoreum. Важно! Не поддавайтесь на провокации, относительно этой криптовалюты, которая добывается на мощностях кэш-памяти центральных процессоров! Чем больше кэш-память второго и любого последующего уровня (при его наличии), тем быстрее происходят расчёты, результатом которых является условный доход. Так как сейчас на рынке именно у процессоров AMD самый «жирный» кэш, то наличие их на полках магазинов и соответственно рекомендованной стоимости этих процессоров под угрозой со стороны новой криптовалюты. Под удар могут попасть старейшие модели AMD Ryzen и все Threadripper.
Дешевая 3070 Gigabyte Gaming - успей пока не началосьА теперь поговорим о кэш-памяти процессора. При решении задач процессор получает из оперативной памяти необходимые блоки информации, обработав их, он записывает в память результаты вычислений и получает для обработки следующие блоки. Этот процесс продолжается, пока задача не будет на 100% выполнена.
Все эти операции производятся на очень высоких скоростях, от десятков гигабайт в секунду у процессоров 20-ти летней давности, до сотен гигабайт в секунду у современных процессоров. Все это время процессор обменивается данными с оперативной памятью, которая работает в разы медленнее самого процессора. Каждое считывание из нее и обратная запись информации в неё отнимают уйму времени.
реклама
var firedYa28 = false; window.addEventListener('load', () => < if(navigator.userAgent.indexOf("Chrome-Lighthouse") < window.yaContextCb.push(()=>< Ya.Context.AdvManager.render(< renderTo: 'yandex_rtb_R-A-630193-28', blockId: 'R-A-630193-28' >) >) >, 3000); > > >);Несмотря на такой дисбаланс, процессор не простаивает в ожидании очередной порции данных из оперативной памяти, так как эти данные подгружаются в его кэш-память.
Кэш-память процессора – это небольшая по объему, но супербыстрая оперативная память. Она встроена в процессор и является своеобразным буфером, при обмене CPU данными с медленной оперативной памятью, а в современных реалиях еще и с NVME SSD и видеокартой.
В большинстве процессоров используется многоуровневая система кэша:
реклама
• Кэш-память первого уровня или L1 – самая маленькая, но и самая быстрая область кэш-памяти. Её объем не превышает пару десятков килобайт. Работает L1 без каких-либо задержек. В нем содержатся данные, которые чаще всего используются процессором.
• Кэш-память второго уровня (L2) чуть медленнее кэш-памяти L1, но и объем ее в современных процессорах измеряется уже в мегабайтах. Служит она для временного хранения важных данных, вероятность запроса которых ниже, чем у данных, находящихся в L1 кэше.
• Кэш-память третьего уровня (L3) – еще более объемная и еще более медленная. Но она все равно быстрее любой оперативной памяти, даже новой DDR5. Со скоростями в несколько сотен гигабайт в секунду пока еще приходится считаться. Ее размер в современных процессорах в мейнстрим сегменте достигает нескольких десятков мегабайт, а в серверных AMD Epyc счет пошел уже на сотни мегабайт. В отличие от L1 и L2, кэш третьего уровня является общим для всех ядер процессора.
L3 кэш служит для временного хранения важной информации с относительно низкой вероятностью запроса, а также для обеспечения обменом данными между ядрами процессора.
реклама
А теперь небольшой экскурс в развитие и эволюцию кэш-памяти. Если за отправную точку взять Pentium 1, то кэша L2 у него не было. L1 был объёмом 32 Кб. L2 как правило распаивался на материнской плате. Когда появился Pentium II, то L2 сразу стал равным 512 Кб, но он располагался рядом с ядром процессора на отдельной микросхеме и имел низкую скорость, но все равно это лучше, чем ничего.
Pentium-III с Socket 370 имел уже половину объема от Pentium II – 256 Кб, но зато этот кэш был быстрее, так как он был интегрирован в кристалл процессора. Pentium 4 вначале удвоил этот объём до 512 Кб, так называемый Nothwood, а последовавшее за ним ядро Prescott довел L2 до 1 Мб. Это уже объём дней сегодняшних.
Во времена Pentium 4 случилось еще одно важное событие: у Pentium 4 Extreme Edition впервые появился L3 кэш. До этого момента в десктопах такого явления не было. Объем L3 равнялся «жирным» 2 мегабайтам, что положительно влияло на производительность и цену процессора.
После смены с 478 на 775 контактов без ножек, первые “новые” Pentium с ядрами Prescott-2M и Cedar Mill увеличили L2 до 2-х мегабайт, а L1 так и оставался в пределах 32 Кб.
Микроархитектура Core2 и Core2 Quad значительно увеличили объемы кэшей. Так, объем L2 кэша уже варьировался от 4 до 12 Мб, но эти цифры нужно поделить на два, из особенности организации кэша, так как группы ядер по факту взаимодействовали только с половиной этого объема, но суммарный объем был именно таким.
Микроархитектура Sandy Bridge поделила процессоры на различные линейки в зависимости от объема L2 кэша. В этот момент времени, именно объем кэш-памяти начинает решать главенствующую роль в позиционировании и производительности процессоров.
Так, i5-2500К отличался от i7-2600K только объемом кэша. И надо отметить, речь уже идет о L3 кэше, который начинает появляться уже повсеместно. В первом случае L3 = 6 Мб, во втором 8 Мб. L2 у обеих моделей равнялся 256 Кб на одно ядро, а L1 был равен по-прежнему 32 Кб.
Далее происходит рост L3 у последующих поколений. У i9-9900K он уже равен 16 Мб. Параллельно развивается HEDT линейка процессоров Intel, где L3 уже достигает 24.5 Мб. Но дальнейшее развитие всей процессорной архитектуры меняют процессоры AMD с микроархитектурой ZEN и производные от них. Стартовало первое поколение AMD Ryzen c L2 = 512 Кб и L3 = 8 Мб, а на сегодняшний день топовый Ryzen Gen3 уже обладает 64 Мб L3 кэша. Недавний анонс новых серверных процессоров AMD Epyс вообще увеличил объем L3 до астрономических 768 Мб.
Таким образом, система кэшей процессора позволяет частично уйти от зависимости от низкой производительности оперативной памяти, ведь процесс развития процессоров и скорости их кэшей намного опережает скорость оперативной памяти. Важно отметить и тот факт, что чем больше кэша у процессора, тем выше его производительность.
Поэтому при выборе того или иного процессора, обращайте внимание на объем L3 кэша процессора. Возможно, в будущем, объемы порядка пары гигабайт L3 кэша станут нормой, но а пока следим за стоимостью AMD Ryzen, в зависимости от популярности Raptoreum. Надеюсь, этот блог оказался для вас полезным.
Читайте также: