ПрограммированиеТерминыГрафика

Материал

Материал (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, тем самым мы определяем свойства поверхности отображаемого объекта. Процесс создания и использования (назначения) материала включает в себя следующие шаги:

Программно эти шаги реализуются следующим образом:

  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)