Анимация растровых изображений с цветовым номером

Геннадий Маков
   Технический прогресс сопровождается сменой технологий и способствует смене технологий. Анимация, рисовавшаяся когда-то на прозрачных листах целлулоида, сменилась картинками, нарисованными на слоях Фотошопа, а кинокамера, запечатлявшая полученный результат, была заменена чередованием окон Picturebox на экране монитора.

   Технический прогресс коснулся и быстроты работы компьютерных программ. Появилась векторная графика, а вместе с ней расцвела могучая индустрия векторной мультипликации.
   Растровой графики технический прогресс коснулся меньше. Более того, в редакторах для рисования, несмотря на возросшую быстроту счёта, по-прежнему используется архаичный метод штамповки оттисков, между тем как по-пиксельное рисование, дающее прекрасные результаты, до сих пор не применяется https://proza.ru/2023/07/20/33
   
   Аналогичная ситуация сложилась и в анимации растровых изображений. Картинки, составляющие эти изображения, хранятся на слоях, а слои хранятся в оперативной памяти компьютера, в так называемом ОЗУ. Именно поэтому профессиональным программам для анимации, да и редакторам для рисования тоже, требуется так много оперативной памяти.
   А ведь с 90-тых годов увеличилось не только быстродействие счета на компьютере, увеличилась и скорость обмена данными с жёстким диском, появились и другие накопители с большой скоростью обмена. Например, поле размером 900х500 пикселей – вполне нормальный размер для кадра мультипликации не слишком большого разрешения, будучи помещённым в файлы формата bmp на магнитном винчестере моего ноутбука, считывается со скоростью 16 кадров в секунду. А в аналогичной ситуации, на компьютере с винчестером типа SSD скорость считывания тех же файлов составила 27 кадров в секунду.
 
   Так чего же более надо? Уже сейчас настала пора, когда весь покадровый материал можно хранить не в ОЗУ, а на винчестере. Именно так я и делаю, и мой опыт показывает, что это и более удобно, и более эффективно.
   Более того, анимация с использованием изображений, имеющих цветовые номера, позволяет держать в bmp файле не просто изображение, а изображение, разделённое на отдельные фрагменты, различающиеся по своим номерам.
   Что это даёт? Это даёт интересную возможность создавать многослойную анимацию, основанную на использовании совершенно другого принципа – методом «заслоняющей аппликации», без использования слоёв, но дающую такой же результат. Расскажу об этом методе подробнее.

     АНИМАЦИЯ МЕТОДОМ ЗАСЛОНЯЮЩЕЙ АППЛИКАЦИИ

   Под номер отводятся два младших бита в каждой из трёх цветовых компонент. Получается 6 бит, в которых содержится номер от 00 до 77 в восьмеричной системе, или от 0 до 63 в десятичной системе.
   Таким образом, свой цветовой номер приписывается каждому пикселю цветного изображения. Метод заслоняющей аппликации реализуется в принципе наложения изображений друг на друга – пиксели, имеющие меньшие, более «лёгкие» номера, заслоняют собой пиксели больших, более «тяжёлых» номеров, то есть, рисуются поверх них.
   И наоборот, при формировании оттиска аппликации, более «тяжёлые» пиксели пропускаются, если они приходятся поверх более «лёгких» пикселей уже имеющегося на рисунке изображения.

   Таким способом делалась анимация собачки в этом клипе https://youtu.be/IiQdXT43x9s
   Может показаться, что для создания такой анимации использовались слои. На самом деле никаких слоёв в программе нет. Вместо слоёв используется нумерация пикселей. Например, изображение леса и поля имеет по две единицы в младших битах каждой из RGB компонент, то есть, это изображение имеет цветовой номер 77.
   Изображение куста имеет номер 30. Изображению собачки, бегущей позади куста, присваивается номер 40, с этим номером она и отправляется в свой забег. А собачке, пробегающей перед кустом, присваивается номер 20.

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

   Давайте теперь оценим объём хранимой информации. В программе «Стереометрия и Анимация», в которой описанная мультипликация делалась, кадр 900х500 пикселей в формате bmp имеет размер 1.2 МБ.
   В оперативном доступе, то есть в тот момент, когда мы делаем конкретный эпизод, находится 999 кадров. Делим это число на 16 (максимальное число кадров в секунду) и получаем 62 секунды, то есть целую минуту отснятого материала. Этого вполне достаточно для любого эпизода.
 
   Максимальный размер папки с отснятым материалом составит 1.2 ГБ. Эту папку мы никуда не убираем, а просто переименовываем, и приступаем к работе над следующим эпизодом.
   Если мы снимаем небольшой фильм, длительностью пятнадцать минут, то таких папок на жёстком диске накопится 15, и будут они иметь общий размер 270 ГБ. Это чуть больше, чем свободное место на жёстком диске моего ноутбука, поэтому мне такой фильм придётся делать по частям, хотя ключевые его моменты могу и оставить.
    А могу использовать и внешний накопитель с его огромной памятью. Могу даже работать из него, разместив на нём свою программу. Я попробовал так делать и получил, как результат, скорость чтения bmp файлов 13 кадров в секунду вместо 16-ти. То есть, всего лишь 13-ти процентное замедление скорости. Хотя и 13 кадров в секунду это вполне приличная скорость для анимации онлайн.
   
    Основной вывод из всего сказанного состоит в следующем –
проведение анимации методом заслоняющей аппликации с использованием цветовых номеров, является оригинальным и весьма перспективным способом создания полнометражных мультфильмов растрового вида.
    Этот способ не требует использования слоёв, он сильно экономит объём необходимого ОЗУ и позволяет работать над фильмом даже после завершения проекта по его созданию.

_________
3.09.2023