Использование двухлучевой функции отражательной способности (ДФОС) для моделирования освещения.

Авторы: 
Алексей Игнатенко
Исторически все модели материалов поверхностей, используемые в компьютерной графике, были ограничены вычислительной мощностью компьютеров. И в наши дни простые модели (например, Фонга) остаются весьма популярными, несмотря на физическую неточность,. Однако, настоящий фотореализм требует использования более сложных и развитых моделей отражения. Широкий класс материалов поверхностей описывается так называемой ДФОС - Двухлучевой Функцией Отражательной Способности (BRDF - Bi-directional Reflection Distribution Function). В статье даются определение и свойства ДФОС, а также приводится вывод модели Фонга из общей формулы освещенности.

1. Введение

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

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

brdf_overview00.png
Рисунок 1. Взаимодействие света с материалом

Когда свет контактирует с поверхностью, могут произойти три главных типа взаимодействий: отражение, преломление и поглощение. Т.е. часть падающего излучения отражается, часть пропускается, а оставшаяся часть поглощается самой поверхностью. Свет – вид энергии, следовательно, по закону сохранения энергии:

brdf_overview01.png

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

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

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

brdf_overview02.png

brdf_overview03.png

Рисунок 2 Зависимость положение блика от положения наблюдателя

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

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

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

brdf_overview04.png

где

− λ определяет длину волны;

− θi, φi, определяют направление падающего света (входное направление) в локальных полярных координатах относительно точки взаимодействия света и материала;

− θo, φo задают выходное направление в полярных координатах;

− θu, v – параметрическое задание положения точки на поверхности.

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

Более того, хотя ДФОС – это функция от положения, иногда позиционные изменения не включают функцию. Вместо этого обычно она записывается только как функция от входного направления луча, выходного направления, и длины волны:

brdf_overview05.png

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

Также обычно удобно опустить индекс λ для упрощения записи. Но необходимо помнить, что ДФОС зависит от длины волны или цветового канала. На практике это значит, что значения ДФОС (например, в терминах пространства RGB) должны быть определены отдельно для каждого канала (т.е. R,G и B отдельно). В этом случае позиционно-инвариантная ДФОС с ассоциированным цветовым каналом может быть рассмотрена как функция двух углов, т.е. четырех переменных. Если сгруппировать RGB-компоненты, то ДФОС становится трехмерной вектор-функцией.

Дифференциальные телесные углы

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

Свет измеряется в терминах потока через поверхность. Единица измерения – ватт на квадратный метр (т.е. количество энергии, приходящейся на поверхность единичной площади). Это значит, что нет смысла говорить о количестве света приходящего с одного направления, - более правильно говорить о свете, приходящем с небольшого пучка направлений.

brdf_overview06.png

Рисунок 3 Свет измеряется в терминах потока энергии через площадь, поэтому необходимо рассматривать не одно направление, а несколько близких направлений падающего света.

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

brdf_overview07.png
Рисунок 4 Единичная сфера с примером дифференциального телесного угла

Для данного направления (θ,φ) в сферических координатах и угловых дифференциалах dθ, dφ, дифференциальный телесный угол выводится следующим образом:

brdf_overview08.png

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

3. Определение ДФОС

Дадим более четкое определение ДФОС, пользуясь понятием дифференциального телесного угла. Предположим, даны направление падающего света wi и направление исходящего отраженного света wo, которые заданы относительно малого участка поверхности объекта. Двухлучевая функции отражательной способности определяется как отношение количества энергии (света), отраженной в направлении wo к количеству энергии, попавшей на поверхность с направления wi. Пусть количество энергии отраженной в направлении wo равно Lo, а количество энергии, пришедшей с направления wi равно Ei. Тогда ДФОС равна:

brdf_overview09.png.

brdf_overview10.png
Рисунок 5 Единичная сфера с примером дифференциального телесного угла

Рассмотрим рисунок 5. На нем показан малый элемент поверхности, освещенный точечным источником света. Количество света, приходящего с направления wi, задается энергией, попадающей на участок, определяемый дифференциальным телесным углом. Пусть источник света имеет мощность Li . Поскольку дифференциальный телесный угол мал, это по существу плоский участок на полусфере. Следовательно, можно считать, что участок освещен равномерно. Полное количество падающего света равно brdf_overview11.png. Для определения количества света, попадающего на поверхность (напомним, полученное значение определяет поток света через малый участок на поверхности единичной полусферы), необходимо "спроецировать" участок полусферы на поверхность. Это делается с помощью умножения на brdf_overview12.png, где N – нормаль к поверхности в данной точке. Значит, brdf_overview13.png.

Таким образом, ДФОС задается следующим выражением:

brdf_overview14.png.

Обратите внимание – значения ДФОС не ограничены отрезком [0,1].

brdf_overview15.pngbrdf_overview16.jpg
Рисунок 6. Пример ДФОС (проекция на плоскость) в общем случае при заданном освещении и пример модели со сложной ДФОС.

Классы и свойства ДФОС

ДФОС можно разбить на два класса: изотропные ДФОС и анизотропные ДФОС.

Понятие изотропный используется для ДФОС, которые описывают отражательные свойства, инвариантные по отношению к повороту вокруг вектора нормали поверхности. Рассмотрим малый гладкий элемент поверхности и зафиксируем положение наблюдателя и источники света. Если вращать поверхность вокруг ее нормали, значение ДФОС (и, следовательно, отражение в данном направлении) будет оставаться неизменным. Материалы с такими свойствами (например, пластик) имеют изотропные ДФОС.

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

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

brdf_overview17.png

Рисунок 7 Принцип обратимости

Принцип обратимости говорит, что если направление света инвертируется, значение ДФОС остается неизменным. Т.е. если входящие и исходящие направления меняется местами, ДФОС не меняется:

brdf_overview18.png.
brdf_overview19.png
Рисунок 8 Принцип сохранения энергии

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

brdf_overview20.png.

Если рассматривается непрерывный случай, сумма заменяется на интеграл по полусфере:

brdf_overview21.png.

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

Идеально диффузная поверхность отражает излучение одинаково всех направлениях, т.е. поверхность имеет одну яркость для всех наблюдателей. Однако, количество излучаемой энергии может меняться как функция от входящего угла (brdf_overview22.png). Таким образом, диффузная ДФОС независима от исходящего направления:

brdf_overview23.png
brdf_overview24.pngbrdf_overview25.png
Рисунок 9 Диффузная ДФОС

Идеально зеркальное отражение отражает энергию в одном – зеркальном – направлении. Угол, который, направление отражения энергии составляет с нормалью к поверхности равен углу, под которым энергия падает на поверхность, при условии, что исходящие и падающий лучи находятся в одной плоскости. Таким образом, идеально зеркальная ДФОС также зависит только от входящего угла:

brdf_overview26.png
brdf_overview27.pngbrdf_overview28.png
Рисунок 10 Зеркальная ДФОС

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

brdf_overview29.png

Мы вернемся различным типам ДФОС в пункте 6.

5. Интегральная формула освещенности

Зная определение ДФОС, можно определить общее уравнение освещенности, которое и показывает, как ДФОС используется для вычисления освещенности в данной точке.

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

Количество света, отраженного по направлению wo - функция всего входящего света и ДФОС в данной точке поверхности. Более точно, отраженный свет – это сумма энергии, отраженной в данном направлении со всех входящих направлений. Т.е., количество исходящей световой энергии дается следующим выражением:

brdf_overview30.png

где Lo due to i(wi,wo) – это количество световой энергии, пришедшей с направления wi и отраженной в направлении wo .

Заметим, что Lo due to i(wi,wo) может быть выражено в терминах ДФОС:

brdf_overview31.png

где Ei - количество света приходящего с направления wi. Осталось выразить Ei через интенсивность света с данного направления. Получаем: brdf_overview13.png. (интенсивность умножить на дифференциальный телесный угол и спроецировать на элемент поверхности)

Следовательно:

brdf_overview32.png.

Далее получаем:

brdf_overview33.png.

Для непрерывного случая:

brdf_overview34.png

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

Например, предположим, что нужно определить освещение сцены, содержащей N источников света: от 1 до N. В этом случае, локальное освещение дается формулой

brdf_overview35.png.

где Lij – интенсивность j-го источника света and wij = (θijij) направление на j-й источник.

6. Разложение интегральной формулы освещения

Рассмотрим, из чего складывается освещенность точки поверхности. Как говорилось выше, в реальном мире все окружение некоторой поверхности вносит вклад в освещение каждой ее точки. В интерактивной компьютерной графике как правило сложно учесть влияние всего окружения, поэтому ДФОС часто упрощается, и приводится к некоторым простым теоретическим моделям, например, модели Фонга.

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

Во-первых, точка может освещена первичным (прямым) освещением. В этом случае "свечение" точки есть просто отражение источника света. С другой стороны, на поверхность падает свет от других объектов – они могут отражать или преломлять световые лучи. Такое освещение называется вторичным или непрямым.

Таким образом, световое излучение, приходящее в точку поверхности, равно:

brdf_overview36.png

где brdf_overview37.png - первичное, а brdf_overview38.png - вторичное освещение

Формула освещенности тогда записывается следующим образом:

brdf_overview39.png

Для дальнейшего разложения воспользуемся разложением ДФОС на диффузную и зеркальную (см. п.4.). Получим:

brdf_overview40.png

Таким образом, излучение, видимое наблюдателем, складывается из следующих компонент:

  • Первичное диффузное отражение
  • Первичное зеркальное отражение
  • Вторичное диффузное отражение
  • Вторичное зеркальное отражение

Различные алгоритмы расчета освещения (модели отражения – lighting models) учитывают те или иные компоненты. Как правило, наиболее сложным для расчета является вторичное освещение. На данный момент мощности компьютеров не хватает для интерактивного расчета вторичного освещения.

7. Формула освещенности Фонга

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

brdf_overview41.png

где

  • L – направление на источник света;
  • V – направление на наблюдателя
  • N – нормаль к поверхности;
  • R – направление отражения.
  • kd и ks – т.н. диффузный и зеркальный коэффициенты, используетюся для управления вкладом диффузного и зеркального отражения ;
  • n – коэффициент для изменения ширины зеркального блика

Модель Фонга – локальная, т.е. она не учитывает вторичного освещения. Поэтому часто в нее включают коэффициент, отвечающий за фоновое (ambient) освещение для аппроксимации вторичного освещения. Без ограничений общности, мы не будем рассматривать этот коэффициент.

Обозначим выражение в скобках через Refl(L,V), получим:

brdf_overview42.png

L и V соответствуют входящему направлению wi и, соответственно, исходящему направлению wo в терминологии ДФОС. Перепишем выражение следующим образом:

brdf_overview43.png
brdf_overview44.png
brdf_overview45.png
brdf_overview46.png

Это выражение имеет вид подынтегральной функции в общей формуле освещения для точечного источника света. Если рассматривать первый множитель как ДФОС, тогда модель освещения Фонга становится частным случаем общей модели освещения.

brdf_overview47.png

brdf_overview48.png

Необходимо сделать несколько замечаний

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

В следующих выпусках журнала мы рассмотрим представления ДФОС и вопросы применения ДФОС для интерактивной визуализации.

