Page 1 sur 1

[Tools] POLM, le "générateur" d'AO (Ambient Occlusion)

Publié : 12 Jan 2017 16:11
par ZJP
Salut,


Si comme moi vous utilisiez des outils externes comme Knald pour la génération de l'Ambient Occlusion, sachez qu'il existe des solutions pour obtenir le même résultat sous Unity. J'ai essayé avec (beaucoup de ) bonheur POLM (POLM - Per Object Lightmapper)

https://www.youtube.com/watch?v=MTZKqlEDO6A

https://www.youtube.com/watch?v=jnpxu-mAZNM

Image
Image

Asset Store.
Forum.
Documentation.

Contrairement à ses concurrents directs ( Per-Vertex Ambient Occlusion And Indirect Lighting Generator , VertexDirt - AO baking tool - que j'ai aussi testé -) il permet aussi la génération d'une map d'AO à partir de l'UV Mapping. Donc, l'exportation d'une texture. Les autres ne font que du Vertex Backing, ce qui implique un shader particulier pour retrouver l'AO sur le modèles.

Ici, le shader (maison), amélioration de celui-ci, que j'utilise actuellement avec cette AO Map. Bien sur, la Map fonctionne PARFAITEMENT avec le Standard Shader d'origine d'Unity.

Code : Tout sélectionner

// *********************************************
// Normal Bumped AO Illu PBR (c) ZJP for MOONS
// *********************************************
Shader "MOONS/PBR_Moons" 
{
	Properties 
	{
		_Color ("Color", Color) = (1,1,1,1)
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
		// Normal *************************************
		_BumpMap ("Bumpmap", 2D) = "bump" {}
		_normalIntensity ("Normal Map Intensity", Range(0,5)) = 1.5
		// Normal *************************************

		// AO *****************************************
		_AOTex ("Ambient Occlusion", 2D) = "white" {}
		_AoIntensity("AO Intensity", Range(0,3)) = 1
		// AO *****************************************

		// Illu ***************************************
		_Illum ("Illumin (A)", 2D) = "white" {}
		_IlluPower("Illumin Power", Range(1,3)) = 1.0
		_IlluColor("Illumin Color", Color) = (1,1,1,1)	
		// Illu ***************************************
	}
	SubShader 
	{
		Tags { "RenderType"="Opaque" }
		LOD 300

		CGPROGRAM
			#pragma surface surf Standard fullforwardshadows

			#pragma target 3.0
			#pragma only_renderers d3d9

			fixed4 _Color;
			sampler2D _MainTex;

			// Normal *************************************
			sampler2D _BumpMap;
			float _normalIntensity;
			// Normal *************************************
			
			// AO *****************************************
			sampler2D _AOTex;
			float _AoIntensity;
			// AO *****************************************

			// Illu ***************************************
			sampler2D _Illum;
			float _IlluPower; 
			fixed4 _IlluColor;
			// Illu ***************************************

			struct Input 
			{
				float2 uv_MainTex;
			};

			void surf (Input IN, inout SurfaceOutputStandard o) 
			{
				fixed4 c  = tex2D (_MainTex, IN.uv_MainTex) * _Color;
				// L' AO !!!!! ***********************************************************
				half _AO = tex2D(_AOTex, IN.uv_MainTex).g;
				o.Albedo = c.rgb * LerpOneTo(_AO, _AoIntensity);
				// L' AO !!!!! ***********************************************************

				// Le Normal !!!!! *******************************************************
				float3 normalMap = UnpackNormal(tex2D(_BumpMap, IN.uv_MainTex));
				normalMap = float3(normalMap.x * _normalIntensity,  normalMap.y * _normalIntensity, normalMap.z );
				o.Normal  = normalMap;
				// Le Normal !!!!! *******************************************************

				// Le Glow !!!!! *********************************************************
				fixed4 illumination = tex2D(_Illum, IN.uv_MainTex);
				o.Emission = illumination.rgb * _IlluPower * illumination.a * _IlluColor; 
				// Le Glow !!!!! *********************************************************

				o.Smoothness = 0.0f;
				o.Metallic   = 0.0f;
				o.Occlusion  = 1.0f;
				o.Alpha      = c.a;
			}
		ENDCG
	} 
	FallBack "Diffuse"
}
// *********************************************
// Normal Bumped AO Illu PBR (c) ZJP for MOONS
// *********************************************
Honnêtement, l'AO change VRAIMENT la donne coté rendu. Le jour et la nuit sans jeu de mots. ;-)

Edit :

Image

Image
A gauche avec l'AO, à droite...sans. Le shader utilisé est celui-ci du post principal. Le rendu correspond parfaitement à la DA du projet.

Re: [Tools] POLM, le "générateur" d'AO (Ambient Occlusion)

Publié : 12 Jan 2017 17:16
par zugsoft
Je l'avais aussi acheté, mais je ne trouvais pas la différence si impressionnantes sur mes jeux Mobile.
Tu as des screenshots de comparaison sur tes projets ?

Dans mon jeu VR, j'ai essayé plusieurs configurations avec les posteffects d'AO, je préfère le rendu sans AO aussi.

Re: [Tools] POLM, le "générateur" d'AO (Ambient Occlusion)

Publié : 12 Jan 2017 17:31
par boubouk50
Ça prend en compte la normalMap/HeightMap pour la génération de l'AO? Ou juste le mesh?

Re: [Tools] POLM, le "générateur" d'AO (Ambient Occlusion)

Publié : 12 Jan 2017 17:39
par ZJP
boubouk50 a écrit :Ça prend en compte la normalMap/HeightMap pour la génération de l'AO? Ou juste le mesh?
Uniquement le mesh.

zugsoft a écrit :Tu as des screenshots de comparaison sur tes projets ?
Image
Image
A gauche avec l'AO, à droite...sans. Le shader utilisé est celui-ci du post principal. Le rendu correspond parfaitement à la DA du projet.

Premier post édité.

Re: [Tools] POLM, le "générateur" d'AO (Ambient Occlusion)

Publié : 12 Jan 2017 21:15
par zugsoft
Sur la texture du bas, la difference est vraiment super, par contre pour celui du haut c'est mieux, mais sans plus.
Merci en tout cas pour nous montrer la difference.

Re: [Tools] POLM, le "générateur" d'AO (Ambient Occlusion)

Publié : 12 Jan 2017 21:19
par ZJP
zugsoft a écrit :Sur la texture du bas, la difference est vraiment super, par contre pour celui du haut c'est mieux, mais sans plus.
Merci en tout cas pour nous montrer la difference.
La texture du bas est une toute blanche (un simple bmp de 256 x 256). Cela permet de bien mettre en évidence l'AO Map activée sur le modèle de gauche. ;-)

L'AO MAP utilisée :

Image