purebasic.info

PureBasic forum
Текущее время: Вс апр 22, 2018 4:07 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Немного теории...
СообщениеДобавлено: Вс дек 16, 2007 8:11 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6246
Благодарил (а): 17 раз.
Поблагодарили: 182 раз.
Пункты репутации: 48
Цитата:
Cекреты demo-кодинга

ДМИТРИЙ ГРАМОТЕЕВ

Хакер, номер #075, стр. 078
ПРОГРАММИРОВАНИЕ ДЕМОК: СОВЕТЫ ГУРУ

ДЕМКА - ЭТО ПРОГРАММА, КОТОРАЯ В РЕАЛЬНОМ ВРЕМЕНИ ОСУЩЕСТВЛЯЕТ ПРОРИСОВКУ СЛОЖНЫХ ГЕОМЕТРИЧЕСКИХ И ИНЫХ ГРАФИЧЕСКИХ ФИГУР В УСЛОВИЯХ СТРОГОЙ СИНХРОНИЗАЦИИ С МУЗЫКОЙ, ИСПОЛЬЗУЯ ВЫЧИСЛИТЕЛЬНЫЕ И МУЛЬТИМЕДИЙНЫЕ ВОЗМОЖНОСТИ КОМПЬЮТЕРА. ЗВУЧИТ СЛИШКОМ НАПЫЩЕННО? ТОГДА, ПОЖАЛУЙ, ОСТАНОВИМСЯ НА ТОМ, ЧТО ДЕМКА - ЭТО ПРОСТО ПРОГРАММА
Demo internal mechanics

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

Современные демки достигают размеров 20 мегабайт. Спрашивается, а не проще ли перегнать с помощью kkapture все это счастье в такого же размера AVI и смотреть на любом компьютере и в любом разрешении? Ан нет! Ни один из существующих видеокодеков не способен при сопоставимом размере результирующего файла передать попиксельное качество картинки демки. Более того, если позволяют вычислительные мощности, то изображение на экране будет меняться не со скоростью классических AVI’шных 25 кадров в секунду, а со скоростью 100 и даже 200! Да, сам факт осознания того, что все это делается в реальном времени, добавляет демкам стоимости.
На чем пишутся демки?

Первый вопрос при написании демо, который встает перед большинством людей, решивших, что им пора написать собственное произведение, – «а на чем это пишется?». Демы пишутся на том языке программирования, который более удобен автору. Чаще всего они пишутся на C\C++ (VC, GNU C). Конечно, не стоит думать, что выбор, доступный программисту, это «C++ or die». Единственный реальный бонус, который получают люди, которые пишут на приплюснутом Си перед другими языками программирования, это то, что примеры из MSDN, Direct-X SDK и море туториалов написаны именно на этом языке. Все остальное - just rumors. Других объективных причин преимущества C\C++ особо и нет. На Delphi, VB или даже на «голом» ассемблере можно написать абсолютно то же самое, а то и что-нибудь покруче (собственно, люди так и поступают :-)).

Еще демки пишутся в демосистемах. Демосистемы – это специализированные программы–оболочки, которые посредством графического интерфейса создают скрипты демок. Такие демо-системы в результате экспортируют исполняемый файл плеера и набор скриптов. Сам скрипт содержит информацию в стиле «что, как и когда показывать» и пользовательские медиаданные. Демосистемы бывают очень разные. Для работы с каждой из них тебе будет необходимо прочитать мануалы и разобраться в туториалах (может, еще не поздно почитать книжку про C++?). С большим отрывом по функциональности и качеству лидирует система Werkkzeug. Просто обалденная штука (при правильном применении =)). Список поддерживаемых фич можно перечислять до конца статьи. От демомейкера не требуется ничего, кроме его креатива. Для оценки масштаба трагедии смотрим потрясающую работу от Farbrausch - fr-025 (на соответствующих картинках).

Между прочим, на сайте WZ именно этот проект лежит в исходниках и полностью доступен для скачивания и «ковыряния»! Полноценные и «съедобные» русскоязычные туториалы по WZ притаились на сайте www.vova4age.narod.ru. Еще одним классическим примером демосистемы является Moppy Demopaja. Но, в отличие от WZ, Demopaja не таскает «все в одном флаконе», и тебе придется пыхтеть и писать специальные плагины для твоих супер-пупер эффектов самому (зато редактор сцен и сплайнов удобный). Кроме этого, советую обратить внимание на демосистему neon v2 от группы xplsv и отечественный opensource проект Plasticator.

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

ПОПУЛЯРНЫЕ ДЕМОТУЛЗЫ

Werkkzeug

http://www.theprodukkt.com/werkkzeug1 - аll-in-one, включая даже средство от комаров

Moppy Demopaja

http://www.demopaja.org - удобное управление сценами, но халтура не пройдет – все plugin’ы придется написать самому

Neon v2

http://www.neonv2.com - к демосистеме существует большое количество плагинов и эффектов, но другие варианты более гибки и функциональны

Plasticator

http://www.plasticator.heroez.net - отечественный проект, предлагает очень много и сразу, главное – не запутаться в интерфейсе
Графика

Графика в демке может быть растровой и векторной. Растровая графика рисуется в редакторах а-ля Фотошоп, а вот с векторной все несколько сложнее. Для хранения растровой графики любого содержания нам хватит PNG и JPG, а вот форматов векторной графики – тьма, ведь каждый редактор сохраняет ее в своем формате. Стандартом де-факто является 3ds. Для всех остальных «тяжелых случаев» существуют программы-конверторы векторных графических файлов (очень хороший пример – Deep Exploration).

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

