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
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
// *********************************************
Edit :
A gauche avec l'AO, à droite...sans. Le shader utilisé est celui-ci du post principal. Le rendu correspond parfaitement à la DA du projet.