Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

Control the Response of a 3D Surface to Lighting - Wolfram Mathematica

Контроль отклика 3D поверхности на освещенность

Для управления реакцией 3D поверхности на имитируемый свет, задайте ее отражающие свойства. Mathematica позволяет Вам управлять рассеянным отражением света на матовых поверхностях и зеркальным отражением на зеркально подобных поверхностях. Такое сочетание дает Вам всесторонний контроль над окончательным видом и цветом 3D поверхности.

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

По умолчанию, цвет поверхности 3D объектов Mathematica является белым. В данном случае, цвет формируется опцией Lighting, которую Mathematica применяет по умолчанию:

In[19]:=

ControlTheResponseOfA3DSurfaceToLightingRU_1.gif

Out[19]=

ControlTheResponseOfA3DSurfaceToLightingRU_2.gif

Построим 3D цилиндр с красным цветом поверхности. Это определяет рассеянное отражение красного света от цилиндра:

In[16]:=

ControlTheResponseOfA3DSurfaceToLightingRU_3.gif

Out[16]=

ControlTheResponseOfA3DSurfaceToLightingRU_4.gif

Более тонкий контроль над оттенками цвета 3D поверхностей достигается при помощи команды RGBColor, которая позволяет Вам задать точные значения от 0 до 1 для красного, зеленого и синего:

In[10]:=

ControlTheResponseOfA3DSurfaceToLightingRU_5.gif

Out[10]=

ControlTheResponseOfA3DSurfaceToLightingRU_6.gif

На самом деле, в Mathematica Вы можете использовать множество методов задания собственного цвета  3D объектов. В данном случае использована команда CMYKColor:

In[20]:=

ControlTheResponseOfA3DSurfaceToLightingRU_7.gif

Out[20]=

ControlTheResponseOfA3DSurfaceToLightingRU_8.gif

Эта интерактивная модель, созданная с помощью функции Manipulate, использует команду RGBColor для задания собственного цвета поверхности 3D цилиндра. Для сравнения, вставленный с помощью функции Inset (Вставка) прямоугольник вверху справа показывает заданный командой RGBColor "истинный" цвет, наблюдаемый без применения опции Lighting.

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

In[43]:=

ControlTheResponseOfA3DSurfaceToLightingRU_9.gif

Out[43]=

    

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

Для начала, создадим 3D сферу, со значениями парметров по умолчанию:

In[52]:=

ControlTheResponseOfA3DSurfaceToLightingRU_11.gif

Out[52]=

ControlTheResponseOfA3DSurfaceToLightingRU_12.gif

Доля зеркально отраженного света может варьироваться в пределах от 0 до 1. К примеру, воспользуемся командой Specularity для зеркального отражения 30% света падающего на сферу:

In[51]:=

ControlTheResponseOfA3DSurfaceToLightingRU_13.gif

Out[51]=

ControlTheResponseOfA3DSurfaceToLightingRU_14.gif

Чтобы увидеть визуальный эффект от применения команды Specularity во всем диапазоне значений, воспользуемся функцией Manipulate для создания интерактивной модели, позволяющей динамически изменять долю зеркально отражаемого света:

In[50]:=

ControlTheResponseOfA3DSurfaceToLightingRU_15.gif

Out[50]=

Вы также можете указать зеркальное отражение для определенных цветов:

In[49]:=

ControlTheResponseOfA3DSurfaceToLightingRU_17.gif

Out[49]=

ControlTheResponseOfA3DSurfaceToLightingRU_18.gif

В Mathematica можно задать зеркальное отражение множества различных цветов. Например, в данной интерактивной модели, созданной с помощью функции Manipulate, ползунки используются для изменения параметров команды RGBColor, определяющих в реальном времени цвет, чье отражение контролируется командой Specularity. Как и в предыдущих примерах,  вставленный с помощью функции Inset (Вставка) прямоугольник вверху справа показывает "истенный" цвет, заданный командой RGBColor:

In[47]:=

ControlTheResponseOfA3DSurfaceToLightingRU_19.gif

Out[47]=

Команда Specularity также позволяет точно контролировать ширину зеркального отражения света, путем задания показателя отражения. Показатель отражения задается как второй аргумент команды Specularity. Если Вы не укажете точное значение показателя отражения, Mathematica применит значение по умолчанию равное 1.5.

Создадим 3D сферу, которая зеркально отражает 50% света с показателем отражения равным 1:

In[48]:=

ControlTheResponseOfA3DSurfaceToLightingRU_21.gif

Out[48]=

ControlTheResponseOfA3DSurfaceToLightingRU_22.gif

Чем выше показатель отражения, тем более резко очерченым будет зеркальное отражение.

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

In[53]:=

ControlTheResponseOfA3DSurfaceToLightingRU_23.gif

Out[53]=

    

На практике, рассеянная и зеркальная составляющие отражения часто сочетаются для контроля окончательного цвета и вида 3D поверхностей.

Опция PlotStyle используется здесь для окрашивания поверхности графика в оранжевый Orange цвет с зеркальным отражением белого White света при показателе отражения равном 20:

In[49]:=

ControlTheResponseOfA3DSurfaceToLightingRU_25.gif

Out[49]=

ControlTheResponseOfA3DSurfaceToLightingRU_26.gif

Похожим образом здесь использована опция ContourStyle:

In[74]:=

ControlTheResponseOfA3DSurfaceToLightingRU_27.gif

Out[74]=

ControlTheResponseOfA3DSurfaceToLightingRU_28.gif

Как и следовало ожидать, опция Lighting оказывает огромное влияние на отражение. Используем рассеянное и зеркальное отражение совместно с опцией Lighting:

In[2]:=

ControlTheResponseOfA3DSurfaceToLightingRU_29.gif

Out[2]=

ControlTheResponseOfA3DSurfaceToLightingRU_30.gif