Выбрать главу

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

Методы L-систем нашли множество как художественных, так и практических применений. Например для создания высокореалистичных текстур, ландшафтов и растений, практически неотличимых на изображении от реальных.

Из числа арт-программ 2000-х одной из самых известных и канонических де-факто стал открытый проект ContextFreeArt:

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

Единственный его автор — Микаель Хвидтфельд Кристенсен (Mikael Hvidtfeld Christensen) в одиночку развивает проект в течение нескольких последних лет (с 2007 г.).

Кликните по изображению чтобы перейти на галерею изображений, полученных с помощью Structure Synth.

Проект распространяется по GPL и написан на C++ под OpenGL и QT, что позволяет портировать приложение на любые платформы (кроме разве что мобильных, для которых поддержка этих фреймворков если и появилась, то совсем недавно).

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

Основы формальных грамматик

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

Для определения “языка” — то есть всех возможных цепочек символов — требуется задать:

1. Множество конечных символов

Множество самых базовых объектов, из которых строится структура или язык. Для естественного или машинного языка это символы, буквы, цифры, для двумерной фигуры это точки на плоскости, прямые, кривые, для трехмерной — соответственно точки в трехмерном пространстве, полигоны, векторы, поверхности.

2. Множество правил

Правило — это некая формальная запись, в которой определяется, как из одной структуры получается другая структура. Правила могут состоять из других правил.

Весьма условный пример правил для русского языка:

СЛОВО = “один или несколько слогов” СЛОГ = “согласная”+”гласный” СОГЛАСНАЯ = {б,в,г,д,ж, …, щ} ГЛАСНЫЙ = {a, е, о, .., я}

Для трехмерной структуры:

КУБ = “Полигон с координатами (0,0,0), (0,1,0), (0, 0, 1)”, “Полигон с координатами (0, 0, 0), (1, 0, 0), (1,1,0) и т.д.

Понятно, что в формальной теории или реальных приложениях правила записываются более строго и могут быть очень сложными (например Perl-синтаксис регулярных выражений). Для них существует множество теорем, которыми мучают студентов старших курсов.

3. Стартовое правило

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

Язык Structure Synth

Трехмерные фигуры как грамматики описываются в текстовых файлов специального формата .es (EisenScript).

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

Правила и трансформации оперируют с базовыми геометрическими фигурами (примитивами) в трехмерном пространстве. У фигур, помимо 3d-координат, есть только цвет (но, к сожалению, не текстура, не материал и т.п.).

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

Результат выполнения — трехмерная полигональная сцена с базовой моделью освещения, которая может быть экспортирована в другие форматы или сохранена как растровое изображение. Её также можно просто покрутить, увеличить или уменьшить в редакторе в окне предпросмотра, программа достаточно быстра на современных PC и начинает притормаживать на сценах от ста тысяч объектов.