Загрузить растровое или векторное изображение можно с помощью различных библиотек. Как вариант - написать самому, но стоит ли изобретать велосипед? На том же www.sourceforge.net есть множество библиотек для загрузки данных любых форматов. И, вспоминая боянистую фразу на ярлыке мужской рубашки «dry wash only, 40*C, no bleach, inside out, no machine washing – OR – just give it to your wife – it’s her job», все остальное скидываем на художника. Это его работа - рисовать и сохранять в правильный формат. Если будет сопротивляться, то покажи ему, кто в доме хозяин ;).

Вершиной искусства демомейкинга является генерация изображений текстур исключительно посредством кода. Тут речь идет не о простых градиентах с шумом, а именно о сложных изображениях. Остановимся на этом моменте и идем смотреть 64кб интру Fr-08: The Produkkt (соответствующая картинка).

Смотрим до самого конца и внимательно вникаем в цифры в титрах – впечатляет! Разобраться, как работают генераторы текстур, можно на отличном примере проекта Александра Кухаренко (hi, f0x!) - plasticator (http://www.plasticator.heroez.net). Вообще говоря, этот проект – полноценная отечественная демосистема, на которой были сделаны различные интры и демки, но нас на данной стадии будет интересовать только то, каким образом можно получить сложные рисунки посредством минимума кода. Копаем исходники, крутим кнопки – осознаем how to. Дельфинам, да и остальным, рекомендуется посмотреть интересный проект www.ainc.de – «Texture»

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

Процесс отрисовки картинки на экране называется рендерингом. Рендеринг может быть программный (software) или с помощью средств графических библиотек OpenGL / DirectX (hardware accelerated).

Софтварный рендер попиксельно обрабатывает картинку, используя вычислительные мощности центрального процессора. Различают обычный софтварный рендер и рейтрэйсинг (raytracing). В первом случае изображение получается путем растеризации полигонов с учетом освещения и текстурирования по так называемым сканлайнам (scanlines), а во втором случае изображение получается путем расчета виртуальных лучей с учетом физики отражения, преломления и ослабления света. Первый способ позволяет получить достаточно качественную картинку с приличным количеством полигонов, зато рейтрейсер может сгенерировать значительно более реалистичную картинку с эффектами, недоступными даже самым-самым современным видеоакселераторам.

Доступ к возможностям видеоускорителя осуществляется через библиотеки OpenGL и DirectX. Возможности последних версий OpenGL и DirectX более чем сравнимы, хотя, с моей точки зрения, DirectX более programmer-friendly. Он поддерживает больше форматов файлов, интерфейсов для структур данных. Доступ к расширенным функциям также значительно проще в DirectX, зато OpenGL является действительно кроссплатформенной библиотекой. Доступ к расширенным функциям видеоускорителя в OpenGL осуществляется через так называемые расширения, что значительно усложняет написание кода. Хотя вру. Не усложняет, а увеличивает количество телодвижений. В минус API OpenGL версий ниже 2.0 идет также отсутствие возможности использования текстур размера, не кратного степени 2. Для любителей «хочу все и сразу» есть такие извращения как SDL (Simple DirectMedia Layer, www.libsdl.org) – кроссплатформенная тулза, позволяющая писать мультимедийные приложения. «Простой доступ к мультимедийным возможностям» обернется для нас необходимостью досконально изучить не только API самого SDL, но и OpenGL и всего остального, поскольку когда-нибудь обязательно захочется разобраться во всем изнутри ;). В такие моменты ты должен держать под рукой книжечку по C++ и OpenGL\DirectX. Выход из ситуации, когда хочется высокого качества картинки, но лениво разбираться в тонкостях низкоуровневых библиотек – сторонние 3D-рендеры. Их очень много и они все очень разные, но, как показывает практика, в большинстве случаев написать собственный движок для демки намного проще и перспективнее, чем тратить время на изучение устройства чужого кода. Так что настоятельно рекомендую тебе писать все свое.

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

Графический тулкит любого демомейкера должен включать в себя как минимум документацию и примеры. В дальнейшем ты добавишь в этот список свои наработки, снипетсы и все остальное. Настоящей OpenGL-Меккой стал сайт www.nehe.gamedev.net. Простые и понятные уроки и статьи (с подробным построчным (!) описанием всего чего только можно) радуют уже не первое поколение кодеров, а каждый урок от NeHe можно рассматривать как отдельную мини-демку. Более того, примеры NeHe портированы на большое количество языков программирования. В интернете существует также и русская версия уроков NeHe - www.pmg.org.ru/nehe. Еще рекомендую очень хороший ресурс с мясистым именем хоста - www.ultimategameprogramming.com - сайт содержит действительно много примеров по OpenGL и DirectX. Примеры с UGP более продвинуты, чем на NeHe – есть HDR, различные Shadows-технологии, шейдеры, лайтмапы, загрузка различных файловых форматов, да и культура кода у примеров намного выше. DirectX-разработчикам рекомендуется держать у себя на диске соответствующий SDK, но если в графике ты - начинающий, то разобраться примерах 8-го или 9-го SDK поначалу будет очень сложно.

ГДЕ НАУЧАТ ПРОГРАММИРОВАТЬ ГРАФИКУ?

www.gamedev.ru – общаемся на тему графики на русском языке

www.gamedev.net – то же самое, на английском

www.msdn.microsoft.com - доки по базовому OpenGL

www.openGL.com - более подробные доки с различными примерами

www.delphi3d.net – все для дельфина, плавающего в море графики :)

www.sourceforge.net - не особо удобный проект «GLScene», тоже для любителей Delphi

www.nehe.gamedev.net - на твоем месте, я выкачал бы его весь телепортом. Особенно конкурсные работы

www.ultimategameprogramming.com - его тоже сливать полностью

www.sulaco.co.za – еще один нефиговый проект для дельфинов

