Георги ми предложи да напиша рейтрейсър, и аз писах, и стигнах до точка, при която бих го заявил като самостоятелен проект.
Като цяло, един рейтрейсър прави каквото е в името - проследява пътят на светлината / проследява лъчи светлина как хвърчат наляво-надясно в някаква 3д сцена, много подобно на това как светлината се разпространява в истинския живот. По метода Монте Карло се изстрелват голямо количество лъчи и после се осредняват, за да се получи картина. Ако лъчите са малко, ефекта е много подобен на снимка с евтина телефонна камера през нощта - буквално прекалено малко светлина влиза в сензора.
Този процес е доста бавен, но картините, които създава, са особено реалистични, и обичайно сложните ефекти като сенки, които избледняват при разстояние - "soft shadows", отражения от всякакъв род, и т. нар. "global illumination" - когато застанете до червена стена и тя ви оцвети в червено без тя да е лампа - се получават без "изрично" да трябва да се имплементират.
Толкова е бавен само че, че хората постоянно мислят как да редят оптимизации след оптимизации, и май може да се каже, че дори и професионалните пат трейсъри не са напълно "завършени".
Списък от някой "подзадачи" които съм направил или смятам да направя:
- Четене от .obj файл*
*Форматът за описание на материали на obj файла не е особено съвместим с пат трейсъри, за това аз избирам вид материали спрямо името им, но така или иначе повечето пат трейсъри се мразят един друг и нямат общоприет формат за материали
- Разни сметки от аналитичната геометрия (отразяване на лъч, пресичане на лъч с равнина, т.н.)
- Създаване на картина
Рисувам получената картина в БМП файл...
- Разни материали
Всеки знае за огледалото и "ъглите на отразеният и падащият лъч спрямо нормалата са равни", ама това далеч не описва всички материали на света. Друг вид материал е "дифузният" материал, при който микроскопични неравности в повърхността карат лъчите да се отразят в почти случайна посока. Съществува и материалът смесица между двете, за който няма общоприета дума май - "размазано огледало", "метал", "лъскав"... Който не е същият като "диелектрик".
- Многонишковост / паралелизъм
Процесът (би трябвало да) е лесен за правене паралелно, тъй като лъчите светлина не зависят по никакъв начин едни от други и често се правят с нещо от рода на (map тежкаФункция пиксели)...
Примерна картина от статията в уикипедия