Offscreen Rendering: یہ کیا ہے، تکنیکیں اور ایپلیکیشنز میں استعمال

مصنف: IT Sectr اشاعت: 2026-06-11 مطالعے کا وقت: 10 منٹ

Offscreen Rendering (آف اسکرین رینڈرنگ) — 3D منظر کو اسکرین پر نہیں، بلکہ ٹیکسچر بفر (FBO — Framebuffer Object) میں رینڈر کرنے کی تکنیک ہے، جسے بعد میں ٹیکسچر کے طور پر استعمال کیا جا سکتا ہے۔ Apple Metal Documentation, 2025 کے مطابق، آف اسکرین رینڈرنگ شیڈو، ریفلیکشن، پوسٹ ایفیکٹس اور گرافکس کی پری پروسیسنگ کے لیے استعمال ہوتی ہے۔ Offscreen Rendering پیچیدہ منظر کو معیار کھونے کے بغیر پاسز (passes) میں تقسیم کرنے کی اجازت دیتی ہے۔

اہم نکات

  • Offscreen Rendering — منظر کو براہ راست اسکرین پر نہیں، بلکہ ٹیکسچر میں رینڈر کرنا۔
  • Framebuffer Object (FBO) — OpenGL ES میں آف اسکرین رینڈرنگ کا بنیادی طریقہ کار۔
  • Multi-pass rendering — حتمی تصویر کو آف اسکرین بفرز کے ذریعے کئی پاسز میں تقسیم کرنا۔
  • شیڈو اور ریفلیکشن — موبائل گرافکس میں آف اسکرین رینڈرنگ کی عام ایپلیکیشنز۔
  • کارکردگی آف اسکرین رینڈرنگ کو اضافی GPU پاسز کی وجہ سے اصلاح کی ضرورت ہوتی ہے۔

Offscreen Rendering کیا ہے؟

Offscreen Rendering گرافیکل مواد کو مرکزی فریم بفر (جو اسکرین پر دکھایا جاتا ہے) کے بجائے ویڈیو میموری میں ایک انٹرمیڈیٹ بفر میں رینڈر کرنے کا طریقہ ہے۔ آف اسکرین رینڈرنگ کا نتیجہ ٹیکسچر یا renderbuffer میں محفوظ کیا جاتا ہے۔

آف اسکرین رینڈرنگ کا بنیادی مقصد ملٹی پاس رینڈرنگ (multi-pass rendering) ہے۔ ایک پیچیدہ منظر کو کئی پاسز میں تقسیم کیا جاتا ہے: پہلے منظر کو ٹیکسچر (offscreen) میں رینڈر کیا جاتا ہے، پھر اس ٹیکسچر کو اگلے پاس کے ان پٹ کے طور پر استعمال کیا جاتا ہے، اور اسی طرح حتمی تصویر حاصل ہونے تک۔ یہ نقطہ نظر ان اثرات کو حاصل کرنے کی اجازت دیتا ہے جو ایک ہی پاس میں ناممکن ہیں۔

Framebuffer Object (FBO)

OpenGL ES میں آف اسکرین رینڈرنگ کا بنیادی طریقہ کار Framebuffer Object (FBO) ہے۔ FBO ایک کنٹینر ہے جس میں ٹیکسچر امیجز یا renderbuffer آبجیکٹ منسلک کیے جا سکتے ہیں۔ FBO کو بائنڈ کرنے کے بعد، تمام بعد میں آنے والے رینڈرنگ کمانڈز اسکرین کے بجائے منسلک ٹیکسچر پر بھیجے جاتے ہیں۔

Offscreen Rendering کیسے کام کرتا ہے؟

Offscreen Rendering ایک علیحدہ framebuffer آبجیکٹ بنا کر، اس میں ٹیکسچر یا renderbuffer منسلک کر کے، رینڈرنگ سیاق کو اس FBO پر سوئچ کر کے، اور ڈرا کمانڈز پر عمل کر کے لاگو کیا جاتا ہے۔ پاس مکمل ہونے کے بعد، سیاق مرکزی framebuffer پر واپس آ جاتا ہے۔

آف اسکرین رینڈرنگ کا عام چکر

عمل تین مراحل پر مشتمل ہے: FBO بنانا اور ٹیکسچر منسلک کرنا — منظر کو آف اسکرین ٹیکسچر میں رینڈر کرنا — نتیجے میں ملنے والے ٹیکسچر کو اگلے پاس میں استعمال کرنا۔ GL_COLOR_ATTACHMENT0 یہ طے کرتا ہے کہ رینڈرنگ کس رنگ کے ٹیکسچر میں ہوگی۔

cpp
// آف اسکرین رینڈرنگ کے لیے FBO بنانا (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);

