Материал
Материал (material) — набор свойств, отвечающих за внешний вид геометрического объекта: его закраску, освещённость, затенение, фактуру, отражательную и преломляющую способность и прочие свойства визуализации.
Материал в графических движках и пакетах моделирования — это совокупность данных (числовых характеристик и текстур) и программного кода, обрабатывающего эти данные. Обрабатывающей программой может быть т.н. шейдер.
В сравнении с текстурой материал является абстракцией более высокого уровня. Материал позволяет задавать визуальные свойства геометрического объекта.
В 3D Studio MAX материалом называется набор настроек и набор текстурных карт, описывающие свойства поверхности. Каждый тип материала имеет свой способ затенения (шейдер). 3D Studio MAX содержит отдельный модуль для работы с материалами, который называется Material Editor.
Для работы с материалами в некоторых игровых графических движках используется связка: внешний редактор материалов и внутренний менеджер, реализующий подсистему управления материалами.
Графический движок OGRE использует скриптовую систему управления материалами.
Материал в графических API — понятие тесно связанное с освещением. В этом контексте материал задает («физические») свойства поверхности отображаемых примитивов. С помощью материала определяется, как будет отражаться от поверхности примитива свет. Эти материалы состоят из числовых данных, в них не входят текстуры и операции, задающие правила смешивания текстур и цвета, за это отдельно отвечают шейдеры и настройки конвейера.
Пример Direct3D
Для работы с материалом предусмотрен специальный тип данных (в DirectX 9 — это D3DMATERIAL9), который содержит следующие поля:
typedef struct _D3DMATERIAL9 { D3DCOLORVALUE Diffuse; // рассеянный свет, исходящий от материала D3DCOLORVALUE Ambient; // определяет окружающий свет D3DCOLORVALUE Specular; // определяет отражающий (зеркальный) свет D3DCOLORVALUE Emissive; // определяет излучающий свет материала} float Power; // мощность отражения } D3DMATERIAL9;
Задавая параметры структуры D3DMATERIAL9, тем самым мы определяем свойства поверхности отображаемого объекта. Процесс создания и использования (назначения) материала включает в себя следующие шаги:
- 1. Объявление переменной типа D3DMATERIAL9;
2. Заполнение соответствующих полей данной структуры;
3. Установка материала.
Программно эти шаги реализуются следующим образом:
D3DMATERIAL9 material; ZeroMemory(&material, sizeof( D3DMATERIAL9) ); material.Diffuse =D3DXCOLOR( 0.7f, 0.0f, 0.0f, 0.0f); material.Ambient =D3DXCOLOR( 0.2f, 0.0f, 0.0f, 0.0f); material.Specular=D3DXCOLOR( 0.1f, 0.0f, 0.0f, 0.0f); // ... device->SetMaterial( &material );
Метод SetMaterial() устанавливает материал, он вызывается при выводе объектов. (Кроме определения свойств материала необходимо задать источники света).
Пример под OpenGL
Для задания параметров текущего материала используются функции:
void glMaterial[i f](GLenum face, GLenum pname, GLtype param); void glMaterial[i f]v( GLenum face, GLenum pname, GLtype *params);
С их помощью можно определить рассеянный, диффузный и зеркальный цвета материала, а также цвет, задающий степень зеркального отражения, и интенсивность излучения света. Какой именно параметр будет определяться значением param, зависит от значения pname:
GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_SHININESS, GL_EMISSION.
Параметр face определяет тип граней, для которых задается этот материал и может принимать следующие значения:
GL_FRONT, GL_BACK или GL_FRONT_AND_BACK.
Ссылки:
1. http://www.intuit.ru/department/graphics/direct3dhlsl/7/
2. OpenGL RedBook
3. http://www.ogre3d.ru/wiki/
4. http://www.esate.ru/page.php?where=3D_max_urok_12_1
Что такое Материал?
#Direct3D, #OpenGL, #освещение, #текстурирование
24 октября 2009 (Обновление: 5 ноя 2009)