Ray tracing sa totoong oras. DirectX Raytracing: real-time ray tracing

Hindi pa katagal, ang 4A Games, ang lumikha ng mga kamangha-manghang makatotohanang laro sa Metro, ay naglabas ng isang video gamit ang teknolohiyang RTX ng Nvidia gamit ang METRO: EXODUS bilang isang halimbawa. Ang graphical na innovation na ito ay isang malaki at kumpiyansa na hakbang pasulong sa ray tracing. Ngunit ano ang ibig sabihin ng lahat ng ito?

Sa likod ng tabing ng lihim

Magsimula tayo sa simula pa lang. Una, ang ray tracing rendering ay isa sa mga pangunahing uri ng visualization na ginagamit sa mga pelikula at iba't ibang uri ng disenyo: mula sa industriya hanggang sa arkitektura. Ibig sabihin, ang nakikita mo sa mga website bilang mga larawan ng kagamitan ay eksaktong 3d render.

Ang kakanyahan ng teknolohiya ay ang mga modelo ng computer sa pisikal na pag-uugali ng liwanag sa pamamagitan ng pagkalkula ng tilapon ng mga kondisyonal na indibidwal na mga photon ng liwanag, iyon ay, kung ang isang sinag ay bumagsak sa isang bagay, kung gayon ito ay na-refracted sa loob nito o makikita mula dito sa isa. anggulo o iba pa. Ang resulta ay isang tiyak na bakas ng sinag ng liwanag na ito, kaya tinawag na "ray tracing".

Ang computer na ito ay nakabuo ng imahe ni Enrico Cerica gamit ang OctaneRender na nagpapakita ng mga sinag, anino, at repleksyon sa isang kumplikadong ibabaw ng sahig.

Ang tanging problema ay maraming mga sinag ang kailangan at para sa bawat isa sa kanila ay kinakailangan na paulit-ulit na kalkulahin ang bawat banggaan ng sinag na may mga hadlang. Ito ay, sa katunayan, isang simpleng problema sa matematika. Una, kailangan mong kalkulahin kung saan tumama ang sinag sa isang umiiral na bagay, iyon ay, kalkulahin ang banggaan, pagkatapos, batay sa tinukoy na mga katangian, kailangan mong gumawa ng karagdagang mga pagbabagong matematikal.


Pinasimpleng ray tracing scheme

Halimbawa, mayroong isang matte na ibabaw na may isang tiyak na ibinigay na kondisyon na pagkamagaspang, ngunit hindi ganap na magaspang, at ang sinag ay lumihis mula dito na may isang tiyak na posibilidad ng ilang anggulo na naiiba sa anggulo ng saklaw. Dapat itong isaalang-alang na kung ang bagay ay may pag-aari ng walang katapusang makinis, kung gayon ang anggulo ng saklaw ay katumbas ng anggulo ng pagmuni-muni. Kung ang mga katangian ng ibabaw ay nagsasalita ng manipis na ulap, pagkatapos ay mathematically ito ay natanto sa pamamagitan ng paglihis ng anggulo ng pagmuni-muni mula sa anggulo ng saklaw.

Sa buhay, ito ay totoo, ang ibabaw ay halos palaging hindi ganap na makinis. Samakatuwid, kapag ang liwanag ay tumama sa isang punto o iba pa, ito ay makikita na may kaugnayan sa lokasyon sa ibabaw, na maaaring kahit papaano ay paikutin na may kaugnayan sa eroplano na tila sa amin kahit na, at ang katabing sinag ay makikita sa isang ganap na naiibang direksyon. Kaya, nagiging malinaw na walang punto sa paggawa ng mga modelo ng bagay na sobrang polygonal, kaya ang mga iregularidad ay itinakda ng mga katangian ng ibabaw. Ang resulta ay katulad ng aktwal na pagkakalat ng liwanag mula sa matte na ibabaw.

Ngayon sa mga laro ay gumagamit sila ng isang bagay na mukhang pinahiran ng isang bagay tulad ng icing. Walang alinlangan, ang lahat ay nakakita ng kakaibang mga dingding at sahig sa mga laro na tila pinahiran ng ilang uri ng putik. Well, hindi mo kailangang gawin ito sa ray tracing - natural na nakakalat ang mga surface ng liwanag. Ito ay perpektong ipinapakita sa demo, mayroong isang bilang ng mga lugar mula sa pinakamaraming salamin hanggang sa pinaka matte.

Lalo na kapansin-pansin na sa matte na mga lugar ang pagmuni-muni ay lubos na nakasalalay sa kalapitan ng bagay sa ibabaw. Ibig sabihin, mas malayo ang bagay mula sa ibabaw, mas nagiging malabo ito. Ito ay isang mahalagang ari-arian na hindi natin napapansin sa buhay, bagaman ito ay umiiral.

Ngunit ang pinakamahalagang bagay ay ang mga anino. Walang mas masahol pa sa mga anino sa anumang laro.

Ang mga ito ay karaniwang mga projection lamang ng mga bagay na may matalim, hindi natural na mga gilid. Gayunpaman, mayroong mas mahusay, ayon sa mga pamantayan ng laro, mga anino. Ito ay mga malambot na opsyon na may linya ng paglipat, iyon ay, anino at penumbra.


Upang lumikha ng malambot na mga anino o nagkakalat na mga pagmuni-muni (tulad ng mga nakikita mo sa brushed metal, halimbawa), mas advanced na mga diskarte sa pagsubaybay sa sinag.

Ang problema lang ay hindi ito gumagana sa totoong buhay. Kung ang pinagmumulan ng liwanag ay hindi isang punto at hindi walang katapusang malayo, kung gayon ang halaga ng penumbra ay depende sa ratio ng distansya ng pinagmumulan ng liwanag mula sa bagay at ang distansya ng bagay mula sa anino nito. Iyon ay, ang gilid ng penumbra sa iba't ibang lugar nito ay maaaring mas malawak o mas makitid, lalo na pagdating sa malalaking pinagmumulan ng liwanag.

Halimbawa, ang liwanag mula sa bintana sa maulap na panahon ay nagbibigay ng mga malambot na anino na kung maglalagay ka ng bagay na mas maliit dalawang metro mula sa bintanang ito, makakakita ka ng malinaw na anino at bahagyang lilim sa base nito, at maaaring walang anino sa lahat mula sa itaas na bahagi ng bagay, at ang penumbra ay hindi magkakaroon ng malinaw na mga hangganan. Sa mga larong may tradisyonal na rasterization, hindi ito nangyayari.

Ang pagsubaybay sa ray ay hindi mahirap, ngunit mayroong maraming mga sinag, at, sa kasamaang palad, sa sandaling ito ay hindi posible na gawin ang lahat sa real time. Ang katotohanan ay sa buhay ang mga sinag ay magkakaiba sa ganap na magkakaibang direksyon. Magiging perpekto kung ang incident beam ay nahahati sa isang walang katapusang bilang ng mga beam, ang kabuuang liwanag nito ay depende sa pag-aari ng bagay na sumasalamin at ang paunang liwanag ng incident beam.

Upang mabawasan ang pagkarga, maaari mong limitahan ang bilang ng mga sinag, ang bilang ng mga banggaan, ngunit ang mga paghihigpit na ito ay humahantong sa katotohanan na sa larawan ay nakakakuha ka ng kakaunting piraso ng anino at hindi natural na maliwanag na mga spot mula sa mga pinagmumulan ng liwanag. Iyon ay, ang hindi sapat na dami ng data ay humahantong sa hitsura ng ingay, at ang buong kahirapan ay nakasalalay sa katotohanan na imposibleng kalkulahin ang eksena nang isang beses at pagkatapos ay baguhin lamang dito kung ano ang nagbabago mula sa frame hanggang sa frame, dahil nagbabago ang anumang gumagalaw na bagay. lahat ng mga ruta ng lahat ng sinag. Mula sa bawat paggalaw ng camera at mga bagay, kailangan mong "muling buuin" muli ang buong eksena, kaya naman ang mga pelikula ay nilikha ng mga render farm at maraming server na patuloy, sa loob ng ilang buwan, ay nag-render ng mga graphics. Ngunit, sa kasamaang-palad, sa real time sa mga laro imposible pa rin itong gawin.

Samakatuwid, ang tanong ay lumitaw, paano nakalabas ang Nvidia at mga kasosyo sa sitwasyong ito: ano ang kanilang isinakripisyo upang makamit ang real-time na pagsubaybay?

Dalawang kalahati ng isang buo

Kung maingat mong susundin kung paano nai-render ang larawan sa mga yugto, makikita mo na sa isang lugar pagkatapos ng ikalimang pagsasama, ang mga anino at ang liwanag mismo ay halos kapansin-pansing nagbabago. Nagiging malinaw kung saan, ano at paano ito titingnan sa huling anyo. Para dito, sa prinsipyo, kailangan ng real-time na software upang ma-twist mo ang mga light source, maunawaan kung saan magkakaroon ng ilang liwanag na nakasisilaw at pagkatapos ay simulan ang panghuling pag-render. Ito ay nananatiling makikita kung paano mauunawaan ang huling frame mula sa maputik na larawan. Sa katunayan, ang computer ay unang modelo ng orihinal na maingay na larawan, pagkatapos ay pinag-aaralan ito at, batay sa data na nakuha, gumuhit ng isa pa - ang pangwakas. Tulad ng ipinakita ng kasanayan, ang diskarte na ito ay mas simple sa mga tuntunin ng mga gastos sa mapagkukunan.

Sa katunayan, ang isang progresibong hakbang sa pagbuo ng real-time na pagsubaybay ay ang paglikha ng mga algorithm na nagpapahintulot sa amin na suriin ang isang larawan mula sa isang maingay na estado at iguhit ito sa normal. Ito ang pangunahing pagbabago. Lahat ng iba pa ay malawakang ginamit noon. Maraming renderer ang may GPU rendering at OpenGL plugin na sinusuportahan ng anumang OpenGL compatible graphics card.

