light range dans un shader

Questions à propos du scripting Shader.
boboss
Messages : 28
Inscription : 24 Jan 2012 17:11

light range dans un shader

Message par boboss » 08 Avr 2016 13:19

Bonjour les shaderiens

mon but est de pouvoir gérer un paramètres near sur les spotlight
Pour cela je vais trifouiller dans le fichier AutoLight.ginc

mon soucis c'est que je n'arrive pas a récupérer le paramètre range de ma light.

j'ai essayé d'utiliser _LightPositionRange.w définit dans UnityShaderVariables.cginc mais il vaut toujours zéro

je veux modifier le define UNITY_LIGHT_ATTENUATION pour que ça prenne en compte le near de ma la light

Code : Tout sélectionner

#define UNITY_LIGHT_ATTENUATION(destName, input, worldPos) \
	unityShadowCoord4 lightCoord = mul(unity_WorldToLight, unityShadowCoord4(worldPos, 1)); \
	fixed3 destName = (lightCoord.z > _LightColor0.w ) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz) * SHADOW_ATTENUATION(input);
#endif
_LightColor0.w : mon near ( j'ai pas trouvé mieux )
lightCoord.z : pourcentage ( entre 0 et 1) de la distance a la light par rapport au range

Merci de votre aide

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

Re: light range dans un shader

Message par boubouk50 » 08 Avr 2016 14:09

Mais du coup, là, ça marche ou pas? Je veux dire si tu changes l'alpha de ta couleur de lumière, tu as bien un range ou pas?
"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

boboss
Messages : 28
Inscription : 24 Jan 2012 17:11

Re: light range dans un shader

Message par boboss » 08 Avr 2016 14:22

oui si je change le alpha de la couleur mon near fonctionne bien mais le soucis c'est que mon near change si je varie le range de ma lampe.

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

Re: light range dans un shader

Message par boubouk50 » 08 Avr 2016 14:30

Tu ne peux pas déterminer une distance fixe si tu n'as pas accès à une valeur définie. Ici, tu n'as que des pourcentages. Sans une limite supérieure (ou définie), tu ne peux pas fixer le near.
Si tu peux récupérer le range de ta light, alors c'est gagné:

Code : Tout sélectionner

float near = _LightColor0.w * echelle / range; //En considérant que _LightColor0.w est une distance et pas un pourcentage. Il te faut l'échelle également pour savoir si _LightColor0.w est en mètre ou décimètre ou centimètre etc. 
fixed3 destName = (lightCoord.z > near) * UnitySpotCookie(lightCoord) * UnitySpotAttenuate(lightCoord.xyz) * SHADOW_ATTENUATION(input);
EDIT - Mais je suis gland. Je viens de relire ton post. C'est justement le range que tu cherches. Evidemment. derderderp gogol :happy1:
"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

boboss
Messages : 28
Inscription : 24 Jan 2012 17:11

Re: light range dans un shader

Message par boboss » 08 Avr 2016 16:22

Alors je pense avoir trouvé une solution

mon parametre lightCoord.z varie entre 0 et 1 en fonction range
donc il me suffit que mon near soit un coef entre 0 et 1 proportionnelle au range et non une distance fixe en mètre, donc il faut que je calcule mon near en dehors du shader ( ou j'ai accès a mon range) et lui passé deja calculé


si ça marche va falloir faire quelque chose d'equivalent pour l'attenuation et pour les ombres :/

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

Re: light range dans un shader

Message par boubouk50 » 08 Avr 2016 16:31

Ça à l'air d'être une solution viable. Mais du coup, un script Editor pour le réglage dans la viewport. Et un au runtime, au cas ou tu changes le range pendant le jeu.
"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

boboss
Messages : 28
Inscription : 24 Jan 2012 17:11

Re: light range dans un shader

Message par boboss » 08 Avr 2016 16:39

pour mon application, mes lights sont créées au runtime donc pas besoin de le faire dans l'éditeur mais pour tester c'est pratique.

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

Re: light range dans un shader

Message par boubouk50 » 13 Avr 2016 10:48

Yo Boboss, je me demandais:
Es-tu obligé de passer par un shader pour ça? Tu pourrais simplement avancer la light selon son forward par script. En plus, tu aurais la distance fixe dès le départ. La différence c'est que la lumière commencerait en un point à ce near clip alors qu'en shader le point serait plus haut donc la lumière commencerait en un cercle plus ou moins gros.
"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

boboss
Messages : 28
Inscription : 24 Jan 2012 17:11

Re: light range dans un shader

Message par boboss » 13 Avr 2016 12:08

Justement l'idée c'est de faire des lights qui ne commence pas un point mais pas un rectangle /cercle.
Pour simuler ce genre d'éclairage
http://www.ayrton.eu/produit/magicpanel-r/

cependant la gestion de mon near me pose plusieurs problèmes
- d'abord mon projecteur ou tout autre objets situé entre ma light et mon near génère une ombre
- ensuite mon volumetric disparaît en fonction de la position de caméra, et je ne sais pas pourquoi.

encore plein de choses à régler.

Répondre

Revenir vers « les Shaders »