Просмотр полной версии : УРОК: Экспорт из Вегаса в Tga с прозрачностью, или Зверёк по имени Альфа
Beast2537
03.06.2008, 11:44
Сегодняшний урок родился в суматошной попытке быстренько слепить анимированный баннер, которые наше местное ТВ показывает «сверху» сигнала «головного» федерального канала при помощи специальной программы DigiTV (http://www.TVServer.ru)екатеринбургских разработчиков.
Сия программа умеет выводить в виде баннеров статичные и анимированные изображения трёх форматов: BMP, GIF и TGA.
Для статичной картинки, собственно, глубоко всё равно, что использовать.
Но мы-то с тобой, вдумчивый читатель, не довольствуемся статикой (мы ж работаем с видео!), более того, нам ещё и не просто прямоугольник подавай, но и прозрачностью хотим побаловаться, типа «прилёт» баннера и «улёт» его из/в небытие.
Что мы имеем в этом плане, учитывая возможности проги, выводящей всё это в эфир: BMP как самый заскорузлый формат не имеет понятия о том, что такое альфа-канал вовсе. GIF отлично подходит для анимации, однако его понятия об альфе довольно примитивны, читай, однобитны: либо она включена на 100% (полная прозрачность, бит alpha выставлен в 1), либо она выключена на 100% (полная непрозрачность, бит alpha выставлен в 0). Остаётся наш горячо любимый Targa. Отличный формат, первоначально был создан компанией Truevision Inc. для графических адаптеров собственного производства ещё в 1984 году, но в дальнейшем стал популярен на самых разных платформах, особенно в области обработки видео, анимации. (Wiki: Truevision Targa (http://en.wikipedia.org/wiki/Truevision_TGA)) Формат поддерживает глубину цвета 1—32 бита на пиксель. Есть поддержка альфа-каналов, сжатия RLE.
Так вот, всё бы это ничего. Даже собрать секвенцию из последовательных кадров в формате TGA эта эфирная программа может. Есть одно большое НО.
Наш с тобой, влюблённый читатель, Вегас не умеет экспортировать секвенции в TGA. Всё что нам предлагает тётя Сони — JPG и PNG.
Что ж, PNG тоже формат, поддерживающий 8-битный альфа-канал, и, кажется, всё в порядке, делов-то переконвертировать PNG в TGA! Не тут-то было, торопливый читатель! Здесь мы с тобой столкнёмся с двумя моментами.
1) Альфа-каналов в Тарге может быть несколько! При этом, это не альфа-каналы как таковые, а просто дополнительные каналы, которые могут быть использованы как угодно, вплоть до отображения конечному пользователю. В этом и загвоздка. Прямой экспорт из PNG в TGA не даст прозрачности. Нужно СДЕЛАТЬ дополнительный к трём имеющимся R, G и B каналам ещё один, называемый Alpha 1.
2) Оказывается, существуют разные понятия о том, что такое Alpha Channel, или, образно говоря, разные породы хитрого и юркого зверька Альфы.
Beast2537
03.06.2008, 11:47
http://i049.radikal.ru/0806/c8/071f968593ce.jpg
Чтобы не размусоливать, мой нетерпеливый читатель, мы с тобой бегло рассмотрим два совершенно никчёмных режима: None и Undefined. Эти породы, часто встречающиеся в дикой природе, почти неотличимы друг от друга. Собственно порода None вообще не обладает какими-либо возможностями по сокрытию частей своего тельца — этот режим говорит Вегасу, что альфа-канала в данном файле НЕТ, либо он есть, но полностью непрозрачен. Режим используется в случаях, когда файл по своей природе обязан содержать альфа-канал, и его содержит (например *.PSD), но использовать нам его не надо и Вегас пропускает вообще обработку альфа-канала при композитинге. Зверёк породы Undefined ещё более прост — режим говорит Вегасу, что альфа-канала нету точно.
Разобравшись с простейшими видами Альфы, перейдём к более непонятным и малоизученным некоторыми вегасоводами породам зверька, окунувшись в этот пёстрый мир прозрачностей.
Порода Straight (произн. стрэйт, от англ. прямой, чистый). Это как раз та порода Альфы, к которой мы больше всего привыкли и чаще всего именно эта порода зверька представляется нам в уме, когда мы говорим о прозрачности. Сий режим используется для определения прозрачности в многослойных редакторах растровой графики, самым важным из которых для нас является фотошоп. Все файлы, созданные в фотошопе обладают именно чистой прозрачностью, что, собственно, Вегас в 99% случаев и определяет, подставляя для *.PSD файлов тип прозрачности Straight. Забегая вперёд, скажу, что чистый он потому, что не имеет маттинга. Эта порода зверька наименее агрессивна к вегасоводу, наиболее беспроблемна в разведении.
Но некоторые породы зверька несут на своём теле боевой раскрас. Раскрас этот специалисты-альфаводы называют маттингом.
Beast2537
03.06.2008, 11:53
Маттинг пришёл к нам из мира GIF. Его однобитный альфа-канал (включено/выключено) не всегда позволял эффективно рисовать прозрачные изображения в плане плавности перехода от непрозрачного к прозрачному. Тогда-то и выдумали маттинг. Считалось, что GIF будет всегда показываться на статичном, одноцветном тоне. Однородность фона позволила вносить в изображение градиент, постепенный переход от исходного изображения к цвету фона. Или применять эффект сглаживания краёв изображения, называемый Anti-aliasing. Смысл понятен на этих картинках:
Создание градиента:
http://i014.radikal.ru/0806/df/f480407cb031t.jpg (http://radikal.ru/F/i014.radikal.ru/0806/df/f480407cb031.jpg.html)
Маттинг в белое: предполагается, что картинка будет показана на белом фоне, выбираем белый маттинг и получаем градиент в белое (внизу окошко с получившейся палитрой GIF):
http://i040.radikal.ru/0806/9c/1dd7ffffbe48t.jpg (http://radikal.ru/F/i040.radikal.ru/0806/9c/1dd7ffffbe48.jpg.html)
Как это выглядит на белом фоне:
http://i015.radikal.ru/0806/7a/59703e3fc0cet.jpg (http://radikal.ru/F/i015.radikal.ru/0806/7a/59703e3fc0ce.jpg.html)
Теперь предположим, что фон у нас будет светлозелёный, указываем маттинг:
http://i023.radikal.ru/0806/aa/ef660354978dt.jpg (http://radikal.ru/F/i023.radikal.ru/0806/aa/ef660354978d.jpg.html)
Вот как выглядит это на светло-зелёном фоне:
http://i023.radikal.ru/0806/79/e695515a91e0t.jpg (http://radikal.ru/F/i023.radikal.ru/0806/79/e695515a91e0.jpg.html)
А вот как это выглядит, если маттинг выбран ошибочно (маттинг в светлозелёное, фон белый):
http://i049.radikal.ru/0806/42/2b405a0e07e3t.jpg (http://radikal.ru/F/i049.radikal.ru/0806/42/2b405a0e07e3.jpg.html)
Использование маттинга для сглаживания краёв букв:
http://i007.radikal.ru/0806/a7/9f623653163d.png
Маттинг в белое хорошо выглядит на белом, а вот на светлосиреневом - плохо.
Итак, узнав, что такое маттинг, посмотрим, как же применяют зверьки разных пород этот боевой раскрас в реальной жизни.
Beast2537
03.06.2008, 12:02
Порода Premultiplied (произн. премалтиплайед, здесь англ. предварительно окрашенный). Этот как раз самая часто встречаемая порода Альфы, и чащё всего её боевой раскрас — чисто чёрного цвета. Именно поэтому, выбрав в Вегасе Premultiplied, мы видим под списком чёрный по умолчанию прямоугольник Background color (цвет фона):
http://i014.radikal.ru/0806/9c/e4a88aa57b81.png
Конечно же, мы можем выбрать и иной цвет, в случае, если изображение подготавливалось под фон другого цвета.
Например, жутко любимые мною футажи Digital Juice все подготовлены под альфу, предварительно окрашенную в чёрный цвет. Посмотрим, что выйдет, если положить такой футаж на чистый белый цвет и выбрать режим альфы «Чистый» (Straight):
http://i015.radikal.ru/0806/df/d8bd712eb249t.jpg (http://radikal.ru/F/i015.radikal.ru/0806/df/d8bd712eb249.jpg.html)
Мда. Не очень-то выглядят фейерверки на белом фоне. Какой-то жуткий чёрный ореол. Вот он-то и является той самой боевой раскраской Альфы, обеспечивающей плавное сокрытие тельца зверька на определённом фоне. Надо бы выбрать другой режим, Premultiplied (black):
http://i010.radikal.ru/0806/19/512c232c4f43t.jpg (http://radikal.ru/F/i010.radikal.ru/0806/19/512c232c4f43.jpg.html)
Оп! Отлично! Всё выглядит так, как и нужно.
Пожалуйте тот же самый эффект на светло-синем фоне:
Straight:
http://i008.radikal.ru/0806/e3/ddc8e3c06435t.jpg (http://radikal.ru/F/i008.radikal.ru/0806/e3/ddc8e3c06435.jpg.html)
Premultiplied (black):
http://i041.radikal.ru/0806/2c/097a927dd624t.jpg (http://radikal.ru/F/i041.radikal.ru/0806/2c/097a927dd624.jpg.html)
Дался мне этот светло-синий фон??? Посмотри, читатель, внимательно сейчас на увеличенную часть получившегося композита:
http://i006.radikal.ru/0806/df/28a44d3b8fe0t.jpg (http://radikal.ru/F/i006.radikal.ru/0806/df/28a44d3b8fe0.png.html)
Видишь НУЖНЫЙ нам ореол? Светлый. Это же фейерверк, он светит! Причем ореол не просто типа «блюр», а старательно прорендеренный многоуважаемой компанией Digital Juice? То-то же!
Что же за порода Premultiplied (dirty)? Dirty (произн. дёти, от англ. грязный) — порода, получившаяся в результате скрещивания всякими умными дядьками двумерных изображений и программ 3D-анимации. Эти программы зачастую умеют рендерить альфа-канал в тех условиях, когда объект, "обрезаемый" вокруг альфой, расположен на неоднородном фоне. Например, отдельный (в понимании 3D-программы) объект «самолёт» на отдельном объекте «облака», при сгонке в двумерное изображение уже далеко не отдельные объекты, а просто часть пикселей изображения.
При построении чистого альфа-канала, мы будем в переходе от самолёта к прозрачности видеть что??? Прааально, полупрозрачный кусок неба с облаками. Нафига оно нам, спрашивается? И просто мультиплицированный канал альфы тоже не подойдёт — небо-то в облаках и неоднородного цвета.
Так и появилась новая порода зверька, которая позволяет ему скрывать своё тельце на неоднородных фонах, например, в глухих джунглях.
Официально говоря, грязно мультиплицированная альфа — случай, когда R, G и B каналы могут содержать значения большие, чем значение Альфы.
Мы будем в своей работе редко встречаться с этой породой зверька, но если вдруг тебе, усердный читатель, попадётся футаж с альфой на неоднородном фоне — не забудь испробовать этот режим, вдруг повезёт.
А теперь, познакомившись со всеми породами хитрого зверька Альфы, перейдём собственно к тому, ради чего этот урок был затеян.
Beast2537
03.06.2008, 12:15
Собственно, этим немудрёным делом занимается скрипт, поставляемый с Вегасом заботливой тётей Сони. Он, конечно, хорош, со своим делом вполне справляется, пока речь не заходит о разнообразии форматов статичных изображений и пород Альфы.
Давай, подуставший читатель, поглядим, как это выглядит на деле.
Вернёмся к моему проекту с баннером и я поведаю тебе, любимый читатель, его параметры.
Разрешение баннера – 220х105, 25 кадров в секунду, я ставлю прогрессив (хотя ТВ и чересстрочно, об этом позднее), всё остальное — как обычно.
Вот как на сегодня выглядит проект баннера в Вегасе:
Что нужно упомянуть:
1) у белого фона есть маска (её видно). Маска сглаженная (тут как раз работает 8-битный альфа-канал), и динамическая: в самом начале баннера, она делает так, что фон «прилетает» (увеличивается из центра), а в конце — «улетает».
2) Использован MD-элемент из DJ Editors Toolkit, летающие синие кубики, которые полупрозрачны и иногда даже «вылетают» за пределы белого фона.
3) Использован эффект NewBlue Zoom Blur, поскольку надписи тоже «прилетают» и «улетают», они смазываются этим фильтром, чтобы получить эффектное «выплывание» из-за камеры.
4) Поскольку надписи «прилетают» из-за камеры, они в некоторый момент перекрывают размеры фона, но при этом ещё и размазаны Zoom Blur и тоже полупрозрачны (как раз на скриншоте — этот момент).
Вот таковы моменты, которыми я решил выпендриться по сравнению со статичными картинками, показываемыми нашим ТВ для других рекламодателей, и эти моменты, собственно привели к созданию урока.
Что ж, поскольку Вегас может выгонять только в JPG и PNG, мы выбираем последний, только он имеет возможность запоминать альфа-канал.
Tools -> Scripting -> Render Image Sequence.
В появившемся окне внимательно:
Проставляем начало (00:00:00,00), конец (в моём случае 00:00:10,00), шаг рендеринга (каждый кадр – 00:00:00,01), каталог назначения и формат именования файла — по вкусу, тип файла — PNG:
http://i041.radikal.ru/0806/b0/4bf1cd00223ct.jpg (http://radikal.ru/F/i041.radikal.ru/0806/b0/4bf1cd00223c.png.html)
Вот что мы получаем на выходе:
http://i011.radikal.ru/0806/65/fc1060b92caet.jpg (http://radikal.ru/F/i011.radikal.ru/0806/65/fc1060b92cae.png.html)
Всё верно, 250 кадриков. Ура? Не очень.
Beast2537
03.06.2008, 12:19
Поглядим, как кадр выглядит в фотошопе, чтобы лучше было видно, я отключил шахматку, обозначающую прозрачные области:
http://i008.radikal.ru/0806/ee/09ee99f80f96t.jpg (http://radikal.ru/F/i008.radikal.ru/0806/ee/09ee99f80f96.png.html)
Какого… ???
Такого, мой недоумённый читатель, тут порылся зверь породы Alpha Premultiplied! В какой цвет? Да всё в тот же чёрный, вспоминай, что видно в окне вывода, когда на таймлайне пусто? Чёрный!
Что же, получается, у нас вся прозрачность с чёрным ореолом? Да! Это конец? Нет ещё.
У нас ведь есть фотошоп!
Умные дядьки в Адоб уже давным-давно ввели уникальнейший инструмент, который обычно у обработчиков статичного изображения всегда вызывал недоумение — что это такое и зачем оно надо?
А вот зачем!
Layer -> Matting -> Remove Black Matte:
http://i042.radikal.ru/0806/3c/904c4bd776f7t.jpg (http://radikal.ru/F/i042.radikal.ru/0806/3c/904c4bd776f7.png.html)
Всё! Никаких выделений, никаких мучений — ХЛОП! И маттинга нет. Спасибо, Адоб!
Вот что получилось (шахматку я назад включил, чтобы было видно переход к прозрачности):
http://i001.radikal.ru/0806/5a/80a6b80a6a84t.jpg (http://radikal.ru/F/i001.radikal.ru/0806/5a/80a6b80a6a84.png.html)
Ну… Клёво конечно, ты скажешь, просвещённый читатель, и что, 250 кадров так? А если 20 секунд — 500???
Да, отвечу я тебе, запасайся банкой кофе.
Beast2537
03.06.2008, 12:35
Потому что я сейчас раскрою ТАКОЙ секрет, который только по великим праздникам раскрывают в уроках по фотошопу, как самую главную тайну этой гипернавороченной проги. Сегодня мы с тобой, счастливый читатель, сделаем ЭКШН! :clapping:
Приготовься, пристегни ремни, мы начинаем записывать!
Actions в фотошопе — сродни скриптам. Ещё больше они похожи на макросы. Только навороченней. И самое главное достоинство Actions — это то, что их можно тупо записывать! Я не буду тебе, читатель, долго рассказывать про мощу, давай приступим.
Открывай любой файлик из нашей секвенции. Я люблю номер 17, там всё сразу присутствует.
Глядим в палитру Actions.
http://i015.radikal.ru/0806/dd/8901f489946et.jpg (http://radikal.ru/F/i015.radikal.ru/0806/dd/8901f489946e.png.html)
Нажимаем кнопочку «New» (Новый), листочек бумажки, обведена красным у меня,
Вводим название (можно и оставить по умолчанию, я же предпочитаю потом не путаться в Actions) и шлёпаем по кнопке «Record» (Записать).
http://i019.radikal.ru/0806/38/09aea54ae844t.jpg (http://radikal.ru/F/i019.radikal.ru/0806/38/09aea54ae844.png.html)
Обрати внимание, сконцентрированный читатель, что кнопочка запись нажалась и теперь красненькая — процесс записи пошёл.
http://i016.radikal.ru/0806/24/31c5fb070255t.jpg (http://radikal.ru/F/i016.radikal.ru/0806/24/31c5fb070255.png.html)
Теперь внимательно. Ошибок допускать не надо, и тыкать «не туда» тоже, ибо всё запишется.
1)Убираем чёрный маттинг. Layer -> Matting -> Remove Black Matte.
http://i006.radikal.ru/0806/31/3c95d8675d66t.jpg (http://radikal.ru/F/i006.radikal.ru/0806/31/3c95d8675d66.png.html)
2)Зажимаем CTRL. Подводим курсорчик к превьюшке слоя, курсорчик превращается в руку с квадратиком (обведено красным). Жмыкаем левой кнопкой мыши. CTRL отпускаем. Видим: на изображениии появилось выделение.
http://i033.radikal.ru/0806/c4/d025590b330dt.jpg (http://radikal.ru/F/i033.radikal.ru/0806/c4/d025590b330d.png.html)
3)Выбираем инструмент Лассо,
http://i002.radikal.ru/0806/80/ddd6697eaaa3t.jpg (http://radikal.ru/F/i002.radikal.ru/0806/80/ddd6697eaaa3.png.html)
жмыкаем правой кнопкой внутри выделения, выбираем Save Selection (Сохранить выделение). В появившемся окне вводим наименование канала Alpha 1. Остальные настройки проверяем, как на скриншоте
http://i043.radikal.ru/0806/95/44cb8a6900bdt.jpg (http://radikal.ru/F/i043.radikal.ru/0806/95/44cb8a6900bd.png.html)
4)Переключаемся в палитру Channels, проверяем что появился дополнительный канал с названием Alpha 1 и он содержит нашу маску.
http://i049.radikal.ru/0806/97/6159c20cb506t.jpg (http://radikal.ru/F/i049.radikal.ru/0806/97/6159c20cb506.png.html)
Beast2537
03.06.2008, 12:35
5)Сохраняем файл: File -> Save as…
http://i017.radikal.ru/0806/e6/a2bc6bb81aa9t.jpg (http://radikal.ru/F/i017.radikal.ru/0806/e6/a2bc6bb81aa9.png.html)
6)В выпавшем диалоге сохранения создаём подкаталог TGA, заходим в него, в списке форматов выбираем Targa (*.TGA….)
http://i007.radikal.ru/0806/75/c15e0164dd5dt.jpg (http://radikal.ru/F/i007.radikal.ru/0806/75/c15e0164dd5d.png.html)
7)В установках сохранения проверяем наличие галок: As a copy (может быть включена и недоступна к изменению), Alpha Channels должна быть включена. В диалоге сохранения жмём Save
http://i009.radikal.ru/0806/e7/ac28bd9084c9t.jpg (http://radikal.ru/F/i009.radikal.ru/0806/e7/ac28bd9084c9.png.html)
8)В выскочившем окошке опций Тарга обязательно ставим 32-bits/pixel и компрессию RLE отключить. Жмём ОК. :idea:
http://i015.radikal.ru/0806/d9/5e4e3952a0b2.png
9)Теперь экшн записан и магнитофон можно остановить — в палитре Actions нажимаем на СТОП.
http://i035.radikal.ru/0806/8e/22f23adceda8t.jpg (http://radikal.ru/F/i035.radikal.ru/0806/8e/22f23adceda8.png.html)
Посмотри, читатель, на список действий в последнем скриншоте: всё, что мы с тобой сейчас сотворили, превратилось в словесные описания! Шайтан! :laugh:
А теперь самое приятное! :good:
Beast2537
03.06.2008, 12:40
Всего делов-то. Умолчания: все нужные к обработке файлы свалены в одном каталоге. Жмём File -> Automate -> Batch…
http://i039.radikal.ru/0806/23/b0ea807e155ct.jpg (http://radikal.ru/F/i039.radikal.ru/0806/23/b0ea807e155c.png.html)
Получаем грандиозное окошко, в котором:
1) Выбрать нужный нам Action (помнишь, внимательный читатель, я предупреждал экшн называть как-нибудь понятно!)
2) С помощью кнопки Choose в рамке Source выбрать каталог ИЗ которого будут браться изображения для обработки.
3) Проверить отсутствие галки на Override Action “Open” command
4) В рамке Destination с помощью кнопки Choose выбрать каталог В который будут помещаться обработанные изображения (в нашем случае подкаталог TGA)
5) Проверить наличие галки на Override Action “Save as” command
6) Остальное можно оставить в покое.
7) Жмём кнопку ОК и идём курить или пить кофе, в зависимости от количества файлов, которое бедному фотошопу придётся обработать.
http://i012.radikal.ru/0806/97/5d8ba51f1472t.jpg (http://radikal.ru/F/i012.radikal.ru/0806/97/5d8ba51f1472.png.html)
После этих манипуляций на выходе в подкаталоге TGA получаем 250 TGA-шек, которые имеют альфа-канал и освобождены от чёрного маттинга! Яхууууу! :clapping: :good::victory:
Теперь, имея кучку файлов в каталоге можно преспокойно воткнуть их в прогу:
http://i031.radikal.ru/0806/ff/149e09295840t.jpg (http://radikal.ru/F/i031.radikal.ru/0806/ff/149e09295840.png.html)
http://i005.radikal.ru/0806/d9/0bff6ea5e90bt.jpg (http://radikal.ru/F/i005.radikal.ru/0806/d9/0bff6ea5e90b.png.html)
И сохранить в собственном формате DigiTV:
http://i044.radikal.ru/0806/a3/e7ed9037b4cbt.jpg (http://radikal.ru/F/i044.radikal.ru/0806/a3/e7ed9037b4cb.png.html)
http://i019.radikal.ru/0806/21/3cff059e118ct.jpg (http://radikal.ru/F/i019.radikal.ru/0806/21/3cff059e118c.png.html)
Дальнейшее нас уже не касается, все последующие манипуляции производятся соответственно мануалу на DigiTV.
Beast2537
03.06.2008, 12:42
Есть момент, о котором я обещал сказать позднее. Это об чересстрочности видео, и почему я в проекте сделал прогрессив. Потому что, игнорируя чересстрочность проекта, скрипт Вегаса выгоняет кадры в прогрессиве. Не очень хорошая привычка скрипта, но так уж есть. Для получения честных interlaced-кадров можно воспользоваться советом romamos, который предложил рендерить из Вегаса в несжатый AVI с альфа-каналом, а потом загнать этот AVI в QuickTimePro плеер и экспортировать оттуда в TGA-секвенцию. Так получаются кадры, сохраняющие интерлейсность, но и к этому сохраняется и premultiplied black alpha. Так что обработки в фотошопе последующей не избежать.
Второй аспект проблемы здесь — это неуверенность в том, что сам старт показа баннера «попадёт» в нужное поле. Поэтому я предпочитаю положиться на выводное оборудование, которое всё равно интерлейсит, и отдаю баннер в прогрессивном виде.
Вот таковы, уставший читатель, бодания с альфа-каналами и форматами файлов на сегодня. За сим позволь откланяться, ибо... работать надо!
koshovyj
09.09.2009, 12:52
класный урок. Добавлю по актуальности: 9-ый Вегас уже рендерит сиквении (при чем без скритов), в том числе и tif.
albert_kes
10.09.2009, 16:36
Ян, хороший урок:good::bravo:
Для Фотошопа 7 Адоб в своё время выпустил плагин для работы с TGA - открывает и сохраняет с альфаканалом. С CS4 работает без проблем, только что проверил
Взять можно здесь Targa plug-in (http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=1544&fileID=1478)
зеркало (http://narod.ru/disk/12998969000/targa.zip.html)
Ставится сюда: C:\Program Files\Adobe\Adobe Photoshop CS4\Plug-ins\File Formats
Прежде чем зяменять стандартный плагин, сохраните на всякий случай старый
romamos
10.09.2009, 21:01
:bravo::bravo::bravo: Браво, Ян!
Отличная работа! Предлагаю администрации срочно собрать все посты (с дополнениями) "в кучу" и - как отдельный урок на сайт. Если, конечно, автор не возражает.:pzl::chkl:
:offtopic:
Здрасть. Проснулись, увидели...
Этому уроку - больше года :big:
.
romamos
10.09.2009, 21:12
Тем более на сайт в "Уроки" пора.