Offscreen Rendering : ce que c'est, techniques et application dans les applications

Auteur : IT Sectr Publié le : 2026-06-11 Temps de lecture : 10 min

Offscreen Rendering (rendu hors écran) est une technique de rendu d'une scène 3D non pas à l'écran, mais dans un tampon de texture (FBO — Framebuffer Object), qui peut ensuite être utilisé comme texture. Selon Apple Metal Documentation, 2025, le rendu hors écran est utilisé pour créer des ombres, des réflexions, des post-effets et le prétraitement graphique. Offscreen Rendering permet de diviser une scène complexe en passes sans perte de qualité.

Points Clés

  • Offscreen Rendering — rendu d'une scène dans une texture, pas directement à l'écran.
  • Framebuffer Object (FBO) — le principal mécanisme de rendu hors écran dans OpenGL ES.
  • Multi-pass rendering — division de l'image finale en plusieurs passes via des tampons hors écran.
  • Ombres et réflexions — applications typiques du rendu hors écran dans les graphiques mobiles.
  • Performances du rendu hors écran nécessitent une optimisation en raison des passes GPU supplémentaires.

Qu'est-ce que Offscreen Rendering ?

Offscreen Rendering est une méthode de rendu de contenu graphique dans un tampon intermédiaire dans la mémoire vidéo, plutôt que dans le framebuffer principal qui est affiché à l'écran. Le résultat du rendu hors écran est sauvegardé dans une texture ou un renderbuffer.

Le principal objectif du rendu hors écran est le rendu multi-passes (multi-pass rendering). Une scène complexe est divisée en plusieurs passes : d'abord la scène est rendue dans une texture (offscreen), puis cette texture est utilisée comme entrée pour la passe suivante, et ainsi de suite jusqu'à l'obtention de l'image finale. Cette approche permet de réaliser des effets impossibles en une seule passe.

Framebuffer Object (FBO)

Le mécanisme clé du rendu hors écran dans OpenGL ES est le Framebuffer Object (FBO). Un FBO est un conteneur auquel des images de texture ou des objets renderbuffer peuvent être attachés. Après avoir lié le FBO, toutes les commandes de rendu suivantes sont dirigées vers la texture attachée, pas vers l'écran.

Comment fonctionne Offscreen Rendering ?

Offscreen Rendering est implémenté en créant un objet framebuffer séparé, en y attachant une texture ou un renderbuffer, en basculant le contexte de rendu vers ce FBO et en exécutant des commandes de dessin. Une fois la passe terminée, le contexte revient au framebuffer principal.

Cycle typique de rendu hors écran

Le processus comprend trois étapes : création du FBO et attachement d'une texture — rendu de la scène dans la texture hors écran — utilisation de la texture résultante dans la passe suivante. GL_COLOR_ATTACHMENT0 détermine dans quelle texture de couleur le rendu sera effectué.

cpp
// Création d'un FBO pour le rendu hors écran (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);

Techniques de rendu hors écran

Offscreen Rendering est utilisé pour une large gamme d'effets graphiques. Chaque technique nécessite une ou plusieurs passes hors écran et une configuration FBO spécifique.

TechniqueNombre de passesObjectif
Shadow Mapping2+Génération d'une carte d'ombres depuis la source lumineuse
Reflection Mapping1-2Rendu des réflexions dans une cube map
Bloom Effect3-5Lueur sur les zones lumineuses de l'image
HDR Rendering2Tonemapping pour les images HDR
Depth Prepass1Pré-remplissage du depth buffer

Render-to-Texture (RTT)

Une technique de base dans laquelle le résultat du rendu est sauvegardé dans une texture pour une utilisation ultérieure. Render-to-Texture est utilisé pour créer des mini-cartes, des textures d'objets dynamiques et la prévisualisation de matériaux complexes.

Rendu multi-passes

Les effets complexes (HDR, bloom, depth of field) nécessitent plusieurs passes séquentielles. Chaque passe rend la scène dans une texture hors écran, applique un filtre et transmet le résultat à la passe suivante. Cette approche permet d'accumuler les effets sans perte de qualité de l'image finale.

Shadow Mapping

Shadow Mapping est un exemple classique d'utilisation du rendu hors écran. L'ombre est créée en deux passes : d'abord la scène est rendue du point de vue de la source lumineuse dans une texture de profondeur (offscreen), puis lors du rendu principal chaque fragment est comparé à cette carte de profondeur pour déterminer s'il est dans l'ombre.

