Monday, October 14, 2013

Raytracer хэрхэн ажилладаг вэ?

Хавтгай зургийг хэрхэн үүсгэдэг вэ

3-н хэмжээст талбарыг 2 хэмжээст хавтгай зураг болгон үүсгэхэд дараах хоёр алхамыг хэрэглэдэг.
Үүнд :

  • 3-н хэмжээст талбарт байгаа дүрснүүдийг хоёр хэмжээст зурагт буулгана. Энэ алхамд нүд болон дүрснүүдийн ирмэгүүдийн хооронд шулуун татах үйлдлээс өөр онц зүйл хийгддэггүй. 
  • Татсан шулуунууд нь зургийн хавтгайтай огтолцох бөгөөд огтлолцсон цэгүүдийг ашиглан хавтгай зургаа үүсгэдэг.


Гэрэл ба өнгө

3-н хэмжээст талбар дэх объектийн өнгө нь голдуу гэрэл болон объектийн материал хоёрын хооронд бий болсон харилцан үйлчилэлийн үр дүн байдаг.

Гэрэл нь фотонуудаас (цахилгаансоронзон бөөм) бүрэлддэг өөрөөр хэлбэл цахилгаан болон соронзон шинжүүдийг хамтад нь агуулдаг.
Хэрэв фотонууд шулуун чиглэлээр хөдөлбөл энерги дамжуулах мөртөө дууны долгион шиг хэлбэлзлэл үзүүлдэг. Фотонуудыг янз бүрийн гэрлийн эх үүсвэрээс цацаргаж болдог, үүний хамгийн илэрхий жишээ гэвэл манай дэлхийн нар байна.

Хэрэв хэсэг бүлэг фотонууд объектийн гадаргууг мөргөвөл үүний үр дүнд дараах гурван төрлийн үйл явц болдог. Үүнд шингэх, ойх, дамжин нэвтрэх гэсэн энэ гурав болно.
фотоны энэ гурван үйлдлийн хувь хэмжээ нь материал бүрт янз бүр байдаг учраас 3-н хэмжээст талбарт объектүүд бидний нүдэнд мөн янз бүр харагддаг байна.

Бүх материалуудад ерөнхий нэг дүрэм байдаг энэ бол ирсэн бүх фотонуудын тоо хэмжээ нь материал дээр шингээсэн, ойлгосон, нэвтрүүлсэн фотонуудын нийлбэртэй үргэлж тэнцүү байдаг явдал юм. өөрөөр хэлбэл 100 ширхэг фотоноор объектийн гадаргууны нэг цэг дээр гэрэл тусгавал үүнээс 60 нь шингэж 40 нь ойж болох юм. Нийлбэр нь 100.

Материалуудыг 3-н ширхэг ангилалд оруулж болно.
  • Гэрлийг ойлгодог мөн шингээдэг материал, үүнд метал болон хуванцар материалууд орно
  • Гэрлийг ойлгодог мөн нэвтрүүлдэг материал, үүнд мэдээж шил орно
  • Нэвт гэрэлтэлттэй тунгалаг материалууд
Түүнчлэн шинжлэх ухаанд материалыг дамжуулагч болон тусгаарлагч гэж хоёр л ангилдаг. Тусгаарлагч материалууд гэвэл шил, хуванцар, мод, ус гэх мэт бүгд орно. Эдгээр материалууд цахилгаан тусгаарлах шинж чанартай байдаг.

Эхний ангилал болох гэрэл ойлгож шингээдэг материалыг авч үзье.
Цагаан гэрэл нь улаан, ногоон, хөх гэсэн гурван фотонуудаас бүрддэг.
Хэрэв цагаан гэрлийг улаан өнгөтэй объект дээр тусгавал гэрэл шингээх үйл явцаар ногоон болон хөх өнгийн фотонуудыг шингээж орхидог.
Яагаад гэвэл улаан өнгийн объект улаан өнгийг шингээдэггүй харин буцаан ойлгодог байна.
Тэр ойсон фотонууд нь цааш аялсаар бидний нүдэнд ирж бид улаан өнгөтэй объектийг ялган хардаг.
Объект дээр тусгасан гэрлийн цэг бүр цаашаагаа чиглэл болгонлуу тархан ойдог.
Цэг дээр перпендикуляр ойсон зөвхөн ганц л чиглэлийн гэрлийг бидний нүд хүлээн авч хардаг.
Бидний нүд гэрлийг неорон сигнал болгон хөрвүүлэх чадвартай гэрэл хүртэхүйн(photoreceptor) үүрэгтэй эрхтэнээр тоноглогдсон байдаг.
Бидний тархи эдгээр сигналуудыг олон янзын ялгаатай сүүдэр болон өнгө болгон хөрвүүлж ашиглан боловсруулах чадвартай.

Хүн төрлөхтөн гэрэл гээч зүйлийг ойлгон нээтлээ нэлээн удаан хугацаа өнгөрүүлсэн байдаг. Жишээлбэл эртний Грекчүүд хүний нүднээс юмсыг харах зориулалттай туяа цацаргадаг гэж үздэг байсан байна. Арабын шинжлэх ухаантан Иибн ал-Хаядан(манай эриний 965-1039 он) нь гэрлийг нарнаас цацардаг гэж анх удаагаа тайлбарласан байна. Тайлбарлахдаа гэрэл нь шулуун замаар аялан явсаар бидний нүдэнд орж ирдэг бөөмсийн урсгал гэж тайлбарлажээ.

Тэгэхээр бид эдгээр мэдсэн зүйлс дээрээ тулгуурлан байгалийн үзэгдлийг компютер дотор симуляц хийх буюу загварчлан харуулах боломжтой юмаа.

Raytracing алгоритм

Ийбн ал-Хаядан гуай тайлбарласаны ачаар бид хэрхэн юмсыг харж чаддагийг мэддэг болсон билээ. Түүний ажиглалтаас сонирхолтой хоёр ширхэг дүгнэлтийг хийж болно. Эхнийх нь, гэрэл байхгүй бол бид юуг ч харж чадахгүй, хоёрдугаарх нь бидний хүрээлэн орчинд ямарч объект байхгүй бол бид гэрлийг харж чадахгүй. Хэрэв бид глактик хоорондын орон зайгаар аяллаа гэж үзвэл гэрлийн фотонууд тэр орон зайгаараа аялан өнгөрч байлаа ч гэсэн бид түнэр харанхуйд л байна гэсэн үг яагаад вэ гэвэл тэр орон зайд ямарч объект байхгүй ээ.

Forward Tracing

Хэрэв бид гэрэл болон объект хоорондын харилцан үйлчлэлийг компютерийн зураг болгон симуляц хийе гэвэл бидний мэдэж байх ёстой өөр бас нэгэн физикийн үзэгдэл бий. Объектээс ойсон туяануудаас цөөхөн хэд нь л бидний нүдэнд ирж бүртгэгддэг. Жишээлбэл хугацааны нэг эгшинд зөвхөн ганц л фотон цацаргадаг гэрлийн эх үүсвэр байлаа гэж үзье, тэгвэл энэ фотоны хувьд цаашид ямар үйл явц болох вэ гэдгийг туршиж үзье. Фотон эхлээд гэрлийн эх үүсвэрээс цацраад шулуун замын замын дагуу аялсаар объектийн гадаргууг очиж мөргөнө. Объектийн фотон шингээх үйл явцыг энд үл харгалзвал фотон маань санамсаргүй олон янзын чиглэлрүү буцан ойно. Гадаргуугаас ойсон аль нэг фотон бидний нүдэнд очвол бид энэ фотон ойсон гадаргууны цэгийг харах боломжтой болдог.


