У меня до сих пор хранится код MCL, который я написал в годы работы в Metropolis Graphics. Я нашел комментарий от 4 апреля 1992 года в матричном файле. Почти тридцать лет прошло с момента написания моей новой системы (которую я назвал kons-9 в репозитории Github по не совсем понятным мне причинам).

Графика Metropolis считается графической системой Lisp 3 (LGS-3), вслед за системами Symbolics и AKCL. У меня есть источник, потому что это была одна из немногих вещей в моей папке Dropbox, когда случился пожар. Все другие мои резервные копии лежали на аккуратно сложенной стопке компакт-дисков рядом с моим компьютером.

Я видел в коде комментарии, датированные периодом с 1992 по 1994 год, поэтому я работал над проектом как минимум столько же.

Когда я разрабатываю на Common Lisp, я чувствую, что мне как-то не хватает, если мне приходится писать весь код самому. Компьютер должен написать часть кода за меня. Вот для чего нужны макросы.

В данном случае я хотел, чтобы пользовательский интерфейс для графических классов генерировался автоматически. В MCL была отличная поддержка Mac Toolbox (это первый продукт Apple), и я написал макросы, которые одновременно определяли класс и генерировали панели пользовательского интерфейса для класса.

Я также помню, как работал над реализацией своей идеи смарт-объектов. Трехмерные объекты с внутренней работой, которые понимали такие команды, как «двигаться вперед», и двигались (например, ходьба, перекатывание, прыжки и т. д.) на основе своей внутренней механики. Многое из того, что я себе представлял, очевидно, сбылось в виде 3D-риггинга в приложениях DCC и поведения в системах разработки игр. Время никого не ждет.

Пока Майк работал над своим рендерером, я внедрил вывод RenderMan RIB (RenderMan Interface Bytestream) и отрендерил несколько коротких анимационных клипов на высокопроизводительном настольном Mac Taarna, используя пакет MacRenderMan от Pixar. Насколько я помню, это был мучительно медленный процесс.

Вы могли бы подумать, что я тщательно изучил код Metropolis MCL, прежде чем приступить к моему текущему проекту, но это не так. Я просмотрел и использовал только несколько файлов (3D-точки, матрицы и суперквадрики) и предпочитал проектировать с нуля. Почему? Я не уверен. Спустя десятилетия к программному обеспечению все еще привязаны эмоции.

Возможно, когда-нибудь в будущем я больше посмотрю на код. Я даже подумывал откопать старый PowerBook и дискету MCL и посмотреть, можно ли еще запустить код. Хотя, если честно, я, скорее всего, оставлю это праздной мыслью.

Дизайн и код

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

Это было сделано в двух частях.

Одним из них был подкласс частиц, который я назвал climbing-particle, который делает то же, что и обычная частица, а затем привязывается к ближайшей точке на point-cloud. Приятно иметь возможность выразить новое поведение с помощью такого небольшого количества строк кода. Почему-то мне кажется, что я делаю что-то правильно. А может это все по сути тривиально и я просто себя обманываю.

Второй частью была реализация метода generate-point-cloud, который заполняет поверхность многогранника точками с заданной плотностью. Это было сделано с использованием барицентрических координат на триангулированных многоугольниках. Та же техника, которую я использовал в свое время для выращивания волос и меха на компьютерных моделях. Все старое снова новое.

Следующая серия