آف اسکرین رینڈرنگ کی تکنیکیں

Offscreen Rendering گرافیکل اثرات کی ایک وسیع رینج کے لیے استعمال ہوتی ہے۔ ہر تکنیک کو ایک یا زیادہ آف اسکرین پاسز اور ایک مخصوص FBO کنفیگریشن کی ضرورت ہوتی ہے۔

تکنیکپاسز کی تعدادمقصد
Shadow Mapping2+روشنی کے ماخذ سے شیڈو میپ بنانا
Reflection Mapping1-2کیوب میپ میں ریفلیکشن رینڈر کرنا
Bloom Effect3-5تصویر کے روشن حصوں کی چمک
HDR Rendering2HDR تصاویر کے لیے ٹون میپنگ
Depth Prepass1ڈیپتھ بفر کو پہلے سے بھرنا

Render-to-Texture (RTT)

ایک بنیادی تکنیک جس میں رینڈرنگ کا نتیجہ بعد میں استعمال کے لیے ٹیکسچر میں محفوظ کیا جاتا ہے۔ Render-to-Texture منی میپ، متحرک اشیاء کی ساخت اور پیچیدہ مواد کے پیشگی تصور کے لیے استعمال ہوتی ہے۔

ملٹی پاس رینڈرنگ (Multi-pass)

پیچیدہ اثرات (HDR، bloom، depth of field) کو کئی ترتیب وار پاسز کی ضرورت ہوتی ہے۔ ہر پاس منظر کو آف اسکرین ٹیکسچر میں رینڈر کرتا ہے، فلٹر لگاتا ہے، اور نتیجہ اگلے پاس کو دیتا ہے۔ یہ نقطہ نظر حتمی تصویر کے معیار کو کھونے کے بغیر اثرات جمع کرنے کی اجازت دیتا ہے۔

شیڈو میپنگ (Shadow Mapping)

Shadow Mapping آف اسکرین رینڈرنگ کے استعمال کی ایک کلاسک مثال ہے۔ شیڈو دو پاسز میں بنایا جاتا ہے: پہلے منظر کو روشنی کے ماخث کے نقطہ نظر سے ڈیپتھ ٹیکسچر (offscreen) میں رینڈر کیا جاتا ہے، پھر مرکزی رینڈرنگ کے دوران ہر ٹکڑے (fragment) کا اس ڈیپتھ میپ سے موازنہ کیا جاتا ہے کہ آیا وہ شیڈو میں ہے۔

شیڈو پیدا کرنے کا عمل

پہلا پاس: کیمرہ روشنی کے ماخذ کی پوزیشن پر رکھا جاتا ہے، منظر کو آف اسکرین بفر میں رینڈر کیا جاتا ہے، صرف ڈیپتھ کو ٹیکسچر میں ریکارڈ کرتے ہوئے۔ دوسرا پاس: ہر ٹکڑے کی جانچ کے ساتھ مرکزی رینڈرنگ — اگر اس کی ڈیپتھ ڈیپتھ میپ میں قیمت سے زیادہ ہے، تو ٹکڑا شیڈو زدہ ہوتا ہے۔

glsl
// شیڈو میپنگ کے لیے 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;
}

آف اسکرین رینڈرنگ کی کارکردگی

Offscreen Rendering اضافی GPU پاسز شامل کرتی ہے، جس سے مجموعی حسابی بوجھ اور بجلی کی کھپت بڑھ جاتی ہے۔ موبائل ڈیولپمنٹ میں یہ خاص طور پر اہم ہے: ہر FBO کی تبدیلی کے لیے پائپ لائن فلش اور اضافی وقت درکار ہوتا ہے۔

کارکردگی کے عوامل

  • پاسز کی تعداد — ہر اضافی پاس پورے منظر کو رینڈر کرتا ہے، پروسیس شدہ عمودی اور ٹکڑوں کی تعداد کو دوگنا کرتا ہے۔
  • آف اسکرین ٹیکسچر ریزولوشن — بہت زیادہ ریزولوشن منتخب کرنے سے میموری بینڈوتھ کا بوجھ بڑھ جاتا ہے۔
  • FBO سوئچنگ — بار بار framebuffer آبجیکٹ تبدیل کرنے سے پائپ لائن اسٹال ہوتی ہے اور GPU کا استعمال کم ہو جاتا ہے۔

آف اسکرین رینڈرنگ کی اصلاح

موبائل آلات کے لیے سفارش: اگر نتیجہ پڑھنے کی ضرورت نہیں ہے تو ٹیکسچر کے بجائے renderbuffer استعمال کریں (صرف ڈیپتھ پاس)؛ آف اسکرین ٹیکسچر کے لیے کم از کم ضروری ریزولوشن منتخب کریں؛ جہاں ممکن ہو MRT (Multiple Render Targets) کے ذریعے پاسز کو ضم کریں۔

