Тег фонг cinema 4d что это
Фонг
Тег Сглаживание (Фонг) является встроенной Cinema 4D функцией, которая позволит вам получить при просчёте объекта, состоящего из 3-х и 4-х угольников, почти идеальную поверхность (Фонг затенение). Например, сфера, состоящая из сотен или больше поверхностей, и обычно имеющая грани, при активной установке Фонг , будет выглядеть как идеальная сфера.
Различия в качестве показа, можно различать только по граням сферы, так как силуэт не идеально математического объекта, останется, как и прежде гранённым.
Тег Сглаживание (Фонг) является подходящим средством, для экономии времени просчёта и памяти ПК. Так как обычным способом, вы должны были бы разбить круглый объект на несколько тысяч полигонов, пока он не будет выглядеть действительно круглым. Условием сглаживания является, что сталкивающиеся полигоны имеют общие точки.
Шейдинг требует так называемых нормалей вершин. Каждый полигон имеет свои собственные нормали вершин в каждой из его угловых точек. Без добавления тега фонг или нормалей эти нормали вершин изначально имеют ту же ориентацию, что и нормали полигонов. Угловые точки полигона, которые являются частью других смежных полигонов, имеют дополнительную нормаль вершины, в зависимости от количества соседних полигонов, как вы можете видеть на левой стороне изображения ниже:
Белые нормали вершин на изображении изначально указывают в направлении нормалей полигона (оставленных без тега Фонга). Для шейдинга нормаль (нормаль шейдинга), интерполированная между собственными вершинами нормали полигона, используется внутри полигона для вычисления яркости. Сразу становится очевидным, что будет создан жесткий край между обоими полигонами: у обеих нормалей вершин центральные точки которых сильно различаются, в результате произойдет скачок яркости, который в большинстве случаев нежелателен.
Как избежать этой разницы в яркости? Представьте, что ориентация обеих нормалей вершин будет выравниваться. В этом случае не произойдет скачка яркости на краю при интерполяции нормалей шейдинга.
Это именно то, что делает тег фонг. В зависимости от порогового значения (угла между двумя смежными полигонами) нормали вершин будут установлены на среднее значение смежных полигонов, если они не достигают этого значения: это видно на изображении выше, т. е. обе нормали вершин лежат на точку друг над другом, что обеспечивает постоянный градиент яркости по краям.
Еще одно небольшое замечание: представьте, что эти нормали шейдинга не интерполируются между точками объекта, а могут быть ориентированы в любом направлении. Это именно то, что делает карта нормалей, которую можно загрузить в канал материала Нормали.
Еще один элемент Cinema 4D, который можно использовать для воздействия на нормали вершин, тег нормалей.
Обратите внимание, что нормали полигонов смежных полигонов не ориентированы в противоположных направлениях, а ориентированы равномерно наружу или в одну сторону. В противном случае шейдинг не может работать правильно.
На заметку
Векторы нормалей видны, если опция Нормали полигонов включена в меню Вид менеджера атрибутов (Вьюпорт / Настройки / Настройки вида).
Для этого выберите объект и переключитесь в режим использования полигонов, затем выберите полигоны с помощью инструмента «Выделение» (или выберите Выбрать все в меню «Выделение»).
Фонг
Тег Сглаживание (Фонг) является встроенной Cinema 4D функцией, которая позволит вам получить при просчёте объекта, состоящего из 3-х и 4-х угольников, почти идеальную поверхность (Фонг затенение). Например, сфера, состоящая из сотен или больше поверхностей, и обычно имеющая грани, при активной установке Фонг , будет выглядеть как идеальная сфера.
Различия в качестве показа, можно различать только по граням сферы, так как силуэт не идеально математического объекта, останется, как и прежде гранённым.
Тег Сглаживание (Фонг) является подходящим средством, для экономии времени просчёта и памяти ПК. Так как обычным способом, вы должны были бы разбить круглый объект на несколько тысяч полигонов, пока он не будет выглядеть действительно круглым. Условием сглаживания является, что сталкивающиеся полигоны имеют общие точки.
Сглаживание функционирует следующим образом:
При просчёте изображения, для каждой поверхности, которая должна быть освещена, будет создан вектор нормалей их угловых точек поверхности. Из углов, между лучами камеры и источника освещения, при этом будут рассчитаны яркость и цвет для точки поверхности.
Обычно, для двух сталкивающихся полигонов, имеется жёсткий переход, так как каждая поверхность имеет её собственный вектор нормалей. На грани при этом получается скачок освещения.
Если тег сглаживания активен, то вектор нормалей будет просчитан. Он переходит постепенно от вектора нормалей одной поверхности в вектор другой поверхности. При этом получается мягкий переход.
При просчёте изображения без сглаживания это не имеет значения, где начинается вектор нормалей, на одной или другой стороне поверхности. Но при этом будет обязательно просчитано, что вектора нормалей корректно ориентированы.
Слева на изображении вы видите два смежных полигона, нормали, которых имеют различное направление, вверх и вниз (несмотря на то, что все они расположены вертикально к поверхности полигонов). Результат вы видите ниже. Просчитанные векторы направлены при этом в одну или другую сторону. Как следствие такого поведения, возникновение тёмных полос и пятен на освещённой поверхности. 3х-димензиональное ощущение для такого объекта будет полностью разрушено.
На правой половине изображения вы видите, как это должно было быть. Векторы нормалей направлены в одну сторону и поэтому наклоняются так, что образуется впечатления изогнутой плавно поверхности, исключая при этом угловатость или ступенчатость изображения. Именно поэтому образуется мягкий переход яркости, который указывает на пластичность объекта.
При этом вам надо запомнить, что при сглаживании, вы должны обращать внимание на направление векторов нормалей, которые должны быть направлены к внешней стороне поверхности.
Новые объекты будут всегда создаваться с правильным направлением векторов нормалей и не должны при этом обрабатываться дополнительно. Но проверить вы можете всегда.
На заметку:
Векторы нормалей являются видимыми, если вы выделили полигон. Переключите при этом в режим обработки по полигонам \слева на панели\ и выберите затем посредством инструмента выделения соответствующие полигоны (или из меню выделения выберите функцию Выделить все ).
Посредством функции Каркас / Выровнять нормали вы можете в любой момент устранить изложенную выше проблему.
«Мы не можем ожидать, что у нас получится отобразить объект точно таким, каким он является в реальности, с текстурами, тенями и т.д. Мы надеемся только на то, чтобы создать изображение, которое достаточно близко к достижению определённой степени реализма».
Буй Тыонг Фонг родился в 1941 году и стал учёным-информатиком во время Вьетнамской войны. Должно быть, ему сложно оказалось завершить своё обучение в токсичной среде 60-х, не говоря уже о том, что его призвали на фронт! Но ему удалось выжить и дожить до 1975 года, прежде чем его жизнь забрала лейкемия спустя всего два года после того, как он заложил для мира фундамент современной теории освещения и затенения: шейдер Фонга. Вьетнамские имена состоят из трёх частей: фамилии, среднего имени и личного имени. То есть когда люди говорят «шейдер Фонга», они называют личное имя Буй Тыонга. Подробнее о личных именах можно прочитать в Википедии.
Не уверен, действительно ли это Фонг, но если верить Google, то да.
“Softly let the balmy sunshine
Play around my dying bed,
E’er the dimly lighted valley
I with lonely feet must tread. “
Let The Light Enter – стихотворение Фрэнсис Харпер
В основе шейдера Фонга лежит чрезвычайно лаконичная математика. Которую вам, на самом деле, знать не обязательно, если только вы искренне не желаете стать программистом графики. Однако в долгой перспективе её знание будет полезным. Ниже представлены выдержки из OpenGL Superbible, 7th Edition Грэма Сэллерса и Kronos Group ARB Foundation.
C) Затенение по Фонгу
Прежде чем двигаться дальше, давайте запомним, что затенение по Фонгу и освещение по Фонгу — это две разные концепции. Можно избавиться от «снежинки» блика Гуро, добавив больше вершин, но зачем, если у нас есть затенение по Фонгу? В затенении по Фонгу цвет интерполируется не между вершинами (как это делается в листингах 1 и 2), мы интерполируем между вершинами нормали к поверхности, и используем сгенерированную нормаль для выполнения всех вычислений освещения для каждого пикселя, а не вершины. Однако это значит, что во фрагментном шейдере придётся выполнить больше работы, как это показано в листинге 4. Но для начала давайте рассмотрим вершинный шейдер.
Листинг 3: вершинный шейдер шейдера Фонга на GLSL 4.1.
Почти ничего не изменилось. Но во фрагментом шейдере ситуация совершенно другая.
Листинг 4: фрагментный шейдер затенения по Фонгу.
В уроке посвященном основам освещения мы кратко разобрали модель освещения Фонга, позволяющую придать существенную долю реализма нашим сценам. Модель Фонга выглядит вполне неплохо, но имеет несколько недостатков, на которых мы сосредоточимся в данном уроке.
Часть 1. Начало
Часть 2. Базовое освещение
Часть 3. Загрузка 3D-моделей
Часть 4. Продвинутые возможности OpenGL
Часть 5. Продвинутое освещение
Часть 6. PBR
A) Некоторые концепции
Во-первых, давайте разберёмся с концепциями. Если вы хоть минуту имели дело с 3D-моделированием или разработкой игр, то вы наверняка с ними уже сталкивались, но повторение никому ещё не мешало.
A-1) Окружающее освещение (Ambient Light)
В большинстве книг, особенно в низкокачественных, это освещение сравнивается с солнечным светом, но это совершенно неверно. Окружающее освещение — это не солнечный свет. Оно поступает со всех направлений, то есть оно вездесуще, но в вычислениях это просто вектор с тремя составляющими. В затенении Фонга он добавляется в конце, но не изменяется.
A-2) Рассеянное/диффузное освещение (Diffuse Light)
Рассеянное освещение имеет направление. На самом деле, это направленный компонент источника освещения[sic]. В кинематографе свет рассеивается с помощью софтбокса, а в компьютерной графике освещение рассеивается с помощью формулы, которую мы покажем ниже. Величина, то есть размер рассеянного освещения зависит от поверхности. Например, если поверхность является матовой, то есть она больше поглощает, чем отражает свет, то величина будет больше, чем в случае гладкой поверхности.
Рассеяние/поглощение рассеянного освещения от матового экрана
A-3) Блики отражений (Specular Highlight)
Как и рассеянное освещение, отражённый свет является направленным, но основан на гладкости (glossiness) поверхности; он оставляет блик (highlight), который называется блеском (shininess). В реальной жизни блеск не является неотъемлемой частью материала. На самом деле, покрытие плёнкой или капля воска добавят к блеску гораздо больше, чем что-либо остальное. Отражённый блеск — это фактор, имеющий значение от 0 до 128, потому что при значениях выше 128 он не сильно будет влиять на шейдер.
Бумага с плёнкой — плотная цветная бумага с глянцевым плёночным покрытием, настоящий подарок для ребёнка.
A- 4) Альбедо (Albedo)
Это доля падающего света, отражаемая поверхностью.
A-5) Формула Фонга
Формула вычисления материала по Фонгу имеет следующий вид:
: материал окружающего освещения (Ambient material)
: материал рассеянного освещения (Diffuse material)
: материал отражённого освещения (Specular material) и : показатель блеска
Вы можете спросить, а что насчёт векторов? Не волнуйтесь, сейчас мы расскажем и о них:
: нормаль к поверхности
: единичный вектор из затеняемой точки к источнику освещения (другими словами, вектор света)
: отражение отрицательного значения вектора света
: вектор, направленный к зрителю
B) Затенение по Гуро (Gouraud Shading)
Этот метод затенения был изобретён Анри Гуро в 1971 году. Он ни по каким параметрам не превосходит затенение по Фонгу, и сегодня в основном используется как мало нагружающий GPU метод предварительного просмотра в таких пакетах, как Cinema 4D. Его проблема в том, что генерируемый им блик выглядит как искра:
Эта проблема вызывается интерполяцией цветов между вершинами, а разрывы между треугольники возникают потому, что цвета интерполируются линейно. Эта проблема была решена только в шейдере Фонга. Давайте посмотрим, как можно реализовать затенение по Гуро на GLSL 4.1.
Листинг 1: повершинное затенение по Гуро на GLSL 4.1
А теперь фрагментный шейдер.
Листинг 2: фрагментный шейдер той же концепции.
Модель Блинна-Фонга
Модель Фонга является весьма эффективным приближением для расчета освещения, но при определенных условиях она может терять часть компоненты зеркальных бликов. Это можно заметить при малых значениях силы блеска (shininess) когда область зеркального отражения становится довольно большой. На рисунке ниже показано, что происходит, когда мы используем силу зеркального блеска 1.0 для плоской текстурированной поверхности:
Как видите, область зеркального отражения имеет резко очерченную границу. Это происходит потому что угол между вектором обзора и вектором отражения не должен превышать 90 градусов, иначе их скалярное произведение становится отрицательным, что делает компоненту зеркальных бликов равной нулю. Вы можете подумать что в этом нет ничего страшного, потому что мы и не должны получать какой-либо освещенности при углах свыше 90 градусов, верно?
Не совсем. Это применимо только по отношению к диффузной компоненте, где угол выше 90 градусов между вектором нормали и направлением света означает, что источник света находится ниже освещаемой поверхности, и, следовательно, вклад диффузного освещения должен равняться нулю. Однако в случае с зеркальной компонентой мы измеряем не угол между направлением света и нормалью, а угол между векторами обзора и отражения. Взгляните на следующие два рисунка:
Теперь проблема становится очевидной. Слева мы видим привычную нам картину Фонговского отражения с θ менее 90 градусов. На правом рисунке угол θ между направлениями зрения и отражения больше 90 градусов, в результате чего вклад зеркального освещения аннулируется. Обычно это не причина для беспокойства, так как вектор обзора зачастую заметно удален от вектора отражения. Но при малых значениях силы зеркального блеска радиус области отражения становится достаточно большим, и дает заметный вклад в общую картину. Используя модель Фонга мы аннулируем этот вклад при углах больше 90 градусов (как видно на первом изображении).
В 1977 году Джеймсом Ф. Блинном (James F. Blinn) была представлена модель освещения Блинна-Фонга, как дополнение к модели Фонга, которой мы пользовались до сих пор. Она во многом схожа с моделью Фонга, но использует немного иной подход к расчету зеркальной компоненты, что позволяет решить нашу проблему. Вместо того, чтобы полагаться на вектор отражения, мы используем так называемый медианный вектор (halfway vector), который представляет из себя единичный вектор точно посередине между направлением обзора и направлением света. Чем ближе этот вектор к нормали поверхности, тем больше будет вклад зеркальной компоненты.
Когда направление обзора полностю совпадает с (теперь уже мнимым) вектором отражения, медианный вектор совпадает с нормалью к поверхности. Таким образом, чем ближе направление обзора к направлению отражения, тем сильнее становится зеркальный блеск.
Очевидно, что вне зависимости от направления, с которого смотрит наблюдатель, угол между медианным вектором и нормалью к поверхности никогда не превысит 90 градусов (если, конечно, источник света не находится ниже поверхности). Благодаря этому мы получаем несколько иные результаты по сравнению с Фонговским отражением, и в целом картина выглядит более визуально правдоподобной, особенно при низких значениях силы зеркального блеска. Именно модель освещения Блинна-Фонга использовалась в более раннем, фиксированном конвейере OpenGL.
Найти медианный вектор легко: нужно сложить вектор направления света с вектором обзора и нормировать результат:
На языке GLSL это выглядит так:
Таким образом расчет зеркальной составляющей сводится к простому вычислению скалярного произведения между нормалью к поверхности и медианным вектором, чтобы получить значение косинуса угла между ними, которое мы снова возводим в степень силы зеркального блеска:
Собственно, это всё что касается модели Блинна-Фонга. Единственное различие между зеркальным отражением в моделях Блинна-Фонга и Фонга заключается в том, что теперь мы измеряем угол между нормалью и медианным вектором вместо угла между направлением обзора и вектором отражения.
Используя медианный вектор для расчета компоненты зеркальных бликов мы больше не будем иметь характерной для модели Фонга проблемы с резкой границей области зеркального отражения. На изображении ниже показана область зеркального отражения обоих методов при силе зеркального блеска 0.5:
Еще одно небольшое различие между моделями Фонга и Блинна-Фонга заключается в том, что угол между медианным вектором и нормалью к поверхности часто меньше угла между векторами обзора и отражения. Поэтому, чтобы получить аналогичные модели Фонга результаты, значение силы зеркального блеска должно быть немного выше. Эмпирически установлено, что оно где-то в 2-4 раза больше по сравнению с моделью Фонга.
Ниже приведено сравнение зеркальной компоненты между моделями с силой зеркального блеска равной 8 для модели Фонга и 32 для модели Блинна-Фонга:
Как видно, зеркальная компонента Блинна-Фонга более резкая. Обычно требуется небольшая подгонка, чтобы получить результаты аналогичные полученным ранее с использованием модели Фонга, но, в целом, освещение Блинна-Фонга дает более правдоподобную картину.
Для данной демонстрации мы использовали простой фрагментный шейдер, который переключается между обычным отражением Фонга и отражением Блинна-Фонга:
Исходный код данного урока вы найдете здесь. Нажимая клавишу b, вы можете переключаться с модели Фонга на модель Блинна-Фонга и обратно.
В данном уроке мы рассмотрим основные принципы работы со съёмочной камерой в Cinema 4D.
Основной вопрос, который возникает у новичков (несмотря на всю кажущуюся очевидность ответа) — зачем вообще нужен такой объект, как камера? Ведь отрендерить трёхмерную сцену можно без какой-либо камеры, из рекдакторского ракурса.
Ответ, как и было сказано выше, очевиден: наличие камеры в сцене неимоверно расширяет управляемость ракурсами и методами съёмки при рендере, и рендерить сцену без использования камеры — примерно то же самое, что рендерить сцену с дефолтным освещением.
Основные возможности камер в Cinema 4D навскидку — это изменяемое фокусное расстояние и глубина резкости, программируемое поведение камеры и смена камер с одной на другую, а также многое другое.
Ниже мы рассмотрим эти возможности поподробнее. За основу мы возьмём некий абстрактный интерьер с загадочной фигурой, стоящей на окружённом водой постаменте в центре.
Прежде всего, разумеется, создадим съёмочную камеру, с которой в дальнейшем нам предстоит экспериментировать. Создание камер доступно из верхней панели инструментов, что под главным верхним меню. Выбираем пиктограмму с условным обозначением источника света и в выпадающем меню нажимаем на пункт «Camera». Обратите внимание: справа напротив этого пункта расположен пункт «Target Camera» («Нацеленная камера») — так вот, этот пункт создаёт такую же в точности камеру, что и выбранный нами пункт «Camera» выпадающего меню, но только с уже присвоенным камере тегом «Target» («Цель»). Другими словами, выбрав в выпадающем меню пункт «Camera» и затем самостоятельно назначив созданной нами камере тег «Target», мы создадим точно такую же камеру, какую создаёт пункт «Target Camera».
Раз уж выше столько сказано про тег «Target», то следующим шагом присвоим его созданной нами камере и разберём, что он делает. Ищем в менеджере объектов справа наименование камеры, щёлкаем на нём правой клавишей мыши, в выпадающем контекстном меню выбираем самый первый (верхний) пункт «CINEMA 4D Tags», по наведении на него курсора выпадает ещё одно подменю, в котором мы ищем «Target» — это и есть нужный нам тег.
Что делает этот тег? Его назначение ясно из названия: тег позволяет легко и быстро нацелить объектив виртуальной съёмочной камеры на любой объект (в Cinema 4D можно нацелить камеру даже на саму себя, правда, смысла от такого действия будет, мягко говоря, маловато). Эта возможность особенно удобна, если требуется отслеживать в кадре конкретный движущийся объект, однако у тега имеются и иные применения.
Тег нацеливания мы создали, теперь необходимо указать тегу конкретную цель. Для этого сначала выделяем в менеджере объектов тег нацеливания камеры (при этом ниже появляется окно свойств тега), затем ищем в менеджере объектов наименование цетральной фигуры, щёлкаем на нём левой клавишей мыши, и не отпуская клавишу, перетаскиваем наименование центральной фигуры в поле «Target Object» («На какой объект нацелиться») свойств тега «Target». Если мы всё сделали правильно, наименование центральной фигуры остаётся на прежнем месте в менеджере объектов, а также появляется в поле в поле «Target Object» свойств тега «Target», куда мы его перетащили. Наименование центральной фигуры и съёмочной камеры в менеджере объектов на картинке ниже выделены просто для наглядности, выделять их для нацеливания не нужно.
Итак, мы создали камеру и нацелили её на центральную фигуру, но не наблюдаем в рабочем окне никаких изменений.
Причина простая: в данный момент мы видим сцену через объектив редакторской дефолтной камеры. А нам необходимо, если можно так выразиться, сесть в кресло оператора созданной нами камеры. Лезем в верхнее меню рабочего окна (не путайте это меню с главным верхним!), переходим к пункту «Cameras», в выпадающем меню жмём на самый первый (верхний) пункт «Scene Cameras» и в выпадающем из последнего подменю выбираем наименование созданной нами камеры (сейчас в сцене имеется всего одна камера, как видно на изображении ниже).
Мы с вами видим, что ракурс тут же меняется: теперь мы смотрим строго на центральную фигуру.
Один из самых популярных вопросов, возникающих у новичков: как закрепить камеру наглухо, чтобы её невозможно было случайно сдвинуть с места или изменить ракурс?
Дело в том, что при работе с трёхмерной сценой многие время от времени забывают сменить съёмочную камеру на редакторскую, а позже, покрутив камеру туда-сюда, вдруг обнаруживают, что утерян тщательно подобранный ранее ракурс.
Специально для подобных случаев в Cinema 4D существует тег «Protection»: ищем в менеджере объектов наименование камеры, щёлкаем на нём правой клавишей мыши, в выпадающем меню выбираем пункт «CINEMA 4D Tags», в выпадающем из него подменю нажимаем «Protection» — готово, камера закреплена.
Рассмотрим другие возможности съёмочной камеры в Cinema 4D.
Практически самый главный параметр камеры — фокусное расстояние: от его значения зависит степень охвата камерой трёхмерной сцены. Чем больше фокусное расстояние, тем меньше охват сцены, ближе объекты в кадре и меньше перспективные искажения, и наоборот. Ниже приведены для сравнения три вида сцены с различными фокусными расстояниями, указанными для одной и той же неподвижной камеры. Обратите внимание, как искажена перспектива на последнем из рендеров.
Крайне популярный приём в кинематографии — показывать объект съёмки крупным планом на фоне размытого, нечёткого фона, чтобы акцентировать внимание зрителей на центральном объекте (а в 3D-сценах ещё и добавить реалистичность рендеру). Для создания такого эффекта в списке свойств камеры предусмотрена вкладка «Depth» («Глубина резкости»).
Поскольку камера у нас уже имеет тег «Target» и нацелена на центральную фигуру, воспользуемся этим и отметим галочкой пункт «Use Target Object» («Использовать целевой объект») — в этом случае центр резкости камеры будет автоматически настроен на целевой объект, то есть на центральную фигуру. Отмечаем галочкой пункт «Front Blur» («Размывка переднего плана»), если хотим, чтобы камера размывала объекты, расположенные перед целевым объектом, и пункт «Rear Blur» («Размывка заднего плана»), если хотим видеть размытыми фон и объекты, находящиеся за целевым объектом.
И конечно, не забываем о том, что эффект глубины резкости при рендере обеспечивается соответствующим дополнительным встроенным фильтром. Добавляем фильтр и во вкладке «Basic» указываем интенсивность эффекта. Для наглядности в изображении ниже совмещены выбор фильтра и окно его свойств — на самом же деле уже установленный фильтр в списке не показывается.
На изображении ниже использованы фокусное расстояние камеры 135 и степень глубины резкости 16%, с размытием переднего и заднего планов.
Читайте также: