3D програмчлал гэж юу вэ?

Сайн уу, би Prompto.

Өнөөдрөөс та бүхэнд 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-нууд бий. Хамгийн их хэрэглэгддэг нь л энэ хоёр юм.

Товчхондоо ердөө л ийм.

Нэмэлт уншлагууд

  • http://en.wikipedia.org/wiki/Graphics_processing_unit
  • http://en.wikipedia.org/wiki/Motherboard
  • http://en.wikipedia.org/wiki/Northbridge_(computing)
  • http://en.wikipedia.org/wiki/Southbridge_(computing)
  • http://en.wikipedia.org/wiki/Bus_(computing)
  • http://en.wikipedia.org/wiki/Conventional_PCI
  • http://en.wikipedia.org/wiki/3D_computer_graphics
  • http://en.wikipedia.org/wiki/Video_game
  • http://en.wikipedia.org/wiki/GPGPU
  • http://en.wikipedia.org/wiki/DirectX
  • http://en.wikipedia.org/wiki/OpenGL
  • http://en.wikipedia.org/wiki/Application_programming_interface
  • http://en.wikipedia.org/wiki/List_of_3D_graphics_libraries

 

Сурталчилгаан дээр дapж биднийг дэмжээрэй. ↓ ↓ ↓

3 сэтгэгдэлтэй

  1. AoD says:

    3deer yum hiie gwl yah yostoi gsn ug uu ??

  2. zaya says:

    sain baina uu? uuriin chin bichsen yumig unshla,aytaihan sain bolson yum shig sanagdaj bn,, tegeed uuriin gsn blog ntr hutuldug vv? bas CUDA gdg zviliin talaar tailbarlaj ugj boloh bolvu? Hariu

    • prompto says:

      сайн уу? сэтгэгдэл үлдээсэнд баярлалаа. http://sharavaa.blogspot.com ийг хобби маягаар хөтөлдөг. GPGPU тал дээр мэдээж сонирхол их байгаа, зав чөлөө болвол энэ талаар бичнээ.

      CUDA гэдэг нь NVidia-аас өөрийнхөө график картууд дээр ерөнхий зориулалтын тооцоолол хийхээр зориулж гаргасан API. Ерөнхий зориулалтын тооцоолол гэхээрээ зөвхөн график боловсруулалт хийх биш энгийн CPU суурьтай програм бичдэг шиг арифметик болон логик үйлдлүүдийг график карт дээр хийнэ гэсэн үг.

      Энгийн CPU ерөнхийдөө 4, 8 ширхэг core агуулж байдаг бол график картууд 128, 980, 1024, 2000 гэх мэтчилэн маш олон тооны core буюу багахан хэмжээний CPU-нуудыг агуулж байдаг. Ийм олуулаа хамжиж тооцоолол хийдэг учир график карт дээр юм машиндуулж бодуулах нь бүтээмжийн хувьд Teraflops-оор яригдах хэмжээний өндөр байдаг.

      OpenCL гээд AMD, Intel, NVidia бүгд дэмждэг API бий, цаашлаад платформуудаас хамааралтай DirectCompute, ComputeShader API-нууд ч бий.

      Computation model буюу програмчлах загварын хувьд эхлээд kernel гэж нэрлэгдэх жижигхэн програмаас эхлэнэ. Kernel гэдэг нь OpenGL-ийн хувьд нэг fragment shader-тэй дүйх ойлголт.
      Хуучин бол OpenGL-ээр texture үүсгэж байгаад тэр текстурынхээ texel бүрийг нь массивийн нэг элемэнт гэж үзэн тэдгээрүүд дээр өгөгдлүүдээ хийж хадгалж авч байгаад fragment shader дээр аваачин бодуулдаг байсан. Бодуулж гарсан үр дүнгүүдээ Render Buffer-лүү хадгалж гаргаж авдаг байсан. Frame Buffer-т оролт болон гаралт хариуцсан дор хаяж хоёр ширхэг Render Buffer үүсгэж байгаад ping-pong байдлаар ажиллуулдаг байсан гэсэн үг.
      Ийм байдлаар програмчлах нь мэдээж баахан OpenGL API дуудалтууд хийж бэлтгэхээс өгсүүлээд тооцоолол хийхэд ч ядаргаатай нуршуу байдаг учраас иймэрхүү тооцоололд зориулагдсан Cuda, OpenCL мэтийн API-нууд гарсан хэрэг.

      1 kernel гэдэг нэг thread гэсэн үг.
      олон kernel-үүдийг бүлэглээд 1 block гэнэ.
      олон block-уудыг 1 grid гэнэ.
      Эдгээр нь шатлал бүрдээ ID-тэй учир kernel бүр дахин давтагдашгүй байж чаддаг. Параллелаар бодуулах өгөгдлүүдээ энэ шатлалд нийцүүлэн аваачсанаар kernel дээр тухайн өгөгдлийг тооцоолох боломж гарна. өөрөөр массив дотор агуулагдсан массив гэж ойлгоод эдгээр бүрт kernel хүрч очин ажилладаг гэж ойлгосон ч болно.

      SIMD буюу Single Instruction Multiple Data гэсэн зүйлийг судлаарай.

      Одоохондоо нэг иймэрхүү.

Сэтгэгдэл бичих

*

Таныг илтгэгч аватар зураг GrAvatar.com (Хэрхэн ашиглах вэ?)

© 2010-2012 Hicheel.inFo .
Wordpress дээр суурьлаж Theme Junkie ашиглан SaKu бүтээв. HOSTED BY DUSAL HOSTING