Параметр finish отвечает за описание отражающих свойств поверхности объекта.

Блики

Блики, возникающие на поверхности объекта там, где на него попадает свет, описываются разными моделями освещенности. В POV-Ray таких моделей две: модель Фонга (phong) и зеркальная (specular) модель.

Запишем оба этих варианта:

finish { phong 0.5 phong_size 20 }
finish { specular 0.5 roughness 0.05 }

Число, стоящее после phong или specular характеризует поглощение света материалом поверхности: 0 означает отсутствие отражения, 1 -- отражение всего упавшего на поверхность света.

Размер пятна блика в модели Фонга управляется параметром phong_size. Чем меньше его значение, тем больше пятно. Размер блика при зеркальном отражении задается с помощью параметра roughness -- чем он меньше, тем меньше блик (поверхность более шероховатая).

Вот как это выглядит на практике:

camera { location <0,0,-10> look_at <0,0,0> angle 35 }
light_source { <100,200,-200> color 1 }

// Красная сфера
sphere { <-2.2,0,0>,1 pigment { rgb <1,0,0> } }

// Красная сфера с моделью освещенности Фонга
sphere
{ <0,0,0>,1
  pigment { rgb <1,0,0> }
  finish { phong 0.7 phong_size 20 }
}
// Красная сфера с зеркальной моделью освещенности
sphere
{ <2.2,0,0>,1
  pigment { rgb <1,0,0> }
  finish { specular 0.7 roughness 0.03 }
}

finish.png

Отражение

Одна из самых замечательных возможностей трассировщика лучей -- возможность вычислять отражения. Речь идет не просто о бликах на поверхности, но об отражении изображений других объектов. Объект становится отражающим, если добавить к его описанию ключевой слово reflection. Например:

finish { reflection 0.5 }

Число, стоящее после reflection указывает долю света, отраженную поверхностью: 0 -- отсутствие отражения, 1 -- полное отражение.

Создадим классическую для компьютерной графики сцену -- зеркальная сфера на "шахматной" поверхности:

camera { location <-1,3,-6> look_at <0,0,0> angle 35 }
light_source { <100,200,-200> color 1 }

// Поверхность
plane { <0,1,0>,-1 pigment { checker rgb <1,0,0>, rgb <1,1,0> } }

// Зеркальная сфера
sphere
{ <0,0,0>,1
  pigment { rgb <0,0,0> } // Бесцветное зеркало
  finish { reflection 1 } // Отражает все, что на него попадает
}

mirror_sphere.png

Неровности

Параметр normal задает неровность поверхности объекта. В следующем примере характер неровности задается встроенной моделью agate, размер ее "зерен" -- параметром scale:

#include "colors.inc"

camera { location  <0.0, 0.5, -4.0>
         look_at   <0.0, 0.0, 0.0> }

light_source { <-5, 5, -5>
                color White }

box { <-0.5, -0.5, -0.5>, <0.5, 0.5, 0.5>
      texture { pigment { color Red }
                finish  { specular 0.6 }
                normal  { agate 1 scale 1/2 }
              }
      rotate <45,46,47> 
}

normal.png

Существует великое множество встроенных моделей неровностей. Попробуйте, например,\linebreak ripples 5.5 scale 1/20 или dents 20 scale 0.04.

Преломление

Блок interior определяет характеристики внутренней поверхности объекта. Из них мы рассмотрим всего одну -- преломление света внутри объекта.

Вода, стекло и другие материалы изменяют путь проходящего через них света. Этот изменение пути называется преломлением и POV-Ray, естественно, может его смоделировать. Например, так:

interior
{ 
  ior 1.5
}

Величина проходящего сквозь материал светового потока управляется значением filter.

Преломление задается коэффициентом преломления (index of refraction) -- ior. Коэффициент преломления воды равен примерно 1.33, стекла -- 1.5.

Заменим в предыдущем примере зеркальную сферу на синюю сферу из стекла:

camera { location <-1,3,-6> look_at <0,0,0> angle 35 }
light_source { <100,200,-200> color 1 }

// Поверхность
plane { <0,1,0>,-1 pigment { checker rgb <1,0,0>, rgb <1,1,0> } }

// Стеклянная сфера
sphere
{ <0,0,0>,1
  pigment { rgbf <0.5,0.9,1,0.95> } // Синее тонированное стекло
  interior { ior 1.5 }              // Преломление на границе "воздух-стекло"
}

refraction1.png

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

camera { location <-1,3,-6> look_at <0,0,0> angle 35 }
light_source { <100,200,-200> color 1 }

// Поверхность
plane { <0,1,0>,-1 pigment { checker rgb <1,0,0>, rgb <1,1,0> } }

// Стеклянная сфера
sphere
{ <0,0,0>,1
  pigment { rgbf <0.5,0.9,1,0.95> }  // Синее тонированное стекло
  finish
  { phong 0.9 phong_size 40          // Блики
    reflection 0.2                   // Чуточку отражения
  }
  interior
  { ior 1.5                          // Преломление на границе "воздух-стекло"
  }
}

refraction2.png

Вот, так гораздо лучше.

Вас смущает, что сфера кажется зеленой, а не синей? Так происходит потому, что поверхность у нас окрашена в желтый и красный цвета. Складываясь с цветом поверхности сферы, они дают тот цвет, что мы видим. Если мы заменим клеточки на черно-белые, то сфера будет выглядеть синей:

refraction3.png



Комментарии

comments powered by Disqus