Offscreen Rendering کوڈ کی مثالیں

Offscreen Rendering مختلف پلیٹ فارمز پر ان کے اپنے API کے ذریعے لاگو کیا جاتا ہے۔ OpenGL ES اور Apple Metal کی مثالیں دیکھتے ہیں۔

OpenGL ES 3.0 مثال: ٹیکسچر میں رینڈرنگ

cpp
// FBO سیٹ اپ اور منظر کو ٹیکسچر میں رینڈر کرنا
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);
// ڈیفالٹ framebuffer پر واپس سوئچ کرنا
glBindFramebuffer(GL_FRAMEBUFFER, 0);

Metal (iOS) مثال

cpp
// Metal: ٹیکسچر میں آف اسکرین رینڈر پاس
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];

اکثر پوچھے جانے والے سوالات

آسان الفاظ میں Offscreen Rendering کیا ہے؟

Offscreen Rendering وہ ہے جب گرافکس اسکرین پر نہیں، بلکہ ایک پوشیدہ بفر (ٹیکسچر) میں کھینچے جاتے ہیں۔ اس بفر کو بعد میں دوسرے اثرات کے لیے ٹیکسچر کے طور پر استعمال کیا جاتا ہے۔ تصور کریں کہ آپ ایک شفاف شیٹ پر ڈرا کر رہے ہیں جسے آپ بعد میں حتمی تصویر پر رکھتے ہیں۔

آف اسکرین رینڈرنگ کی ضرورت کیوں ہے؟

آف اسکرین رینڈرنگ ان اثرات کو بنانے کی اجازت دیتی ہے جو ایک پاس میں ناممکن ہیں: شیڈوز (روشنی کے نقطہ نظر سے رینڈرنگ)، ریفلیکشنز، بلر، چمک (bloom) اور HDR ٹوننگ۔ ہر اثر کے لیے آف اسکرین ٹیکسچر میں علیحدہ پاس درکار ہے۔

کیا Offscreen Rendering کارکردگی کو سست کرتا ہے؟

ہاں، ہر آف اسکرین پاس GPU کے کام کی مقدار کو دوگنا کر دیتا ہے، کیونکہ منظر دوبارہ رینڈر ہوتا ہے۔ اصلاح میں آف اسکرین ٹیکسچر ریزولوشن کم کرنا، renderbuffer استعمال کرنا، اور MRT (Multiple Render Targets) کے ذریعے پاسز کو ضم کرنا شامل ہے۔

FBO اور Renderbuffer میں کیا فرق ہے؟

FBO (Framebuffer Object) ایک کنٹینر ہے جس میں ٹیکسچر یا renderbuffer منسلک ہوتے ہیں۔ Texture رینڈرنگ کے نتائج پڑھنے کی اجازت دیتا ہے (شیڈو میپنگ، پوسٹ ایفیکٹس کے لیے ضروری)۔ Renderbuffer تیز تر ہے، لیکن اس کا مواد ٹیکسچر کے طور پر استعمال نہیں کیا جا سکتا۔

کون سے API Offscreen Rendering کو سپورٹ کرتے ہیں؟

تمام جدید گرافکس API: OpenGL ES (FBO کے ذریعے)، Apple Metal (MTLRenderPassDescriptor کے ذریعے)، Vulkan (VkFramebuffer کے ذریعے)، Direct3D (Render Target View کے ذریعے)۔ تصوراتی طور پر طریقہ کار ایک ہی ہے — اسکرین کے بجائے ٹیکسچر میں رینڈرنگ۔

خلاصہ

  • Offscreen Rendering — گرافیکل منظر کو براہ راست اسکرین پر نہیں، بلکہ ٹیکسچر میں رینڈر کرنا۔
  • Framebuffer Object (FBO) — OpenGL ES میں آف اسکرین رینڈرنگ کا بنیادی طریقہ کار۔
  • Shadow mapping اور ریفلیکشنز — آف اسکرین رینڈرنگ کی کلاسک ایپلیکیشنز۔
  • Multi-pass rendering ترتیب وار پاسز کے ذریعے پیچیدہ اثرات کو قابل بناتا ہے۔
  • ہر پاس GPU پر حسابی بوجھ کو دوگنا کرتا ہے، جس کے لیے محتاط اصلاح کی ضرورت ہے۔
  • Renderbuffer ٹیکسچر سے بہتر ہے اگر نتیجہ کو ٹیکسچر کے طور پر پڑھنے کی ضرورت نہ ہو۔
  • MRT (Multiple Render Targets) کئی پاسز کو ایک میں ضم کرنے کی اجازت دیتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں