Vertex Shader: bu nima, vazifalari va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-06-11 O'qish vaqti: 10 daq

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 — GPU ning dasturlashtiriladigan bosqichi, 3D modelning har bir uchini boshqalardan mustaqil qayta ishlaydi.
  • Koordinatalarni o'zgartirish obyekt fazosidan ekran fazosiga — vertex shaderning asosiy vazifasi.
  • OpenGL ES 3.0 va Metal Shading Language vertex shaderlar yozish uchun standartlashtirilgan APIlarni taqdim etadi.
  • Unumdorlik Vertex Shader uchlari soniga va shader kodining murakkabligiga bog'liq.
  • Skinning va uch morfingi — GPUda vertex shaderda amalga oshiriladigan odatiy vazifalar.

Vertex Shader nima?

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.

Vertex Shaderning grafik konveyeridagi o'rni

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 bosqichiVazifasi
Vertex SpecificationUch ma'lumotlari va atributlarini VBO dan uzatish
Vertex ShaderHar bir uchning qayta ishlanishi, koordinata transformatsiyasi
TessellationGeometriyani pastki primitivlarga opsional bo'lish
Geometry ShaderPrimitivlarni opsional yaratish yoki o'chirish
RasterizationPrimitivlarni to'ldirish uchun fragmentlarga aylantirish

Vertex Shader qanday ishlaydi?

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.

Uchni qayta ishlash jarayoni

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.

glsl
#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 Shaderning asosiy vazifalari

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.

MVP orqali koordinata transformatsiyasi

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.

Skelet animatsiyasi (Skinning)

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.

Geometriyaning protsedur deformatsiyasi

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.

Vertex Shader vs Fragment Shader: farqlar

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.

XarakteristikaVertex ShaderFragment Shader
Kirish ma'lumotlariVBO dan uch atributlariVS dan interpolyatsiya qilingan ma'lumotlar
Chaqiruvlar soniUchlar soniFragmentlar soni
Asosiy vazifaGeometriya transformatsiyasiPiksel rangini hisoblash
Hisoblash yukiGeometriya murakkabligiEkran rezolyutsiyasi
Teksturalarga kirishCheklangan (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 va optimallashtirish

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.

Unumdorlikka ta'sir etuvchi omillar

  • Vertex count — kadr boshiga GPUga uzatiladigan uchlar soni. Millionlab poligonli modellar vertex shaderda yuqori yuk hosil qiladi.
  • Shader complexity — shaderda ko'rsatmalar soni. Ichma-ich sikllar va shartli o'tishlar (divergence) SIMD bloklarining parallel unumdorligini pasaytiradi.
  • Bandwidth — video xotiradan uch ma'lumotlarini o'qish tezligi. Atribut formati (float32, float16, normallashtirilgan butun son) to'g'ridan-to'g'ri o'tkazish qobiliyatiga ta'sir qiladi.

Vertex shaderlarni optimallashtirish usullari

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.

glsl
// 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 kod namunalari

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.

OpenGL ES 3.0 uchun GLSL namunasi

glsl
#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;
}

Metal Shading Language namunasi

cpp
#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 oddiy so'zlar bilan nima?

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 Fragment Shaderdan nimasi bilan farq qiladi?

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 qanday tillarda yoziladi?

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 Shader unumdorlikka qanday ta'sir qiladi?

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.

Vertex Shader o'yinlarda qanday vazifalarni hal qiladi?

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

  • Vertex Shader — grafik konveyerining dasturlashtiriladigan bosqichi, 3D modelning har bir uchini mustaqil qayta ishlaydi.
  • Asosiy vazifa — uch koordinatalarini lokal fazodan ekran fazosiga MVP matritsalari orqali o'zgartirish.
  • Vertex Shader parallel ravishda ko'plab GPU yadrolarida bajariladi, millionlab uchlar bilan yuqori unumdorlikni ta'minlaydi.
  • Skining, morfing va protsedur animatsiya CPU ishtirokisiz vertex shaderda amalga oshiriladi.
  • Chaqiruvlar soni Vertex Shader uchlar soniga teng — Fragment Shader chaqiruvlaridan ancha kam.
  • Optimallashtirish LOD modellari, instansing va shader kodida tarmoqlanishlarni minimallashtirishni o'z ichiga oladi.
  • GLSL va Metal Shading Language — mobil ishlanmada vertex shaderlar uchun asosiy tillar.

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.

Loyihani muhokama qilish

Shuningdek o'qing