L'arnaque des "Glow Shaders" ou presque....

Questions à propos du scripting Shader.
Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

L'arnaque des "Glow Shaders" ou presque....

Message par ZJP » 07 Juin 2016 20:47

Salut,

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 :mrgreen: ) discussion j'ai approfondis le sujet.

Résultat :
Image

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. :mrgreen:

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
// *********************************************

Couleur et intensité sont bien sur ajustables. 8-)

Image

Edit :

Comparaison de performances. (Low PC. AMD Athlon II X2 270 et AMD Radeon HD 5450 :mrgreen: )
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...
Image

Glow Script actif. Illu présent aussi. (Gourmand, très gourmand le Glow !!! :shock: )
Image

Glow et BLoom actifs.
Image

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
// *********************************************

EDIT 3 : Conclusion et tests PC principal de dev. (AMD FX8350 + AMD Radeon HD 7850).
(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. 8-)

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.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: L'arnaque des "Glow Shaders" ou presque....

Message par Max » 10 Juin 2016 10:51

Tests interessant.
D'ailleurs un petit nouveau, depuis hier, sur ce segment: Shader-Independent Glow :mrgreen:
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: L'arnaque des "Glow Shaders" ou presque....

Message par ZJP » 10 Juin 2016 15:16

Max a écrit :Tests interessant.
Merci
Max a écrit :D'ailleurs un petit nouveau, depuis hier, sur ce segment: Shader-Independent Glow :mrgreen:
J'avais aussi noté son arrivée. Il n'est pas trop cher et le point interessant (surtout pour les non "codeurs" ;-) ):
CatsPawsGames a écrit :- Completely shader-independent (glow is enabled by separate components, without touching your materials).
Edit :
Image

Répondre

Revenir vers « les Shaders »