www.humus.ca - нереально крутые графические примеры с исходными текстами

ПРИМЕРЫ РЕНДЕРОВ

СОФТВАР

MATRIX – THE FULCRUM – ПОТРЯСАЮЩИЙ СОФТВАРНЫЙ РЕНДЕР ОБРАЗЦА КОНЦА 90-Х. ЧУВСТВУЕТСЯ, ЧТО ВОЗМОЖНОСТИ ДЕТАЛИЗАЦИИ ИЗОБРАЖЕНИЯ ДИКТОВАЛИСЬ ЛИШЬ СУЩЕСТВУЮЩИМИ 166MHZ ПНЯМИ. ДИНАМИЧЕСКОЕ ОСВЕЩЕНИЕ, ТЕНИ, ОБЪЕМНЫЙ СВЕТ, АНИМАЦИЯ МОДЕЛЕЙ – И ВСЕ ЭТО СЧИТАЕТСЯ ТОЛЬКО НА ПРОЦЕССОРЕ!

РЭЙТРЕЙСЕР

FAN - STILL SUCKING NATURE – ГОД ВЫПУСКА 2003, НО ДАЖЕ СЕЙЧАС ЭТО НЕЧТО! В ИНФОРМАЦИИ ПО ПРОЕКТУ СОЗДАТЕЛИ УТВЕРЖДАЮТ, ЧТО ПЫТАЛИСЬ СДЕЛАТЬ ИМЕННО ФОТОРЕАЛИСТИЧНУЮ КАРТИНКУ В РЕАЛЬНОМ ВРЕМЕНИ.

ХАРДВАР

RGBA – PARADISE, ПРОСТО КРАСИВАЯ НЕБОЛЬШАЯ ИНТРА С ПОЧТИ ЖИВОЙ ТРАВОЙ И НАСТОЯЩИМИ НОСОРОГАМИ! ВСЕГО ЛИШЬ 56 КБ!
Музыка

Дема без музыки это... полный бред! Сейчас мы рассмотрим, как хранить музыку, чем ее играть и вообще, зачем это все надо.

Технологически музыка в демках бывает MIDI, модульная, синтезированная или потоковая. MIDI-формат - он и в Африке MIDI. В демках он используется в чистом виде крайне редко. Учитывая, что есть много юолее эффективных способов, советую забыть про него вообще. Не стоит, конечно, тут опускать MIDI до уровня грязи, это всего лишь формат файла и его можно проиграть через очень навороченный синтезатор, получив таким образом потрясный саунд. Но для демомейкинга он не подходит :). Исторически первым типом музыки в демках были музыкальные модули. Модуль - это файл, который хранит внутри себя образцы звуков инструментов (сэмплы) и ноты, которые необходимо сыграть этими инструментами. Модули создавались в специальных программах – треккерах. Треккер представляет собой программу, в которой можно редактировать модули в виде вертикальных дорожек с нотами (паттернов) и осуществлять управление сэмпламии и эффектами.

Классический модульный формат это MOD: монофонические сэмплы по 8 бит и возможность воспроизвести максимум 4 звука одновременно. Современные модульные форматы позволяют практически забыть о таких рудиментарных ограничениях параметров сэмплов и количества воспроизводимых одновременно каналов. Модульная музыка позволяет получить высокое качество звучания (даже выше чем mp3-style форматах). Смотрим и внимательно слушаем качество саундрека в демках с модульной музыкой: Haujobb – disclone и «наш» ответ буржуям: T-Rex – broadband. Наиболее распространены у демомейкеров следующие форматы модульной музыки: IT – Impulse Tracker v2.14, XM – FastTracker 2. Обе программы еще DOS’овских времен, хотя есть и win+linux клоны для IT – Schism tracker, для XM – Fast Tracker 3. Типичный размер музыкального модуля 200-2000 Кб.

Тем временем мощности компьютеров росли (и растут) постоянно. Кто-то сказал: «А почему бы и нет?» и сделал синтезатор для ПК. Синтезатор генерирует огибающие по некоторым законам и применяет к ним различные фильтры, дэлэи и эффекты.

В демке тебе будет необходимо хранить код самого синтезатора (плеера) и набор параметров к нему. Это хозяйство занимает очень мало места, что нам, безусловно, на руку. Синтезатор позволяет получить исключительно высокое качество звука, но требует значительных вычислительных ресурсов (фразу после запятой в 21 веке принято опускать, да и никто не отменял prerendering). Для тех, кто не верит в качество синтезаторов, - качаем и слушаем демки: Farbrausch – fr-34, AOS – offworld (между прочим, работа-победитель демопати CC-2006 в Питере, hi to Preston & UNC!). Подробное описание работы музыкального синтезатора явно выходит за рамки этой статьи, да и рассказывать об этом должны люди, которые сами писали синтезаторы, так что ищем все в интернете. Ну и завершают разнообразие форматов музыки в демках потоковые форматы: mp3, ogg, wma. Что именно выбрать – решать исключительно тебе. В абсолютном большинстве современных демок используется потоковый формат музыки. Так быстрее, удобнее и никто не украдет сэмплов из наших модулей :). Ударить по звуковым рецепторам помогут саундтреки из демок: mfx – deiteies, kewlers – a significant deformation near the cranium.

