Проследяване на лъчи (компютърна графика): Разлика между версии
Изтрито е съдържание Добавено е съдържание
м →Изчислителна сложност: Корекция на източник и надпис на фигура Етикет: Визуален редактор с уикитекст |
м Корекция на източници, променени от инструмента за превод Етикет: Визуален редактор с уикитекст |
||
Ред 1:
[[Файл:Recursive_raytrace_of_a_sphere.png|дясно|мини|250x250пкс| Рекурсивно проследяване на лъчите за сфера, демонстриращо ефекти като малка [[Дълбочина на рязкост|дълбочина на рязкост]], площни светлинни източници и [[Отражение|дифузно отражение]].
В [[Компютърна графика|компютърната графика]] '''проследяването на лъчи''' е техника за [[Рендъринг|рендиране]], при която за да се генерира [[Цифрово изображение|изображение]], се проследява пътят на [[Светлина|светлината]] през [[Пиксел|пикселите]] от [[Равнина на изображението|равнината на изображението]] и се симулират последствията от взаимодействията ѝ с виртуални обекти. С тази техника може да се постигне много висока степен на визуален реализъм, обикновено по-висока от тази на типичните методи със [[Сканираща линия|сканираща линия]], но с [[Теория на изчислителната сложност|по-високи изчислителни разходи]]. Затова проследяването на лъчи е най-подходящо за приложения, в които относително бавното рендиране на всеки кадър е приемливо – например за неподвижни изображения и за [[Визуални ефекти|визуални ефекти]] в киното и телевизията, – и по-неподходящо за приложения в реално време като [[Видеоигра|видео игрите]], където скоростта е от решаващо значение. Проследяването на лъчите е в състояние да симулира голямо разнообразие от оптични ефекти, като [[отражение]] и [[пречупване]], [[Разсейване на светлината|разсейване]] и [[Дисперсия (оптика)|дисперсионни]] явления (например [[Хроматична аберация|хроматична аберация]]).
== Общо описание на алгоритъма ==
[[Файл:Ray_trace_diagram.svg|дясно|мини|300x300пкс| Алгоритъмът изгражда изображението, като изпраща лъчи към сцената.
[[Файл:Ray_Tracing_Illustration_First_Bounce.png|дясно|мини|337x337пкс| Лъч през конкретен пиксел, проследен до първото отражение.
Оптичното проследяване на лъчи е метод за получаване на изображения в [[3D компютърна графика|триизмерната компютърна графика]], който осигурява по-висок фотореализъм от техники като ''[[Ray casting|ray casting]]'' или [[Сканираща линия|сканираща линия]]. То работи чрез проследяване пътя на светлината от въображаемо око през всеки [[пиксел]] от виртуален екран и изчисляване на цвета на обекта, който се вижда през него.
Line 21 ⟶ 23:
* <math>E \in \mathbb{R^3}</math> позиция на окото
* <math>T \in \mathbb{R^3}</math> позиция на целта
* <math>\theta \in [0,\pi)
* <math>m,k \in \mathbb{N}</math> брой квадратни пиксели в прозореца на изгледа във вертикална и хоризонтална посока
* <math>i,j \in \mathbb{N}, 1\leq i\leq k \and 1\leq j\leq m </math> индекси на конкретен пиксел
* <math>\vec w \in \mathbb{R^3}</math> вертикален вектор, определящ посоките нагоре и надолу, обикновено <math>\vec w = [0,1,0]</math> (не е показан на илюстрацията)
[[File:RaysViewportSchema.png|708x708пкс|
Идеята е да се намери позицията на центъра на всеки пиксел от прозореца на изгледа, <math>P_{ij}</math>, което лесно ще ни позволи да намерим права от окото <math>E</math> през този пиксел и съответно лъч, описан от точката <math>E</math> и вектора <math>\vec R_{ij} = P_{ij} -E
▲Идеята е да се намери позицията на центъра на всеки пиксел от прозореца на изгледа, <math>P_{ij}</math>, което лесно ще ни позволи да намерим права от окото <math>E</math> през този пиксел и съответно лъч, описан от точката <math>E</math> и вектора <math>\vec R_{ij} = P_{ij} -E </math> (или нормализирания му вариант <math>\vec r_{ij}</math>). Първо трябва да намерим координатите на долния ляв пиксел на прозореца на изгледа, <math>P_{1m}</math>, а след това намираме следващия пиксел, транслирайки в посоки, успоредни на прозореца на изгледа (вектори <math>\vec b_n</math> и <math>\vec v_n</math>) със стъпка размера на пиксела. Долните формули използват разстоянието <math>d</math> между окото и прозореца на изгледа, но тази стойност се съкращава при нормализирането на лъча <math>\vec r_{ij}</math> (поради това можем просто да приемем, че <math>d=1</math> и да го премахнем от изчисленията).
Предварителни изчисления: намираме и нормализираме вектора <math>\vec t</math> и векторите <math>\vec b, \vec v</math>, които са успоредни на изгледа (и трите са показани на горната илюстрация).
Line 46 ⟶ 47:
: <math>
g_x=\frac{h_x}{2} =d \tan \frac{\theta}{2}, \qquad
</math>
Line 56 ⟶ 57:
\vec p_{1m} = \vec t_n d - g_x\vec b_n - g_y\vec v_n
</math>
Изчисления: отбелязваме, че <math>P_{ij} = E + \vec p_{ij}</math> и лъчът <math>\vec R_{ij} = P_{ij} -E = \vec p_{ij}</math>, следователно
Ред 75:
=== Алгоритъм с хвърляне на лъчи (''ray casting'') ===
Първият алгоритъм за проследяване на лъчите, използван за рендиране, е представен от Артър Апел през 1968 г.<ref>
=== Рекурсивен алгоритъм за проследяване на лъчи ===
[[Файл:Glasses_800_edit.png|дясно|мини|300x300пкс| С проследяване на лъчи могат да се създават реалистични изображения.
[[Файл:BallsRender.png|дясно|мини|300x300пкс| Освен високата степен на реализъм, проследяването на лъчи може да симулира особеностите на фотографските снимки, които се дължат на [[Дълбочина на рязкост|дълбочината на рязкост]] и формата на [[Бленда|блендата]] на фотоапарата (в този случай [[шестоъгълник]]).
[[Файл:Ray-traced_steel_balls.jpg|дясно|мини|300x300пкс| Броят на разрешените отражения за всеки „лъч“ и начинът, по който му влияят срещнатите повърхности, се контролират чрез софтуерни настройки. Тук за всеки лъч е било разрешено да се отрази до 16 пъти. Така могат да се видят множество „отражения на отраженията“. ''Създадено с [[Cobalt (CAD програма)|cobalt]]'' ]]
[[Файл:Glass_ochem.png|дясно|мини|300x300пкс| Броят на разрешените [[Пречупване|пречупвания]] за всеки „лъч“ и начинът, по който му влияят срещнатите повърхности, се контролират чрез софтуерни настройки. Тук за всеки лъч е било разрешено да се пречупва и отразява до 9 пъти. Използвани са [[Отражение на Френел|отражения на Френел]]. Също така обърнете внимание на [[Каустика|каустиката]].
Следващият важен изследователски пробив идва от [[Търнър Уитид]] през 1979 г.<ref>
=== Предимства пред други методи на рендиране ===
Популярността на проследяването на лъчи се дължи на факта, че то се базира на реалистична симулация на [[Осветление в тримерното моделиране|осветление]], за разлика от други методи на рендиране (като сканираща линия и ''ray casting''). Ефекти като отражения и [[Сянка|сенки]], които са трудни за симулиране с други алгоритми, се получават естествено при алгоритъма с проследяване на лъчи. Изчислителната независимост на всеки лъч прави проследяването на лъчи податливо на [[Паралелни изчисления|паралелизация]].<ref>
=== Недостатъци ===
Line 97 ⟶ 98:
Създаването на изображение чрез изпращане на лъчи от окото към светлинния източник понякога се нарича ''обратно проследяване на лъчи'', тъй като фотоните в действителност се движат в обратна посока. Тази терминология обаче е свързана с обърквания. Отначало проследяването на лъчи винаги се е извършвало от окото, а ранните изследователи като [[Джеймс Арво]] разбират под термина „''обратно проследяване'' ''на лъчи''“ изпращане на лъчи откъм светлинните източници и събиране на резултатите. Затова е по-ясно проследяването на лъчи да се дели на проследяване ''откъм окото'' или ''откъм светлинния източник''.
Докато прякото осветление обикновено се моделира най-добре чрез проследяване на лъчи от окото, за някои непреки ефекти могат да са от полза лъчите, изпратени от светлинните източници. [[Каустика|Каустиките]] са светли шарки, образувани при фокусиране на светлината от обширна огледална област върху тясна част от (почти) дифузно отразяваща повърхност. Това явление би било отразено по-добре от алгоритъм, който хвърля лъчи директно от светлинните източници към отразяващите обекти и проследява техните пътища към окото. Това съчетаване на лъчи, изпращани откъм окото и откъм светлинните източници, често се реализира като двупосочно проследяване на пътища, при което пътищата се проследяват както от окото, така и откъм светлинните източници, и впоследствие се съединяват чрез свързващ лъч след определено разстояние.<ref>{{
[[Фотонни карти|Фотонните карти]] са друг метод, който съчетава проследяването на лъчи откъм окото и откъм светлинните източници; при първоначалния етап енергийните фотони се проследяват по лъчи от източника на светлина, за да се изчисли оценката на лъчистия поток като функция на триизмерното пространство (точно това е въпросната фотонна карта). В следващия етап се проследяват лъчи от окото към сцената, за да се определят видимите повърхности, и фотонната карта се използва за оценка на осветяването на видимите точки на повърхността.<ref>[http://graphics.ucsd.edu/~henrik/papers/photon_map/global_illumination_using_photon_maps_egwr96.pdf Global Illumination using Photon Maps] {{
Допълнителен проблем възниква, когато светлината, осветяваща сцената, преминава през много тесен отвор (например в затъмнена стая с леко открехната врата към съседна ярко осветена стая), или при сцена, в която повечето точки нямат пряка видимост към никой светлинен източник (например при насочени към тавана осветителни тела). В такива случаи само много малко подмножество от пътищата ще пренася енергия; методът [[Metropolis light transport|Metropolis light transport]] започва със случайно претърсване на пространството от пътища и когато се открият наситени с енергия пътища, тази информация се използва повторно при изследване на близките области от пространството на лъчите.<ref>
[[Файл:PathOfRays.svg|мини]]
Изображението вдясно показва прост пример за път от лъчи от камерата (или окото) към светлинния източник, генериран рекурсивно с горния алгоритъм. Дифузната повърхност отразява светлината във всички посоки.
Line 165 ⟶ 166:
Пример: нека за съвкупност от повърхности имаме Kr = 0,5. Тогава максималният принос на първата повърхност е 0,5; за отражението от втората имаме: 0,5 . 0,5 = 0,25, за третата: 0,25 . 0,5 = 0,125, за четвъртата: 0,125 . 0,5 = 0,0625, за петата: 0,0625 . 0,5 = 0,03125 и т.н. Освен това можем да приложим коефициент на затихване с разстоянието, например 1 / D2, който също би намалил приноса към интензитета.
За пречупен лъч бихме могли да направим нещо подобно, но в такъв случай разстоянието, изминато през обекта, би причинило още по-бързо намаляване на интензивността. Като пример за това, ''Hall & Greenberg'' установяват, че дори за силно отразяваща сцена използването на тази техника с максимална дълбочина 15 води до средна дълбочина само 1,7 на дървото от лъчи.<ref>{{Cite journal|last=Hall|first=Roy A.|last2=Greenberg|first2=Donald P.|date=November 1983|title=A Testbed for Realistic Image Synthesis|url=http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.131.1958|journal=IEEE Computer Graphics and Applications|volume=3|issue=8|pages=10-20|doi=10.1109/MCG.1983.263292|via=}}</ref>
== Обхващащи обеми ==
Line 183 ⟶ 184:
== В реално време ==
Първата реализация на проследяване на лъчи „в реално време“ е [[Суперкомпютър|компютърната графична система LINKS-1,]] построена през 1982 г. в инженерната школа към университета в Осака, от професорите Омура Куичи, Ширакава Исао и Кавата Тору заедно с 50 студенти. Това е [[Масово паралелна архитектура|масово паралелно]] обработваща [[Компютър|компютърна]] система с 514 [[Микропроцесор|микропроцесора]] (257 Zilog Z8001 и 257 [[Intel 8086|iAPX 86]]), използвана за рендиране на реалистична [[3D компютърна графика|триизмерна]] [[Компютърна графика|компютърна графика]] с високоскоростно проследяване на лъчи. Според [[Японска асоциация за обработка на информация|Японската асоциация за обработка на информация]]: „В основата на рендирането на триизмерното изображение стои изчисляването на яркостта на всеки пиксел, представящ рендираната повърхност от дадената гледна точка, [[Осветление в тримерното моделиране|източника на светлина]] и позицията на обекта. Системата LINKS-1 е разработена, за да реализира методология за рендиране на изображения, при която всеки пиксел може да бъде обработен паралелно и независимо чрез проследяване на лъчи. Чрез разработването на нова софтуерна методология специално за високоскоростно рендиране, LINKS-1 бе в състояние да рендира бързо много реалистични изображения.“ Тя е „използвана за създаване на първото в света триизмерно, подобно на [[планетариум]] видео на цялото [[Вселена|небе]], реализирано изцяло с компютърна графика. Видеото е представено в павилиона на [[Фуджицу|Fujitsu]] на Международната изложба през 1985 г. в [[Цукуба]].“
Като най-ранен документиран случай на проследяване на лъчи „в реално време“ с интерактивно рендиране (т.е. кадрова честота, по-голяма от един кадър в секунда) на конференцията за компютърна графика на SIGGRAPH през 2005 г. са цитирани инструментите REMRT/RT, разработени през 1986 г. от Mike Muuss за системата за параметрично моделиране BRL-CAD. Първоначално публикуван през 1987 г. в USENIX, рейтрейсърът на BRL-CAD е ранна реализация на паралелно разпределена мрежова система за проследяване на лъчи, която постига рендиране с няколко кадъра в секунда.<ref>
Оттогава насам са вложени значителни усилия и изследвания за реализиране на проследяване на лъчи в реално време за различни цели в самостоятелни настолни компютърни конфигурации. Тези цели включват интерактивни триизмерни графични приложения като [[Демо (програмиране)|графични демонстрации]], [[Видеоигра|компютърни и видео игри]] и рендиране на изображения. Някои софтуерни 3D двигатели в реално време, базирани на трасиране на лъчи, са разработени от [[Демосцена|демо програмистите]] от края на 90-те години.<ref>{{Цитат уеб|url=http://www.acm.org/tog/resources/RTNews/demos/overview.htm|title=The Realtime Raytracing Realm|author=Piero Foscari|work=ACM Transactions on Graphics|accessdate=2007-09-17}}</ref>
Line 193 ⟶ 194:
На 12 юни 2008 г. Intel демонстрира специална версия на ''Enemy Territory: Quake Wars'' , озаглавена ''Quake Wars: Ray Traced'' , която използва проследяване на лъчи за рендиране и работи в разделителна способност HD (720p). ETQW работи с 14-29 кадъра в секунда. Демонстрацията е проведена на 16-ядрена (4 гнезда, 4 ядра) система Xeon Tigerton, работеща на 2,93 GHz.<ref>{{Цитат уеб|url=http://www.tgdaily.com/html_tmp/content-view-37925-113.html|title=Intel converts ET: Quake Wars to ray tracing|author=Theo Valich|publisher=TG Daily|date=June 12, 2008|accessdate=2008-06-16}}</ref>
На конференцията SIGGRAPH 2009 Nvidia обявява OptiX – безплатен приложно-програмен интерфейс за проследяване на лъчи в реално време чрез графичните процесори на Nvidia. Той предоставя седем програмируеми входни точки към конвейера за проследяване на лъчи, позволявайки персонализирани камери, пресичания на лъчи с примитиви, шейдъри, сенки и др. Тази гъвкавост дава възможност за двупосочно проследяване на пътища, ''Metropolis light transport'' и много други алгоритми за рендиране, които не могат да бъдат реализирани с [[Рекурсия|опашкова рекурсия]].<ref>{{Цитат уеб|url=http://www.nvidia.com/object/optix.html|title=Nvidia OptiX|author=Nvidia|publisher=Nvidia|date=October 18, 2009|accessdate=2009-11-06}}</ref>
AMD предлага реалновремево проследяване на лъчи в графичните карти Vega чрез GPUOpen Radeon ProRender.<ref>
Imagination Technologies предлага безплатен [[Приложно-програмен интерфейс|приложно-програмен интерфейс]], наречен OpenRL, който ускорява алгоритмите за рендиране, базирани на на [[Рекурсия|опашкова рекурсия]] и заедно със специализиран фирмен хардуер работи с [[Autodesk Maya]], предоставяйки възможност, която списание 3D World определя като „реалновремево проследяване на лъчи за редовите художници“.<ref>{{Цитат уеб|url=http://www.3dworldmag.com/2013/04/16/hardware-review-caustic-series2-r2500-ray-tracing-accelerator-card/|title=3DWorld: Hardware review: Caustic Series2 R2500 ray-tracing accelerator card|accessdate=2013-04-23}}3D World, April 2013</ref>
Line 201 ⟶ 202:
През 2014 г. демонстрация на видеоиграта за [[PlayStation 4]] ''The Tommorow Children'', разработена от Q-Games и SIE Japan Studio, демонстрира нови техники за [[Компютърна графика|осветление]], разработени от Q-Games, в частност каскадно [[Воксел|вокселно]] проследяване на конуси, което симулира осветление в реално време и използва по-реалистични отражения, а не такива в екранното пространство.<ref name="ps10">{{Цитат уеб|url=http://blog.eu.playstation.com/2014/10/24/creating-striking-unusual-visuals-tomorrow-children-ps4-2/|title=Creating the beautiful, ground-breaking visuals of The Tomorrow Children on PS4|first=Dylan|last=Cuthbert|work=[[PlayStation Blog]]|date=October 24, 2015|accessdate=December 7, 2015}}</ref>
За предстоящата игра ''MechWarrior 5: Mercenaries'' е обявено, че използва проследяване на лъчи. През 2018 г. за съответната възможност се признава, че затруднява дори най-мощните графични карти през 2018 г.<ref>
== Изчислителна сложност ==
|