[GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

[GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par Jayme65 » 07 Mars 2017 14:38

Bonjour,

J'utilise une vidéo comme texture d'émission
Image
...et je voudrais booster la puissance d'émission de cette texture...mais si je le fais la texture devient 'surexposée'!
Image

Je sais que je pourrais augmenter le niveau de 'Indirect Intensity' dans l'onglet 'Lighting'...mais je ne veux (peux) pas toucher à ce réglage global mais juste être capable de régler ce problème au niveau local de l'objet!

Ma question est: comment pourrais-je booster la puissance d'émission sans "détruire" la texture elle même au passage?

Par ailleurs, même avec les réglages nominaux l'image est délavée!
Image
N'y-a t'il donc pas moyen d'avoir l'image à son niveau original quand elle est utilisée comme map d'illumination?

Merci pour votre aide sur ces 2 questions!

Lien vers la scene test:
http://www3.zippyshare.com/v/h5mzrdV5/file.html

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6268
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par boubouk50 » 07 Mars 2017 14:52

tu peux enlever l'image dans l'albedo, voire (là à tester) mettre la couleur d'albedo à noire.
L'image en émission devrait être la seule image puisque l'émission est additive.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par Jayme65 » 07 Mars 2017 14:56

boubouk50 a écrit :tu peux enlever l'image dans l'albedo, voire (là à tester) mettre la couleur d'albedo à noire.
L'image en émission devrait être la seule image puisque l'émission est additive.
Merci pour ton conseil avisé! Je l'ai déjà fait, il y a certes une (très) légère différence..mais rien qui rende la luminosité originale à la texture!

Avatar de l’utilisateur
Chapatataille
Messages : 119
Inscription : 28 Juin 2014 10:54
Localisation : partout et nulle part!

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par Chapatataille » 07 Mars 2017 15:15

je trouve aussi que unity à tendance à délaver les textures.


ce que je fais souvent, je mets l'albedo aussi dans secondary map detail albedo.


ça remet du peps à la texture

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6268
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par boubouk50 » 07 Mars 2017 16:02

Elle est délavée parce que l'émission est à 1.5. Comme je l'ai dit, l'émission est additive donc elle ne reste pas entre 0 et 1.
Il faudrait que ton shader soit un shader Unlit pour ne pas se préoccuper de la lumière et avoir un autre émetteur invisible.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par Jayme65 » 07 Mars 2017 16:48

boubouk50,

OK, je suis ton raisonnement...mais n'ai aucune idée de comment 'cacher' un objet et qu'il soit toujours source d'émission dans l'illumination globale!! Peux-tu m'éclairer?

Merci pour ta réponse au passage! :)

PS: Il y a bien le "bricolage" de dédoubler l'object et de faire passer une copie devant, avec 'Cast Shadow' et 'Receive Shadow' sur OFF et de lui attribuer un Shader Unlit...mais bon! ;)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6268
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par boubouk50 » 07 Mars 2017 17:11

:gene:
L'emploi du subjonctif n'était pas anodin. N'ayant jamais eu à faire ce genre de travail, je ne peux que donner des idées.
Pour avoir ce que tu veux, mis à part la bidouille, je n'ai pas trop de solutions:
- Dupliquer le plan avec un matériau Unlit pour avoir ton image pile poil ce que tu veux en colorimétrie. Virer ses propriétés d'éclairage pour qu'il n’interagisse avec rien. (Comme tu l'as suggéré). Et ne pas non plus le faire entrer dans les calculs de lightmaps et autres.
- Pour l'émissif, tu pourrais utiliser ton shader en Cutout pour le faire disparaître. Il me semble qu'il restera émissif tout en étant invisible. Aussi, ton idée devrait marcher.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6268
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par boubouk50 » 07 Mars 2017 17:12

Je ne me souviens plus, mais il n'y a pas des Projectors dans Unity? Des sortes lights planes émissifs?

- EDIT - Arf, je me souviens je crois, on utilisait des plans émissifs invisibles pour surexposer la lumière provenant de fenêtres dans les maquettes archi.
- EDIT - Cookie Light?
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par Jayme65 » 12 Mars 2017 11:10

Merci à nouveau pour ta réponse boubouk50!
Les cookie light c'est plutôt un masque placé sur une source de lumière, pour projeter une ombre (celle du masque donc, pour simuler l'ombre d'objet n'existants pas dans la scène), non !??

Je pense que je vais être obligé de procéder par "bricolage" !

Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

Re: [GI] Booster la puissance d'émission d'une texture sans délaver cette texture!

Message par Jayme65 » 11 Mai 2017 09:07

J'ai trouvé ce shader sur internet qui se sert de la "META pass"
The Meta pass decouples the albedo and emissive, which Enlighten uses from regular Shader passes.
This allows you to control GI without affecting the Shader used for real-time rendering. The standard Shader contains a Meta pass by default.
...mais c'est réalisé avec ShaderForge, que je n'ai pas!
Ci-joint le code, pour avoir une idée de ce qui se passe (pour moi, malheureusement, c'est du chinois)...et dans l'espoir que cela puisse être adapapté pour un shader non-ShaderForge

Code : Tout sélectionner

Shader "Shader Forge/NewShader" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Base Color", 2D) = "white" {}
        _Power ("Power", Range(0, 10)) = 1
    }
    SubShader {
        Tags {
            "RenderType"="Opaque"
        }
        Pass {
            Name "FORWARD"
            Tags {
                "LightMode"="ForwardBase"
            }
            
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_FORWARDBASE
            #define _GLOSSYENV 1
            #include "UnityCG.cginc"
            #include "UnityPBSLighting.cginc"
            #include "UnityStandardBRDF.cginc"
            #pragma multi_compile_fwdbase_fullshadows
            #pragma multi_compile_fog
            #pragma only_renderers d3d9 d3d11 glcore gles 
            #pragma target 3.0
            uniform float4 _Color;
            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
            uniform float _Power;
            struct VertexInput {
                float4 vertex : POSITION;
                float3 normal : NORMAL;
                float2 texcoord0 : TEXCOORD0;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
                float4 posWorld : TEXCOORD1;
                float3 normalDir : TEXCOORD2;
                UNITY_FOG_COORDS(3)
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                o.normalDir = UnityObjectToWorldNormal(v.normal);
                o.posWorld = mul(unity_ObjectToWorld, v.vertex);
                o.pos = mul(UNITY_MATRIX_MVP, v.vertex );
                UNITY_TRANSFER_FOG(o,o.pos);
                return o;
            }
            float4 frag(VertexOutput i) : COLOR {
                i.normalDir = normalize(i.normalDir);
                float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
                float3 normalDirection = i.normalDir;
                float3 viewReflectDirection = reflect( -viewDirection, normalDirection );
////// Lighting:
////// Emissive:
                float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
                float3 emissive = ((_MainTex_var.rgb*_Color.rgb)*_Power);
                float3 finalColor = emissive;
                fixed4 finalRGBA = fixed4(finalColor,1);
                UNITY_APPLY_FOG(i.fogCoord, finalRGBA);
                return finalRGBA;
            }
            ENDCG
        }
        Pass {
            Name "Meta"
            Tags {
                "LightMode"="Meta"
            }
            Cull Off
            
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #define UNITY_PASS_META 1
            #define _GLOSSYENV 1
            #include "UnityCG.cginc"
            #include "UnityPBSLighting.cginc"
            #include "UnityStandardBRDF.cginc"
            #include "UnityMetaPass.cginc"
            #pragma fragmentoption ARB_precision_hint_fastest
            #pragma multi_compile_shadowcaster
            #pragma multi_compile_fog
            #pragma only_renderers d3d9 d3d11 glcore gles 
            #pragma target 3.0
            uniform float4 _Color;
            uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
            uniform float _Power;
            struct VertexInput {
                float4 vertex : POSITION;
                float2 texcoord0 : TEXCOORD0;
                float2 texcoord1 : TEXCOORD1;
                float2 texcoord2 : TEXCOORD2;
            };
            struct VertexOutput {
                float4 pos : SV_POSITION;
                float2 uv0 : TEXCOORD0;
            };
            VertexOutput vert (VertexInput v) {
                VertexOutput o = (VertexOutput)0;
                o.uv0 = v.texcoord0;
                o.pos = UnityMetaVertexPosition(v.vertex, v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST );
                return o;
            }
            float4 frag(VertexOutput i) : SV_Target {
                UnityMetaInput o;
                UNITY_INITIALIZE_OUTPUT( UnityMetaInput, o );
                
                float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
                o.Emission = ((_MainTex_var.rgb*_Color.rgb)*_Power);
                
                float3 diffColor = float3(0,0,0);
                float specularMonochrome;
                float3 specColor;
                diffColor = DiffuseAndSpecularFromMetallic( diffColor, 0, specColor, specularMonochrome );
                o.Albedo = diffColor;
                
                return UnityMetaFragment( o );
            }
            ENDCG
        }
    }
    FallBack "Diffuse"
    CustomEditor "ShaderForgeMaterialInspector"
}

Répondre

Revenir vers « Unity le logiciel »