В воспроизведении саундтрека нет ничего сложного. Конечно, самые смелые и опытные программеры пишут все сами, но нет ничего зазорного в использовании качественных сторонних инструментов. Наиболее распространены библиотеки Bass (кстати, эту библиотеку я когда-то описывал на страницах Кодинга - прим. Лозовского) от Ian Luck и fMod от Firelight multimedia. Обе абсолютно бесплатны для некоммерческих приложений и предлагают в целом одинаковый набор функций. В этих библиотеках есть врапперы под все основные языки программирования и платформы. Используя эти библиотеки, ты легко проиграешь свои модули или mp3’шки даже не задумываясь о том, какой звуковой адаптер у тебя стоит. Дополнительно bass поддерживает компрессированные с помощью технологии mpeg музыкальные модули MO3, а fmod мне нравится по причине простоты синхронизации. Кроме того, есть версия MiniFMod, которая используется для проигрывания модулей в малоразмерных демках и интрах с синтезированными сэмплами. А вот с «чистыми» синтезаторами сложнее. В разделе demotools на www.pouet.net есть public-синтезаторы, но они все очень разные и перед реальным использованием придется их досконально изучать.
Преимущества и недостатки звуковых форматов

МОДУЛЬ

(+) ЗАНИМАЕТ МАЛО МЕСТА. НЕ ТРЕБУЕТ ВЫСОКИХ ВЫЧИСЛИТЕЛЬНЫХ МОЩНОСТЕЙ

(-) ПОДХОДИТ ТОЛЬКО ДЛЯ ЧИСТОЙ МУЗЫКИ

ПОТОК

(+) ЛЮБОЕ СОДЕРЖАНИЕ, ХОТЬ 10-МИНУТНАЯ ЗАПИСЬ ЧИХАЮЩЕЙ БОЛЬНОЙ ОБЕЗЬЯНЫ. НЕ ТРЕБОВАТЕЛЕН К ВЫЧИСЛИТЕЛЬНЫМ РЕСУРСАМ И ПАМЯТИ

(-) ВЫСОКОЕ КАЧЕСТВО – БОЛЬШОЙ РАЗМЕР ФАЙЛА

СИНТЕЗАТОР

(+) ИСКЛЮЧИТЕЛЬНОЕ КАЧЕСТВО ЗВУКА, ЕСЛИ РУКИ НЕ КРИВЫЕ

(-) СЛОЖНОСТЬ РЕАЛИЗАЦИИ И ЗНАЧИТЕЛЬНО БОЛЕЕ ВЫСОКИЕ СИСТЕМНЫЕ ТРЕБОВАНИЯ
Как все это вместе работает?

Сейчас я попробую рассказать о том, как работает generic-демка на функциональном уровне. По ходу объяснения у меня будет появляться желание писать сразу куски кода, но я переборю себя и попробую объяснить взаимодействие различных элементов демки на уровень выше, а конкретные примеры реализаций ты подсмотришь сам из примеров NeHe. Для начала – посмотри на картинку «Схема реализации».

Все начинается с инициализации графической подсистемы. Можно сначала загрузить данные, но как ты тогда нарисуешь красивый progressbar? Поэтому будем последовательны. Хорошим тоном является предоставление пользователю возможности до запуска демки выбрать хотя бы разрешение экрана. Как вариант можно сделать отдельный конфигуратор (отдельная программа), а демка будет уже запускаться по активным настройкам. Если ты пишешь 64К или просто ленив, как сытая анаконда, то скомпилируй несколько .exe с различными настройками. Например, demo_fullscreen.exe и demo_window.exe. Однако что-то мы отошли от сути.

При инициализации обязательно смотри на коды возврата ошибок. Лучше определить возможности системы пользователя заранее, чем заставлять его ждать процесса загрузки и первого «вываливания» по ошибке. Для OpenGL самая ответственная часть – это выбор pixelformat. Также подводный камень можно найти при установке полноэкранного видеорежима – не стоит прыгать в видеорежим с custom framerate. Переключайся на любой доступный режим с данным разрешением. Проще говоря – не надо 640x480@100, надо 640x480@default.

Следующий шаг – загрузка данных. Данные можно хранить в отдельных файлах, в больших single-file паках, в .exe-ресурсах или даже в сегменте кода. Как именно – решать тебе. Если хранить внутри .exe, то не надо думать насчет упаковки – всегда есть UPX или ASPack. Хорошим решением является хранение данных в популярных архивных форматах ZIP, RAR. В таком случае тебе понадобится соответствующая библиотека декомрессии. Как пример можно привести unique – unRar library (http://www.unrarlib.org). Должен сразу предупредить тебя, что делать временные файлы при распаковке и загрузке демки - это страшное зло. Хотя, если ты культурно получишь системный temporary file, то... нет, все равно зло. Наша демка должна распаковывать все сразу в память, так, чтобы ее можно было безболезненно запускать даже с компакт-диска.

Следующий элемент - чаще всего, самый сложный для новичков. Перед тем как начинать писать свою демку, я настоятельно рекомендую тебе попробовать написать тетрис (через это должен пройти каждый программист :) – прим. Лозовского). Да-да, именно обыкновенный тетрис. Очень много схожих элементов, да и опыта программирования это добавит. Я серьезно! Отмазки в стиле «я работаю только с базами данных, зачем мне этот тетрис?» плохо скрывают то, что человек на самом деле даже не представляет, как это делается. Позволю себе и тут ввернуть несколько полезных советов.

В начале каждого нового кадра мы должны узнать текущее время от начала проигрывания музыки. Если ты используешь fMod, то он может отдать нам текущее время в проигрываемом файле, для других случаев надо использовать gettickcount или QueryPerfomanceTimer с учетом стартового тика. Точность Gettickcount плавает от системы к системе в злом диапазоне до 10 м, что представляет собой максимум 100FPS, а RTDS не поддерживается на процессорах ниже iP3, да и на ноутбучных мобильных камешках частенько отмачивает еще те приколы.

Далее мы находим ту сцену, которая должна быть видна в конкретный момент времени и рисуем ее. Обрати внимание, что наиболее удобно вызывать сцену в ее локальном времени. Например, время на начало кадра - 13.5 секунды, а сцена должна идти с 10-й секунды по 15-ю. Итого: мы передаем этой сцене значение времени в интервале от 0 до 1, - для данного примера это будет (13.5-10)/(15-10)=0,7. Использование нормализированного локального времени очень удобно. Дальше – больше! (в прямом смысле). Если делать плавные переходы между сценами или «месиво» из нескольких сцен, то необходим дополнительный менеджер сцен или виртуальная сцена, которая ничего не будет делать, кроме как вызывать из себя прорисовку других сцен и смешивать результат, а в самом конце этого элемента можно сделать итоговый постпроцессинг, например, модный нынче glow\bloom. Далее - быстренько смотрим, нажал ли мерзкий юзер клавишу Еsc, и не закончилась ли еще музыка. Если нет – повторяем весь цикл отрисовки кадра.

А для того, чтобы оставить хорошее впечатление от просмотра и при этом не оставить «хвостов» в памяти – аккуратно убираем за собой, хотя если «бросить» девайсы, контексты и текстуры в D3D или OpenGL – то ничего страшного не случится. Но будем культурнее :). Хотя бы чуть-чуть.
Conclusion или несколько слов вдогонку уходящему поезду

Так уж получилось, что наше описание внутренностей демки вышло достаточно сумбурным, в стиле «галопом-по-Европам». Но не боги горшки обжигают, да и демки, пусть даже самые крутые, делают самые обыкновенные талантливые люди. Даже если ты не программист и не представляешь в деталях how does it work – ничего страшного: есть различные демосистемы, где от тебя будет требоваться только креатив и клики мышкой в нужных местах. Главное – это желание творить. А статья, в которой я самым подробным образом разберу программирование демки, ждет тебя в этом же номере. Кстати, менее чем полгода отделяет нас от ближайших российских демопати: DiHalt в Нижем и ChaosConstructions в Питере...

ГДЕ ПОКАЗАТЬ СЕБЯ И ПОСМОТРЕТЬ НА ДРУГИХ?

WWW.CC6.ORG.RU – КРУПНЕЙШЕЕ ОТЕЧЕСТВЕННОЕ ДЕМОПАТИ! ЕЖЕГОДНО ПРОХОДИТ В ПИТЕРЕ - НЕ ЛЕНИМСЯ, ДЕЛАЕМ И ПРИСЫЛАЕМ СЮДА РАБОТЫ.

WWW.POUET.NET – КРУПНЕЙШИЙ РЕСУРС С ДЕМКАМИ В СЕТИ. СКРИНШОТЫ, РЕЙТИНГИ, ОПИСАНИЯ, СИСТЕМА ПОИСКА: САМЫЕ СВЕЖИЕ И САМЫЕ ДРЕВНИЕ РАБОТЫ НАХОДЯТСЯ ТУТ.

WWW.DEMOSCENE.RU – РУССКОЯЗЫЧНЫЙ РЕСУРС, БЕРЕЖНО ХРАНЯЩИЙ КОЛЛЕКЦИЮ ЛУЧШИХ ДЕМОСЦЕНИЧЕСКИХ РАБОТ.

WWW.HUGI.SCENE.ORG – ЭЛЕКТРОННЫЙ ЖУРНАЛ HUGI. НА ЕГО СТРАНИЦАХ ЧАСТЕНЬКО ВСТРЕЧАЮТСЯ СТАТЬИ ПО ПРОГРАММИРОВАНИЮ И ВООБЩЕ ВСЕМУ, ЧТО СВЯЗАНО С СОЗДАНИЕМ ДЕМОК. ЕСТЬ ДАЖЕ РУССКИЕ ВЕРСИИ.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс дек 16, 2007 8:12 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6246
Благодарил (а): 17 раз.
Поблагодарили: 182 раз.
Пункты репутации: 48
Цитата:
ДемоГрафика

LYNX

Хакер, номер #075, стр. 088
РАЗМЫШЛЕНИЯ ИЗВЕСТНОГО СЦЕНЕРА НАСЧЕТ ДЕМОСЦЕНЫ В ЦЕЛОМ И ГРАФИКИ В ЧАСТНОСТИ

ГРАФИКА В ДЕМАХ... ГРАФИКА В ДЕМАХ... ММММ.. ЧТО-ТО НЕ ТО.. ВЕДЬ ДЕМЫ - ЭТО И ЕСТЬ «ГРАФИКА»?! ИЛИ НЕТ? МОЖНО ЖЕ СКАЗАТЬ, ЧТО СОЧЕТАНИЕ МУЗЫКИ И ГРАФИКИ - ДЕМА? МОЖНО. ДАЖЕ ПРОСТО «ГРАФИКА» БЕЗ МУЗЫКИ МОЖЕТ БЫТЬ ДЕМОЙ. У МЕНЯ, НАПРИМЕР, НИКОГДА НЕ БЫЛО GUS`A (ЭТО ТАКАЯ СЦЕНЕРСКАЯ ЗВУКОВАЯ КАРТА), НО САМИ ДЕМЫ НЕПЛОХО ЗАПУСКАЛИСЬ И СМОТРЕЛИСЬ И БЕЗ МУЗЫКИ. КСТАТИ, НОМИНАЦИЯ 512B INTRO (О НЕЙ МЫ ПОГОВОРИМ НИЖЕ) НЕ ЧАСТО БАЛУЕТ ЗРИТЕЛЯ МУЗЫКАЛЬНЫМ СОПРОВОЖДЕНИЕМ. НО ЧТО ЖЕ ТОГДА ПОЛУЧАЕТСЯ - ЛЮБАЯ ГРАФИКА ЕСТЬ ДЕМО? НАДО РАЗОБРАТЬСЯ!

На самом деле, в деталях рассказывать историю возникновения демосцены в этой статье я не буду, поскольку в интернете и так слишком много статей на эту тему. Особо интересующимся людям, владеющим английским языком и отягощенным лишними 35 евро, я могу посоветовать заказать себе книжку по истории демосцены и альбом рисованной демосценерской графики Freax (http://freax.hu). Отмечу лишь, что тенденция развития здесь стандартна для всего компьютерного искусства – от простого к сложному. Все логично: растут возможности компьютерного железа – развивается креативная мысль демосценера. Что было в начале? А в начале были cracktro под C64. Представляли они собой маленькие программульки в виде одной пиксельной (а какой же еще? ;)) картинки, одной (или нескольких) мелодий и кучи текста в виде всевозможных «бегущих строк». Собственно, все творчество crack-сцены начиналось с того, чтобы как можно необычней и эффектней представить уважаемой публике свою ломалку для софта. Со временем творческая часть отмежевалась, переопределилась, и сформировалось некое подобие демосцены. Народ стал увлеченно соперничать друг с другом в мастерстве выжимания соков из фиксированных конфигураций компов, в использовании новых концептов в дизайне и тому подобных номинациях. Художественная и музыкальная сцены особо не выделялись и были частью одной ДемоСцены. Люди сбивались в команды и боролись за право называться самыми популярными и самыми лучшими. Было весело :). Смотришь демку - а там пьяненький носатый мужичок бегущей строкой самыми последними словами кроет некую команду Х. А через недельку возьмешь у кого-нибудь дискетку со свежими демами, а там уже, соответственно, команда Х кроет бегущей строкой авторов того мужичка. Занимательный креатив! В общем, графика в демах - вещь необходимая, но не определяющая дему как таковую. Должна быть идея и творческая направленность…
С чего начинается ДЕМО

Во-первых, под демой в любом случае подразумевают анимацию (согласись, обычную картинку никто демой не назовет). А вот если эту картинку в режиме реального времени морфить, блурить и всячески колбасить, то это уже демо... Конечно, по сегодняшним меркам очень простое, но все же демо. А если уж все действие происходит под музыку – респект! На exUSSR демопати войдет в первую 10-ку :). Это - так называемые 2D-эффекты. С них все начиналось, они - носители атмосферы демок 90-х, и именно по ним я порой скучаю в процессе просмотра современных творений, хотя сейчас они производят гораздо меньше эффекта, ведь у всех есть инет, в котором лежит куча рисованных картинок, а у многих имеются в наличии и графические планшетки… Пиксельная графика не актуальна. Наличие на экране красивой рисованной мышкой картинки не вызывает того восторга, какой был в те времена, когда подобные картинки коллекционировали и знали всех компьютерных художников по никам. Не скажу, что это плохо, ведь это прогресс… Но все-таки грустно…

С появлением акселераторов и пиксельных шейдеров демы стали больше напоминать технологические тесты, а не душевную народную живопись. Повторюсь, демосцена – это народное творчество. Понимаешь? Здесь нет правил, регламентов, законов или табу (кроме политики), есть только традиции. Одной из традиций, кстати, является стремление поломать все традиции и сделать что-нибудь из ряда вон выходящее :). Это одна из причин, почему демосцена затягивает и долго не отпускает, заставляя ностальгировать по «былым временам».

Слишком абстрактно? Ладно, пример. Смотрим демы, типичные для своего времени:

Future Confused by Procreation
Spleen by Marshals
Chrome by Damage

Красивое сочетание рисованной 2D-графики, рендеринга простеньких 3D-моделей, сцен пролета над местностью (fly by), притянутая за уши общая тема или полное отсутствие таковой. Но в целом - красиво, приятно, и хочется посмотреть еще раз.

А теперь смотрим ЭТО:

Glitch by Kewlers

ftp://ftp.scene.org/pub/parties/2003/st ... l_itch.zip

X-Mix 2004 by MFX Kewlers

http://www.pouet.net/prod.php?which=12028

Typo Graphics by Kewlers

ftp://ftp.scene.org/pub/parties/2004/sc ... ewlers.zip

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

Тем не менее, постараюсь хоть как-то структурировать варианты графики в демах (я имею в виду только PC). Не уверен, что получится, но попробовать стоит ;) Итак...

- 256 байт – оценивается только умение кодера впихнуть в такой размер что-либо. Возможны два варианта:

1 МНОГО маленьких, простеньких и однотипных эффектов;
2 один, но сложный. Может быть псевдо-3D.

- 512 байт демо – оценивается то же самое. Варианты, в принципе, те же, но в такое пространство добавляется возможность впихнуть 3D-сценку. А 3D-движок с Z-буффером в 512 байт – это, знаете ли, впечатляет само по себе, невзирая на отвратную картинку :).

- 4 Кб демо – ну, тут уже посвободнее. 3D-движок, интересные текстуры, музыка, появляется место для дизайнера, но кодер по-прежнему остается центральной фигурой. Основываются такие демы на реализованых в движке эффектах. Правда, в 4 Кб особо не разгуляешься, и часто эти демы представляют собой 2-3 сценки на OpenGL-движке с простенькими текстурками и объектами из примитивов (шарики, кубики, бублики). Но техническая мысль не стоит на месте, и сейчас можно увидеть мощные вещи типа SQUISH4k.

- 64 Кб демо. Вооооо! Для многих увлеченных демосценой людей это волшебное число является самым интересным. Почему? Да потому что я даже не представляю, как можно впихнуть в 64 килобайта квартет из четырех обезьянок, играющих на разных реалистично звучащих музыкальных инструментах, на фоне динамично изменяющегося пейзажа со скалами и джунглями! Полет фантазии дизайнера ограничен чисто символически – нельзя использовать рисованную 2D-графику (растровые картинки занимают много драгоценного места). Дизайн и графика… Да, их нельзя загнать в рамки! Поэтому демы даже на одном демотулзе (программное обеспечение, созданное демосценерами для демосценеров, с помощью которого можно создать демо, вписывающееся в 64 Кб) получаются абсолютно непохожими друг на друга! Такого полета фантазии сейчас не встретишь даже в мегадемо…

Посмотри на это разнообразие!

From Dusk til Dawn by Fairlight

ftp://ftp.scene.org/pub/parties/2004/re ... l_dawn.zip

Zoom3 by AND Cybermag

http://www.pouet.net/prod.php?which=10454

Candytron (FR30) by Farbrausch

http://www.pouet.net/prod.php?which=9424

Welcome to by Farbrausch

http://www.pouet.net/prod.php?which=8696

Binary Flow by Conspiracy

http://www.conspiracy.hu/dl.php3?prod=13

Beyond by Conspiracy

http://conspiracy.intro.hu/releases/cns!bydf.zip

Мегадемо – вершина айсберга. Здесь продемонстрировать свои способности могут и старожилы демосцены, и новички. Это очень удобный формат для начинающих демосценеров, так как не надо заморачиваться с оптимизацией по размеру, нет необходимости мучить ни кодера, ни моделлера, ни музыканта. Все делают, что хотят и умеют делать. Представь ситуацию: ты впервые в жизни решил сделать ДЕМУ. Ты умеешь, допустим, кодить. А твой друг, например, умеет рисовать мышкой кракозябры в фотошопе. А некий знакомый по инету пишет музыку в трекерах и с удовольствием предоставит вам пару композиций на выбор. Перед получившейся командой встает нелегкий выбор:

1 НАПИСАТЬ ДВИЖОК НА ЧИСТОМ АССЕМБЛЕРЕ, НАПИСАТЬ ГЕНЕРАТОР ТЕКСТУР, НАПИСАТЬ ИНСТРУМЕНТ ДЛЯ МОДЕЛЛЕРА (ЭДАКИЙ СВОЙ МИНИ-3DМАКС), СДЕЛАТЬ ЗВУКОВОЙ СИНТЕЗАТОР (КИЛОБАЙТ НА 20 МАКСИМУМ), ЗАСТАВИТЬ МУЗЫКАНТА ПЕРЕПИСАТЬ КОМПОЗИЦИЮ ПОД НАШ СИНТЕЗАТОР (ВСЕ ПЕРЕЧИСЛЕННОЕ - РУЧКАМИ), УПРОСИТЬ ХУДОЖНИКА ЗАБИТЬ НА ЖЕЛАНИЕ НАРИСОВАТЬ ЧТО-ЛИБО, ИЗУЧИТЬ ВМЕСТО ЭТОГО АБСОЛЮТНО НЕЦЕНЗУРНЫЙ 3D-МОДЕЛИРУЮЩИЙ СОФТ И ЗАДИЗАЙНИТЬ МИНИ-ДЕМО В ЖУТКО ОГРАНИЧЕННЫХ УСЛОВИЯХ ДЛЯ 64 КБ КОНКУРСА.

2 ПРОСТО ДЕЛАТЬ ТО, ЧТО НРАВИТСЯ, НЕ ОГРАНИЧИВАЯ СЕБЯ В РЕСУРСАХ. СОБРАТЬСЯ ВСЕМ ВМЕСТЕ И СШИТЬ ОБЩИЕ НАРАБОТКИ В ОДНУ МЕГАДЕМУ.
Выбор очевиден!

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

Могу лишь отметить из ряда вон выходящие мегадемо групп Kewlers и MFX. Их творчество невозможно спутать ни с чем (несмотря на наличие кучи подражателей).

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

Aether by MFX

ftp://ftp.scene.org/pub/parties/2005/br ... x_athr.zip

Pornonoise by MFX

http://www.pouet.net/prod.php?which=9467

Deepness in the Sky by MFX

ftp://ftp.scene.org/pub/parties/2002/so ... fx_dis.zip

Variform by Kewlers

ftp://ftp.scene.org/pub/parties/2002/as ... ewlers.zip

Protozoa by Kewlers

ftp://ftp.scene.org/pub/parties/2003/br ... l_prtz.zip

A Significant Deformation Near The Cranium by Kewlers

ftp://ftp.scene.org/pub/parties/2003/assembly03/demo/a_ significant_deformation_near_the_cranium_by_kewlers.zip

X-Mix 2004 by MFX Kewlers

http://www.pouet.net/prod.php?which=12028

Как они это делают?! Может быть, просто совместить 2D и 3D? Берем идею, рисуем под нее 3D-модельки и 2D-фоны, комбинируем движком в стильную плавно переливающуюся симфонию свободной мысли и... Получаем что-то типа дем Houjobb`ов :).

