Безумные идеи Моногатари
Oct. 3rd, 2003 01:08 pmТак как я сейчас делаю новый сериал (см. несколько последних записей
monogatari), у меня появилась идея написать программу, которая по заданному сценарию сама рисовала бы кадры комикса.
Прежде всего, нужно придумать язык описания сюжета. Мне кажется, это должно быть что-то объектно-ориентированное. То есть, для начала задаются объекты-сцены, участвующие в комиксе, как например: "Комната Гамлета", "Зал во дворце", "Лужайка" и т.д.
Потом объекты-персонажи: "Гамлет", "Полоний", "Тень отца Гамлета",...
У каждого такого объекта могуть быть свойства: самые важные из них - это из каких картинок состоит человек (голова, туловище, руки, ноги), и из каких картинок состоит сцена.
Другими свойствами могут быть "время суток", "время года" и тому подобное у сцен, а у людей это может быть, скажем, "настроение" или "действие". Так, если человек прислушивается, то голова его должна быть наклонена в сторону собеседника. Если он объясняет, то рука должна указывать куда-то.
Само собой, для кадров должен быть задан текст, который произносят персонажи, и программа должна уметь расположить его таким образом, чтобы не слишком закрывать рисунок.
Нужно также уметь задавать множество эвристик. Например, какие предметы должны стоять на столе, а какие на полу. Что должно висеть на стене, что человек может держать в руках. Если кто-то говорит по телефону, то программа сама должна вкладывать ему трубку в руку и прикладывать к уху.
Кроме того, она должна уметь задавать расположение предметов на оси Z, то есть, что на переднем плане, а что на заднем.
Обязательно нужно разрешить программирование "низкого" и "высокого" уровня. Причём "высокий" уровень может быть как угодно высоким. Вот что я имею в виду:
На низком уровне у меня должна быть возможность задавать, какие именно предметы я хочу видеть в той или иной сцене, на каких местах (возможно даже с помощью координат) и т.д. Я должен уметь задавать интенсивность освещения, шрифт текста речи персонажей и тому подобное.
На более высоком уровне, я могу писать просто "комната во дворце", а программа эвристическим путём должна подобрать подходящие картинки и расположить их соответствующим образом. Могу написать "ночь", и программа сама зажжёт свечи или лампы и нарисует месяц за окном.
Конечно же, необходима обширная база данных с картинками и эвристиками.
На ещё более высоком уровне я вообще не должен разбивать сценарий на кадры. Если я пишу, что "двое разговаривают по телефону", то программа может решить создать несколько кадров - один из комнаты первого персонажа с телефоном в руке и соответствующим текстом, второй - из комнаты второго персонажа с телефоном в руке и текстом и так далее. Конечно же, должна отслеживаться последовательность в использовании предметов. Если для одного из персонажей выбран красный телефон, то он должен оставаться с ним на протяжении всех кадров.
Программа также должна уметь выбирать подходящие ракурсы и "наезды камеры" или позволять указывать такие вещи в качестве hints.
Всё это я очень хорошо себе представил именно потому, что расписал свой сценарий по кадрам, а теперь на 80% выполняю чёрную работу - то есть леплю готовые персонажи на готовые сцены, изменяя ракурсы, некоторые предметы в комнате и время суток. Кроме того, большая морока изменять положение рук, ног, головы и тому подобного.
Я очень ясно вижу, что такая работа хорошо поддаётся объектно-ориентированному подходу и модульной архитектуре, то есть от низкого уровня описания к высокому.
Вот бы такой процесс автоматизировать - и тогда каждый сможет моментально реализовывать какой-нибудь свой сценарий.