Vertex Shader — grafik konveyerining (graphics pipeline) dasturlashtiriladigan bosqichi bo'lib, u uch o'lchamli modelning har bir uchini qayta ishlaydi. Khronos Group, 2025 ma'lumotlariga ko'ra, vertex shader kirishda uch atributlarini — koordinatalar, normalar, rang va tekstura koordinatalarini — qabul qiladi va ularni berilgan mantiq bo'yicha o'zgartiradi. Vertex Shader har bir uch uchun mustaqil bajariladi, bu esa hisoblashlarni minglab GPU yadrolarida samarali parallellashtirish imkonini beradi.
Asosiy fikrlar
Vertex Shader — grafik konveyerining (graphics pipeline) dasturlashtiriladigan bosqichi bo'lib, u uch o'lchamli modelning har bir uchini alohida qayta ishlaydi. Uch (vertex) — uch o'lchamli fazoda atributlarga ega nuqta: xyz koordinatalari, normalar, rang va UV tekstura koordinatalari.
Ruxsat etilgan funksiyali konveyerdan (fixed-function pipeline) farqli o'laroq, bu erda o'zgartirishlar qat'iy berilgan algoritm bo'yicha bajarilardi, Vertex Shader dasturchiga uch transformatsiyasi ustidan to'liq nazorat beradi. Bu protsedur animatsiya, modellarni deformatsiyalash, skelet skinningi va GPU tomonida istalgan matematik o'zgartirishlarni amalga oshirish imkonini beradi.
OpenGL ES grafik konveyeri kirish ma'lumotlaridan yakuniy tasvirgacha bo'lgan bosqichlar ketma-ketligini o'z ichiga oladi. Vertex Shader uch yig'ish bosqichidan (vertex assembly) keyin va rastrlash bosqichidan oldin joylashgan. CPU dan uch buferi orqali uzatilgan har bir uch Vertex Shaderdan aniq bir marta o'tadi va natija primitivlarni yig'ish uchun keyingi bosqichga uzatiladi.
| Konveyer bosqichi | Vazifasi |
|---|---|
| Vertex Specification | Uch ma'lumotlari va atributlarini VBO dan uzatish |
| Vertex Shader | Har bir uchning qayta ishlanishi, koordinata transformatsiyasi |
| Tessellation | Geometriyani pastki primitivlarga opsional bo'lish |
| Geometry Shader | Primitivlarni opsional yaratish yoki o'chirish |
| Rasterization | Primitivlarni to'ldirish uchun fragmentlarga aylantirish |
Vertex Shader kirishda uch buferidan (VBO) CPU kodida sozlangan atribut ko'rsatkichlari (vertex attribute pointers) orqali uch atributlarini qabul qiladi. Dasturchi GLSL (OpenGL Shading Language) yoki shunga o'xshash tilda shader kodi yozadi, bu kod GPU drayveri tomonidan maxsus chip uchun mashina ko'rsatmalariga kompilyatsiya qilinadi.
Har bir uch uchun Vertex Shader ketma-ket uchta operatsiyani bajaradi: kirish atributlarini o'qish — dasturchi tomonidan belgilangan o'zgartirishlarni qo'llash — natijalarni chiqish o'zgaruvchilariga yozish. Minimal majburiy chiqish — uchning kesish fazosidagi pozitsiyasi (gl_Position). Barcha boshqa chiqish ma'lumotlari (rang, normalar, tekstura koordinatalari) interpolyatsiya qilinadi va keyingi bosqichga — Fragment Shaderga uzatiladi.
#version 300 es
in vec3 aPosition;
in vec2 aTexCoord;
uniform mat4 uMVP;
out vec2 vTexCoord;
void main() {
gl_Position = uMVP * vec4(aPosition, 1.0);
vTexCoord = aTexCoord;
}
Vertex Shader geometriya transformatsiyasi bilan bog'liq grafik konveyerining keng spektrli vazifalarini hal qiladi. Har bir vazifa vektorlar va matritsalar ustida matematik operatsiyalar orqali amalga oshiriladi, bir vaqtning o'zida minglab uchlar uchun parallel bajariladi.
Asosiy va eng keng tarqalgan vazifa — uch koordinatalarini model, view va projection (MVP) matritsalariga ko'paytirish. MVP matritsasi uchni modelning lokal fazosidan kesish fazosiga (clip space) o'zgartiradi, so'ngra avtomatik konveyer bosqichlarida normallashtiriladi va ekran koordinatalariga aylantiriladi.
Animatsiya qilinadigan personajlar uchun Vertex Shader skelet animatsiyasini (skinning) amalga oshiradi. Har bir uch bir nechta suyakka ma'lum og'irliklar bilan bog'langan. Vertex blending — bog'langan suyaklardan o'zgartirishlarning og'irlik yig'indisi — skelet harakatlanayotganda personaj terisini silliq deformatsiya qilish imkonini beradi.
Vertex Shader vaqt yoki boshqa uniform parametrlar asosida geometriyani CPU ishtirokisiz o'zgartirishi mumkin. Wave deformation, Perlin shovqiniga asoslangan shovqin siljishlari va suvdagi to'lqin effektlari — bu effektlarning barchasi vertex shaderda geometriyani operativ xotiradan qayta yuklamasdan amalga oshiriladi.
Ikkala shader turi grafik konveyerining dasturlashtiriladigan bosqichlari bo'lsa ham, Vertex Shader va Fragment Shader printsipial jihatdan farqli vazifalarni hal qiladi va tasvirni qayta ishlashning turli bosqichlarida ishlaydi.
| Xarakteristika | Vertex Shader | Fragment Shader |
|---|---|---|
| Kirish ma'lumotlari | VBO dan uch atributlari | VS dan interpolyatsiya qilingan ma'lumotlar |
| Chaqiruvlar soni | Uchlar soni | Fragmentlar soni |
| Asosiy vazifa | Geometriya transformatsiyasi | Piksel rangini hisoblash |
| Hisoblash yuki | Geometriya murakkabligi | Ekran rezolyutsiyasi |
| Teksturalarga kirish | Cheklangan (texture lookup orqali) | To'liq kirish |
Asosiy farq — chaqiruvlar chastotasi. Vertex Shader har bir uch uchun bir marta chaqiriladi, Fragment Shader esa har bir fragment (piksel) uchun. Yuqori rezolyutsiyali sahnada Fragment Shader chaqiruvlari soni Vertex Shader chaqiruvlari sonidan minglab marta ko'pdir, bu piksel shaderlarini optimallashtirishni yanada muhim qiladi.
Vertex Shader unumdorligi real vaqt ilovalari uchun muhim, ayniqsa cheklangan energiya iste'moli bilan mobil ishlanmada. Asosiy unumdorlik omillari — uchlar soni, shader kodining murakkabligi va GPU xotirasining o'tkazish qobiliyati.
Vertex Shader yukini kamaytirish uchun quyidagi yondashuvlar qo'llaniladi. Level of Detail (LOD) — kamera ob'ektdan uzoqlashganda modellarning soddalashtirilgan versiyalariga o'tish. Instancing — bir chizish chaqiruvida (draw call) bir xil geometriyani turli transformatsiya matritsalari bilan ko'p marta chizish.
// Vertex Shader instanslash qo'llab-quvvatlashi bilan
in vec3 aPosition;
in mat4 aInstanceMatrix;
uniform mat4 uViewProjection;
void main() {
vec4 worldPos = aInstanceMatrix * vec4(aPosition, 1.0);
gl_Position = uViewProjection * worldPos;
}
Vertex Shader turli grafik APIlarda o'xshash mantiqqa, ammo farqli sintaksis va nomlash konvensiyalariga ega. OpenGL ES 3.0 uchun GLSL va iOS va macOS uchun Metal Shading Language da asosiy vertex shaderning implementatsiyasini ko'rib chiqamiz.
#version 300 es
in vec4 position;
in vec3 normal;
in vec2 texcoord;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform mat3 normalMatrix;
out vec3 vNormal;
out vec2 vTexCoord;
out vec3 vPosition;
void main() {
vec4 mvPosition = modelViewMatrix * position;
vPosition = mvPosition.xyz;
vNormal = normalMatrix * normal;
vTexCoord = texcoord;
gl_Position = projectionMatrix * mvPosition;
}
#include <metal_stdlib>
using namespace metal;
struct VertexIn {
float3 position [[attribute(0)]];
float3 normal [[attribute(1)]];
};
struct VertexOut {
float4 position [[position]];
float3 worldNormal;
};
vertex VertexOut
vertexMain(VertexIn in [[stage_in]],
constant float4x4& mvp [[buffer(1)]]) {
VertexOut out;
out.position = mvp * float4(in.position, 1.0);
out.worldNormal = in.normal;
return out;
}
Tez-tez so'raladigan savollar
Vertex Shader — GPUdagi dastur bo'lib, 3D modelning har bir uchini qayta ishlaydi va uning koordinatalarini ekran koordinatalariga o'zgartiradi. Modelni nuqtalar to'plami sifatida tasavvur qiling; vertex shader bu nuqtalarni berilgan matematik qoidalar bo'yicha harakatlantiradi.
Vertex Shader uchlarni qayta ishlaydi va geometriya uchun javobgar, Fragment Shader esa har bir piksel rangini aniqlaydi. Birinchisi har bir uch uchun chaqiriladi (minglab), ikkinchisi har bir piksel uchun (millionlab).
Vertex Shader grafik APIga mos tilda yoziladi: GLSL OpenGL ES uchun, Metal Shading Language iOS/macOS da Metal API uchun, HLSL Direct3D uchun. Kontseptual jihatdan ularning barchasi uchlar ustida bir xil operatsiyalarni bajaradi.
Vertex shaderning murakkabligi to'g'ridan-to'g'ri FPSga ta'sir qiladi: uch boshiga ko'proq ko'rsatmalar = uzoqroq qayta ishlash. Optimallashtirish LOD orqali uchlar sonini kamaytirish, instansingdan foydalanish va shader kodida shartli o'tishlarni minimallashtirishni o'z ichiga oladi.
O'yinlarda asosiy vazifalar: MVP matritsalari orqali koordinata transformatsiyasi, animatsiya qilinadigan personajlarning skiningi, kiyim va sochlarning protsedur deformatsiyasi, yuz ifodalari o'rtasida morfing va GPUda animatsiya bilan zarrachalar effektlari.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.