MicroStrange by Haujobb

Elements by Haujobb

We are by Haujobb

http://www.pouet.net/prod.php?which=8281

Strange Feelings by Haujobb

Это я написал не к тому, что Хауджоббы лучше всех, а к тому, что их команда стабильно создавала уникальные атмосферные произведения из года в год. В чем их секрет, я тоже не знаю :(, но факт остается фактом - ребята работали не щадя своего времени и сил, добивались именно того результата, который был задуман дизайнером. А все почему? Потому что талантливый народ был? Да! Но ведь и сейчас встречаются таланты? Так в чем же дело? А дело в правильном распределении задач между членами команды и в наличии этих самых членов в достаточном количестве. Посмотрим на количество мемберов у тех же Haujobb (>40), tAAt(>20), ByteRapers(>30), TBL(>30), Razor 1911 (вообще немеренно). Пара 2D-художников, 2-3 3D-моделлера, кодер на 2D-эффекты, пара кодеров на 3D, музыканты на выбор... Нет проблем! Не нужно разрываться! Каждый занимается тем, что ему по душе. Поэтому и демы получаются душевные.

А на современные команды гляньте ;)!. Апогей – AND. Сам себе команда :).

Вот и получаются у них поделки либо с мощным движком и ограниченным дизайном, либо с интересным дизайном/идеями, но невразумительным исполнением кода. Отсюда и выкрики «Scene is dead» :(.

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

Также не стоит забывать, то чаще всего демка является продуктом коллективного творчества. А это значит, что финальный релиз часто получается неожиданным для большинства членов команды. Почему? Да очень просто! Кодер пишет те эффекты, которые ему хочется опробовать, художник рисует то, что у него лучше всего получается, а музыкант вообще не заморачивается и просто вываливает на стол кучу трэков из погреба. Роль дизайнера в таком случае исполняет коллективный разум (он же - «генератор бреда»).
ИЗ ИСТОРИИ СОЗДАНИЯ ДЕМЫ UNDERSPACE (CROLYX TEAM)

Звонит Xiod (кодер, музыкант).

«Приходите делать дему... А то дедлайн на Милленниум Демопати послезавтра – не успеем».

Не хочется, но надо... Ладно… Приходим с Cr0ck`Ом (мощный кодер). Настроение никакое. Идей – ноль. Ксиод начинает показывать движок... Кроку интересно – он программер. На мониторе - софтварный рендер в 512х384. Жуть. И это в 2001 году! Успокаивает то, что на пати наверняка будет плохо настроенный проектор не лучшего качества, который будет работать за хардварный антиальязинг. Ладно... Музыка. Хорошая, конечно, но настраивает на суицид: я его дисторшн не перевариваю. На выбор представлено несколько трэков, но от этого не легче.
Ладно... Сцены. Вот тут включается «коллективный разум»! Ксиод показывает, что уже накодил...
На экране кубик, все грани представляют собой вентиляторы (по идее), и «это» летит по небу.
Ксиод: Вот!
Линкс: Бред.
Крок: Ммм.. Фигня какая-то... А если лететь внутри кубика и смотреть через вращающиеся лопасти вниз?
Ксиод: Да! Будет клево!
Линкс: Бред.
Ксиод: #%@&**!
Линкс: Ну и ладно... (рассматриваю журнал с картинками).
Ксиод: Сделай лучше!
Крок: Ну, можно сделать ВолумЛайт через вращающиеся лопасти...
Линкс: Дурка.
Ксиод: %@#%*!!
Линкс (глядя в журнал с картинками): Стоунхэндж лучше вашего кубика.
Ксиод: Сделай, $%@@ %»&#!!
Линкс: Лана...

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

Дема должна быть еще и флагманом IT-прогресса… Девиз «Выдавить максимум эффектной красоты из железа» является основополагающим на просторах демосцены. И это, конечно, здорово! Ведь юзеры-зрители по всему миру получают возможность воочию убедиться в мощном потенциале и полезности своих компов для мирового искусства, проникаются чувствами, идеями, стремлениями… Разве это не здорово?

Обратная сторона медали погони за «технологичностью» демки – слабеющая с каждым годом креативная составляющая. Тема, идея, сюжет - кому это интересно, если можно рендирить в риалтайме бублики на 500 тысяч полигонов каждый, с бампами, преломлениями, реальными отражениями, натуральной физикой столкновений, да еще и на фоне трех миллионов травинок с бликами и флариками? Все и так будут в восторге… Особенно обладатели видюх за $600, на которых все это «творчество» будет выдавать 11fps. Прогресс :).
Заключение

Я думаю, что в результате все будет хорошо :). Вот наиграются кодеры новыми GPU, напишут удобные и понятные тулзы, и явятся из тени на свет молодые и талантливые художники-дизайнеры, которым глубоко наплевать на извраты программеров. И будет править новый девиз - «Максимум креатива, новизны, чувственности!». Ну а кодеры будут только поддакивать, расширять возможности тулзов и гонять за пивом… :).


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 17, 2007 10:18 am 
Не в сети
док

Зарегистрирован: Вт сен 18, 2007 9:16 am
Сообщений: 162
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
В догонку - http://democoder.ru/ тоже есть что посмотреть и почитать

_________________
Люди!! Уважайте друг друга!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 03, 2011 9:19 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Ср фев 02, 2011 10:44 am
Сообщений: 382
Откуда: :адуктО
Благодарил (а): 6 раз.
Поблагодарили: 1 раз.
Пункты репутации: 0
Кульно! Посмотрел несколько демок - впечатлён, как это всовывается в 68Кб?
А есть ли примеры на пурике?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 03, 2011 10:22 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11108
Благодарил (а): 4 раз.
Поблагодарили: 395 раз.
На пурике можно написать демку, которая будет иметь крошечный размер, но это этого нужно напрямую работать с DirectX или OpenGL.

Вот это посмотри http://purebasic.info/phpBB2/viewtopic.php?t=1249

Ну и еще несколько во вложениях.


Вложения:
pbtest2.rar [12.6 KiB]
Скачиваний: 292
itcanbe.rar [86.65 KiB]
Скачиваний: 278

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт май 03, 2011 10:41 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн сен 07, 2009 10:00 pm
Сообщений: 1046
Откуда: Николаев
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Попадает в разряд ДЕМКА ?
исходник :


Вложения:
GLSceneBlur.rar [187.99 KiB]
Скачиваний: 276
galax.rar [45.73 KiB]
Скачиваний: 293

_________________
www.mirashic.narod.ru
Первое знакомство с PB
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB