3D сахналарды 2D кескіндерге түрлендіру процедурасы
Graphics pipeline
3D сахналарды 2D суреттерге айналдыру процедурасы туралы біліңіз. Графикалық құбыр, API (Direct3D, OpenGL, Vulkan) және аппараттық талаптар туралы ақпарат.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
3D көріністерді 2D суреттерге түрлендіру процедурасы
Procedure to convert 3D scenes to 2D images
Компьютерлік графика құбыржолы, сондай-ақ рендерлеу құбыржолы немесе графика құбыржолы деп аталады, компьютерлік графикте үш өлшемді (3D) көріністі экрандағы екі өлшемді (2D) бейнеге түрлендіруге қажетті процедуралардың жиынтығын көрсетеді. 3D модель жасалғаннан кейін, графика құбыржолы модельді компьютер дисплейінде көрінетін форматқа айналдырады. Нақты бағдарламалық қамтамасыз етуге, аппараттық конфигурацияларға және қажетті дисплей атрибуттарына байланысты, барлық жағдайларға қолданылатын графикалық құбыржол болмайды. Дегенмен, Direct3D, OpenGL және Vulkan сияқты графикалық қолданба бағдарламалау интерфейстері (API) ортақ процедураларды стандарттау және белгілі бір аппараттық үдеткіштің графикалық құбыржолын басқару үшін жасалған. Бұл API-лер негізгі аппараттық жабдықтың үстінде абстракция қабатын қамтамасыз етеді, бағдарламашыларды AMD, Intel, Nvidia және басқалар сияқты әртүрлі графикалық аппараттық үдеткіштерге арналған кодты тікелей жазу қажеттілігінен босатады. Графикалық құбыржол моделі көбінесе нақты уақыт рендерлеуінде қолданылады. Көбінесе құбыржолдың көптеген қадамдары аппараттық құралдарда іске асырылады, бұл арнайы оптимизацияларға мүмкіндік береді. "Құбыржол" термині процессорлардағы құбыржолға ұқсас мағынада қолданылады: құбыржолдың жеке қадамдары, әрбір қадамға қажетті ресурстар болғанша, параллель жұмыс істейді.
The computer graphics pipeline, also known as the rendering pipeline or graphics pipeline, is a framework within computer graphics that outlines the necessary procedures for transforming a three dimensional (3D) scene into a two dimensional (2D) representation on a screen. Once a 3D model is generated, the graphics pipeline converts the model into a visually perceivable format on the computer display. Due to the dependence on specific software, hardware configurations, and desired display attributes, a universally applicable graphics pipeline does not exist. Nevertheless, graphics application programming interfaces (APIs), such as Direct3D, OpenGL and Vulkan were developed to standardize common procedures and oversee the graphics pipeline of a given hardware accelerator. These APIs provide an abstraction layer over the underlying hardware, relieving programmers from the need to write code explicitly targeting various graphics hardware accelerators like AMD, Intel, Nvidia, and others. The model of the graphics pipeline is usually used in real time rendering. Often, most of the pipeline steps are implemented in hardware, which allows for special optimizations. The term "pipeline" is used in a similar sense for the pipeline in processors: the individual steps of the pipeline run in parallel as long as any given step has what it needs.
Тұжырымдама
3D құбыржол әдетте Raytracing және Raycasting-тен ерекшеленетін 3D көпбұрышты рендеринг деп аталатын компьютерлік 3D рендерингтің ең көп таралған түрін білдіреді. Raycasting-те сәуле камера орналасқан нүктеден басталады, және егер ол сәуле бір бетке тисе, сол беттегі тиіскен нүктенің түсі мен жарығы есептеледі. 3D көпбұрышты рендерингте керісінше болады – камераның көріс аймағындағы аумақ есептеледі, содан кейін камера көріп тұрған әрбір беттің әрбір бөлігінен сәулелер жасалып, камераға дейін іздестіріледі.
The 3D pipeline usually refers to the most common form of computer 3D rendering called 3D polygon rendering, distinct from Raytracing and Raycasting. In Raycasting, a ray originates at the point where the camera resides, and if that ray hits a surface, the color and lighting of the point on the surface where the ray hit is calculated. In 3D polygon rendering the reverse happens the area that is in view of the camera is calculated and then rays are created from every part of every surface in view of the camera and traced back to the camera.
Құрылымы
Графикалық құбырды үш негізгі бөлікке бөлуге болады: Қолданба, Геометрия және Растрлеу.
A graphics pipeline can be divided into three main parts: Application, Geometry and Rasterization.
Қолдану
Қолданба қадамын негізгі процессорда (CPU) бағдарламалық жасақтама орындайды. Қолданба кезеңінде, мысалы, пайдаланушының енгізу құрылғылары арқылы немесе анимация барысында өзара әрекеттесу арқылы, қажетті өзгерістер көрініске енгізіледі. Барлық примитивтерімен – әдетте үшбұрыштармен, сызықтармен және нүктелермен – жаңа сахна құбырдың келесі қадамына жіберіледі. Қолданба кезеңінде әдетте орындалатын тапсырмаларға соқтығысуды анықтау, анимация, морфинг және Quadtree немесе Octree сияқты кеңістіктік бөліну схемаларын пайдаланып үдету техникалары жатады. Бұлар берілген уақытта қажетті негізгі жад көлемін де азайтуға көмектеседі. Қазіргі компьютерлік ойындардың "әлемі" бір мезгілде жадқа сыймайтынша зор.
The application step is executed by the software on the main processor (CPU). During the application step, changes are made to the scene as required, for example, by user interaction by means of input devices or during an animation. The new scene with all its primitives, usually triangles, lines and points, is then passed on to the next step in the pipeline. Examples of tasks that are typically done in the application step are collision detection, animation, morphing, and acceleration techniques using spatial subdivision schemes such as Quadtrees or Octrees. These are also used to reduce the amount of main memory required at a given time. The "world" of a modern computer game is far larger than what could fit into memory at once.
Геометрия
Геометриялық қадам (Geometry құбыр жолымен), көпбұрыштар мен олардың төбелерімен (Vertex құбыр жолымен) жасалатын операциялардың басым бөлігіне жауапты, келесі бес міндетке бөлінеді. Бұл міндеттердің нақты параллель құбыржол қадамдары ретінде қалай ұйымдастырылғаны жүзеге асырылған тәсілге байланысты.
The geometry step (with Geometry pipeline), which is responsible for the majority of the operations with polygons and their vertices (with Vertex pipeline), can be divided into the following five tasks. It depends on the particular implementation of how these tasks are organized as actual parallel pipeline steps.
Анықтамалар
Үстіңгі нүкте (көпше түрі: түбегейлер) – әлемдегі нүкте. Көптеген нүктелер беттерді қосу үшін қолданылады. Көбінесе нүктелік бұлттар тікелей салынады, бірақ бұл әлі де сирек кездеседі. Үшбұрыш – компьютерлік графиканың ең көп қолданылатын геометриялық примитиві. Ол үш түбегейімен және нормальдық вектормен анықталады. Нормальдық вектор үшбұрыштың бетін көрсетуге және бетке перпендикуляр бағытты білдіреді. Үшбұрышқа түс немесе текстура (үстіне "жабыстырылған" сурет) берілуі мүмкін. Үшбұрыштар тіктөртбұрыштардан артық таңдалады, себебі олардың үш нүктесі әрқашан бір жазықтықта орналасады.
A vertex (plural: vertices) is a point in the world. Many points are used to join the surfaces. In special cases, point clouds are drawn directly, but this is still the exception. A triangle is the most common geometric primitive of computer graphics. It is defined by its three vertices and a normal vector the normal vector serves to indicate the front face of the triangle and is a vector that is perpendicular to the surface. The triangle may be provided with a color or with a texture (image "glued" on top of it). Triangles are preferred over rectangles because their three points always exist in a single plane.
Жарықтандыру
Көбінесе бір көріністе жарық көздері әртүрлі орындарда орналастырылады, бұл нысандардың жарығын шынайырақ етеді. Мұндай жағдайда, әр төбе үшін, жарық көздері мен сәйкес үшбұрыштың материалдық қасиеттеріне байланысты текстураның күшейту коэффициенті есептеледі. Кешірек растерлеу кезеңінде үшбұрыштың төбелік шамалары оның беті бойынша интерполяцияланады. Барлық беттерге жалпы жарық (қоршаған ортаның жарығы) қолданылады. Бұл – көріністің тараған және бағытқа тәуелсіз жарықтығы. Күн – шексіз алыс деп есептелетін бағытталған жарық көзі. Күннің бетке тигізетін жарығы, күннен бағытталған вектор мен беттің нормальдық векторының скалярлық көбейтіндісін есептеу арқылы анықталады. Егер шама теріс болса, бет күнге қарама-қарсы қарап тұр.
Often a scene contains light sources placed at different positions to make the lighting of the objects appear more realistic. In this case, a gain factor for the texture is calculated for each vertex based on the light sources and the material properties associated with the corresponding triangle. In the later rasterization step, the vertex values of a triangle are interpolated over its surface. A general lighting (ambient light) is applied to all surfaces. It is the diffuse and thus direction independent brightness of the scene. The sun is a directed light source, which can be assumed to be infinitely far away. The illumination effected by the sun on a surface is determined by forming the scalar product of the directional vector from the sun and the normal vector of the surface. If the value is negative, the surface is facing the sun.
Қалқалау
Тек визуалды көлемде орналасқан примитивтерді растрлеу (сурет салу) қажет. Бұл визуалды көлем фрустумның ішкі бөлігі ретінде анықталады, ол пірамида пішіндес, жоғарғы жағы кесілген нысан. Визуалды көлемнен толығымен тыс примитивтер жойлады; Бұл фрустум іріктеуі деп аталады. Қарастырылатын примитивтердің санын азайтатын артқы бетті кесу сияқты қосымша іріктеу әдістері теориялық тұрғыдан графикалық құбырдың кез келген сатысында орындалуы мүмкін. Текшенің ішінде тек ішінара орналасқан примитивтерді текшеге қатысты қиып қою керек. Алдыңғы проекция кезеңінің артықшылығы – қиып қою әрқашан бір текшеге қатысты жүзеге асырылады. Тек визуалды көлемде орналасқан, мүмкін қиылған примитивтер ғана соңғы қадамға жіберіледі.
Only the primitives which are within the visual volume need to actually be rastered (drawn). This visual volume is defined as the inside of a frustum, a shape in the form of a pyramid with a cut off top. Primitives which are completely outside the visual volume are discarded; This is called frustum culling. Further culling methods such as back face culling, which reduce the number of primitives to be considered, can theoretically be executed in any step of the graphics pipeline. Primitives which are only partially inside the cube must be clipped against the cube. The advantage of the previous projection step is that the clipping always takes place against the same cube. Only the possibly clipped primitives, which are within the visual volume, are forwarded to the final step.
Растерлеу
Растерлеу кезеңі – барлық примитивтер растерленетін фрагмент шейдер құбыр жолынан бұрынғы соңғы кезең. Растерлеу кезеңінде үздіксіз примитивтерден дискретті фрагменттер жасалады. Графикалық құбырдың осы кезеңінде тор нүктелері, айқындық үшін, фрагменттер деп те аталады. Әрбір фрагмент кадр буферіндегі бір пикселге сәйкес келеді, ал ол экрандағы бір пикселді білдіреді. Бұл фрагменттер түсті болуы мүмкін (сондай-ақ жарықтандырылуы да мүмкін). Сонымен қатар, көпбұрыштар бір-бірін жапқан жағдайда, көрушіге жақын фрагментті анықтау қажет. Осы мақсатта Z-буфер көбінесе қолданылады, ол жасырын беттерді анықтауға мүмкіндік береді. Фрагменттің түсі көрінетін примитивтің жарықтандыруына, текстурасына және басқа материалдық қасиеттеріне байланысты болады және көбінесе үшбұрыштың төбелік қасиеттерін пайдаланып интерполяцияланады. Егер қол жетімді болса, фрагмент шейдері (пиксель шейдері деп те аталады) объектінің әрбір фрагменті үшін растерлеу кезеңінде орындалады. Егер фрагмент көрінетін болса, ол мөлдірлік немесе көп үлгі алу қолданылған жағдайда, бейнедегі бар түстермен араластырылуы мүмкін. Осы кезеңде бір немесе бірнеше фрагменттер пикселге айналады. Пайдаланушы примитивтердің біртіндеп растерленуін көруіне жол бермеу үшін, қос буферлеу қолданылады. Растерлеу арнайы жад аймағында жүргізіледі. Бейне толық растерленгеннен кейін, ол бейне жадының көрінетін аймағына көшіріледі.
The rasterization step is the final step before the fragment shader pipeline that all primitives are rasterized with. In the rasterization step, discrete fragments are created from continuous primitives. In this stage of the graphics pipeline, the grid points are also called fragments, for the sake of greater distinctiveness. Each fragment corresponds to one pixel in the frame buffer and this corresponds to one pixel of the screen. These can be colored (and possibly illuminated). Furthermore, it is necessary to determine the visible, closer to the observer fragment, in the case of overlapping polygons. A Z buffer is usually used for this so called hidden surface determination. The color of a fragment depends on the illumination, texture, and other material properties of the visible primitive and is often interpolated using the triangle vertex properties. Where available, a fragment shader (also called Pixel Shader) is run in the rastering step for each fragment of the object. If a fragment is visible, it can now be mixed with already existing color values in the image if transparency or multi sampling is used. In this step, one or more fragments become a pixel. To prevent that the user sees the gradual rasterization of the primitives, double buffering takes place. The rasterization is carried out in a special memory area. Once the image has been completely rasterized, it is copied to the visible area of the image memory.
Кері реті
Барлық қолданылатын матрицалар сингуляр емес, демек, кері матрицаға ие. Сингуляр емес екі матрицаны көбейту нәтижесінде тағы да сингуляр емес матрица пайда болады, сондықтан трансформация матрицасы да кері айналады. Кері матрица экран координаттарынан әлем координаттарын қайта есептеу үшін қажет, мысалы, тышқан курсорының орнынан қандай нысанға басылғанын анықтау үшін. Бірақ экран мен тышқан екі өлшемді болғандықтан, үшінші өлшем белгісіз болады. Сондықтан, курсор орнынан әлемге сәуле жіберіледі, содан кейін осы сәуленің әлемдегі көпбұрыштармен қиылысу нүктесі анықталады.
All matrices used are nonsingular and thus invertible. Since the multiplication of two nonsingular matrices creates another nonsingular matrix, the entire transformation matrix is also invertible. The inverse is required to recalculate world coordinates from screen coordinates for example, to determine from the mouse pointer position the clicked object. However, since the screen and the mouse have only two dimensions, the third is unknown. Therefore, a ray is projected at the cursor position into the world and then the intersection of this ray with the polygons in the world is determined.
Шейдер
Классикалық графикалық карталар әлі де графикалық құбыржолға салыстырмалы түрде жақын. GPU-ға қойылатын талаптардың артуымен шектеулер біртіндеп алынып тасталды, осы арқылы икемділік артты. Қазіргі заманғы графикалық карталар жеке өңдеу қадамдарына тікелей қол жеткізуге мүмкіндік беретін, бағдарламаланатын және шейдерлермен басқарылатын құбыржолды пайдаланады. Негізгі процессорды жеңілдету үшін қосымша өңдеу қадамдары құбыржолға және GPU-ға көшірілді. Шейдерлердің ең маңызды түрлері – vertex shaders, geometry shaders және pixel shaders. Барлық бірліктерді толыққанды пайдалану үшін Бірыңғай шейдер енгізілді. Бұл шейдерлік бірліктердің үлкен жиынтығын құрайды. Қажеттілікке қарай, бұл жиынтық әртүрлі шейдерлер топтарына бөлінеді. Сондықтан шейдер түрлерін қатаң түрде бөлудің қажеті жоқ. Сонымен қатар, графикалық бейнеленбеген кез келген есептеулерді GPU-да орындау үшін compute shader-ді пайдалануға болады. Олардың артықшылығы – өте параллель жұмыс істеуі, бірақ шектеулері де бар. Бұл әмбебап есептеулер графикалық процессорлардағы жалпы мақсаттағы есептеулер немесе қысқаша GPGPU деп аталады. Mesh shaders – бұл жаңа мүмкіндік, геометриялық құбырдың тұрақты орналасуының тудыратын қиындықтарды жеңуге бағытталған.
Classic graphics cards are still relatively close to the graphics pipeline. With increasing demands on the GPU, restrictions were gradually removed to create more flexibility. Modern graphics cards use a freely programmable, shader controlled pipeline, which allows direct access to individual processing steps. To relieve the main processor, additional processing steps have been moved to the pipeline and the GPU. The most important shader units are vertex shaders, geometry shaders, and pixel shaders. The Unified Shader has been introduced to take full advantage of all units. This gives a single large pool of shader units. As required, the pool is divided into different groups of shaders. A strict separation between the shader types is therefore no longer useful. It is also possible to use a so called compute shader to perform any calculations off the display of a graphic on the GPU. The advantage is that they run very parallel, but there are limitations. These universal calculations are also called general purpose computing on graphics processing units, or GPGPU for short. Mesh shaders are a recent addition, aim to overcome the bottlenecks of the geometry pipeline fixed layout.