Дополнительная литература

  1. M.Watt. Advanced Animation and Rendering Techniques
  2. S. Rusinkiewicz, A Survey of BRDF Representation for Computer Graphics. 1997. (http://library.graphicon.ru/paper/574)
  3. C. Wynn, An Introduction to BRDF-Based Lighting. 2000. (http://library.graphicon.ru/paper/573)
  4. Interactive Display of Global Illumination Solutions for Non-diffuse Environments: A survey, 2001 (http://library.graphicon.ru/paper/580)
  5. James D. Foley, Andries van Dam, Steven K. Feiner, and John F. Hughes. Computer Graphics: Principles and Practice. Addison-Wesley, second edition, 1990.

Дополнительная информация
Ссылка: 
Алексей Игнатенко. Использование двухлучевой функции отражательной способности (ДФОС) для моделирования освещения.. Компьютерная графика и мультимедиа. Выпуск №1(4)/2003. http://cgm.computergraphics.ru/content/view/45
Выпуск: 
Выпуск №1(4)/2003

Комментарии

Статья на троечку

Вы уважаемый Алексей Игнатенко вместе с Андреем Адинец вообще в светотехнике ничего не понимете! Зачем писать о каких - то интегральных вычислениях освещенности (что я в пинципе не отрицаю как "исторический факт"), когда освещенность можно вычислить элементароно при помощи формулы Виннера. А о вашем псевдонаучном сленге написания статей я уже вообще молчу. Вы прежде чем копировать материалы зарубежных авторов ознакомились бы с родной советской литературой, раскрывающей сущности проблемы. Ладно так и быть дам вам материальчик, только его в интернете нет, придется в библиотечку сбегать! Сапожников Р.А. "Теоретическая фотометрия", Мешков "Основы светотехники". Да и фигню такого рода больше не пишите пожалйста, не морочте голову читателям.

Уважаемый Сергей, комментарий ваш порадовал :) Нет, статья не блестящая, бесспорно -- я ее писал еще будучи студентом. Однако комментарий в стиле "освещенность можно вычислить элементароно" не может вызывать ничего, кроме улыбки и сочувствия. Я думаю, люди, много лет занимающиеся фотореалистичным синтезом, тоже порадуются вашей удивительной наивности вкупе с наглостью комментария. Рекомендую ознакомиться с современным состоянием дел в области.

P.S. Ваш комментарий к статье Адинца я стер -- слишком много "наездов", такое нельзя публиковать. Этот тоже "на волоске", но все же оставлю, очень нравится выражение "псевдонаучный сленг", а также "родная советская литература, раскрывающая сущностью проблемы". Жаль, что не упомянули прогнившее буржуазное общество, подмеяющее решения подлинно научных проблем поиском новых способов угнетения рабочего класса.

Зачем стер комментарий?

Здравствуйте Алексей! Зачем стираете мои комментарии...разве я не прав по поводу статьи Адинца? Может конечно я и загнул с наездами, да просто надоело... никто еще нормальной теоретической статьи, чтобы взять, применить и радоваться не написал. Я имею в виду в данной области. Согласитесь с тем, что в его статье приведены просто ужасные иллюстрации. Можно же было посидеть и подождать окончания рендеринга, так нет, надо поставить самые низкие параметры и выдать фигню! И нате Вам радуйтесь, вот какой хороший метод Монтекарло. Кстати если бы на вашем сайте можно было прикладывать файлы, я бы Вам приложил парочку другую. Посмотрели, как это все делается нормальными учеными. А что касается освещенности, то тут уж ничего не поделаешь... я так понял Вы сами то в этой области не ахти...в журналах по компьютерной графике ВАК я Вас не встречал (может, скажите в каком печатались) и признаете только те исследования которые вычитали из зарубежных журналов. Вы справочник по Светотехнике новый за 2006 г. читали под ред. Айзенберга? Советую !!! Раздел "Компьютерные методы расчета естественного освещения". Там Все и найдете!. Это будет действительно для Вас открытие. А что касается расчетов рассмотренных в Вашей статье, то да действительно все правильно, только для каких нибудь архитекторов или строителей, которым не важно как - главное показать в срок. А потом данные методы слишком просты для вычисления на компьютерах, так как они все приближенные. Вы попробуйте для обычной комнаты посчитать интегральным уравнением, а потом посчитать ну скажем одним из Ваших методов и, к примеру, сравнить графики КЕО (коэффициента естественной освещенности) Вот у Вас глаза то на мир откроются :).

Ваш комментарий крайне показателен -- современная российская наука, следуя традициям советской школы, варится в своем соку, не общая внимания на то, что происходит в мире, а также на свое место в нем. А в области IT это место крайне низко находится и падает ниже и ниже (за другие области не скажу, хотя терзают сомнения, что не лучше). Уровень ученого - это количество публикаций на уважаемых международных конференциях, таких как SIGGRAPH, Eurographics, а не в российских журналах ВАК (кстати, перечислите, пожалуйста, российские журналы по компьютерной графике ВАК). К счастью, сейчас есть люди, которые это понимают, что позволяет надеяться на подъем IT-науки в стране (особенно при должном финансировании).

Подход типа "взять теорию и применить" часто просто наивен - на практике люди защищают диссертации на тему, как применить теорию к реальным задачам.

Что касается справочника по светотехники - нет, 2006-го года не читал, хотя издание 1983г. у меня есть. Буду очень рад, если в новом издании даны ответы на все вопросы :)

А по поводу "открывания глаз на мир" и "нормальными учеными" тут даже нечего комментировать. Если считаете себя нормальным ученым, дайте ссылки на свежие публикации, статьи и т.п. Нет в интернете? Почитайте, для любопытства статью Горбунова-Посадова "Интернет-активность
как обязанность ученого" http://www.keldysh.ru/gorbunov/duty.htm

И еще: далее ни один комментарий в подобном неуважительном стиле я отвечать не буду. И буду стирать, т.к. не соответствуют уровню этого журнала.

"История пастью гроба"

Я не думаю, что надо удалять комментарии, если в них нет порно и нецензурщины. Может даже стоит восстановить, Адинцу тоже будет интересно. Человек сам себя позиционирует, каждый сам оценит "кто есть кто". Для Сергея -- "если ты сердишься -- значит, неправ."

А всякие претензии к машинной графике мы неоднократно проходили. Были, в свое время, в инженерных ВУЗах такие дисциплины, как начертательная геометрия и черчение. Слышал я неоднократно, что МГ не дает ничего нового по сравнению с ними. Что все это уже сделал Гаспар МОНЖ (1746-1818) и еще знаменитый зав. кафедрой из МАИ (не помню его фамилию). Даже название дисциплины в ВУЗах изменили: называют "инженерной графикой" или "прикладной графикой". Но хрен редьки не слаще. Правда, теперь изучают AutoCAD. И то хорошо.

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

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

Восстановил комментарий
http://cgm.graphicon.ru/content/view/50/61/

Зря восcтановили комментарий :)

Прошу прощения, но я, наверное, слегка погорячился. Посмотрел и прочитал Ваши напутствия Алексей про статью http://www.keldysh.ru/gorbunov/duty.htm. Можно конечно и поспорить, но думаю не стоит, а то вообще забьете до смерти :).

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Тест предназначен для отсеивания спама
Fill in the blank