Ngayon, inaangkin na ang pamamaraang ito sa pagbabawas ng ingay ay gumagana lamang sa mga malambot na core sa hinaharap na mga card mula sa Nvidia. Ngunit sa katunayan, ang teknolohiyang ito ay ipinakita sa maraming dami ngayon lamang, at ito ay lumitaw, tila, noong nakaraang taon, mula noong Oktubre, sa isa sa mga kaganapan, ang Unity ay nagpakita ng mismong teknolohiyang ito para sa pag-alis ng ingay sa real-time na pagsubaybay.

Ang lansihin ay hindi lahat ng bagay ay nakikilahok sa ray tracing gaya ng nararapat. Kaugnay nito, tatalakayin natin ang paksa ng pandaigdigang pag-iilaw - ang pinaka-masinsinang mapagkukunan na mekanismo ng pagsubaybay. Sa buhay, ang anumang bagay kung saan nahuhulog ang liwanag ay sumasalamin sa bahagi ng liwanag na ito. Halimbawa, kung ituturo mo ang isang pinagmumulan ng liwanag sa isang berdeng dingding, ang lahat ng ilaw ay magiging berde, dahil ang berdeng pader ay hindi sumisipsip ng liwanag nang maayos.


Reflection ng light rays mula sa ibabaw

Walang ganoong epekto sa demo. Sa halip na sumasalamin sa liwanag at baguhin ang pattern ng liwanag ng frame depende sa pinagmumulan ng liwanag, ang buong espasyo ay napuno ng mga maliliwanag na larawan, na ginagawang tila dynamic ang liwanag. Sa katunayan, hindi inilapat ng mga developer ang ray tracing sa mga detalye tulad ng haze at apoy.

Ang katotohanan ay ang mga sinag ng liwanag ay dapat kalkulahin anuman ang mahulog sa mga bagay o hindi. Iyon ay, ang pagdaragdag ng isang malaking bilang ng mga ilaw ay isang medyo mahirap na gawain para sa pagsubaybay sa mga kalkulasyon. Bilang karagdagan, walang mga bagay sa anumang techno demo na ginagaya ang mga transparent na bagay.

Kailan natin makikita ang benepisyo?

Batay sa mga pamantayang inilarawan sa itaas (kadiliman ng larawan at pagsubaybay sa hindi lahat ng mga bagay), maaari nating sabihin na ang mga graphic sa mga laro ay hindi pa maaaring magmukhang detalyado at makatotohanan tulad ng sa mga pelikula.

Gayunpaman, tiyak na may pag-unlad. Una, ang mga pagmumuni-muni ay mas madaling gawin, hindi na kailangang lumikha ng mga anino at liwanag na mapa - lahat ng ito ay nalutas sa pamamagitan ng pagsubaybay. Pangalawa, hindi bababa sa ilang pagkakahawig ng mga nakakalat na pagmuni-muni ang lumitaw. Pangatlo, ang pag-iilaw at mga anino ng mga bagay ay bumuti nang malaki. Sa kabuuan, maaari itong mapagtatalunan na ito ay maituturing na isang pangunahing teknolohiya sa mga laro na hindi susuko sa mga posisyon nito sa susunod na sampung taon.

Teksto: Alexey Kharitonov, QA, Bytex

Paraan ng back trace

Pamamaraan bakas sa likod Ang mga sinag ay nagbibigay-daan sa iyo upang makabuluhang bawasan ang paghahanap para sa mga light ray. Ang pamamaraan ay binuo noong 80s, ang mga gawa ay itinuturing na pangunahing pinaputi at Kay. Ayon sa pamamaraang ito, ang pagsubaybay sa sinag ay isinasagawa hindi mula sa mga mapagkukunan ng liwanag, ngunit sa kabaligtaran na direksyon - ang punto ng pagmamasid. Sa ganitong paraan, ang mga sinag lamang na nag-aambag sa pagbuo ng imahe ay isinasaalang-alang.

Isaalang-alang kung paano ka makakakuha ng bitmap na imahe ng ilang three-dimensional na eksena gamit ang back tracing method. Ipagpalagay na ang projection plane ay nahahati sa maraming mga parisukat - mga pixel. Pumili tayo ng gitnang projection na may nawawalang sentro sa ilang distansya mula sa projection plane. Gumuhit tayo ng isang tuwid na linya mula sa gitna ng pagbaba hanggang sa gitna ng parisukat (pixel) ng projection plane. Ito ang magiging pangunahing back trace ray. Kung ang tuwid na linya ng sinag na ito ay tumama sa isa o higit pang mga bagay sa eksena, pagkatapos ay piliin ang pinakamalapit na intersection point. Upang matukoy ang kulay ng isang pixel ng imahe, kinakailangang isaalang-alang ang mga katangian ng bagay, pati na rin kung anong uri ng light radiation ang nahuhulog sa kaukulang punto ng bagay.

Kung ang bagay ay specular (hindi bababa sa bahagyang), pagkatapos ay bumuo kami ng isang pangalawang ray - isang saklaw ng sinag, isinasaalang-alang ang nauna, pangunahing traced ray bilang isang reflection ray. Sa itaas, isinasaalang-alang namin ang specular reflection at nakakuha ng mga formula para sa reflected ray vector na ibinigay sa normal at incident ray vectors. Ngunit dito alam natin ang vector ng sinasalamin na sinag, ngunit paano mahahanap ang vector ng sinag ng insidente? Upang gawin ito, maaari mong gamitin ang parehong specular reflection formula, ngunit tinutukoy ang kinakailangang incident ray vector bilang ang reflected ray. Iyon ay, ang kabaligtaran na pagmuni-muni i.

Para sa isang perpektong salamin, ito ay sapat na upang masubaybayan lamang ang susunod na intersection point ng pangalawang beam na may ilang bagay. Ang isang hindi perpektong salamin ay lubos na nagpapahirap sa pagsubaybay - ito ay kinakailangan upang masubaybayan ang hindi isa, ngunit maraming mga sinag ng insidente, at isinasaalang-alang ang kontribusyon ng radiation mula sa iba pang mga bagay na nakikita mula sa isang naibigay na punto.

Kung ang bagay ay transparent, pagkatapos ito ay kinakailangan upang bumuo ng isang bagong ray, isa na, kapag refracted, ay magbibigay sa nakaraang traced ray. Dito maaari mo ring gamitin ang reversibility, na may bisa din para sa repraksyon.

Kung ang isang bagay ay may mga katangian ng nagkakalat na pagmuni-muni at repraksyon, kung gayon, sa pangkalahatang kaso, tulad ng para sa isang hindi perpektong salamin, kinakailangan upang subaybayan ang mga sinag na nagmumula sa lahat ng magagamit na mga bagay. Para sa diffuse reflection, ang intensity ng reflected light ay kilala na proporsyonal sa cosine ng anggulo sa pagitan ng ray vector mula sa light source at sa normal. Dito, ang pinagmumulan ng liwanag ay maaaring maging anumang bagay na nakikita mula sa isang partikular na punto, na may kakayahang magpadala ng liwanag na enerhiya.

Kapag ito ay lumabas; na ang kasalukuyang back tracing ray ay hindi bumalandra sa anumang bagay, ngunit napupunta sa libreng espasyo, pagkatapos ay ang pagsubaybay para sa ray na ito ay nagtatapos.

kanin. 14.1 Isang halimbawa ng reverse ray tracing.

Ray tracing sa anyo kung saan namin isinasaalang-alang ito dito, kahit na binabawasan nito ang enumeration, ay hindi pinapayagan ang pag-alis ng infinity ng bilang ng mga nasuri na ray. Sa katunayan, ginagawang posible ng paraang ito na agad na makakuha ng isang pangunahing backtracing ray para sa bawat punto ng imahe. Gayunpaman, maaari nang magkaroon ng isang walang katapusang bilang ng mga pangalawang reflection ray. Kaya, halimbawa, kung ang isang bagay ay maaaring magpakita ng liwanag mula sa anumang iba pang bagay, at kung ang iba pang mga bagay na ito ay sapat na malaki, kung gayon aling mga punto ng mga bagay na nagpapalabas ang dapat isaalang-alang upang mabuo ang kaukulang mga sinag, halimbawa, sa nagkakalat na pagmuni-muni? Malinaw na lahat ng mga puntos.

Paano gumagana ang ray tracing:

1. Ang isang haka-haka na sinag ay ibinubuga mula sa mata ng nagmamasid sa pamamagitan ng ilang pixel ng screen at ang landas nito ay sinusubaybayan hanggang sa mag-intersect ito sa bagay.

2. Mula sa unang punto ng intersection ng beam na may globo, isang reflected beam ay ibinubuga. Hayaang maging malabo ang ibabaw. Pagkatapos ay hindi kami gumuhit ng mga refracted ray. Nagtatalaga kami ng shadow ray mula sa intersection point hanggang sa light source. Dahil ang ray na ito ay hindi tumatawid sa isa pang opaque na ibabaw, ang pinagmumulan ng liwanag ay direktang nakakaapekto sa intensity ng pag-iilaw sa isang partikular na punto.

3. Hayaang mag-intersect ang reflected beam sa isa pang bagay, sa pagkakataong ito ay isang translucent sphere na sumasalamin at nagpapadala ng liwanag. Ang mga sinasalamin at na-refract na sinag ay ibinubuga kasama ng isang sinag ng anino na papunta sa pinagmumulan ng liwanag. Ang transmitted beam ay nagbabago ng direksyon nito bago at pagkatapos pumasok sa globo alinsunod sa epekto ng repraksyon.

4. Hayaang ang punto kung saan ang sinag ay tumatawid sa globo ay hindi direktang naiilaw ng pinagmulan, dahil ang landas ng sinag ng anino ay naharang ng isang malabo na ibabaw. Kung ang eksena ay naglalaman ng maraming pinagmumulan ng liwanag, kung gayon ang mga sinag ng anino ay kailangang ibuhos sa bawat isa sa kanila.

5. Ang impluwensya ng lahat ng mga sinag na nabuo nang tahasan o hindi malinaw gamit ang paunang sinag ay summed up at ang resulta ay tumutukoy sa halaga ng RGB ng puntong ito.

