Articles

Les fichiers .meta

Unity, VCS

Comme précisé dans l’article intitulé Utiliser Git avec Unity :

il est indispensable d’utiliser un Version Control System lorsque l’on travaille sur un projet en Unity.

On remarque cependant que certains fichiers générés doivent tout de même être versionnés, en particulier les fichier .meta1. Ceci est contre intuitif et semble aller à l’encontre de la philosophie de Git.

Les fichiers .meta servent en fait à stocker des metadonnées concernant les Assets importés dans les projets. En particulier, si on sélectionne un Asset dans la fenêtre Project, on obtient une fenêtre Inspector qui ressemble à ça :

...

Photoréalisme : les points importants

General, TLPL

Cet article résume les points les plus intéressants mentionnés dans les vidéos ci-dessous :

75% des images des catalogues IKEA sont en fait des images de synthèse photoréalistes (au lieu de photographies). Les images de synthèse offrent une plus grande flexibilité. Elles permettent surtout de visualiser des effets et des objets qui n’existent tout simplement pas dans la réalité.

Pour obtenir des images photoréalistes, il faut 4 éléments fondamentaux : modélisation, matériaux, illumination et post-processing. Ces 4 éléments doivent être d’une excellente qualité pour obtenir des résultats convaincants. De ces 4 domaines, les parties qui demandent le plus de temps et d’attention sont la création des matériaux, et l’illumination.

...

Coco de Pixar : quelques chiffres

General, TLPL

Cet article résume les points les plus intéressants mentionnés durant l’interview donnée par Renee Tam de Pixar à Foundry le 25 octobre 2017 1.

Le film Coco, créé par Pixar et sorti en 2017 est le dernier grand succès de Pixar2.

Le film Coco contient 8.7 millions de lumières, 27 millions d’objets et 1 milliards d’assets. Les images les plus complexes ont demandé jusqu’à 450 heures de calcul pour le rendu. En implémentant certaines techniques d’optimisation, en particulier en pré-calculant certaines parties de l’arrière-plan, il a été possible de descendre les temps de rendu à 55 heures par image.

...

Commencer avec URP

Unity, Rendering

Dépréciée depuis Unity 2021
Depuis Unity 2021, il existe un template vide pour URP. Il n’est dont plus nécessaire d’effectuer les étapes détaillées dans cette page.

Le pipeline de rendu utilisé dans ce cours est le Universal Render Pipeline (ou URP)1. Il faut donc créer un projet Unity avec une configuration particulière pour pouvoir l’utiliser. Bien que la documentation Unity suggère d’utiliser le template fourni2 pour créer un projet basé sur URP, celui-ci contient beaucoup de choses dont nous n’aurons pas besoin. Ainsi, nous conseillons plutôt de commencer avec un projet vide (utilisant le Built-in Render Pipeline), puis de le configurer pour qu’il utilise URP3.

...

Utiliser Git avec Unity

Unity, VCS

Il est indispensable d’utiliser un Version Control System lorsque l’on travaille sur un projet. En particulier, un VCS :

  • aide à travailler de manière collaborative;
  • facilite la gestion des différentes versions du projet;
  • permet de faire des tests en local, sans risquer de casser les versions existantes;
  • autorise à revenir à une version précédente.

Unity propose déjà son propre système appelé Unity Collaborate1. Il en existe beaucoup d’autres comme Perforce, Subversion, CVS, etc.

...

Null Reference Exception et Unassigned Reference Exception

Unity, Scripting

Dans Unity, quand vous accédez à une variable mal initialisée (ou pas initialisée du tout), vous récupérez une NullReferenceException1 ou une UnassignedReferenceException. Ces erreurs apparaissent dans la console de la façon suivante :

Les erreurs les plus fréquentes sont :

  • utiliser une variable exposée dans l’Inspector mais non-assignée. Un simple drag and drop dans l’éditeur Unity suffit;
  • utiliser une variable non-initialisée (contenant une référence nulle);
  • mal épeler le nom d’un GameObject quand on utilise la fonction GameObject.Find()2;
  • le Variable Shadowing3.

Le code suivant montre certaines de ces erreurs :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ExceptionsExample : MonoBehaviour
{
	public GameObject unassignedRef1;
	[SerializeField] private GameObject unassignedRef2;
	private GameObject nullRef1;
	private GameObject nullRef2;
	private GameObject nullRef3;

	// Start is called before the first frame update
	private void Start()
	{
		// #1: not assigned in inspector
		Debug.Log(unassignedRef1.name);
		// #2: not assigned in inspector
		Debug.Log(unassignedRef2.name);
		// #3: not initialized
		Debug.Log(nullRef1.name);
		// #4: typo so Find() returns null
		var nullRef2 = GameObject.Find("exceptionCubeWithTypo");
		Debug.Log(nullRef2.name);
		// #5: shadowing, so ok here, but not ok in Shadowing()
		nullRef3 = gameObject;
		Debug.Log(nullRef3.name);
		Shadowing();
	}

	private void Shadowing()
    {
		// #5: shadowing
		GameObject nullRef3 = gameObject;
		Debug.Log(nullRef3.name);
	}
}

...

Les Events dans Unity

Unity, Scripting

Il existe plusieurs types d’Events utilisables dans Unity : les UnityEvents1 et les Events C# natifs2. Les Events offrent un moyen simple et efficace de construire un système de diffusion de messages. Ils suivent essentiellement le design pattern Observer3^.

Le seul avantage à utiliser les UnityEvents c’est qu’ils sont intégrés directement dans l’éditeur4. Cependant les UnityEvents sont beaucoup plus lents que les Events C# natifs5. En conclusion, utilisez les Events C# natifs de préférence.

...