Помимо хакерства для развлечения, обучения и исследований в Медиа-лаборатории, я также занимался тем, что, по моему мнению, можно квалифицировать как исследование. Я продвигал состояние искусства, хотя и не думал публиковать результаты.

Я наткнулся на статью с описанием «систем частиц», написанную за два года до этого Биллом Ривзом из Lucasfilm (позже переименованной в Pixar после покупки Стивом Джобсом). Этот метод — теперь основной продукт индустрии визуальных эффектов — использовался для эпизода Бытия в фильме «Звездный путь 2: Гнев Хана», в котором было изображено пламя, охватившее поверхность планеты.

Техника заключалась в моделировании действия сил на частицы, которые изображались точками или короткими отрезками. Поэтому я реализовал это и наблюдал, как группы точек на черно-белом мониторе, который мог отображать простую анимацию рисования линий в реальном времени, взлетали и опускались под действием силы тяжести. Вскоре они уже отскакивали от «пола» внизу экрана, как множество крошечных черных теннисных мячей.

Тогда я подумал, что частицы должны взаимодействовать друг с другом, как магниты. Я наивно полагал, что если я возьму положительно заряженную частицу и окружу ее отрицательно заряженными частицами, то у меня должно получиться хорошее равновесие сил. Как наивно. Установка оказалась нестабильной, и мои частицы разлетелись во все стороны.

Я подумал о том, что происходит, и понял, что мне нужна какая-то сила, которая бы притягивала И отталкивала. Озарение пришло, когда я вспомнил свой урок физики для первокурсников: пружины! Ф = кх!

Я соединил четыре частицы пружинами, скрестил их (представьте себе квадрат с крестиком, соединяющим диагональные углы) и запустил симуляцию. Квадрат упал под действием силы тяжести, и когда он ударился о нижнюю часть экрана, он подпрыгнул, раскачиваясь, как желе, когда пружины сделали свое дело. Оно не разлетелось. Он сохранил свою форму, подпрыгнул еще несколько раз, а затем опустился на «пол».

И вот, в одиночестве, в темноте лаборатории, под гром (вероятно) музыку, я «изобрел» систему «пружина-масса», которая сегодня является стандартной техникой, используемой для всех видов нежестких деформаций в компьютерной графике. Одежда, волосы, мех, резина и, ну, желе.

Затем я сделал сетки систем масса-пружина, чтобы имитировать драпировку, свисающую с закрепленных углов, флаги, развевающиеся на ветру, и трехмерные кубы, отскакивающие от стен и пола. Я назвал эти системы «партексами» — смесь частиц и вершин.

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

Много лет спустя работа по моделированию ткани, которую я начал в 1985 году, наряду с моим опытом работы с символикой, изменила ход моей жизни и перенесла меня в новую жизнь на далеких Гавайях.

Дизайн и код

Приведенный выше код довольно стандартный. То, что вы реализуете в начале любой разработки 3D-графики. Я делал это много раз, в Lisp, C, C++ и даже в Smalltalk.

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

Но до сих пор в этом проекте я сопротивлялся этому желанию. Отчасти потому, что мне нравится писать код, а отчасти потому, что я знаю, что в какой-то момент переделаю архитектуру программного обеспечения позже, когда у меня будет лучшее понимание того, что нужно сделать.

Но также отчасти потому, что я уже написал код. Если вы пропустили это, вернитесь и посмотрите на комментарии в верхней части списка. Тридцать лет месяцу на момент написания этой статьи. Это должно что-то значить.

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