Sa Gamescom 2018, inanunsyo ni Nvidia ang isang serye ng Nvidia GeForce RTX graphics card na susuporta sa real-time ray tracing technology ng Nvidia RTX. Nalaman ng aming mga editor kung paano gagana ang teknolohiyang ito at kung bakit ito kinakailangan.

Ano ang Nvidia RTX?

Ang Nvidia RTX ay isang platform na naglalaman ng ilang kapaki-pakinabang na tool para sa mga developer na nagbubukas ng access sa isang bagong antas ng computer graphics. Ang Nvidia RTX ay magagamit lamang para sa bagong henerasyon ng Nvidia GeForce RTX graphics card batay sa Turing architecture. Ang pangunahing tampok ng platform ay ang posibilidad real time ray tracing(tinatawag ding ray tracing).

Ano ang ray tracing?

Ang Ray tracing ay isang feature na nagbibigay-daan sa iyong gayahin ang gawi ng liwanag, na lumilikha ng mapagkakatiwalaang pag-iilaw. Ngayon sa mga laro, ang mga sinag ay hindi gumagalaw sa real time, kaya naman ang larawan, bagama't madalas itong mukhang maganda, ay hindi pa rin sapat na makatotohanan - ang mga teknolohiyang kasalukuyang ginagamit ay mangangailangan ng malaking halaga ng mga mapagkukunan para sa ray tracing.

Ito ay naitama ng bagong Nvidia GeForce RTX graphics card series, na may sapat na kapangyarihan upang kalkulahin ang landas ng mga sinag.

Paano ito gumagana?

Ang RTX ay nagpapalabas ng mga sinag ng liwanag mula sa punto ng view ng player (camera) papunta sa nakapalibot na espasyo at kinakalkula sa ganitong paraan kung saan dapat lumitaw ang kulay ng pixel. Kapag natamaan ng mga beam ang isang bagay, maaari nilang:

  • Sumasalamin - ito ay pukawin ang hitsura ng isang pagmuni-muni sa ibabaw;
  • Huminto - lilikha ito ng anino sa gilid ng bagay na hindi natamaan ng liwanag
  • Refract - babaguhin nito ang direksyon ng sinag o makakaapekto sa kulay.
Ang pagkakaroon ng mga function na ito ay nagbibigay-daan sa iyo na lumikha ng mas mapagkakatiwalaang pag-iilaw at makatotohanang mga graphics. Ang prosesong ito ay napaka-resource-intensive at matagal nang ginagamit sa paglikha ng mga epekto ng pelikula. Ang pagkakaiba lang ay kapag nag-render ng isang frame ng isang pelikula, ang mga may-akda ay may access sa isang malaking halaga ng mga mapagkukunan at, maaari itong isaalang-alang, isang walang limitasyong tagal ng panahon. Sa mga laro, ang aparato ay may mga fraction ng isang segundo upang bumuo ng isang larawan, at ang video card ay ginagamit, kadalasan, isa, at hindi marami, tulad ng sa pagproseso ng mga pelikula.

Ito ay nag-udyok sa Nvidia na magpakilala ng mga karagdagang core sa GeForce RTX graphics card na kukuha sa karamihan ng workload, na magpapahusay sa pagganap. Nilagyan din sila ng artipisyal na katalinuhan, na ang gawain ay upang kalkulahin ang mga posibleng pagkakamali sa panahon ng proseso ng pagsubaybay, na makakatulong upang maiwasan ang mga ito nang maaga. Ito, tulad ng sinasabi ng mga developer, ay magpapataas din ng bilis ng trabaho.

At paano nakakaapekto ang ray tracing sa kalidad?

Sa panahon ng pagtatanghal ng mga video card, ipinakita ni Nvidia ang ilang mga halimbawa kung paano gumagana ang ray tracing: sa partikular, nalaman na ang ilang paparating na mga laro, kabilang ang Shadow of the Tomb Raider at Battlefield 5, ay gagana sa RTX platform. Ang function na ito, gayunpaman, ay magiging opsyonal sa laro, dahil ang isa sa mga bagong video card ay kailangan para sa pagsubaybay. Ang mga trailer na ipinakita ng kumpanya sa panahon ng pagtatanghal ay maaaring matingnan sa ibaba:

Shadow of the Tomb Raider, na ipapalabas sa Setyembre 14 ngayong taon:

Battlefield 5, na ipapalabas sa Oktubre 19:

Metro Exodus, na nakatakdang ipalabas sa Pebrero 19, 2019:

Control , na wala pang petsa ng paglabas:

Kasama niyan, Nvidia, ano pang mga laro ang makakakuha ng ray tracing.

Paano paganahin ang RTX?

Dahil sa mga teknikal na tampok ng teknolohiyang ito, tanging ang mga video card na may arkitektura ng Turing ang susuporta sa ray tracing - ang mga device na kasalukuyang magagamit ay hindi makayanan ang dami ng trabaho na nangangailangan ng pagsubaybay. Sa ngayon, ang tanging mga video card na may ganitong arkitektura ay ang serye ng Nvidia GeForce RTX, ang mga modelo na magagamit para sa pre-order mula 48,000 hanggang 96,000 rubles.

Mayroon bang mga analogue para sa AMD?

Ang AMD ay may sariling variant ng real-time ray tracing technology, na nasa kanilang Radeon ProRender engine. Inihayag ng kumpanya ang pag-unlad nito pabalik sa GDC 2018, na naganap noong Marso. Ang pangunahing pagkakaiba sa pagitan ng pamamaraan ng AMD at Nvidia ay ang AMD ay nagbibigay ng access hindi lamang sa pagsubaybay, kundi pati na rin sa rasterization, isang teknolohiya na ginagamit na ngayon sa lahat ng mga laro. Nagbibigay-daan ito sa iyo na parehong gumamit ng pagsubaybay, pagkuha ng mas mahusay na pag-iilaw, at pag-save ng mga mapagkukunan sa mga lugar kung saan ang pagsubaybay ay magiging isang hindi kinakailangang pagkarga sa video card.

Ang teknolohiyang tatakbo sa Vulkan API ay nasa pagbuo pa rin.

Tulad ng sinabi ng Nvidia sa panahon ng pagtatanghal nito, ang pagbuo ng teknolohiya ng RTX ay makabuluhang mapapabuti ang bahagi ng graphics ng mga laro, na magpapalawak sa hanay ng mga tool na magagamit sa mga developer. Gayunpaman, masyadong maaga upang pag-usapan ang tungkol sa isang pangkalahatang rebolusyon ng graphics - hindi lahat ng mga laro ay susuportahan ang teknolohiyang ito, at ang halaga ng mga video card na may suporta nito ay medyo mataas. Ang pagtatanghal ng mga bagong video card ay nangangahulugan na mayroong pag-unlad sa mga graphical na detalye, at sa paglipas ng panahon ito ay lalago at lalago.

PANIMULA

Mayroong ilang mga paraan para sa pagbuo ng mga makatotohanang larawan, tulad ng forward ray tracing (photon tracing) at back ray tracing.

Ang mga paraan ng pagsubaybay sa ray ay itinuturing na pinakamakapangyarihan at maraming nalalaman na pamamaraan para sa paglikha ng mga makatotohanang larawan ngayon. Maraming mga halimbawa ng pagpapatupad ng mga algorithm sa pagsubaybay para sa mataas na kalidad na pagpapakita ng mga pinakakumplikadong three-dimensional na eksena. Mapapansin na ang pagiging pandaigdigan ng mga pamamaraan ng pagsubaybay ay higit sa lahat dahil sa katotohanan na ang mga ito ay batay sa simple at malinaw na mga konsepto na sumasalamin sa ating karanasan sa pagdama sa mundo sa ating paligid.

Ang mga bagay sa paligid natin ay may mga sumusunod na katangian kaugnay ng liwanag:

magningning;

sumasalamin at sumipsip;

dumaan sa kanilang sarili.

Ang bawat isa sa mga katangiang ito ay maaaring ilarawan ng ilang hanay ng mga katangian.

Maaaring mailalarawan ang radiation sa pamamagitan ng intensity at spectrum.

Ang pag-aari ng pagmuni-muni (pagsipsip) ay maaaring inilarawan sa pamamagitan ng mga katangian ng nagkakalat na scattering at specular reflection. Ang transparency ay maaaring ilarawan sa pamamagitan ng intensity attenuation at repraksyon.

Ang mga sinag ng liwanag ay nagmumula sa mga punto sa ibabaw (volume) ng mga bagay na umiilaw. Ang ganitong mga sinag ay maaaring tawaging pangunahin - pinapaliwanag nila ang lahat ng iba pa. Hindi mabilang na mga pangunahing sinag ang nagmumula sa mga pinagmumulan ng radiation sa iba't ibang direksyon. Ang ilang mga sinag ay napupunta sa libreng espasyo, at ang ilan ay nahuhulog sa iba pang mga bagay.

Bilang resulta ng pagkilos ng mga pangunahing sinag sa mga bagay, lumitaw ang pangalawang sinag. Ang ilan sa mga ito ay napupunta sa iba pang mga bagay. Kaya, paulit-ulit na sinasalamin at na-refracte, ang mga indibidwal na sinag ng liwanag ay dumating sa punto ng pagmamasid. Kaya, ang imahe ng eksena ay nabuo sa pamamagitan ng ilang hanay ng mga light ray.

Ang kulay ng mga indibidwal na punto ng imahe ay tinutukoy ng spectrum at intensity ng mga pangunahing sinag ng mga pinagmumulan ng radiation, pati na rin ang pagsipsip ng liwanag na enerhiya sa mga bagay na nakatagpo sa landas ng kaukulang mga sinag.

Ang direktang pagpapatupad ng ray model na ito ng imaging ay mahirap. Maaari mong subukang bumuo ng algorithm ng pagbuo ng imahe sa tinukoy na paraan. Sa ganoong algorithm, kinakailangang ibilang ang lahat ng pangunahing sinag at matukoy ang mga tumama sa mga bagay at camera. Pagkatapos ay umulit sa lahat ng pangalawang sinag, at isaalang-alang din ang mga tumama sa mga bagay at camera. atbp. Ang algorithm na ito ay tinatawag na direct ray tracing. Ang pangunahing kawalan ng pamamaraang ito ay maraming mga hindi kinakailangang operasyon na nauugnay sa pagkalkula ng mga sinag, na pagkatapos ay hindi ginagamit.