Харин одоо бид оршилоо дуусгасан тул компютер графикийн нэр томъёоруу орох боломжтой боллоо. Эхлээд бид нүд хэмээх ойлголтоо пикселүүдээс бүрдэх зургийн хавтгайгаар солих хэрэгтэй. Энэ тохиолдолд фотонууд цацраад цаашаа аялсаар зургийн хавтай дэх олон пикселүүдийн нэгийг нь очиж мөргөнө гэж бодох хэрэгтэй. Энэ мөргөсөн цэг дээр гэрэл гэгээ нэмэгдэх тусам цэг дээрхи утга нь мэдээж 0 утгаас их болж ирнэ. Энэ үйл явцыг зургийн бүх пикселүүдийг утгатай болтол нь олон удаа давтбал бид компютерээр зураг үүсгэлээ гэсэн үг юмаа. Энэ аргачлалыг forward ray-tracing гэж нэрлэдэг.
Энэ хандлагад бас асуудал бий. Асуудал гэвэл ойсон фотонууд үргэлж нүдний гадаргууд ирж байдаг. Бодит байдал дээр гэрлийн туяанууд нь боломжит бүх чиглэлд ойдог, энэ ойсон туяа бүр нь ажиглагчийн нүдийг очиж мөргөх магадлал тун бага.
Бид үнэхээр чиглэл бүрлүү фотоноор буудах шаардлагатай гэж бодож байна уу?
Нэгэнтээ бид нүдний байрлалыг мэдэж байгаа юм чинь яагаад зөвхөн пикселийн харж байгаа чиглэлрүү зүгээр л фотоноо илгээчихэж болохгүй гэж? Энэ бол байж болох боломжит оновчлолуудын нэг бөгөөд бид энэ аргыг зөвхөн цөөхөн хэдэн төрлийн материалуудад л хэрэглэх боломжтой байдаг. Ийм учраас гэрэл болон матери хоорондын харилцан үйлчлэлийг авч үзэх шаардлагатай, фотон чиглүүлэлт бол diffuse гадаргууны хувьд тийм их чухал үүрэгтэй байдаггүй. Яагаад вэ гэвэл diffuse гадаргууг очиж мөргөсөн фотон нь мөргөсөн цэг дээрхи normal чиглэлийн хувьд бүрдэх хагас бөмбөрцөгт(hemisphere) агуулагдах аль ч чиглэлээр цаашаа ойх боломжтой байдаг болохоор тэр. Толин гадаргууны хувьд diffuse шинж чанар байхгүй болж ирдэг, гэрлийн туяа цаашаа зүгээр л тооцоологдсон чиглэлрүүгээ л ойно, толинд ойлгосон чиглэл гэх юмуудаа.
Дан diffuse объектүүдээс бүрдсэн талбарт энэ аргыг хэрэглэсэн ч гэсэн асуудал бий. Хэрэв бид гэрлийн туяаг объектийн гадаргууруу шүршиж буудвал гэрлийн эх үүсвэрээс гадаргууг гэрэлтүүлэх үйл явцыг дүрслэж чаднаа. Хэрэв шүрших үйл явц хангалттай нягт биш байвал гадаргууны зарим хэсэг нь нэгэн ижил байдлаар гэрэлтүүлэгдэж чадахгүйд хүрдэг энэ бол үнэхээр том сул тал юм. Програмыг хангалттай олон фотоноор шүршиж дуустал нь хүлээх хэрэгтэй гэсэн үг.
Raytracer дэх хамгийн их тооцоолол авдаг үйлдэл бол туяа болон геометрийн гадаргуу хоорондын огтлолцлолыг хайж олох үйлдэл байдаг. Гэрлийн эх үүсвэрээс олон фотоноор шүрших нь нээх том асуудал биш харин тэдгээр фотонууд 3-н хэмжээст талбар дэх объекттэй мөргөлдсөн эсэхийг нягтлах нь үнэхээр их тооцоолол авдаг.
Forward ray-tracing бол компютерээр байгалд гэрэл хэрхэн зорчин аялдагийг хийсвэрлэх нэг боломжит арга юмаа. Гэхдээ энэ арга практикт нээх хэрэглэгддэггүй.

Backward Tracing

Энэ аргад гэрлийн эх үүсвэрээс туяа цацруулж ажиглагчруу trace хийхийн оронд эсрэг чиглэлд ажигчлагчаас объектрүү туяаг trace хийнэ гэсэн үг. Энэ чиглэл нь байгалд болдог чиглэлийн яг эсрэг чиглэл байдаг. Үүнийг backward ray-tracing аль эсвэл eye tracing гэж нэрлэдэг. Энэ арга нь forward ray-tracing д байдаг дутагдалтай талыг нөхсөн байдаг. Нэгэнтээ бидний симуляц байгал дээр болдог шиг тийм хангалттай төгс хурдтай биш болохоор бид энэ байдалтай эвлэрч гэрлийн туяаг нүднээс 3-н хэмжээст талбарлуу нэвтрүүлэн ашиглах ёстой. Хэрэв туяа ямар нэгэн объектийг мөргөвөл дараагаар нь тэр мөргөсөн цэг дээр хэр хэмжээний их гэрэл очсон байна вэ гэдгийг өөр нэгэн туяаг(гэрэл эсвэл сүүдрийн туяа гэж нэрлэдэг) тэр цэгээс гэрлийн эх үүсвэр хүртэл нь явуулж мэдэх хэрэгтэй. Энэ "гэрлийн туяа" нь 3-н хэмжээст талбар доторхи өөр нэгэн объектээр халхлагдсан байх боломжтой. Хэрэв тийм байвал эхний trace хийсэн туяа маань объектийн сүүдэр хэсэгт очсон байна гэсэн үг. Тиймээс энэ цэг дээр ямар нэгэн гэрэлтүүлэх тооцоолох хийгдэхгүй. Ийм болохоор хоёр дахь туяаг бид "гэрлийн туяа" гэж нэрлэхийн оронд "сүүдрийн туяа" (shadow ray) гэж нэрлэдэг. Компютер графикийн үг хэллэгт эхний нүднээс буудсан туяаг primary ray, visibility ray, camera ray гэх мэтээр нэрлэдэг.

Компютер графикт туяагаар буудах ойлголтыг гэрлээс байна уу эсвэл нүднээс байна уу аль нь ч байсан path tracing гэж нэрлэдэг. ray-tracing хэмээх нэр томъёог хэрэглэж болох боловч path tracing нэр томъёог гэрлээс камер болон камераас гэрэл хүртлэх аргаар компютерээр үүсгэсэн зурагнуудад хэрэглэхийг зөвлөдөг. Эдгээр арга нь физикийн хувьд бодит мэт ажиллаж байгаа тул caustic, өөр гадаргуугаас ойж ирсэн гэрлийн ойлт (indirect illumination) гэх мэтийн оптикийн эффектүүдийг хялбархан симуляц хийх боломжтой.