Processus de génération d'ombres

Première passe : la caméra est placée à la position de la source lumineuse, la scène est rendue dans un tampon hors écran, enregistrant uniquement la profondeur dans la texture. Deuxième passe : rendu principal avec vérification de chaque fragment — si sa profondeur est supérieure à la valeur dans la carte de profondeur, le fragment est ombré.

glsl
// Fragment Shader pour le shadow mapping
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;
}

Performances du rendu hors écran

Offscreen Rendering ajoute des passes GPU supplémentaires, ce qui augmente la charge de calcul globale et la consommation d'énergie. Dans le développement mobile, c'est particulièrement critique : chaque changement de FBO nécessite un vidage de pipeline et du temps supplémentaire.

Facteurs de performance

  • Nombre de passes — chaque passe supplémentaire rend toute la scène, doublant le nombre de sommets et de fragments traités.
  • Résolution de la texture hors écran — choisir une résolution trop élevée augmente la charge de la bande passante mémoire.
  • Changement de FBO — les changements fréquents d'objet framebuffer provoquent des blocages de pipeline et réduisent l'utilisation du GPU.

Optimisation du rendu hors écran

Pour les appareils mobiles, il est recommandé : d'utiliser un renderbuffer au lieu d'une texture si la lecture du résultat n'est pas nécessaire (passe de profondeur uniquement) ; de choisir la résolution minimale nécessaire pour les textures hors écran ; de fusionner les passes lorsque c'est possible avec MRT (Multiple Render Targets).

Exemples de code Offscreen Rendering

Offscreen Rendering sur différentes plateformes est implémenté via leurs propres API. Voyons des exemples pour OpenGL ES et Apple Metal.

Exemple avec OpenGL ES 3.0 : rendu dans une texture

cpp
// Configuration FBO et rendu de scène vers texture
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);
// Retour au framebuffer par défaut
glBindFramebuffer(GL_FRAMEBUFFER, 0);

Exemple avec Metal (iOS)

cpp
// Metal : passe de rendu hors écran vers texture
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];

Foire Aux Questions

Qu'est-ce que Offscreen Rendering en termes simples ?

Offscreen Rendering, c'est quand les graphiques sont dessinés non pas à l'écran, mais dans un tampon invisible (texture). Ce tampon est ensuite utilisé comme texture pour d'autres effets. Imaginez que vous dessinez sur une feuille transparente que vous superposez ensuite à l'image finale.

Pourquoi le rendu hors écran est-il nécessaire ?

Le rendu hors écran permet de créer des effets impossibles en une seule passe : ombres (rendu du point de vue de la lumière), réflexions, flou, lueur (bloom) et tonification HDR. Chaque effet nécessite une passe séparée dans une texture hors écran.

Est-ce que Offscreen Rendering ralentit les performances ?

Oui, chaque passe hors écran double la quantité de travail du GPU, car la scène est rendue à nouveau. L'optimisation inclut la réduction de la résolution des textures hors écran, l'utilisation de renderbuffers et la fusion des passes via MRT (Multiple Render Targets).

Quelle est la différence entre FBO et Renderbuffer ?

FBO (Framebuffer Object) est un conteneur auquel sont attachés des textures ou des renderbuffers. Texture permet de lire les résultats du rendu (nécessaire pour le shadow mapping, les post-effets). Renderbuffer est plus rapide, mais son contenu ne peut pas être utilisé comme texture.

Quelles APIs supportent Offscreen Rendering ?

Toutes les API graphiques modernes : OpenGL ES (via FBO), Apple Metal (via MTLRenderPassDescriptor), Vulkan (via VkFramebuffer), Direct3D (via Render Target View). Conceptuellement, le mécanisme est le même — rendu dans une texture au lieu de l'écran.

Résumé

  • Offscreen Rendering — rendu d'une scène graphique dans une texture, pas directement à l'écran.
  • Framebuffer Object (FBO) — le principal mécanisme de rendu hors écran dans OpenGL ES.
  • Shadow mapping et réflexions — exemples classiques d'application du rendu hors écran.
  • Multi-pass rendering permet de réaliser des effets complexes via des passes séquentielles.
  • Chaque passe double la charge de calcul sur le GPU, nécessitant une optimisation minutieuse.
  • Renderbuffer est préférable à une texture si le résultat n'a pas besoin d'être lu comme texture.
  • MRT (Multiple Render Targets) permet de fusionner plusieurs passes en une seule.

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi