Ce billet vous apprendra à baker un éclairage avec le moteur de Cycles, d’habitude ce genre d’éclairage est obtenu dans les moteurs récents par le baking de light probes, je publierais plus tard un billet dessus avec Blender EEVEE. Vous pouvez avoir un aperçu du fonctionnement ici sous Unity: https://www.youtube.com/watch?v=7fI3MBMSR5k

Le baking que nous allons réaliser ici vous permettra d’obtenir une image en nuance de gris que vous pourrez ensuite combiner avec votre texture. Vous verrez comment y combiner ombres et spécularité (brillance sur les surfaces) et comment utiliser le Color Management Filmic pour améliorer et éclaircir vos scènes et en particulier celles en intérieur.

UV Mapping

Dépliez les UVs de vos polygones, cela servira à créer le premier « UV Channel » qui sera utilisé pour votre diffuse, specular et normal maps (les reliefs). Pour gagner du temps pendant le dépliage vous pouvez utiliser la touche shift + g pour utiliser l’outil Select Similar de Blender et rapidement sélectionner vos edges. Vous trouverez plus d’information sur l’outil ici: https://youtu.be/rll_fjFocck

Faites attention à ce que les seams ne soient pas trop visibles. Vous pouvez voir l’UV map dans les propriétés à droite dans l’onglet Data (représenté par un triangle).

Vous allez devoir créer un seconds UV Channel qui contiendra les UVs de tous vos assets, vous l’utiliserez pour y stocker les informations d’éclairage il faut donc qu’aucun modifier Mirror ne soit actif, appliquez-les si des assets les utilisent. Vous pouvez dupliquer l’assets de bases qui utilise le mirror (shift + d) et le déplacer dans un autre layer (calque) avec la touche m (move layer).

Pour créer le seconds UV Channel plutôt que de réunir tous vos assets en un seul, vous allez utiliser un Addon prévu pour appeler « Texture Atlas ». Vous le trouverez dans File > User Preferences… dans l’onglet Addon et taper Atlas puis cocher pour l’activer. Vous verrez apparaitre dans l’onglet Rendu des propriétés à droite de la vue 3D tout en bas « Texture Atlas ». Cliquez sur l’icône « + » et nommez votre UV Channel si vous le désirez par exemple en « Lightmap ». L’option de résolution est inutile elle ne sert que si vous baké avec Blender Render, nous le feront avec Cycles. Vous devez en dessous choisir le type de dépliage entre Smart_UV et Lightmap, voici les principales différences:

  • Le Smart_UV (recommandé) déplie automatiquement vos UVs en fonction d’un angle défini et de l’orientation des faces. C’est le mode que je vous recommande, car il vous permet d’avoir des « UVs Island » ou « chunk » (morceaux), plus les morceaux sont gros plus les performances du jeu seront élevées, mais il ce peux que les UVs ne remplissent pas tout l’espace disponible (le texel density).
  • Le mode Lightmap peut sembler par son nom l’option appropriée, mais ce n’est pas toujours le cas. Ce dépliage va utiliser le plus d’espace possible donc optimisé le texel density donc utiliser plus de pixels, mais cela au prix de dégradations légères des performances, car trop de petits morceaux de faces individuelles, mais surtout peut rendre les seams visibles même en augmentant le bleeding/padding (baker en dépasser les UVs pour éviter des lignes), car cela provoque ce qu’on appel du mipmapping, en voici un exemple: https://i.imgur.com/QdzWG.png

Cliquez ensuite sur Auto Unwrap, à droite vous pouvez définir le margin (l’espace entre les UVs) par défaut la valeur est de 0.01, elle est un peu faible et pourrait faire apparaitre les seams, mettez plutôt 0.1.

Si vous sélectionnez l’asset un de vos assets vous devriez avoir deux UV Channels, la première pour utiliser vos textures et la seconde pour la lightmap:

deux uvs maps.png
Deux UV Channels

Baking

Il faut maintenant préparer l’éclairage, je laisse faire votre créativité, vous pouvez ajouter un Sky Texture et un Sun, modifier l’intensité de l’éclairage, les couleurs, placer différentes lampes. Personnellement j’évite d’utiliser des lampes, mais j’applique plutôt des emissives shaders à mes assets pour émettre de la lumière afin d’avoir des lumières visibles dans le jeu.

Créez un matériau Diffuse sur un asset sans rien y toucher, il faut qu’il reste blanc avec une valeur à 0.8. Ajoutez des matériaux émissifs pour vos éclairages. Sélectionnez tous vos assets avec la touche a puis faites shift + clic droit sur l’asset qui contient les matériaux que vous venez de créer et faites Ctrl + L pour attacher à toutes vos sélections les matériaux. En Edit Mode sélectionnez les faces, puis cliquez sur Assign près de l’Emissive shader pour en faire des lampes, des néons, etc.

Vous allez devoir créer une image pour baker votre lightmap, c’est là que vous allez pouvoir définir la résolution. Ouvrez le UV/Image Editor (vous pouvez changer le type de menu dans le coin d’une fenêtre), créez une nouvelle image, nommez là par exemple « lightmap » et définissez la résolution, je vous conseils 40964096 si vous faites le baking à partir d’une carte graphique sinon mettez 20482048. Si vous souhaitez par la suite améliorer l’éclairage et le retoucher (je vous le conseille vivement, je vous expliquerais plus bas comment faire) cochez « 32 bit Float ».

Pour utiliser votre carte graphique installer les derniers drivers disponibles puis allez dans File > User Preferences… dans l’onglet System, en bas à gauche à Cycles Compute Device cliquez sur CUDA ou OpenCL. Dans les options de rendu si vous utilisez bien Cycles Render la ligne Device devrait apparaitre en haut avec CPU à l’intérieur, mettez GPU Compute.

Ouvez le Node Editor et pour chaque matériau ajouter un node Image Texture avec l’image que vous venez de créer. Ne l’attachez à rien, sélectionnez-la, cela indiquera à Cycles sur quelle image baker le matériau.

Vous devez ajouter une image sur chaque matériau sinon vous aurez un message d’erreur vous indiquant le matériau qui n’a pas d’image sur lequel baker.

Dans les paramètres du rendu à Sampling changez la valeur près de Render, plus la valeur sera élevée plus le rendu sera long. Vous pouvez commencer par mettre une petite valeur comme 10 pour tester si le baking s’effectue correctement.

Défilez tout en bas dans le menu « Bake », pour le type de baking mettez Diffuse et activer Direct et Indirect, vous n’avez pas besoin de Color. Ajustez le margin (le nombre de pixels à déborder à l’extérieur des UVs) à votre résolution divisé par 256. Par exemple si vous bakez en 4096 cela donne 4096 / 256 = 16 pixels de margin.

Tout est prêt, cliquez sur bake. Pour voir le résultat, passez en mode d’affichage Texture dans la vue 3D et dans le menu qui s’ouvre avec la touche n cliquez sur Shadeless dans Shading pour ne pas prendre en compte l’éclairage de la scène, mais n’avoir que celui du baking et Only Render dans Display pour cacher les lampes, la caméra, etc. N’oubliez pas de sauvegarder votre lightmap sauf si vous avez des modifications de l’éclairage à faire, des UVs ou que vous voulez augmenter les samples.

Deux notes importantes:

  • Si vous avez cochez 32 bit Float enregistrer votre lightmap en OpenEXR celà permettra de retravailler votre texture sans perdre aucune information.
  • Si votre baking est étrange celà ce produit quand plusieurs assets sont sélectionnés, le margin écrase la texture d’un asset précédement baké c’est un bug. Pour le corriger dupliquez tout vos assets dans un autre layer, dans votre layer principal joignez tout vos assets avec ctrl + j (faites alt + c avant pour appliquer tous les modifiers) et faites à nouveau un baking

Utiliser la lightmap

Pour utiliser votre lightmap dans le moteur de jeu de Blender je vous conseil de dupliquer votre scène dans un autre layer qui sera utilisé pour le jeu.

Utilisez le moteur Blender Render ou Blender Game. Dans le menu qui s’ouvre avec la touche n de la vue 3D à Shading changez Multitexture par GLSL et laissez le mode d’affiche « Textured ». Pour chaque matériau, décochez « Use Node » (l’icône représente deux nodes attachées) près du nom du matériau. Dans les paramètres de chaque matériau cochez Shadeless, plus bas nous verrons comment utiliser la fonction Emit pour ajouter des ombres temps réel et reflets sur les surfaces et rendre visible les normal maps.

Le mode Shadeless a pour avantage de n’utiliser que très peu de ressources, ainsi il vous ai possible de réaliser un éclairage réaliste sur un appareil limité en performance tel qu’une tablette ou smartphone. Sur un ordinateur moderne vous utiliserez moins d’1 % des performances graphiques.

Voici un jeu que j’apprecie qui utilise le shadeless avec un bon rendu, il s’agit de Flip’d: https://youtu.be/H-E7_mn73BI

Dans l’onglet des textures représenté par un damier de jeu d’échec importez la lightmap et dans à Mapping à Coordinates mettez UV à la place de Generated et à Map mettez le seconds UV Channel que nous avions créé pour la lightmap.

Voici à quoi ressemble ma scène avec la lightmap:

lightmap bake.png
La scène avec la lightmap

Pour le mode de « mélange » ou blend type, utilisez Overlay, cela permettra d’éclaircir ou d’assombrir vos textures. C’est l’étape qui suit, importez vos textures dans le premier slot, vous pouvez déplacer la lightmap vers le bas en cliquant dessus puis avec les flèches. La texture utilisera comme vous le devinez le premier UV Channel. Vous pouvez ajuster la taille de la texture en redimensionnant les UVs dans l’UV Texture Editor, vérifiez de bien sélectionner le premier UV Channel dans Object Data (l’onglet avec le triangle que nous avions vu) vous pouvez aussi le redimensionner. Pour que la taille soit identique partout si vos assets sont tous joints entre eux sélectionnez tout et faite à nouveau un Unwrap.

Vous pouvez utiliser plusieurs textures, créez un nouveau matériau, en Edit Mode sélectionnez les faces puis cliquez sur Assign, vous devrez y connecter votre texture et à chaque fois la lightmap.

Voici la scène avec plusieurs textures, tous utilisent une lightmap en second slot sur le deuxièmes UV Channel en mode Overlay:

texture et lightmap.jpg
Plusieurs textures utilisés

Pour les matériaux emissifes, utilisez juste un matériau avec une couleur et cochez Shadeless. Pour récupérer la couleur passer sur votre layer principal qui a servi à baker l’éclairage, en mode Cycles et faite ctrl + c sur vos matériaux émissifs puis revenez dans le layer du Blender Render ou Game et faites ctrl + v.

Vous pouvez baker un skybox, allez dans le layer pour votre baking, passez sur Blender Cycles dans l’onglet des propriétés World (représenté par la Terre) cliquez sur « Use Nodes » à Surface, cliquez à droite de Color et sélectionnez Sky Texture. Orientez l’éclairage à l’aide de la Sphere dans les propriétés, faites en sorte d’avoir le même angle que le soleil. Je vous conseille de passer en vue de dessus dans la vue 3D avec la touche 7 et de faire correspondre la sphère de la Sky Texture avec la ligne en pointillé du soleil à vue d’oeil.

Créez une sphère qui englobe tout votre niveau, faites-la assez grande pour qu’on ne puisse pas trop se rapprocher des bordures.

Si vous ne voyez plus la sphère c’est qu’elle dépasse le « clipping plane » (porté de champ de vision) pour augmenter la distance ouvrez le menu n de la vue 3D, à View puis Clip augmentez la valeur de End.

Inversez les normales de votre sphère en passant en Edit Mode, puis avec la touche w pour ouvrir le menu spécial et cliquez sur Flip Normals. Chaque fois que vous toucherez au Sky Texture ou Sun (vous devrez les ajuster pour avoir le même angle avec les deux) vous devrez rebaker votre scène pour qu’elle corresponde au ciel.

Corriger le « value » de vos textures

Pour que vos textures se combinent bien avec votre éclairage, vous allez devoir les ajuster pour qu’elles utilisent toutes un niveau de luminosité moyen. Vous pouvez le faire avec GIMP, allez dans Color puis Curve et déplacez la ligne du milieu sur le point le plus élevé de l’histogramme (la luminosité le plus utilisée). Ne déplacez pas trop le point du milieu vers la droite ou gauche non plus même si le point le plus élevé est dans un coin, car cela détériorera votre texture et ses détails.

Curves.png
Correction du Color Value

Ajout de la brillance (specular), ombres et tags (decals)

La brillance

Pour avoir des effets de brillance et ombres, il va falloir décocher le mode shadeless et mettre l’option « Emit » à 1.0 pour tous vos matériaux. Emit va permettre à vos matériau de s’auto-illuminer tout en prenant en compte l’éclairage ambiant de la scène. Celà veut aussi dire qu’en utilisant les mêmes lampes votre scène apparaitra beaucoup plus (trop) claire, mais nous allons corriger ça.

Ajouter des points light à chaque fenêtre avec la couleur du ciel, devant les faces avec des emissives avec la couleur du matériau. Pour chaque lampe décochez Diffuse pour qu’elles n’émettent pas de lumière, mais laissez Specular pour avoir de la brillance sur les surfaces.

Régler la brillance de votre matériau, vous pouvez importer une roughness texture (rugosité) dans le premiers UV Channel et dans ses options en bas dans Influence décochez Color et cochez Intensity pour specular. Vous pouvez dans les options du matériau ajuster la valeur specular intensity pour al quantité de lumière reflétée et hardness pour donner un effet métallique en augmentant la valeur.