1. REVERSE RAY TRACING

Ang gawaing ito ay nakatuon sa pamamaraang ito ng pagbuo ng mga makatotohanang larawan.

Ang paraan ng reverse ray tracing ay maaaring makabuluhang bawasan ang paghahanap para sa mga light ray. Ang pamamaraan ay binuo noong 80s, ang mga gawa ni Whitted at Kay ay itinuturing na pangunahing. Ayon sa pamamaraang ito, ang pagsubaybay sa sinag ay isinasagawa hindi mula sa mga mapagkukunan ng liwanag, ngunit sa kabaligtaran na direksyon - mula sa punto ng pagmamasid. Sa ganitong paraan, ang mga sinag lamang na nag-aambag sa pagbuo ng imahe ay isinasaalang-alang.

Ang projection plane ay nahahati sa maraming pixel. Pumili tayo ng gitnang projection na may nawawalang sentro sa ilang distansya mula sa projection plane. Gumuhit ng tuwid na linya mula sa nawawalang sentro hanggang sa gitna ng projection plane pixel. Ito ang magiging pangunahing back trace ray. Kung ang sinag na ito ay tumama sa isa o higit pang mga bagay sa eksena, pagkatapos ay piliin ang pinakamalapit na intersection point. Upang matukoy ang kulay ng isang pixel ng imahe, kinakailangang isaalang-alang ang mga katangian ng bagay, pati na rin kung anong uri ng light radiation ang nahuhulog sa kaukulang punto ng bagay.

Kung ang bagay ay specular (hindi bababa sa bahagyang), pagkatapos ay bumuo kami ng isang pangalawang ray - isang saklaw ng sinag, isinasaalang-alang ang nauna, pangunahing traced ray bilang isang reflection ray.

Para sa isang perpektong salamin, ito ay sapat na upang masubaybayan lamang ang susunod na punto ng intersection ng pangalawang beam na may ilang bagay. Ang perpektong salamin ay may perpektong makinis na pinakintab na ibabaw, kaya ang isang sinasalamin na sinag ay tumutugma lamang sa isang sinag ng insidente. Ang salamin ay maaaring madilim, iyon ay, sumipsip ng bahagi ng liwanag na enerhiya, ngunit ang panuntunan ay nananatili pa rin: ang isang sinag ay bumagsak - ang isa ay makikita.

Kung ang bagay ay transparent, pagkatapos ito ay kinakailangan upang bumuo ng isang bagong ray, isa na, kapag refracted, ay magbibigay sa nakaraang traced ray.

Para sa diffuse reflection, ang intensity ng reflected light ay kilala na proporsyonal sa cosine ng anggulo sa pagitan ng ray vector mula sa light source at sa normal.

Kapag lumabas na ang kasalukuyang back tracing ray ay hindi bumalandra sa anumang bagay, ngunit napupunta sa libreng espasyo, pagkatapos ay ang pagsubaybay para sa ray na ito ay nagtatapos.

Sa praktikal na pagpapatupad ng paraan ng back tracing, ipinakilala ang mga paghihigpit. Ang ilan sa mga ito ay kinakailangan upang malutas ang problema ng synthesis ng imahe sa prinsipyo, at ang ilang mga paghihigpit ay maaaring makabuluhang taasan ang bilis ng pagsubaybay.

Mga paghihigpit kapag nagpapatupad ng pagsubaybay

Sa lahat ng uri ng mga bagay, iisa-isahin natin ang ilan, na tatawagin nating mga pinagmumulan ng liwanag. Ang mga pinagmumulan ng liwanag ay maaari lamang maglabas ng liwanag, hindi nila ito maipapakita o mai-refract. Isasaalang-alang lamang namin ang mga point light source.

Ang mga katangian ng mapanimdim na ibabaw ay inilarawan sa pamamagitan ng kabuuan ng dalawang bahagi - nagkakalat at specular.

Sa turn, ang specularity ay inilalarawan din ng dalawang bahagi. Ang una (pagsalamin) ay isinasaalang-alang ang pagmuni-muni mula sa iba pang mga bagay na hindi pinagmumulan ng liwanag. Isang specularly reflected ray r lamang ang binuo para sa karagdagang pagsubaybay. Ang pangalawang bahagi (specular) ay nangangahulugang mga highlight mula sa mga light source. Upang gawin ito, ang mga sinag ay nakadirekta sa lahat ng pinagmumulan ng liwanag at ang mga anggulo na nabuo ng mga sinag na ito na may specularly reflected back-tracing ray (r) ay tinutukoy. Sa pag-mirror, ang kulay ng isang surface point ay tinutukoy ng katutubong kulay ng kung ano ang ipinapakita.

Sa nagkakalat na pagmuni-muni, ang mga sinag lamang mula sa mga pinagmumulan ng liwanag ay isinasaalang-alang. Ang mga sinag mula sa mga specularly reflective na ibabaw ay HINDI PANSININ. Kung ang isang sinag na nakadirekta sa isang ibinigay na pinagmumulan ng liwanag ay sakop ng isa pang bagay, kung gayon ang puntong ito ng bagay ay nasa anino. Sa diffuse reflection, ang kulay ng isang iluminated point sa isang surface ay tinutukoy ng intrinsic na kulay ng surface at ang kulay ng light source.

Para sa mga transparent (transparent) na bagay, ang pagtitiwala ng refractive index sa wavelength ay hindi isinasaalang-alang. (Minsan ang transparency ay karaniwang na-modelo nang walang repraksyon, ibig sabihin, ang direksyon ng refracted beam t ay tumutugma sa direksyon ng incident beam.)

Upang isaalang-alang ang pag-iilaw ng mga bagay sa pamamagitan ng liwanag na nakakalat ng iba pang mga bagay, ang bahagi ng background (ambient) ay ipinakilala.

Upang makumpleto ang bakas, isang limitasyon sa bilang ng mga pag-ulit (recursion depth) ay ipinakilala.

Mga konklusyon sa paraan ng back trace

Mga kalamangan:

Ang pagiging pandaigdigan ng pamamaraan, ang kakayahang magamit nito para sa synthesis ng mga imahe ng medyo kumplikadong spatial scheme. Naglalaman ng maraming batas ng geometric na optika. Iba't ibang projection lang.

Kahit na ang mga pinutol na bersyon ng pamamaraang ito ay nagbibigay-daan sa pagkuha ng medyo makatotohanang mga imahe. Halimbawa, kung nililimitahan natin ang ating sarili sa mga pangunahing sinag lamang (mula sa projection point), magreresulta ito sa pag-aalis ng mga hindi nakikitang punto. Ang pagsubaybay sa isa o dalawang pangalawang sinag ay nagbibigay ng mga anino, specular na transparency.

Ang lahat ng mga pagbabago sa coordinate ay linear, kaya madaling gamitin ang mga texture.

Mga disadvantages:

Mga problema sa pagmomodelo ng nagkakalat na pagmuni-muni at repraksyon.

Para sa bawat punto ng imahe, maraming mga pagpapatakbo ng computational ang dapat gawin. Ang pagsubaybay ay isa sa pinakamabagal na algorithm ng synthesis ng imahe.

2. BAHAGI NG DISENYO

Mga algorithm.

Reverse ray tracing.

kanin. 1 - Block diagram ng paulit-ulit na algorithm para sa reverse ray tracing

ray tracing programming language

Sa programang ito, ang backtrace algorithm ay ipinapatupad sa paulit-ulit na paraan. Ang pag-andar para sa pagkalkula ng intensity ng pangunahing ray ay recursively na tinatawag ang sarili nito upang mahanap ang mga intensity ng sinasalamin at refracted ray.

Algorithm:

Upang kalkulahin ang kulay ng bawat pixel sa framebuffer, ang mga sumusunod na hakbang ay isinasagawa:

Hanapin ang mga coordinate ng isang pixel sa world coordinate system.

Hanapin ang mga coordinate ng primary ray.

Sinisimulan ang function para sa pagkalkula ng intensity ng pangunahing sinag.

Hanapin ang mga intersection ng ray kasama ang lahat ng mga primitive sa eksena at piliin ang pinakamalapit.

Kung ang intersection ay hindi natagpuan, kung gayon ang sinag ay napunta sa libreng espasyo.

Upang kalkulahin ang kulay, kinukuha namin ang kabuuang intensity na katumbas ng intensity ng background. Pumunta sa hakbang 12. Kung may nakitang intersection, pumunta sa hakbang 6.

Kinakalkula namin ang "lokal" na intensity ng kulay ng bagay kung saan kabilang ang intersection point. Ang ibig sabihin ng "lokal" na intensity ay ang intensity na isinasaalang-alang ang intensity ng diffusely reflected light at ang intensity ng glare.

Kung ang materyal ay sumasalamin sa liwanag lamang ng diffusely, pagkatapos ay isinasaalang-alang namin ang intensity ng sinasalamin at refracted na ilaw na zero. Pumunta sa hakbang 12. Kung hindi, pumunta sa hakbang 8.

Kung ang pinakamataas na lalim ng recursion ay naabot, pagkatapos ay kunin ang mga intensity ng sinasalamin at refracted na ilaw upang maging zero. Pumunta sa hakbang 12. Kung hindi, pumunta sa hakbang 9.

Kalkulahin ang vector ng reflected beam. Pagpapatakbo ng recursion upang mahanap ang intensity ng reflected beam.

Kalkulahin ang refracted ray vector. Pagpapatakbo ng recursion upang mahanap ang intensity ng refracted beam.

Pagkalkula ng kabuuang intensity ng kulay. Kasama sa kabuuang intensity ang nakakalat na intensity ng liwanag, lokal na intensity, at intensity ng reflected at refracted rays.

Bumalik sa call point ng function ng pagkalkula ng intensity ng ray.

