Страница 1 из 11
Форум » Мастерская » Разработка аддонов и карт » Материалы и текстуры » Теория материалов
Теория материалов
Среда, 22.03.2017, 11:36
1
Пользователь
Попробуем разобраться, какими свойствами еще обладает материал.
Основной 3д сцены помимо модели является сочетание света и теней. Поэтому 3D художник должен разбираться, как работает затенение на модели, чтобы создавать реалистичные 3D сцены.

Lighting

Движок Арма3 расcчитывает освещение по формуле: T * (D.o + A) + S.o где:


Код
T = цвет текстуры
D = (diffuse lighting) диффузное освещение (цвет, интенсивность и направление. Движок арма3 имел до настоящего времени только один источник направленного света - солнце или луну).

D рассчитывается как max (L.N, 0) * sunLightColor - где:        
            L - направление света,         
            N - направление поверхности (нормальное) sunLightColor источник солнечного света.

A = (ambient lighting) Окружающее освещение (цвет и интенсивность, всегда присутствует с одинаковой интенсивностью во всей сцене, а его значение определяется настройкой пасмурного освещения)

S = (specular) - установка глянца и зеркальности для материала)

o = (direction) - Направление света (1 = пиксель горит, 0 = пиксель в тени)

Простые материалы, рассчитывают освещение на вершину путем интерполяции направления света между краями поверхности (нормалями).
Этот расчет похож на модель затенения Горауда, которая выглядит примерно следующим образом.



Более сложные материалы используют нормальную ориентацию на пиксель. В этом случае значения для вычислений затенения комбинируются с текстурами, растровыми изображениями эффектов, настройками освещения движка (config) и настройками материала (* .rvmat).

Shadows

Расчет теней в движке Арма3 зависит от двух параметров исходя из параметров настройки видеокарты на клиенте, и исходя из индивидуальных настроек модели.
"Трафаретные тени" четкие и добавляются уже после того, как вся сцена нарисована, движок просто вычисляет объем рассеянного света в тех местах где теней больше. Это приводит к досадным эффектам, когда отражение продолжает присутствовать в затененных местах. Так же следует учитывать, что в том случае если диффузное освещение не обнулено (ForceDiffuse! = 0), результат так же будет не корректным.

Glossines 

Зеркальное отражение материала определяется кривой (функция двунаправленного отражения), которая говорит, сколько света отражается под всеми углами. В движке ArmA используются значения SPECULAR POWER или IRRADIANCE TABLE в файлах * rvmat.



Sections

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

Ниже пример простого RVMAT  в котором разобраны описываемые выше параметры.


Код
ambient[]={0.5411765,0.5411765,0.5411765,1};
/*Умножает значения цвета (цветная текстура R, G, B, A) на поверхности, которая не освещена основным направленным светом. RGB (красный,синий,зеленый,альфа-канал)*/
diffuse[]={0.5411765,0.5411765,0.5411765,1};
/*Умножает значения цвета поверхности, которая освещена основным направленным светом.RGB (красный,синий,зеленый,альфа-канал)*/
forcedDiffuse[]={0,0,0,0};
/*Параметр так же называют Translucency. Он помогает имитировать так называемую полупрозрачность. Часть диффузного освещения, которое отражается на поверхности в тени.
Он работает аналогично ambient, но с различным компонентом освещения.
К сожалению, некоторые шейдеры не работают хорошо с forcedDiffuse.*/

/* Для поверхностей листвы есть специальные шейдеры, которые также используют значение ForceDiffuse Alpha для вычисления количества света (1 = все)

Комбинация из трех параметров
Ambient[] = { 1, 1, 1, 1 };

Diffuse[] = { 0.5, 0.5, 0.5, 1 };
ForcedDiffuse[] = { 0.5, 0.5, 0.5, 0 };

дает тот же результат, что и свойство старой вершины Half Lighted
(поверхность освещена одинаково со всех сторон, так, что она кажется плоской)
*/

emmisive[]={0,0,0,1};
/* Luminescence Также называется Люминесценция. Значения дают количество света, которое светит сама по себе. Используйте его для источников света. */

specular[]={0.070588239,0.070588239,0.070588239,1};
/* Это часть света, которая отражается от поверхности.Specular вычисляется за вершину или за пиксель в зависимости от конкретного шейдера.*/

specularPower=18; // сила отражения.



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


Код
pixel RGB on screen =
((RVMAT ambient * RGB texture * Environment ambient)
+ (RVMAT diffuse * RGB texture * Environment diffuse * light direction)
+ (RVMAT forced diffuse * RGB texture * Environment diffuse)
+ RVMAT emissive material * RGB texture
+ (RVMAT specular * Environment diffuse * light direction)

Значения цвета обычно находятся в диапазоне 0-1, но могут быть и больше. Движок ArmA вычисляет свет в высоком динамическом диапазоне, со значениями, превышающими 0-255 RGB. Конечный RGB в мониторе рассчитывается для каждого кадра в зависимости от глаз / оптики. Настройки диафрагмы (затвора) 1.

Реалистичные поверхности не отражают 100% входящего света. Чем больше света отражается, тем меньше он рассеян. Сумма рассеянного, вынужденного рассеянного и отраженного света не должна превышать 1, но это не относится к материалам ArmA реального времени, которые отображают только горячую точку солнечного света и пропускают свет окружающей среды - они выглядели бы слишком темными.

Диффузия для многих обычных поверхностей составляет от 40% до 80%. Если вы нацелены на максимально реалистичные настройки поверхности, изучите справочную информацию. Настройки RVMAT позволяют вам размещать как можно больше цветового диапазона в текстуре, а затем изменять его до реалистичных значений с максимальным динамическим диапазоном.

Реалистичные поверхности, как правило, отражают направленный и рассеянный свет одинаково - Диффуз и Эмбиент равны. У движка ArmA есть настройки среды со значениями диффузного и окружающего (контраст сцены), основанные на записи света реального мира. Не разумно компенсировать контраст в настройках материала.

Более низкие диффузные значения используются для губчатых материалов (некоторый свет передается forceDiffuse). Более низкие значения окружения могут использоваться на поверхностях, где глобальная окружающая среда должна быть уменьшена, например, Интерьеры. Обычно это делается с использованием карт Ambient Light.
Прикрепления: 7151294.png(6Kb) · 4693019.png(29Kb) · 3295313.jpg(17Kb)

 
Форум » Мастерская » Разработка аддонов и карт » Материалы и текстуры » Теория материалов
Страница 1 из 11
Поиск:


Правила чата
Мини-чат
+Мини-чат
0