Как работает шахматный рендеринг: упрощенная версия
: 04 янв 2017, 18:53
Сегодня на форуме NeoGAF появилось упрощенное, но очень наглядное объяснение того, как работает "шахматный" рендеринг и чем он отличается от обычного рендеринга и апскейла. Хотите знать больше? Добро пожаловать на борт.
Итак, представим, что у нас есть простая сцена взрыва: внизу земля, вверху летит подброшенный взрывом осколок. На уровне полигонов такая сцена выглядеть примерно вот так:
первый кадр

второй кадр

Игровому движку нужно превратить трехмерную сцену в двумерную, растеризовать ее: все-таки у одного пикселя на вашем экране может быть только один цвет. На этом этапе движок определяет, на какое количество пикселей он может разбить находящуюся в кадре сцену.
Результат может быть примерно таким; разрешение нашего виртуального дисплея оказалось очень маленьким, всего 10х10 пикселей:

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

В случае с "шахматным" рендерингом все немного веселее. На начальных этапах технология работает почти так же, как и обычный рендеринг, за одним важным исключением - во время текстурирования, наложения шейдеров и освещения обрабатывается только каждый второй пиксель сцены.
Затем из специального буфера (у PlayStation 4 Pro он называется ID Buffer) извлекаются данные о положении всех объектов в сцене на предыдущем кадре: они сравниваются с текущим положением дел, чтобы определить, какие объекты изменили свое положение, и как именно они это сделали.
После этого изменившие положение пиксели из предыдущего кадра перемещаются на новые позиции, и два кадра - новый и измененный предыдущий - склеиваются в один кадр.
Теперь этот кадр нужно откорректировать: если сцена активно изменялась, то некоторые пиксели, взятые из старого кадра, могут оказаться не на своих местах. Во время коррекции такие пиксели сравниваются с соседними пикселями нового кадра и в случае нужды усредняются - в чем-то это похоже на апскейл.
Кадр практически готов: осталось нарисовать частицы (некоторые движки делать это до восстановления полного кадра), наложить интерфейс - и можно показывать игроку.

Обычный апскейл работает намного проще: все фазы до наложения интерфейса полностью аналогичны обычному рендерингу. Перед отрисовкой интерфейса к финальному кадру применяется один из алгоритмов ресэмплинга, а затем изображение показывается игроку.

С точки зрения качества финального изображения лидирует, разумеется, стандартный рендеринг. Затем идет "шахматный" рендеринг: при отсутствии ошибок, связанных с активным изменением сцены, финальный результат будет аналогичен обычному рендерингу.
Ну а картинка, сгенерированная с помощью апскейла, покажет наихудшее качество изображения.

Итак, представим, что у нас есть простая сцена взрыва: внизу земля, вверху летит подброшенный взрывом осколок. На уровне полигонов такая сцена выглядеть примерно вот так:
первый кадр

второй кадр

Игровому движку нужно превратить трехмерную сцену в двумерную, растеризовать ее: все-таки у одного пикселя на вашем экране может быть только один цвет. На этом этапе движок определяет, на какое количество пикселей он может разбить находящуюся в кадре сцену.
Результат может быть примерно таким; разрешение нашего виртуального дисплея оказалось очень маленьким, всего 10х10 пикселей:

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

В случае с "шахматным" рендерингом все немного веселее. На начальных этапах технология работает почти так же, как и обычный рендеринг, за одним важным исключением - во время текстурирования, наложения шейдеров и освещения обрабатывается только каждый второй пиксель сцены.
Затем из специального буфера (у PlayStation 4 Pro он называется ID Buffer) извлекаются данные о положении всех объектов в сцене на предыдущем кадре: они сравниваются с текущим положением дел, чтобы определить, какие объекты изменили свое положение, и как именно они это сделали.
После этого изменившие положение пиксели из предыдущего кадра перемещаются на новые позиции, и два кадра - новый и измененный предыдущий - склеиваются в один кадр.
Теперь этот кадр нужно откорректировать: если сцена активно изменялась, то некоторые пиксели, взятые из старого кадра, могут оказаться не на своих местах. Во время коррекции такие пиксели сравниваются с соседними пикселями нового кадра и в случае нужды усредняются - в чем-то это похоже на апскейл.
Кадр практически готов: осталось нарисовать частицы (некоторые движки делать это до восстановления полного кадра), наложить интерфейс - и можно показывать игроку.

Обычный апскейл работает намного проще: все фазы до наложения интерфейса полностью аналогичны обычному рендерингу. Перед отрисовкой интерфейса к финальному кадру применяется один из алгоритмов ресэмплинга, а затем изображение показывается игроку.

С точки зрения качества финального изображения лидирует, разумеется, стандартный рендеринг. Затем идет "шахматный" рендеринг: при отсутствии ошибок, связанных с активным изменением сцены, финальный результат будет аналогичен обычному рендерингу.
Ну а картинка, сгенерированная с помощью апскейла, покажет наихудшее качество изображения.
