Offscreen Rendering: nedir, teknikleri ve uygulamalarda kullanımı

Yazar: IT Sectr Yayınlanma: 2026-06-11 Okuma süresi: 10 dk

Offscreen Rendering (ekran dışı oluşturma), bir 3D sahnesini ekrana değil, daha sonra doku olarak kullanılabilen bir doku tamponuna (FBO — Framebuffer Object) oluşturma tekniğidir. Apple Metal Documentation, 2025'e göre, ekran dışı oluşturma gölgeler, yansımalar, son efektler ve grafik ön işleme için kullanılır. Offscreen Rendering, karmaşık bir sahneyi kalite kaybı olmadan geçişlere (passes) bölmeye olanak tanır.

Önemli Noktalar

  • Offscreen Rendering — sahnenin doğrudan ekrana değil, bir dokuya oluşturulması.
  • Framebuffer Object (FBO) — OpenGL ES'de ekran dışı oluşturmanın ana mekanizması.
  • Multi-pass rendering — nihai görüntünün ekran dışı tamponlar aracılığıyla birden çok geçişe bölünmesi.
  • Gölgeler ve yansımalar — mobil grafiklerde ekran dışı oluşturmanın tipik uygulamaları.
  • Performans ekran dışı oluşturma, ek GPU geçişleri nedeniyle optimizasyon gerektirir.

Offscreen Rendering Nedir?

Offscreen Rendering, grafik içeriğini ekranda görüntülenen ana framebuffer yerine video belleğindeki bir ara tampona oluşturma yöntemidir. Ekran dışı oluşturmanın sonucu bir doku veya renderbuffer olarak kaydedilir.

Ekran dışı oluşturmanın temel amacı çok geçişli oluşturmadır (multi-pass rendering). Karmaşık bir sahne birden çok geçişe bölünür: önce sahne bir dokuya (offscreen) oluşturulur, ardından bu doku bir sonraki geçiş için girdi olarak kullanılır ve nihai görüntü elde edilene kadar bu şekilde devam eder. Bu yaklaşım, tek bir geçişte imkansız olan efektlerin elde edilmesini sağlar.

Framebuffer Object (FBO)

OpenGL ES'de ekran dışı oluşturmanın ana mekanizması Framebuffer Object (FBO)'dir. FBO, doku görüntülerinin veya renderbuffer nesnelerinin eklenebileceği bir kapsayıcıdır. FBO bağlandıktan sonra, sonraki tüm oluşturma komutları ekran yerine ekli dokuya yönlendirilir.

Offscreen Rendering Nasıl Çalışır?

Offscreen Rendering, ayrı bir framebuffer nesnesi oluşturarak, ona bir doku veya renderbuffer ekleyerek, oluşturma bağlamını bu FBO'ya geçirerek ve çizim komutlarını yürüterek uygulanır. Geçiş tamamlandıktan sonra bağlam ana framebuffer'a geri döner.

Tipik ekran dışı oluşturma döngüsü

Süreç üç adımdan oluşur: FBO oluşturma ve doku ekleme — sahneyi ekran dışı dokuya oluşturma — sonuçtaki dokuyu sonraki geçişte kullanma. GL_COLOR_ATTACHMENT0, oluşturmanın hangi renk dokusuna yapılacağını belirler.

cpp
// Ekran dışı oluşturma için FBO oluşturma (OpenGL ES 3.0)
GLuint fbo, offscreenTex;
glGenFramebuffers(1, &fbo);
glGenTextures(1, &offscreenTex);
glBindTexture(GL_TEXTURE_2D, offscreenTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
               width, height, 0,
               GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferTexture2D(GL_FRAMEBUFFER),
    GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
    offscreenTex, 0);

Ekran dışı oluşturma teknikleri

Offscreen Rendering çok çeşitli grafik efektleri için kullanılır. Her teknik, bir veya daha fazla ekran dışı geçiş ve belirli bir FBO yapılandırması gerektirir.

TeknikGeçiş sayısıAmaç
Shadow Mapping2+Işık kaynağından gölge haritası oluşturma
Reflection Mapping1-2Yansımaları küp haritasına oluşturma
Bloom Effect3-5Görüntünün parlak alanlarında parlama
HDR Rendering2HDR görüntüler için ton eşleme
Depth Prepass1Derinlik tamponunu önceden doldurma

Render-to-Texture (RTT)

Oluşturma sonucunun daha sonra kullanılmak üzere bir dokuda kaydedildiği temel bir tekniktir. Render-to-Texture, mini haritalar, dinamik nesnelerin dokuları ve karmaşık malzemelerin ön görselleştirmesi için kullanılır.

Çok geçişli oluşturma (Multi-pass)

Karmaşık efektler (HDR, bloom, depth of field) birden çok sıralı geçiş gerektirir. Her geçiş sahneyi ekran dışı bir dokuya oluşturur, bir filtre uygular ve sonucu bir sonraki geçişe iletir. Bu yaklaşım, nihai görüntü kalitesinden ödün vermeden efektleri biriktirmeye olanak tanır.

Shadow Mapping (Gölge Haritalama)

Shadow Mapping, ekran dışı oluşturma kullanımının klasik bir örneğidir. Gölge iki geçişte oluşturulur: önce sahne ışık kaynağının bakış açısından bir derinlik dokusuna (offscreen) oluşturulur, ardından ana oluşturma sırasında her parça bu derinlik haritasıyla karşılaştırılarak gölgede olup olmadığı belirlenir.

Gölge oluşturma süreci

İlk geçiş: kamera ışık kaynağının konumuna yerleştirilir, sahne ekran dışı bir tampona oluşturulur ve yalnızca derinlik dokuya kaydedilir. İkinci geçiş: her parçanın kontrol edildiği ana oluşturma — derinliği derinlik haritasındaki değerden büyükse, parça gölgelenir.

glsl
// Gölge haritalama için Fragment Shader
in vec4 vShadowCoord;
uniform sampler2D uShadowMap;

float calcShadow(vec4 coord) {
    vec3 uvw = coord.xyz / coord.w;
    float depth = texture(uShadowMap, uvw.xy).r;
    return (uvw.z > depth + 0.005) ? 0.3 : 1.0;
}

Ekran dışı oluşturma performansı

Offscreen Rendering ek GPU geçişleri ekleyerek genel hesaplama yükünü ve güç tüketimini artırır. Mobil geliştirmede bu özellikle kritiktir: her FBO değişimi bir pipeline flush'ı ve ek süre gerektirir.

Performans faktörleri

  • Geçiş sayısı — her ek geçiş tüm sahneyi oluşturarak işlenen köşe ve parça sayısını ikiye katlar.
  • Ekran dışı doku çözünürlüğü — çok yüksek çözünürlük seçmek bellek bant genişliği yükünü artırır.
  • FBO değiştirme — sık framebuffer nesnesi değişiklikleri pipeline duraklamalarına neden olur ve GPU kullanımını azaltır.

Ekran dışı oluşturma optimizasyonu

Mobil cihazlar için öneriler: sonucun okunması gerekmiyorsa doku yerine renderbuffer kullanın (yalnızca derinlik geçişi); ekran dışı dokular için minimum gerekli çözünürlüğü seçin; mümkün olduğunda MRT (Multiple Render Targets) ile geçişleri birleştirin.

Offscreen Rendering kod örnekleri

Offscreen Rendering farklı platformlarda kendi API'leri aracılığıyla uygulanır. OpenGL ES ve Apple Metal için örneklere bakalım.

OpenGL ES 3.0 örneği: dokuya oluşturma

cpp
// FBO kurulumu ve sahnenin dokuya oluşturulması
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glViewport(0, 0, texWidth, texHeight);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(offscreenProgram);
glBindVertexArray(sceneVAO);
glDrawElements(GL_TRIANGLES, indexCount, GL_UNSIGNED_SHORT, 0);
// Varsayılan framebuffer'a geri dönme
glBindFramebuffer(GL_FRAMEBUFFER, 0);

Metal (iOS) örneği

cpp
// Metal: dokuya ekran dışı oluşturma geçişi
MTLRenderPassDescriptor passDesc = [MTLRenderPassDescriptor renderPassDescriptor];
passDesc.colorAttachments[0].texture = offscreenTexture;
passDesc.colorAttachments[0].loadAction = MTLLoadActionClear;
passDesc.colorAttachments[0].clearColor =
    MTLClearColorMake(0.0, 0.0, 0.0, 0.0);

id<MTLCommandBuffer> cmdBuffer = [commandQueue commandBuffer];
id<MTLRenderCommandEncoder> enc =
    [cmdBuffer renderCommandEncoderWithDescriptor:passDesc];
[enc drawIndexedPrimitives:MTLPrimitiveTypeTriangle
             indexCount:indexCount
              indexType:MTLIndexTypeUInt16
            indexBuffer:indexBuffer
      indexBufferOffset:0];
[enc endEncoding];

Sıkça Sorulan Sorular

Offscreen Rendering basit kelimelerle nedir?

Offscreen Rendering, grafiklerin ekrana değil, görünmez bir tampona (doku) çizilmesidir. Bu tampon daha sonra diğer efektler için doku olarak kullanılır. Şeffaf bir sayfaya çizim yaptığınızı ve bunu nihai görüntünün üzerine yerleştirdiğinizi hayal edin.

Ekran dışı oluşturma neden gereklidir?

Ekran dışı oluşturma, tek bir geçişte imkansız olan efektler oluşturmayı sağlar: gölgeler (ışığın bakış açısından oluşturma), yansımalar, bulanıklık, parlama (bloom) ve HDR tonlama. Her efekt, ekran dışı bir dokuya ayrı bir geçiş gerektirir.

Offscreen Rendering performansı yavaşlatır mı?

Evet, her ekran dışı geçiş GPU iş miktarını ikiye katlar çünkü sahne yeniden oluşturulur. Optimizasyon, ekran dışı doku çözünürlüğünü azaltmayı, renderbuffer kullanmayı ve MRT (Multiple Render Targets) ile geçişleri birleştirmeyi içerir.

FBO ve Renderbuffer arasındaki fark nedir?

FBO (Framebuffer Object), dokuların veya renderbuffer'ların eklendiği bir kapsayıcıdır. Texture, oluşturma sonuçlarının okunmasına izin verir (gölge haritalama, son efektler için gerekli). Renderbuffer daha hızlıdır ancak içeriği doku olarak kullanılamaz.

Hangi API'ler Offscreen Rendering'i destekler?

Tüm modern grafik API'leri: OpenGL ES (FBO aracılığıyla), Apple Metal (MTLRenderPassDescriptor aracılığıyla), Vulkan (VkFramebuffer aracılığıyla), Direct3D (Render Target View aracılığıyla). Kavramsal olarak mekanizma aynıdır — ekran yerine dokuya oluşturma.

Özet

  • Offscreen Rendering — grafik sahnesinin doğrudan ekrana değil, bir dokuya oluşturulması.
  • Framebuffer Object (FBO) — OpenGL ES'de ekran dışı oluşturmanın ana mekanizması.
  • Shadow mapping ve yansımalar — ekran dışı oluşturmanın klasik uygulamaları.
  • Multi-pass rendering sıralı geçişler aracılığıyla karmaşık efektlere olanak tanır.
  • Her geçiş GPU'daki hesaplama yükünü ikiye katlar ve dikkatli optimizasyon gerektirir.
  • Renderbuffer, sonucun doku olarak okunması gerekmiyorsa dokuya tercih edilir.
  • MRT (Multiple Render Targets) birden çok geçişi birleştirmeye olanak tanır.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun