Интернет магазин китайских планшетных компьютеров



Компьютеры - Трассировка пути - Описание

23 января 2011


Оглавление:
1. Трассировка пути
2. История
3. Описание
4. Двунаправленная трассировка лучей



В реальном мире множество небольших порций света излучаются источниками света и распространяются по прямым линиям в виде лучей сквозь среду и от объекта к объекту, изменяя свой цвет и интенсивность. Это «путешествие» продолжается до тех пор, пока лучи не будут поглощены объектами, включая такие объекты, как человеческий глаз или камеру. Этот процесс распространения лучей симулируется трассировкой пути, за исключением того, что лучи трассируются наоборот, от виртуальной камеры к источнику света. Это сделано из-за того, что из тех лучей, которые исходят из источника света, лишь очень малая часть попадает на объектив виртуальной камеры, поэтому расчёт преимущественного большинства лучей никак не влияет на получаемое виртуальной камерой изображение.

Такое поведение математически описано в уравнении рендеринга. Это уравнение рендеринга пытаются решить алгоритмы трассировки пути.

Трассировка пути не является простой трассировкой лучей с неограниченным количеством отражений лучей. В традиционной трассировке лучей свет вычисляется в момент непосредственного пересечения луча с диффузной поверхностью. При трассировке пути новый луч генерируется случайным образом внутри полусферы объекта и потом трассируется до тех пор, пока не пересечётся с источником света, что может и не случиться. При трассировке пути путь луча может пересечься с множеством диффузных поверхностей до того, как пересечься с источником света.

Псевдокод, реализующий трассировку пути, может выглядеть следующим образом:

 Color TracePath {
   if
     return Black;  // bounced enough times
   r.FindNearestObject;
   if
     return Black;  // nothing was hit
   Material m = r.thingHit->material;
   Color emittance = m.emittance;
   // pick a random direction from here and keep going
   Ray newRay;
   newRay.origin = r.pointWhereObjWasHit;
   newRay.direction = RandomUnitVectorInHemisphereOf;
   float cos_t = DotProduct;
   Color BRDF = m.reflectance/PI;
   float scale = 1.0*PI;
   Color reflected = TracePath;
   // return emittance +;
   return emittance +;
 }

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



Просмотров: 3806


<<< Трассировка лучей
Унифицированная шейдерная модель >>>