Rendering pipeline nasıl işler? Vertex shader ile fragment shader arasındaki fark nedir?

Cevap

GPU'da bir mesh'in ekrana çizilmesi kabaca şu aşamalardan geçer:

  1. Input assembly: Vertex ve index buffer'lardan üçgenler oluşturulur.
  2. Vertex shader: Her vertex için bir kez çalışır. Vertex'i object space'ten clip space'e dönüştürür (MVP matrisi), normal, UV gibi verileri sonraki aşamaya aktarır.
  3. Rasterization: Üçgenler ekran piksellerine karşılık gelen fragment'lara bölünür; vertex verileri üçgen boyunca interpolasyonla dağıtılır. Back-face culling ve clipping burada yapılır.
  4. Fragment (pixel) shader: Her fragment için çalışır. Doku örnekleme, ışıklandırma hesabı yaparak son rengi üretir.
  5. Output merger: Depth test, stencil test ve blending (saydamlık) uygulanıp sonuç frame buffer'a yazılır.
struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; };
struct v2f     { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; };

sampler2D _MainTex;
float4 _Color;

v2f vert (appdata v)
{
    v2f o;
    o.pos = UnityObjectToClipPos(v.vertex);   // MVP dönüşümü
    o.uv = v.uv;
    return o;
}

float4 frag (v2f i) : SV_Target
{
    return tex2D(_MainTex, i.uv) * _Color;    // piksel rengi
}
ÖzellikVertex shaderFragment shader
Kaç kez çalışırVertex başınaPiksel (fragment) başına
Temel göreviKonum dönüşümü, deformasyonRenk, doku, ışık
Tipik efektlerDalgalanan su, rüzgârda çimen, skinningToon shading, dissolve, normal map

Fragment sayısı genellikle vertex sayısından çok fazladır; bu yüzden pahalı hesapları mümkünse vertex shader'a taşımak ve overdraw'u (aynı pikselin defalarca çizilmesi) azaltmak önemli optimizasyonlardır. Pipeline'da ayrıca opsiyonel geometry ve tessellation aşamaları ile genel amaçlı compute shader'lar bulunur.

  1. Forward ve deferred rendering arasındaki fark nedir? Hangisi ne zaman tercih edilir?ZorGrafik & RenderGame Dev
  2. LOD, frustum culling ve occlusion culling nedir?KolayGrafik & RenderGame Dev
  3. Draw call nedir? Batching teknikleri ile draw call sayısı nasıl azaltılır?OrtaGrafik & RenderGame Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle