3D программчлалын тухай
Та урьд өмнө нь видео тоглоом тоглож байхдаа энийг ер нь яаж бүтээдэг эсвэл програмчилдаг юм болоо гэж гайхаж байсан байж болох юм.
Та урьд өмнө нь видео тоглоом тоглож байхдаа энийг ер нь яаж бүтээдэг эсвэл програмчилдаг юм болоо гэж гайхаж байсан байж болох юм.
Бидний нүд компютерийн дэлгэц дээр орших, програмаар тооцоолж үүсгэсэн мянга мянган пикселүүдийн өнгийг хүлээн авч тархируу дамжуулснаар 3-н хэмжээст орчинд байгаа мэт мэдрэмжийг бид амсдаг.
3D програмчлал гэдэг бол товчхондоо энэ пикселүүдийг хэрхэн тооцоолон үүсгэж 3-н хэмжээст орчинг мэдрүүлэх вэ гэдэг явдал юм.
Юуны өмнө та компютерээ нэг задлаад хараарай, диск уншигч тэжээлийн блок гэх мэт нэмэлт төхөөрөмжүүдийн дунд эх хавтан байрлах бөгөөд эх хавтан дээр CPU, RAM мөн бас PCI сокет дээр таны график картыг зоож байрлуулсан байгаа харагдана. График картыг тань GPU буюу Graphics Processing Unit гэх бөгөөд энэ бол пиксел мэдээлэл үүсгэх зориулалттай дотроо хэдэн зуун жижиг coprocessor-ууд агуулсан эд билээ. Нэг ёсондоо компютер доторхи компютер гэлтэй, гэхдээ зөвхөн 3D дүрслэл үүсгэх зориулалтаар л ажиллана.
Эх хавтан нь south bridge, north bridge гэсэн ерөнхий хоёр хэсэгтэй бөгөөд north bridge дээр CPU болон RAM байрлана, харин south bridge дээр нэмэлт төхөөрөмжтэй ажиллах зориулалттай хэсэгүүд буюу PCI сокетүүд байрладаг. PCI сокет дээр бид дууны карт, график карт гэх мэтийн залгаж салгаж авч болдог нэмэлт төхөөрөмжүүдийг байрлуулдаг.
south bridge болон north bridge хоёрыг хооронд нь bus гэж нэрлэгдэх төв шугамаар холбож өгдөг. Энэ bus нь мэдээллийг нэгээс нөгөөд хаягийнх нь дагуу зөөж өгөхөд ашиглагддаг мөн тодорхой хэмжээний мэдээлэл дамжуулах мэдээллийн өргөний хэмжээтэй өөрөөр хэлбэл bandwidth, мөн дээрээс нь секунтэд хэдий хэрийн мэдээлэл нэвтрүүлэх чадвартай вэ гэдгээр нь бас хэмждэг.
Тэгэхээр график карт мэтийн нэмэлт төхөөрөмжийг програмчлахын тулд north bridge дээр байрлах RAM дээр орших код болон өгөгдлүүдийг bus-аар дамжуулан хаягийн дагуу төхөөрөмжрүү upload хийж өгдөг.
Бид 3-н хэмжээст мэдээллийг боловсруулах код болон өгөгдлүүдийг GPU-рүү илгээх замаар GPU-г машиндуулж өөрөөр хэлбэл ажиллуулж хүссэн дүрслэлээ гаргаж авдаг байхнээ. Дээр дурдсанчлан GPU бол өөрийн гэсэн санах ойтой мөн маш олон тооны тусгай зориулалтын жижиг процессоруудтай байдаг.
График карт нь өгөгдлүүдийг тэдгээр олон тооны процессорууддаа тараан өгч тооцууллаг өөрөөр хэлбэл агшин зуур хичнээн ч их хэмжээний мэдээлэл байлаа гэсэн параллелиар тооцооллож дуусгана зөв боломжит зорилгодоо ашиглаж чадвал энэ бол нэг төрлийн супер компютер гэсэн үг юм.
Сүүлийн үед график картуудын параллелиар ажиллах чадвартай нь холбоотойгоор зөвхөн пиксел болон 3-н хэмжээст мэдээллийг тооцооллох зорилгоор бус ерөнхий зориулалтын тооцоололд ч гэсэн хэрэглэх хандлага ажиглагдаж байна. Үр ашиг нь гэвэл хүнд хүнд энкрүпт алгоритмаар шахаж цоожилсон файлуудыг задлах, видео тоглоомын физик, өгөгдлийн бааз гээд явж өгнө.
Та магадгүй гайхаж байж болох юм яагаад заавал график картанд тийм олон тооны тусгай зориулалтын CPU хэрэгтэй гэж. 3D дүрслэл боловсруулдаг real-time, интерактив програм хангамжууд нь цаанаа маш олон vertex, пиксел мэдээллүүдийг түргэн боловсруулж байхыг шаарддаг, түүний тулд олон тооны жижиг CPU хэрэг болно.
Ямарваа нэгэн компютер програм ажиллахдаа RAM буюу шуурхай санах ой дээр өгөгдлүүдээ байрлуулж CPU буюу төв процессороор өгөгдлөө машиндуулах замаар ажилладаг, хэрэв тэр програм(видео тоглоомууд, CAD, визуликашн програмууд ч юм уу…) GPU ашиглахыг хүсвэл тэр GPU-г програмчилж ажиллуулж чаддаг өөрөөр хэлбэл хэн нэгэн vendor болон төхөөрөмж үйлдвэрлэгч аль эсвэл програмистуудаар тусгайлан хангаж өгсөн функцүүдийн санг хэрэглэх хэрэгтэй байдаг. Өөрөөр хэлбэл GPU-г ажиллуулж өгдөг функцүүдийн олонлог.
3D програмчлал гэдэг нь өөрөөр тэдгээр олон функцүүдийг ашиглаж хүссэн үр дүн зураглалаа гаргаж авах гэж ойлгож ч болох юм.
Энэ функцүүдийн олонлогийг та бид DirectX, OpenGL гэх мэт нэрээр нь таних байхаа ерөнхийд нь API сан гэдэг бөгөөд Application Programming Interface гэсэн үгний товчлол.
Хэн нэгэн график карт үйлдвэрлэгч компани (AMD, NVidia гэх мэтийн vendor-ууд) нь бүтээгдэхүүн буюу график картдаа зориулан драйвер програмыг бичиж өгч нийлүүлдэг. Драйвер програм нь тэрхүү GPU-г таны үйлдлийн системтэй харилцан ойлголцож ярилцах боломжийг олгоно. Тэр ойлголцох хэлбэр нь янз бүрийн API сангуудаар хэрэгжүүлэгдэж болно. Өөрөөр хэлбэл DirectX нь өөрийн гэсэн дүрэмтэй нэршилтэй OpenGL нь ч гэсэн хэрэглэгдэх байдал гэх мэтээрээ ялгаатай ондоо байдаг. Тэгэхээр та GPU програмчлахын тулд нэг бол OpenGL нэг бол DirectX ашиглах ёстой гэсэн үг юм.
Манай нийтлэлийн хувьд бид OpenGL хэрэглэх болноо.
Та зөвхөн OpenGL болон DirectX гэсэн хоёр янзын API сан байдаг гэж ойлгож болохгүй, энэ хоёроос гадна OpenGL ES, WebGL, X3D, RenderMan … гэх мэтийн олон API-нууд бий. Хамгийн их хэрэглэгддэг нь л энэ хоёр юм.
tnks
ReplyDelete