Bien que peu présent dans mon WIP, je travaille néanmoins activement sur le projet. Un des sujets du jour : la recherche d'une solution de Glow peu couteuse en terme de performances. Donc, suite à cette (veille ) discussion j'ai approfondis le sujet.
Résultat :
A gauche un modèle avec le Glow de Heathen (un des meilleurs du Store. 30$ tout de même !!!), à gauche un Illu maison (tiré du sujet précédent). Le seul prérequis : un Bloom, qui normalement est présent dans tout projet qui se respecte.
La différence visuelle par rapport au "Glow shader", bin j'en vois pas. En revanche, la mise en place est plus rapide (pas besoin de script spécifique a coller sur la camera - par exemple-) et les performances meilleures.
Code : Tout sélectionner
// *********************************************
// Normal Bumped Illu (c) ZJP for MOONS
// *********************************************
Shader "MOONS/Bumped_Diffuse_Illumin"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB) Gloss (A)", 2D) = "white" {}
_BumpMap ("Normalmap", 2D) = "bump" {}
_normalIntensity ("Normal Map Intensity", Range(0,2)) = 1
// Illu ***************************************
_Illum ("Illumin (A)", 2D) = "white" {}
_IlluPower("Illumin Power", Float) = 1.0
_IlluColor("Illumin Color", Color) = (1,1,1,1)
// Illu ***************************************
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 300
CGPROGRAM
// #pragma surface surf Lambert
#pragma surface surf SimpleLambert
#pragma target 3.0
#pragma only_renderers d3d9
fixed4 _Color;
sampler2D _MainTex;
sampler2D _BumpMap;
float _normalIntensity;
// Illu ***************************************
sampler2D _Illum;
float _IlluPower;
fixed4 _IlluColor;
// Illu ***************************************
struct Input
{
float2 uv_MainTex;
float2 uv_Illum;
float2 uv_BumpMap;
};
struct SurfaceOutputCustom
{
fixed3 Albedo; // diffuse color
fixed3 Normal; // tangent space normal, if written
fixed3 Emission;
half Specular; // specular power in 0..1 range
fixed Alpha; // alpha for transparencies
};
half4 LightingSimpleLambert (SurfaceOutputCustom s, half3 lightDir, half atten) // Spécifique Moons DA
{
half NdotL = dot (s.Normal , lightDir );
half4 c;
c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * (atten * .5f));
c.a = 0.0f;
return c;
}
// void surf (Input IN, inout SurfaceOutput o)
void surf (Input IN, inout SurfaceOutputCustom o)
{
fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
fixed4 c = tex * _Color;
o.Albedo = c.rgb;
// Le Glow !!!!! **********************************************************
fixed4 illumination = tex2D(_Illum, IN.uv_MainTex);
o.Emission = illumination.rgb * _IlluPower * illumination.a * _IlluColor;
// Le Glow !!!!! **********************************************************
o.Alpha = c.a;
// Specifique Moons DA.
float3 normalMap = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
normalMap = float3(normalMap.x * _normalIntensity, normalMap.y * _normalIntensity, normalMap.z);
o.Normal = normalMap;
}
ENDCG
}
FallBack "Diffuse"
}
// *********************************************
// Normal Bumped Illu (c) ZJP for MOONS
// *********************************************
Edit :
Comparaison de performances. (Low PC. AMD Athlon II X2 270 et AMD Radeon HD 5450 )
Pas de Glow (script sur Caméra) et pas de Bloom (Script aussi Caméra). L'Illu est quand même actif. Notez les stats...
Glow Script actif. Illu présent aussi. (Gourmand, très gourmand le Glow !!! )
Glow et BLoom actifs.
EDIT 2 : Version PBR.
Code : Tout sélectionner
// *********************************************
// Normal Bumped PBR Illu (c) ZJP for MOONS
// *********************************************
Shader "MOONS/Normal Bumped PBR Illu Moons"
{
Properties
{
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_BumpMap ("Bumpmap", 2D) = "bump" {}
_normalIntensity ("Normal Map Intensity", Range(0,4)) = 1.5
_Glossiness ("Smoothness", Range(0,1.0)) = 0.5
_Metallic ("Metallic", Range(0,1.0)) = 0.5
_Occlusion("Occlusion", Range(0,1.0)) = 0.0
// Illu ***************************************
_Illum ("Illumin (A)", 2D) = "white" {}
_IlluPower("Illumin Power", Float) = 1.0
_IlluColor("Illumin Color", Color) = (1,1,1,1)
// Illu ***************************************
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 300
CGPROGRAM
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0
#pragma only_renderers d3d9
sampler2D _MainTex;
sampler2D _BumpMap;
float _normalIntensity;
half _Glossiness;
half _Metallic;
half _Occlusion;
fixed4 _Color;
// Illu ***************************************
sampler2D _Illum;
float _IlluPower;
fixed4 _IlluColor;
// Illu ***************************************
struct Input
{
float2 uv_MainTex;
float2 uv_BumpMap;
float3 viewDir;
float2 uv_Illum;
};
void surf (Input IN, inout SurfaceOutputStandard o)
{
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;// * IN.viewDir;
//o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
float3 normalMap = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
normalMap = float3(normalMap.x * _normalIntensity, normalMap.y * _normalIntensity, normalMap.z );
// Le Glow !!!!! **********************************************************
fixed4 illumination = tex2D(_Illum, IN.uv_MainTex);
o.Emission = illumination.rgb * _IlluPower * illumination.a * _IlluColor;
// Le Glow !!!!! **********************************************************
o.Normal = normalMap;
o.Smoothness = _Glossiness;
o.Metallic = _Metallic;
o.Occlusion = _Occlusion;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
// *********************************************
// Normal Bumped PBR Illu (c) ZJP for MOONS
// *********************************************
(Notez que dans le cas de la solution Illu + Bloom, les performances sont directement liées a celle du...Bloom. Dans mon cas, celui d'Unity qui n'est pas le meilleurs)
470 FPS avec ma scène 100% Glow version.
625 FPS '' '' ''' 100% Illu + Blom , pour (je le répète) le MÈME rendu visuel.
et ne parlons pas des évolutions de la solution : plusieurs couleurs de Glow à partir des canaux RVB de la texture d'ILLU, par exemple, vu que seul le canal Alpha est actuellement exploité. Possibilité donc de réduire de nombre de matériaux sur un modèle.