Kung kinakalkula ang pangunahing ray, pagkatapos ay isang pixel ng kinakalkula na kulay ang inilalagay sa buffer ng frame. Magpatuloy tayo sa pagkalkula ng susunod na pixel ng frame buffer. Kung kinakalkula ang reflected (refracted) beam, ang nakalkulang intensity ay kukunin bilang intensity ng reflected (refracted) beam sa nakaraang hakbang ng recursion.

Pagbuo ng mga anino.

Solid na mga anino.

Upang makabuo ng mga solidong anino sa algorithm ng pagsubaybay, sa yugto ng pagkalkula ng "lokal" na intensity ng kulay sa punto ng bagay, ang "visibility" ng bawat pinagmumulan ng liwanag mula sa puntong ito ay sinusuri.

Ang prinsipyo ng algorithm.

Ang isang sinag na nakadirekta sa pinagmumulan ng liwanag ay binuo mula sa nasubok na punto.

Ang isang paghahanap ay ginawa para sa mga intersection ng ray na ito na may mga primitive na eksena sa pagitan ng puntong sinusuri at ang pinagmulan.

Kung may makitang kahit isang intersection, ang puntong sinusuri ay nasa anino. Kapag kinakalkula ang kulay nito, ang pinagmulan kung saan isinagawa ang tseke ay hindi isinasaalang-alang.

napapatunayang pinagmulan.

Ang pamamaraang ito ng paghahanap ng mga anino ay nagbibigay ng katanggap-tanggap na resulta hangga't walang mga transparent na bagay sa eksena. Gayunpaman, ang solid na itim na anino ng salamin ay hindi mukhang makatotohanan. Bahagyang nagpapadala ng liwanag ang salamin, kaya dapat isaalang-alang ang intensity ng nakatagong pinagmulan kapag kinakalkula ang intensity ng liwanag sa punto ng bagay, ngunit dapat itong mapahina kapag dumaan ang liwanag sa salamin.

Matematika at pisikal na background ng back ray tracing algorithm.

Pag-iilaw.

Ang intensity ng liwanag ay ang kabuuan ng intensity ng backlight ng eksena, ang intensity ng diffusely reflected light ng mga source, ang intensity ng glare mula sa mga source ("lokal" na mga katangian ng pag-iilaw), ang intensity ng specularly reflected beam, at ang intensity ng refracted beam, kung mayroon man.

Ang backlight intensity (IA) ay ibinibigay ng ilang pare-pareho.

Ang intensity ng diffusely reflected light (ID) ay kinakalkula ayon sa classical na "cosine law".

ID = IL cos α,(2.2.1.6)

kung saan ang IL ay ang intensity ng pinagmumulan ng liwanag, ang α ay ang anggulo sa pagitan ng normal sa ibabaw at ang direksyon sa pinagmulan.

Sa kaso ng pag-iilaw sa eksena na may ilang mga mapagkukunan, ang Id ay kinakalkula para sa bawat isa sa kanila at pagkatapos ay summed up.

IDi =Σ ILi cos αi.(2.2.1.7)

Ang intensity ng flare mula sa pinagmulan (IS) ay kinakalkula ayon sa modelo ng Phong.

IS = IL cosp β,(2.2.1.8)

kung saan ang IL ay ang intensity ng pinagmumulan ng liwanag (0<=IL<=1), β - угол между отраженным лучом от источника света и направлением на точку, в которой расположена камера (центр проекции), p - некоторая степень от 1 до 200 -влияет на размытость блика. При

Sa mababang halaga ng p, ang highlight ay mas malabo.

Tulad ng pagkalkula ng ID, sa kaso ng pag-iilaw ng eksena sa pamamagitan ng ilang mga mapagkukunan, ang IS ay kinakalkula nang hiwalay para sa bawat pinagmulan, at pagkatapos ay ang mga resulta ay nasusuma.

ISi =Σ ILi cosp β i.(2.2.1.9)

Ang intensity ng specularly reflected (IR) at refracted (IT) light ay kinakalkula para sa reflected at refracted rays sa susunod na hakbang ng recursion. Kung naabot na ang limitasyon sa lalim ng recursion, ang mga intensity na ito ay ituturing na zero. Mula sa intensity ng IR, r porsyento ay kinuha, at mula sa IT - t = 1 - r (tingnan ang nakaraang seksyon).

Bilang karagdagan, ang mga sumusunod na coefficient ay ipinakilala: KD - koepisyent ng nagkakalat na pagmuni-muni ng ibabaw, KS - koepisyent ng glare - ang koepisyent na ito ay isang katangian ng pagkamagaspang ng mapanimdim na ibabaw. Kung mas malaki ang pagkamagaspang ng ibabaw, mas kaunting liwanag ang nakikita mula dito sa specularly at mas kaunting liwanag na ipinapadala nito, at naaayon sa mas maraming liwanag na ito ay sumasalamin sa diffusely.<= KD <= 1.

Sa KD = 0 - ang lahat ng ilaw na bumabagsak sa ibabaw ay makikita at na-refracted. KD = 1 - lahat ng liwanag ay nasasalamin nang diffusely. Ang intensity ng diffusely reflected light at ang intensity ng backlight ay pinarami ng salik na ito. Ang intensity ng specularly reflected at refracted na liwanag ay pinarami ng (1 - KD). Ang coefficient na ito ay responsable para sa liwanag ng glare mula sa pinagmulan. 0<=KS<=1.

Sa KS = 0 - ang highlight ay hindi nakikita, sa KS = 1 - ang liwanag ng highlight ay maximum.

Kaya, ang huling formula para sa pagkalkula ng intensity ng isang bagay sa ilang mga punto ay magiging ganito:

I = IAKD + ​​​​Σ(ILiKDcos αi + ILiKScosp β i) + (1 - KD)(IRr + IT(1 - r)).(2.2.1.10)

Dapat tandaan na ang huling intensity ay hindi dapat higit sa isa. Kung mangyari ito, ang puntong ito ng larawan ay magiging overexposed. Ang intensity nito ay dapat na i-reset ng isa.

Upang makakuha ng isang kulay na imahe, ito ay kinakailangan upang isakatuparan ang mga kalkulasyon nang hiwalay para sa pula, berde at asul na bahagi ng ilaw. Ang kulay ng isang pixel ng imahe ay kakalkulahin sa pamamagitan ng pag-multiply sa bawat bahagi ng intensity sa isang numero na tumutukoy sa maximum na bilang ng mga gradasyon ng intensity ng imahe. Para sa isang 32-bit na imahe, ito ay katumbas ng 255 para sa bawat isa sa mga kulay (R, G, B).

255*IR,= 255*IG,= 255*IB.

Narito ang IR (hindi malito sa intensity ng specularly reflected light), IG, IB ay ang mga intensity ng tatlong bahagi ng liwanag sa isang punto, na nakuha ng formula sa itaas.

Ang mga coefficient KD, KS, p ay ang mga indibidwal na katangian ng bagay, na sumasalamin sa mga katangian nito. Bilang karagdagan, mayroong isa pang koepisyent - ang absolute refractive index n. n = c / v, kung saan ang c ay ang bilis ng liwanag sa vacuum, ang v ay ang bilis ng liwanag sa daluyan (sa loob ng bagay). Para sa ganap na opaque na mga katawan, ang koepisyent na ito ay katumbas ng ∞ (dahil ang bilis ng liwanag sa loob ng katawan ay zero). Sa programa, upang tukuyin ang isang ganap na opaque na katawan, dapat mong itakda ang koepisyent na ito >> 1 (mga 10,000). Sa kasong ito, ang proporsyon ng specularly reflected light r ay may posibilidad sa pagkakaisa, at refracted, ayon sa pagkakabanggit, sa zero.

Pagkalkula ng mga normal.

Sa algorithm ng pagsubaybay, kailangan ang mga normal sa mga bagay upang kalkulahin ang mga sinasalamin at na-refracted na mga sinag, pati na rin upang matukoy ang pag-iilaw ayon sa modelo ng Phong.

Sa programang ito, mayroong tatlong uri ng mga primitive kung saan binuo ang eksena. Ito ay isang polygon (tatsulok), isang ellipsoid at isang paraboloid. Ang huling dalawa ay ipinakilala para sa isang mas makatotohanang imitasyon ng isang baso (maaari din itong itayo mula sa mga polygon, ngunit ang modelo ay magiging mas magaspang).

Pagkalkula ng normal sa isang polygon (tatsulok).

Ang pagkalkula ng normal sa isang tatsulok ay nabawasan sa pagpapatakbo ng vector multiplication. Hayaang ibigay ang tatsulok na ABC ng mga coordinate ng tatlong vertices nito:

XA, YA, ZA, XB, YB, ZB, XC, YC, ZC.

Kalkulahin natin ang mga coordinate ng dalawang vector, halimbawa AB at AC:

XB - XA,= XB - XA,

ZAB = XB - XA,(2.2.2.1)= XC - XA,= XC - XA,= XC - XA.

Ang normal na mga coordinate ng vector ay kakalkulahin gamit ang mga formula:

YABZAC - YACZAB,= XABZAC - XACZAB,(2.2.2.2)= XABYAC - XACYAB.

Hindi na kailangang kalkulahin ang mga coordinate ng normal na vector sa tatsulok sa bawat oras sa trace body, dahil ang mga normal ay pareho sa anumang punto ng tatsulok. Sapat na bilangin ang mga ito nang isang beses sa pagsisimula ng bahagi ng programa at i-save ang mga ito. Kapag inikot mo ang isang tatsulok, dapat mo ring iikot ang normal nito.

Pagkalkula ng normal sa ibabaw ng pangalawang order.

Ang ibabaw ng pangalawang order ay ibinibigay sa pangkalahatang kaso sa pamamagitan ng isang equation ng form:

Q(x,y,z) = a1x2 + a2y2 + a3z2 + b1yz + b2xz + b3xy + c1x +c2y +c3z + d =0.

Ngunit gagamit tayo ng ibang anyo ng notasyon. Kaya ang ellipsoid equation ay magiging ganito:

(x-x0)2/A2 + (y-y0)2/B2 + (z-z0)2 /C2 = 1,(2.2.2.3)

kung saan ang x0, y0, z0 ay ang mga coordinate ng sentro ng ellipsoid, A, B, C ay ang mga haba ng semiaxes ng ellipsoid.

Paraboloid equation:

(x-x0)2/A2 + (y-y0)2/B2 - (z-z0)2 /C2 = 1,(2.2.2.4)

kung saan ang x0, y0, z0 ay ang mga coordinate ng sentro ng paraboloid, A, B, C ay ang mga haba ng semi-axes ng paraboloid. Ang axis ng paraboloid ay matatagpuan sa kahabaan ng Oz axis ng world coordinate system. Upang kalkulahin ang mga coordinate ng normal na vector, kinakailangan upang kalkulahin ang mga partial derivatives na may paggalang sa x, y, z.

Ellipsoid normal na vector coordinate:

Yn \u003d 2 (y-y0) / B2, \u003d 2 (z-z0) / C2.

Ang direksyon ng isang vector ay hindi magbabago kung ang lahat ng mga coordinate nito ay nahahati sa 2:

Xn = (x-x0)/A2,= (y-y0)/B2,(2.2.2.5)

Zn \u003d (z-z0) / C2.

Ang mga coordinate ng normal na vector ng isang paraboloid ay kinakalkula nang katulad:

Xn = (x-x0)/A2,= (y-y0)/B2,(2.2.2.6)

Zn \u003d - (z-z0) / C2.

Ang normal para sa second-order surface ay kailangang direktang kalkulahin sa trace body, dahil ang mga normal ay iba sa iba't ibang punto ng figure.

Pagkalkula ng sinasalamin na sinag.

Hayaang maibigay ang vector ng incident ray S, at malaman ang normal na vector N. Kinakailangang hanapin ang vector ng reflected ray R.

Isaalang-alang ang mga unit vector R1, S1, at N1. Dahil ang mga vectors ng normal, ang incident beam at ang reflected beam ay nasa parehong eroplano, maaari nating isulat ang R1 + S1 = N`, kung saan ang N` ay ang vector na tumutugma sa diagonal ng rhombus at tumutugma sa direksyon ng normal. . Ang haba ng vector N` ay katumbas ng 2cosθ. Dahil ang vector N` ay tumutugma sa direksyon sa N1, kung gayon

N` = N`2cosθ.

Mula dito makikita natin ang unit vector ng sinasalamin na sinag:

R1 = N1 2cosθ - S1 = N/|N| 2cosθ - S/|S|.

Hanapin natin ang cosθ. Magagawa ito gamit ang scalar product ng mga vectors N at S:


Ipagpalagay na ang kinakailangang vector ng reflected beam ay magkakaroon ng kaparehong haba ng vector ng incident beam, ibig sabihin, R = |S| R1, nakukuha namin

N 2NS/|N|2 - S.

Ang solusyon na ito ay nasa anyong vector. Isulat natin ang mga coordinate ng vector:

2xN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) - xS,= 2yN(xNxS+yNyS+zNzS)/(xN2+yN2+zN2) - yS,(2.2.3.1)= 2zN(xNxS+y +zNzS)/(xN2+yN2+zN2) - zS.

Pagkalkula ng refracted beam.

Hayaang magbigay ng dalawang unit vectors: S1 ay ang vector ng incident beam, at N1 ay ang vector ng normal sa interface sa pagitan ng dalawang media. Dapat ding malaman ang dalawang refractive index para sa media na ito - n1 at n2 (o ang ratio ng mga ito).

Kinakailangang hanapin ang unit vector ng refracted ray T1. Para sa solusyon, nagsasagawa kami ng ilang mga geometric na konstruksyon.

Ang gustong vector T1 ay katumbas ng kabuuan ng dalawang vectors:

Hanapin muna natin ang vector NT. Ito ay kabaligtaran ng direksyon sa normal na vector, at ang haba nito ay katumbas ng |T1| cos α2 = cos α2 (dahil ang T1 ay unit). Kaya, NT = -N1 cos α2. Kinakailangang matukoy ang cos α2. Isulat natin ang batas ng repraksyon n1 sin α1 = n2 sin α2 sa anyo:

sinα2 = n sinα1,

kung saan n = n1 / n2.

Gamitin natin ang pagkakakilanlan cos2α + sin2α = 1. Pagkatapos

cosα2 = √ 1 - sin2α2 = √ 1 - n2 sin2α1

cosα2 = √ (1 + n2 (cos2α1 - 1)

Ang halaga ng cos α1 ay maaaring ipahayag sa mga tuntunin ng scalar product ng unit vectors S1 at N1, iyon ay, cos α1 = S1N1. Pagkatapos ay maaari nating isulat ang sumusunod na expression para sa NT vector:

N1√1+n2((S1N1)2 - 1).

Ito ay nananatiling makahanap ng isang expression para sa vector B. Ito ay matatagpuan sa parehong linya kasama ang vector A, at A = S1 - NS. Isinasaalang-alang na ang NS ay katumbas ng N1 cos α1, pagkatapos ay A = S1 - N1 cos α1. Dahil cos α1 = S1N1, pagkatapos ay A = S1 - N1 (S1N1).

Dahil ang haba ng vector A ay katumbas ng sin α1, at ang haba ng vector B ay katumbas ng sin α2, kung gayon

|B|/|A| = sinα2/ sinα1 = n2/n1 = n,

saan |B| = n |A|. Isinasaalang-alang ang kamag-anak na posisyon ng mga vectors A at B, nakuha namin

NA =n(N1(S1N1) - S1).

Ngayon ay maaari nating isulat ang nais na expression para sa unit vector ng repraksyon ray T1:

T1 = nN1 (S1N1) - nS1 - N1√1 + n2 ((S1N1)2 - 1).(2.2.4.1)

Pagkalkula ng punto ng intersection sa primitives.

Sa algorithm ng pagsubaybay, upang makabuo ng isang imahe, kinakailangan upang kalkulahin ang mga intersection point ng mga ray na may mga primitives ng eksena. Ang sinag ay ibinibigay ng isang parametric equation ng isang tuwid na linya. Ang anumang punto ng sinag ay nakakatugon sa equation

R = A + Vt,(2.2.5.1)

kung saan ang R ay ang radius vector ng isang arbitrary point na kabilang sa ray, ang A ay ang radius vector ng paunang punto ng ray, ang V ay ang direction vector ng ray, t ay isang parameter.

Kung ang direksyon ng vector V ay na-normalize, ang parameter na t ay magiging katumbas ng numero sa distansya mula sa panimulang punto ng beam A hanggang sa puntong R.

Maaari mong isulat ang equation na ito sa coordinate form:

x = x1 + sa,= y1 + bt,(2.2.5.2)= z1 + ct.

Dito ang x1, y1, z1 ay ang mga coordinate ng inisyal na punto ng beam sa rectangular Cartesian world coordinate system, a,b,c ang mga coordinate ng vector ng direksyon ng beam.

Pagkalkula ng punto ng intersection ng isang sinag na may ibabaw ng pangalawang pagkakasunud-sunod.

Upang mahanap ang intersection point ng isang ray na ibinigay ng mga equation (2) na may pangalawang-order na ibabaw na ibinigay ng mga equation (2.2.2.3) o (2.2.2.4):

(x-x0)2/A2 + (y-y0)2/B2 + (z-z0)2 /C2 = 1 (ellipsoid)

(x-x0)2/A2 + (y-y0)2/B2 - (z-z0)2 /C2 = 1 (paraboloid),

sa halip na x, y, at z, ang katumbas na mga equation ng ray ay dapat ipalit sa pangalawang-order na surface equation. Bilang isang resulta, pagkatapos buksan ang lahat ng mga bracket at magdala ng mga katulad, nakakakuha kami ng isang quadratic equation na may paggalang sa parameter t. Kung ang discriminant ng quadratic equation ay mas mababa sa zero, kung gayon ang ray at ang second-order na ibabaw ay walang mga karaniwang intersection point. Kung hindi, posibleng kalkulahin ang dalawang halaga ng parameter t. Ang discriminant ay maaaring katumbas ng zero - ito ay tumutugma sa paglilimita ng kaso ng isang sinag na humahawak sa ibabaw, at makakakuha tayo ng dalawang magkatulad na halaga ng parameter t.

Upang mahanap ang mga coordinate ng mga punto ng intersection ng ray at ng ibabaw, sapat na upang palitan ang mga nahanap na halaga ng parameter t sa mga equation ng ray (2).

Sa programa, kapag natagpuan ang dalawang intersection, pipiliin ang pinakamalapit para sa visualization. Ang pinakamalapit na intersection ay tinutukoy sa pamamagitan ng paghahambing ng mga nahanap na parameter t. Mas malapit sa punto ng pagmamasid ay ang intersection, na tumutugma sa mas maliit na parameter t. Dapat pansinin dito na bilang isang resulta ng paglutas ng quadratic equation, ang isa o parehong mga halaga ng parameter t ay maaaring maging negatibo. Nangangahulugan ito na ang punto ng intersection ay namamalagi "sa likod" na nauugnay sa punto ng pinagmulan ng beam, sa kalahati ng tuwid na linya, na "sa aming panig" na may kaugnayan sa eroplano ng larawan. Ang mga naturang punto ay itinatapon kapag naghahanap ng intersection.

Bilang karagdagan, sa programa para sa bawat figure, ang upper at lower cutting planes ay ipinakilala. Tanging ang bahagi ng pigura na nakahiga sa pagitan nila ang ipinapakita.

Upang gawin ito, pagkatapos mahanap ang intersection point, sinusuri ang z-coordinate nito.

Pagkalkula ng intersection point ng isang ray na may polygon (tatsulok).

Upang kalkulahin ang punto ng intersection ng ray na ibinigay ng mga equation (2), kailangan mo munang matukoy ang punto ng intersection ng ray na ito sa eroplanong naglalaman ng tatsulok na ito.

Ang equation ng eroplano ay ganito ang hitsura:

Q(x, y, z) = Ax + By + Cz + D = 0.(2.2.5.3)

Dito ang mga coefficient A, B, C ay nag-tutugma sa mga coordinate ng normal sa eroplanong ito. Ang mga coordinate ng normal ng eroplano ay nag-tutugma sa mga coordinate ng normal ng tatsulok, na aming kinakalkula sa yugto ng pag-load ng eksena.

Upang mahanap ang libreng termino D, kinakailangan upang palitan ang mga coordinate ng anumang punto ng tatsulok, halimbawa, isa sa mga vertices.

Ax-By-Cz.(2.2.5.4)

Ang halaga ng D ay hindi magbabago sa panahon ng pagpapatupad ng programa, kaya ipinapayong kalkulahin ito kapag sinimulan ang eksena at iimbak ito, tulad ng mga normal na coordinate. Kinakailangan na muling kalkulahin ito kapag nagbago ang posisyon ng tatsulok.

Ngayon, upang mahanap ang intersection point, pinapalitan namin ang mga equation ng ray (2) sa

equation ng eroplano.

(x1 + at) + B (y1 + bt) + C (z1 + ct) + D = 0

Saan tayo kukuha

= - (Ax1 + By1 + Cz1 + D) / (Aa + Bb + Cc)(2.2.5.5)

Kung ang denominator ng fraction na ito ay zero, kung gayon ang ray ay kahanay sa eroplano kung saan namamalagi ang tatsulok. Walang intersection point.

Upang mahanap ang mga coordinate ng intersection point, kinakailangan na palitan ang nahanap na halaga ng parameter t sa mga equation ng ray (2). Tawagan natin ang intersection point na D. Makukuha natin ang mga coordinate xD, yD, zD.

Ngayon kailangan nating matukoy kung ang punto D ay nasa loob ng tatsulok. Hanapin ang mga coordinate ng mga vectors AB, BC, CA (A, B, C ay ang mga vertices ng tatsulok) at ang mga coordinate ng mga vectors AD, BD, CD. Pagkatapos ay nakahanap kami ng tatlong cross product:

nA = AB x AD,= BC x BD,(2.2.5.6)= CA x CD.

Magiging collinear ang mga vector na ito. Kung ang lahat ng tatlong mga vector ay codirectional, ang punto D ay nasa loob ng tatsulok. Ang co-direction ay tinutukoy ng pagkakapantay-pantay ng mga palatandaan ng kaukulang mga coordinate ng lahat ng tatlong vectors.

Ang operasyon ng pagsuri kung ang punto D ay kabilang sa tatsulok na ABC ay maaaring mapabilis. Kung orthogonally namin ang projection triangle ABC at ituro ang D sa isa sa mga eroplanong xOy, yOz o xOz, kung gayon ang projection ng point sa projection ng triangle ay nangangahulugan na ang point mismo ay nahuhulog sa triangle (siyempre, kung ito ay kilala na ang punto D ay nasa eroplanong naglalaman ng tatsulok na ABC ). Kasabay nito, ang bilang ng mga operasyon ay makabuluhang nabawasan. Kaya, upang mahanap ang mga coordinate ng lahat ng mga vector, kailangan mong maghanap ng dalawang coordinate para sa bawat vector, at kapag naghahanap ng mga produkto ng vector, kailangan mong maghanap lamang ng isang coordinate (ang natitira ay katumbas ng zero).

Upang suriin ang co-direction ng mga vector na nakuha kapag kinakalkula ang cross product, kailangan mong suriin ang mga palatandaan ng solong coordinate na ito para sa lahat ng tatlong mga vector. Kung ang lahat ng mga palatandaan ay mas malaki kaysa sa zero, o mas mababa sa zero, kung gayon ang mga vector ay codirectional. Ang pagkakapantay-pantay sa zero ng isa sa mga produkto ng vector ay tumutugma sa kaso kapag ang punto D ay bumagsak sa isang tuwid na linya na naglalaman ng isa sa mga gilid ng tatsulok.

Bilang karagdagan, ang isang simpleng dimensional na pagsubok ay maaaring isagawa bago kalkulahin ang mga vector at cross na produkto. Kung ang projection ng point D ay namamalagi sa kanan, sa kaliwa, sa itaas o sa ibaba ng bawat isa sa mga projection ng vertices ng tatsulok, kung gayon hindi ito maaaring magsinungaling sa loob.

Ito ay nananatiling idagdag na para sa projection mas mahusay na pumili ng isa sa mga eroplano, ang projection area ng tatsulok na kung saan ay mas malaki. Sa ilalim ng kundisyong ito, ang kaso ng projection ng isang tatsulok sa isang segment ay hindi kasama (sa kondisyon na ang nasubok na tatsulok ay hindi bumababa sa isang segment). Bilang karagdagan, habang tumataas ang lugar ng projection, bumababa ang posibilidad ng error. Upang matukoy ang naturang projection plane, sapat na upang suriin ang tatlong mga coordinate ng normal ng tatsulok. Kung ang z-coordinate ng normal ay mas malaki (sa ganap na halaga) x at y, pagkatapos ay kinakailangan na i-project sa xOy plane. Kung ang y ay mas malaki kaysa sa x at z, pagkatapos ay i-project namin ang xOz. Sa natitirang kaso - sa yOz.

Paglalarawan ng mga uri ng data. Istraktura ng programa.

Paglalarawan ng mga module ng programa

Listahan ng mga module: .h-paglalarawan ng istruktura ng TTex.h-paglalarawan ng istruktura ng TPlaneTex at TEllipsoidTex.h-paglalarawan ng mga istruktura ng TPoint2d at TPoint3d.h-paglalarawan ng istraktura ng TRGBColor.h-paglalarawan ng klase ng TLamp .h-paglalarawan ng TCam class.h-paglalarawan ng TPrimitive class.h-class na paglalarawan TFrstSurface.h-class na paglalarawan TScndSurface.h-class na paglalarawan TTriangle.h-class na paglalarawan TEllipsoid.h-class na paglalarawan TCylinder.h-class paglalarawan THyperboloidVert.h-class na paglalarawan THyperboloidHor.h-class na paglalarawan TScene.h- TTracer na paglalarawan ng klase

Pagpapatupad ng mga module, interface ng programa:

Options.h-module ng form na "Options".

ExtraCamOptions.h-module ng form na "Mga katangian ng camera."

MainUnit.h - module ng pangunahing anyo ng programa

Isang maikling paglalarawan ng mga istruktura at klase ng programa: TPoint3d - isang istraktura na naglalarawan ng isang punto sa sistema ng coordinate ng mundo, TPoint2d - isang istraktura na naglalarawan ng isang punto sa isang eroplano (sa isang texture) na may mga integer na coordinate, TRGBColor - isang istraktura na naglalarawan ng isang kulay sa tatlong bahagi (RGB), TTex - isang istraktura, na naglalarawan sa texture - naglalaman ng address ng array ng mga pixel at mga sukat nito, TPlaneTex - isang istraktura na naglalarawan sa pagbubuklod ng texture sa eroplano.

Naglalaman ng tatlong punto kung saan nakakabit ang texture: TLamp ​​- isang klase na naglalarawan sa pinagmumulan ng liwanag.

Naglalaman ng TPoint3d coord object na may source coordinates at tatlong float variable (Ir, Ig, Ib) para sa pag-iimbak ng intensity ng tatlong light component. Ang TCam ay isang klase na naglalarawan sa isang camera.

Naglalaman ng dalawang anggulo (a, b) na nagpapahiwatig ng direksyon ng view ng camera, ang puntong itinuturo ng camera (viewP), at ang distansya mula sa camera hanggang sa puntong iyon (r). Ang TPrimitive ay isang abstract primitive na klase. Ang mga ibabaw ng una at pangalawang pagkakasunud-sunod ay minana mula dito. Ang TFrstSurface ay isang abstract na klase ng unang pagkakasunud-sunod na ibabaw. Ang klase ng tatsulok ay minana mula dito. Ang TScndSurface ay isang abstract na second-order surface class. Ang mga klase ng ellipsoid at paraboloid ay minana mula rito.TTriangle - klase ng tatsulok. Naglalaman ng tatlong vertices ng isang tatsulok at ang normal nito. TCylinder - klase ng isang cylinder. THyperboloidVert - klase ng isang one-sheet na hyperboloid na nakahiga sa kahabaan ng oZ axis.THyperboloidHor - klase ng isang one-sheet na hyperboloid na nakahiga sa kahabaan ng oX axis.TEllipsoid - class ng isang ellipsoid.TScene - klase ng isang eksena. Naglalaman ng impormasyon tungkol sa lahat ng primitive, source, at camera. Ang TTracer ang klase na responsable sa pag-render ng larawan. Naglalaman ng buffer na may layout na 400x400 pixels, kung saan nabuo ang larawan ng eksena. Bago ang henerasyon, kinakailangan na tawagan ang function, na ipinapasa ito bilang isang parameter na isang pointer sa eksena na bubuo. Upang bumuo, tawagan ang render function.

Ang lahat ng mga klase - ang mga inapo ng TPrimitive ay nagbibigay ng mga sumusunod na function: getT(TPoint3d p0, TPoint3d viewDir) - ibinabalik ang distansya mula sa punto ng pinagmulan (p0) ng viewDir ray sa pinakamalapit na punto ng intersection sa primitive.

void getTArr(float* arr, int&n, TPoint3d p0, TPoint3d viewDir) - pinupunan ang array arr ng mga distansya mula sa start point (p0) ng viewDir ray hanggang sa pinakamalapit na punto ng intersection sa primitive.

void getNormal(TPoint3d& n, const TPoint3d& p) - ibinabalik ang mga coordinate ng normal na vector sa primitive sa point p.

void getColor(TRGBColor& c, const TPoint3d& p) - ibinabalik ang kulay ng primitive point p (kabilang ang texture).

3. TEKNOLOHIKAL NA BAHAGI

Pagpili ng programming language.

Sa pagbuo ng programa, ang mataas na antas ng programming language na C++ ay ginamit bilang bahagi ng visual programming environment na CodeGear RAD Studio para sa Windows.

Ang wikang ito ay pinili dahil sa ang katunayan na ito ay nagbibigay ng pinaka-maginhawang paraan para sa pagtatrabaho sa RAM, ay nagbibigay-daan sa iyo upang ipatupad ang mga algorithm nang mas mahusay kaysa sa iba pang mataas na antas ng mga wika. Ang mga program na nakasulat sa C++ ay tumatakbo nang mas mabilis at kumukuha ng mas kaunting espasyo sa disk.

Bilang karagdagan, ang kapaligiran ng visual programming CodeGear RAD Studio para sa Windows

nagbibigay ng isang malaking bilang ng mga karaniwang visual na bahagi para sa paglikha ng isang interface, at isang bilang ng mga aklatan na may iba't ibang karaniwang ginagamit na kapaki-pakinabang na mga function. Gayundin, ang may-akda ng trabaho ay may pinakamalaking karanasan sa programming sa tinukoy na kapaligiran ng visual programming.

Form ng mga opsyon. Tab ng pag-iilaw.

Ang tab na ito ay naglalaman ng mga tool para sa pag-set up ng pag-iilaw ng eksena.

Source coordinates - mga coordinate sa world coordinate system ng light source na pinili sa drop-down list.

Source intensity - ang mga halaga ng tatlong bahagi ng intensity ng light source na napili sa drop-down list.

Background intensity - ang mga halaga ng tatlong bahagi ng background intensity.

Button na “+” (sa tabi ng drop-down list) - pagdaragdag ng bagong pinagmumulan ng liwanag.

Button na “-” (sa tabi ng drop-down list) - tinatanggal ang light source na napili sa drop-down list.

Form ng mga opsyon. Tab ng camera.

Ang tab na ito ay naglalaman ng mga tool para sa pagtatakda ng mga opsyon sa camera.

Preview - dito makikita mo ang tinatayang view ng larawan bago ito mabuo.

Navigation - mga setting ng posisyon ng camera.

Advanced - kapag nag-click ka sa button na ito, may lalabas na form

Mga katangian ng camera na may mga advanced na opsyon sa camera.

Form ng mga katangian ng camera.

Radius - ang distansya mula sa camera hanggang sa punto kung saan ito nakadirekta.

Hakbang sa pagbabago ng radius - pagtaas ng radius ng camera sa pamamagitan ng pagpindot sa "-" na buton nang isang beses sa tab na "Camera" ng form na "Mga Opsyon" (o pagbabawas nito sa pamamagitan ng pagpindot sa "+" na buton nang isang beses).

Form ng mga opsyon. tab na materyales.

Ipinapakita ng menu na ito ang mga parameter ng materyal ng talahanayan kung saan nakatayo ang entablado.

Kulay - ang kulay ng materyal ng talahanayan.

Coef. nagkakalat na pagmuni-muni - koepisyent Kd ng materyal sa talahanayan (tingnan ang seksyon 2.2.1).

Texture - kung ang checkbox ay may check, ang texture ay ipapakita sa talahanayan

Pumili ng texture - pumili ng image file (*.bmp) na gagamitin bilang texture ng talahanayan.

Advanced - kapag na-click mo ang button na ito, lilitaw ang form ng Table properties na may mga karagdagang parameter ng table material.

Form ng mga katangian ng talahanayan.

Ang glare coefficient ay ang KS coefficient ng table material (tingnan ang seksyon 2.2.1).

Ang glare blur ay isang exponent p ng table material.

Pag-uulit ng texture - kung ilang beses mauulit ang texture ng talahanayan kasama ang OX at OY axes.

Form ng mga opsyon. Tab ng system.

Sa tab na ito, maaari mong i-configure ang mga algorithm na ipinatupad sa programa.

Recursion depth - ang parameter na ito ay nagtatakda ng recursion depth sa tracing algorithm. Ang mas malalaking halaga ng parameter na ito ay nagpapabuti sa kalidad ng nabuong imahe.

PANSIN!

Ang lalim ng recursion ay may MALAKAS na epekto sa bilis ng pagbuo ng larawan. Hindi inirerekomenda na itakda ang parameter na ito sa higit sa 10.

Anitialiasing - pagpapagana ng algorithm ng smoothing ng imahe.

Uri ng anino - pagpili ng algorithm ng pagtatayo ng anino.

4. BAHAGI NG PANANALIKSIK

Ang mga pag-aaral ay isinagawa sa isang computer na may sumusunod na pagsasaayos:

CPU - Intel Core 2 Duo T5850- 2048Mb DDR2 - Nvidia GForce 9300M 256Mb- Windows 7

4.1 Pagdepende sa oras ng henerasyon sa lalim ng recursion

Sa pagsubok na ito, ang pag-asa ng oras ng pagbuo ng imahe sa lalim ng recursion ay sinisiyasat. Ang mga pag-aaral ay isinagawa para sa isang eksenang pinaliwanagan ng iisang pinagmumulan ng liwanag - oras ng henerasyon na walang anino sa mga segundo. - oras ng henerasyon na may solidong anino sa mga segundo. - lalim ng recursion.


4.2 Pag-asa ng oras ng henerasyon sa bilang ng mga mapagkukunan


4.3 Pagsusuri ng mga resulta ng pananaliksik

Mula sa unang pag-aaral, makikita na ang oras ng henerasyon ay malakas na lumalaki sa bilang ng mga antas ng recursion. Ito ay nasa mabuting pagsang-ayon sa teorya, dahil ang bilang ng mga sinag ay lumalaki sa lalim ng recursion.

Dapat tandaan na para sa mga eksena na may maliit na bilang ng mga polygon, hindi na kailangang magtakda ng malalaking halaga para sa maximum na lalim ng recursion, dahil ang pagkakaiba sa kalidad ng nabuong imahe ay magiging hindi gaanong mahalaga.

Ang pangalawang pag-aaral ay nagpapakita na ang pag-asa ng oras ng henerasyon sa bilang ng mga pinagmumulan ng liwanag ay linear. Mula sa mga nakuhang halaga, maaari mong kalkulahin ang oras na kinakailangan upang makalkula ang isang pinagmulan. Sa makina kung saan isinagawa ang pananaliksik, na may lalim na recursion na 5, ang oras na ito ay humigit-kumulang 0.5 segundo.

KONGKLUSYON

Sa programang ito, ipinakita ang mga resulta ng algorithm para sa pagbuo ng mga makatotohanang larawan - reverse ray tracing.

Ang pagpapatupad na ito ay nagpapakita ng kakayahan ng algorithm na bumuo ng mga larawang malapit sa photorealistic. Ang pagsubaybay ay isa sa mga pinaka-advanced na algorithm para sa pagbuo ng mga makatotohanang larawan. Ang kalidad ng nagreresultang imahe ay hindi maihahambing na mas mahusay kaysa sa kalidad ng imahe na nakuha gamit ang mga algorithm tulad ng Z-buffer. Gayunpaman, ang mga kinakailangan para sa kapangyarihan ng pag-compute na kinakailangan upang makabuo ng isang frame ng larawan ay mas mataas kaysa sa parehong Z-buffer. Sa ngayon, sa real time, ang reverse ray tracing algorithm ay ginagamit lamang para sa mga layunin ng pananaliksik sa napakalakas na mga computer na hindi naa-access ng isang simpleng user. Siyempre, may mga mahilig sa paggawa ng mga 3D na laro at iba pang real-time na mga application ng graphics batay sa reverse ray tracing algorithm, ngunit bilang panuntunan mayroon silang napakababang FPS, o lahat ng bagay sa eksena ay nakabatay sa isang globo - ang pinakamadaling upang masubaybayan ang mga sinag sa ibabaw. Ngunit upang maging kumikita ang algorithm na ito sa mga mass project, tulad ng mga 3D na laro, kinakailangan ang isang makabuluhang tagumpay sa larangan ng desktop computer hardware.

Kahit na sa halimbawa ng mga laro sa kompyuter, madaling matunton ng isa ang kalabisan ng reverse ray tracing algorithm. Pagkatapos ng lahat, ang manlalaro, na madamdamin tungkol sa gameplay, ay malamang na hindi humanga sa geometrically tamang pag-render ng mga anino at reflection ng mga bagay sa laro. Sa pagsasaalang-alang na ito, ang tinatayang pagguhit sa tulong ng mga polygon ngayon ay nanalo nang malaki, dahil hindi ito nangangailangan ng isang malakas na computer, at ang mga resulta ay malapit sa katotohanan.

Isinasaalang-alang din na ang ray tracing algorithm ay perpekto para sa mga larawan ng mga artipisyal na bagay na may geometrically simpleng mga hugis, tulad ng mga kotse, eroplano, gusali, atbp. Ang pagbuo ng mga bagay tulad ng mukha ng tao, buhok ng hayop, o isang kagubatan ay napakahirap. gawain para sa algorithm, na nagpapataas ng napakaraming pangangailangan para sa hardware ng computer.

Gayunpaman, kahit ngayon ay makakakita ka ng pananaliksik sa pagpapatupad ng real-time na reverse ray tracing algorithm. Bilang isang patakaran, sa mga naturang proyekto, ang isang kotse ay ginagamit bilang isang eksena. Ngunit ang ganap na photorealism ng imahe ay nakamit na, at bukod pa, ito ay tumatagal ng napakakaunting oras upang makabuo ng isang solong frame. Siyempre, ang mga proyektong ito ay ipinatupad sa napakalakas na mga computer, ngunit malapit na ang araw kung kailan magiging available ang mga naturang 3D application sa karaniwang gumagamit.

BIBLIOGRAPIYA

1. Rogers D. Algorithmic na pundasyon ng computer graphics: Per. mula sa Ingles - M.: Mir, 1989. - 512 p.

Porev VN Computer graphics. - St. Petersburg: BHV-Petersburg, 2002. - 432 p.

Nikulin E.A. Computer geometry at computer graphics algorithm. St. Petersburg: BHV-Petersburg, 2003. - 560 p.

Angel E. Interactive na computer graphics. - "Williams", 2001. - 592 p.: may sakit. - Paral. Tit. Mula sa Ingles.

Avdeeva S.M., Kurov A.V. Algorithm para sa 3D Computer Graphics: Textbook. - M.: Publishing house ng MSTU im. N.E. Bauman, 1996. - 60 p.