Vous pouvez aussi ajouter une normal map en important la texture puis en cochant Normal dans Geometry dans les paramètres tout en bas. Dans l’option Image Sampling cochez Normal Map.

Voilà ce que j’obtiens dans une scène d’intérieur:

reflet.jpg
Brillance sur les surfaces

Si vous souhaitez avoir des reflets sur vos assets il faut utiliser un reflection probes, ils seront disponible dans le viewport EEVEE de Blender 2.8.

Des ombres

Pour les ombres pour optimiser les performances activez-les uniquement pour le soleil. Ne touchez pas à son orientation, utilisez le soleil qui a servi à baker la lightmap, elle doit en principe correspondre à votre sky texture. Cochez Only Shadow mais gardez cochez Diffuse et Specular. Comme Only Shadow a été coché le diffuse ne servira qu’à projeter des ombres, mais ne changera rien à la luminosité de la scène et le specular ajoutera de la lumière sur les surfaces.

Voici comment paramétrer le soleil:

  • ajustez son intensité pour avoir des ombres autant contrasté que celle de votre lightmap, ajoutez des polygones au dessus du sol dans un endroit éclairé pour tester.
  • pour le Buffer Type mettez Variance, celà permet d’avoir des ombres adoucies et ajuster la valeur, plus elle est faible moins elle est détaillée, mais elle peut paraitre plus adoucie, ça peut être voulu.
  • cochez Shadow Box pour voir dans quelle zone les ombres sont calculées. Pour avoir un maximum de performances ajuster le Frustom Size pour englober uniquement votre niveau et pas au-delà et Clip End pour la profondeur.

Une technique pour optimiser les performances des ombres consistes à attacher le soleil à la caméra (en le plaçant au-dessus de la caméra) en sélectionnant le soleil puis la caméra et en faisant Ctrl + p puis Object. Les ombres n’apparaitront qu’autour du joueur, ajuster le Frustrom Size pour al distance à laquelle les ombres apparaissent.

Des tags

Pour ajouter des tags au mur créez une nouvelle texture transparente en 4096, vous devrez l’ajouter dans chaque matériau et utiliser le seconds UV Channel qui a servi à la lightmap (peindre les tags sur le premier UV Channel aurait répété les dessins sur tous les assets). Pour projeter les images, utilisez le mode Stencil. Une fois vos décals peints sauvegardez l’image et pour le mode de combinaison (Blend mode) tout en bas utilisez Overlay.

tags.jpg
Des ombres et tags

Utiliser Filmic sur votre lightmap

Pour comprendre mieux ce qu’est Filmic et son utilité je vous invite à lire ce billet de Yellow, il faut au minimum Blender 2.79 pour l’utiliser: https://zestedesavoir.com/billets/1851/filmic-blender/

Contrairement au rendu Cycles le baking ne permet pas d’utiliser un autre Color Management que celui par défaut, vous allez devoir composer votre image.

Voici comment il faut s’y prendre:

  • Vous devez avoir baker sur une image en 32 bit Float cela permet d’avoir des valeurs de blanc supérieur à 1 (c’est étape est très importante, si vous n’utilisez pas une image en 32 bit Float vous devrez en créer une nouvelle et tout baker à nouveau).
  • Bakez l’éclairage et sauvegardez la texture en OpenEXR
  • Importer l’image dans le compositor
  • Changez la résolution de rendu pour avoir celle de l’image, n’oubliez pas de mettre l’échelle à 100 %.
  • Dans l’onglet Scene représenté par une sphère, un cylindre et un soleil, allez dans Color management à View mettez Filmic et pour le Look Base Contrast.
  • Faites un rendu avec F12 et sauvegardez au format de votre choix (j’utilise le PNG).

Eventuellement dans le compositor vous pouviez importer la lightmap et la connecter à un output Viewer Node puis ouvrir l’image Editor et afficher le Viewer Node.

Faites ceci pour toutes vos bakes y compris la skybox pour garder un éclairage homogène partout.

image 32 bits.png
Compositing avec Filmic

Vous remarquerez aussi que vos rendu 3D auront changés, ils seront un peu plus sombre et moins contrasté, cela vous devrez ajuster l’intensité du soleil, sky texture et emissives pour éclairer vos pièces. Le mode Filmic vous permettra globalement d’avoir des pièces d’intérieur beaucoup plus clair, plus proche du monde réel.

éclairage filmic.jpg
Eclairage avec Filmic, ombres temps réel et spécular