Блог:
Прежде чем начать работу над производством нашего нового сайта, мы изрядно поломали голову над тем, каким образом можно совместить концепцию платформы, ориентированной на продвижение нашей студии через социальные сервисы с не менее значимой идеей, призванной подчеркнуть преимущества Облака как студии, ориентированной на технологичность в своих проектах.
Было ясно, что доступность содержания для наибольшего количества пользователей и применение технологий, находящихся на переднем краю — вещи, все же, мало сочетаемые. Получалось так, что ты либо утыкаешься в красивый, удобный, но к сожалению уже десятки раз повторенный формат представления информации в виде блогов, с поддержкой RSS, либо ломаешь стереотипы с помощью Flash, но при этом отказываешь весомому куску аудитории, в их желании приобщиться.
Решение, в итоге, родилось — если посмотреть на весь сайт студии, как на иллюстрированный журнал, то можно задать вопрос — какой именно материал этого журнала станет наиболее притягательным и важным для читателя? Очевидно, что этим материалом может определенная статья, которую для простоты можно назвать Темой номера. Выделив такую тему, которая к тому же может меняться из номера в номер, мы пришли к выводу, что это именно то недостающее звено, через которое можно осуществить связь социального канала информации с некоторой технологической изюминкой.
Дальше оставалось сформировать требования к формату представления этой темы. Стало понятно, что решение должно было стать универсальным, и легко адаптируемым к новым важным вехам в жизни студии, и в то же время быть уникальным с точки зрения технической реализации. Поразмыслив над перечнем средств выразительности, мы пришли к выводу, что нам не помешало бы выйти, наконец, из привычного плоскостного подхода к дизайну в трехмерное пространство. Так облако обрело объем.
Поиск формы
Достаточно времени ушло на поиск формы для нашей новой выдумки. Мы перерывали

Время не было потрачено даром, ведь в процессе этого отбора мы значительно развили собственную информированность с точки зрения новых трендов в интерактивном дизайне. Чего стоит хотя бы замечательная студия tha ltd. Чпоканье c их wonder-wall.com еще долго раздавалось из различных уголков студии. Довольно скоро стало понятно, что наибольший интерес среди пользователей в таких приложениях вызывает сам процесс взаимодействия с интерактивным объектом. Через это приходит интерес и к непосредственному содержанию объекта. Вопрос с содержанием решился достаточно быстро — тема должна была включать в себя изображения, текст и видео. Чего уж там говорить, это должен был быть небольшой сайт внутри основного сайта.

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

В итоге свет увидел финальный вариант объекта, представляющего из себя куб с произвольно вытянутыми гранями, на которые был нанесен контент, а пользователю давалась возможность изучать его, вращая в трехмерном пространстве. Поскольку такое решение соответствовало всем нашим заранее определенным критериям, мы поняли — проблема с формой решена.
Средства
Теперь моей задачей стало проектирование функциональной модели Темы. Универсальность, модульность, возможность быстрого обновления стали основными мотивами для меня в этом процессе. В первую очередь, я разделил задачу на три основных пункта:
Диаграмма сущностей по проекту.
Что же в итоге у нас получилось? За обновление информации в теме отвечали блоки связи с внешними данными. Обмен информацией с сервером осуществлялся, разумеется, через XML для которого были разработаны спецификации по формату. Затем по этим спецификациям программист
Я решил разделить все данные, с которым должно было оперировать наше приложение на сервисные данные (необходимые для поддержания работы самой оболочки темы) и

Отталкиваясь от типа контента, который должен был разместиться в теме, я разбил

После формирования спецификаций к способу хранения данных я мог перейти к созданию контроллера (так я называю основные AS3 классы, отвечающие за специфичные функции в рамках приложения) для обработки XML. Ничего сложного этот контроллер из себя не представлял, отдельно можно упомянуть то что в парсере я использовал возможности расширения E4X, для более быстрой обработки ветвей загруженного XML. После своей работы парсер формировал внутренний объект, который хранил все важные параметры для иницализации системы и
Затем я сфокусировался на контроллере сцены, который должен был управлять процессом генерации новой
Этой глыбой был контроллер самой трехмерной конструкции, удерживающей
Создание трехмерной модели
Не долго думая мы открыли редактор и начали конструировать модель. Для того чтобы сократить потерю производительности было решено использовать один кубический объект, чьи грани были рассечены на несколько сегментов. Затем каждый сегмент был выдавлен с помощью инструмента extrude из поверхности грани. Сегменты были выдавлены в случайном порядке, для того чтобы придать модели интерес в визуальном плане. После утверждения модели важным шагом стало создание корректной текстуры, для нанесения на ее поверхность. Поскольку Papervision в текущем виде практически не поддерживает динамические тени (а те решения, что существуют оставляют желать лучшего с точки зрения производительности) было решено использовать хорошо известную методику «запекания» текстур. На сцену с нашим объектом было помещено несколько источников света, в настройках рендерера поставлен параметр просчета глобального освещения, и после нескольких пробных рендеров была получена готовая текстура для импорта во

Для импорта модели внутрь приложения был использован формат DAE, хранящий данные о геометрии объекта в стандартной схеме COLLADA. Cinema4D прекрасно позволяет делать такой экспорт. После того как к этой модели был добавлен файл с разверткой «запеченной» текстуры, этап работы с внешним трехмерным редактором был закончен, оставалось «вживить» модель в сцену.

Papervision по умолчанию поддерживать импорт различных форматов трехмерных данных, так что проблем с загрузкой не возникло. Наконец, на сцене появился первый текстурированный трехмерный объект.
Интерактивность
Однако, объект не должен был стоять на месте. Для интерактивной анимации объекта был использован свободно доступный класс TweenLite. С помощью него достаточно легко можно было создавать анимацию по параметру. В нашем случае было необходимо вращать фигуру перед камерой, демонстрируя ее различные грани, на которые затем должны были быть подвешены
Преодолев этот этап, я мог перейти к контроллеру
Сперва я попытался создать плоскости процедурным способом, что в итоге не увенчалось успехом, поскольку вычисление крайних точек в геометрии импортированной модели вызвало большие затруднения. Тогда я решил пойти уже испытанным способом и добавить их при помощи трехмерного редактора. Получилось, я смог создать в сцене массив из отдельно расположенных плоскостей в определенных координатах. Добавление интерактивной текстуры было делом техники, как и загрузка данных из объекта, содержащего все
Итак, на трехмерной сцене существовала основная трехмерная конструкция, а так же набор плоскостей, активирующих демонстрацию пользователю контента. Тестируя полученный промежуточный вариант, я попробовал вращать его в различных направлениях. Тогда и выплыла первая проблема — поскольку элементы управления должны были вращать трехмерный объект по четырем произвольным направлениям, а сам объект мог вращаться только на 90 градусов в каждую сторону в своей системе координат, простое применение вращений объекта по той или иной оси создавало непредсказуемое движение, после нескольких таких операций. Проблема решилась следующим образом, были добавлены несколько отдельных переменных, отвечающих за корректировку направления вращения модели в зависимости от нажатой пользователем кнопки. Затем средствами Papervision производилось умножение матрицы трансформации объекта на матрицу вращения с учетом корректирующих переменных, что позволило сделать вращение предсказуемым и понятным. Но это была не единственная проблема.
Истинную трудность представило вот что. При вращении трехмерной конструкции панели, содержащие контентные плоскости вращались вместе с ней. Поскольку вращение происходил по различным осям в итоге контентые плоскости оказывались повернуты к пользователю под произвольными углами. Нам же требовалось, чтобы все плоскости всегда сохраняли ориентацию лицом к пользователю и «верх» содержащегося в них изображения всегда должен был быть вверху по отношению к пользователю. Довольно много времени ушло на понимание того факта, что рассчитать положение и повороты плоскостей в зависимости от вращения самого объекта практически не возможно. Единственным выходом явилось создание набора эталонных значений матрицы трансформации для каждой плоскости. Для создания этой матрицы была создана специальная функция для генерации
На этом этапе основная задача была уже решена, дальше оставалось только сделать контроллер для управления просмотром контента, что представляло из себя довольно простую рутинную задачу.
Теперь имея на руках управляемую трехмерную сцену и механизм просмотра всего обновляемого контента можно было приступить к улучшениям и отладке интерфейса, что заняло достаточно большое количество времени.
Наконец, когда мы добились соответствия приложения к макету осталось только провести тестирование и осуществить привязку к системе управления контентом.
Заключение
Таким образом была разработана относительно универсальная платформа для демонстрации разнородного контента в рамках обновления темы сайта. В процессе ее создания был решен ряд достаточно сложных технических задач. Каждое из решений этих проблем стало бесценным опытом для разработчиков и средством для оптимизации работы в будущем.