PROJET AUTOBLOG


blog.fevrierdorian.com

source: blog.fevrierdorian.com

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Faire un override pour supprimer un shader dans Guerilla

dimanche 4 juin 2017 à 23:11

Si vous assignez un shader (de volume par exemple) il peut être utile de pouvoir le désassigner, plus loin dans le rendergraph.

Il me semble que c’était possible en 1.3 mais que ce ne soit plus possible en 1.4. :reflexionIntense:

Je vous propose donc une petite méthode pour désassigner un shader. :sauteJoie:

Mais expliquons un peu le souci. :gne2:

Faites une petite scène « sphère et plan » puis faite un override d’assignation de shader mais videz le nom du shader :

Puis connectez l’override à la branche principale. Comme vous pouvez le constater, l’assignation reste faite en bout de graph :

Bon sang, quand j’override par « rien du tout » Guerilla garde la valeur de l’override original. :gne:

Et Guerilla semble sciemment considérer que vous avez fais une erreur :

On va résoudre ça.  :enerve: Supprimez l’assignation puis créez un nœud de Script (Ctrl+Espace, « scri », Entrée):

Connectez le dans le graph à la place de votre assignation précédente :

Regardez ses attributs. Le script arrive avec un petit exemple pour illustrer son comportement. Mais nous n’allons pas en avoir besoin. Supprimez les deux propriétés (en cliquant sur les croix en haut à droite), puis cliques sur le bouton « Edit »:

Sans vous soucier des commentaires regardez ce que vous avez :

if Input then
	Output = duplicate (Input)
	Output["variable."..ColorName] = CustomShaderColor
end

Je vous explique rapidement : Ce script duplique la table (c’est la structure de données en lua) Input en Output, modifie l’entrée « variable.DiffuseColor » (car il récupère la valeur de l’attribut « ColorName » que nous avons supprimé précédemment) pour lui mettre la valeur de l’attribut « CustomShaderColor » que nous avons, lui aussi, supprimé (c’était la couleur rouge). :tuComprendRien:

On va utiliser ce mécanisme pour venir supprimer l’assignation du shader. Mais reste la question : Quel est le nom de l’attribut à modifier ? :reflexionIntense:

Pour cela rien de plus simple : Ouvrez la console (menu « View|Show/Hide console (Alt+2) »), sélectionnez votre sphère puis faites Shift+D. Ceci va afficher, dans la console, la liste de tous les attributs ainsi que leur valeur telles qu’elles seraient envoyées au rendu. Cherchez « shader »:

shade.shadebothsides: 0
shade.textureapproximation: "glossy"
shade.texturemaxsize: 0
shader.displacement: ""
shader.surface: "Surface"
shader.volume: ""
shape.cached: 1
shape.combineprocedural: 0
shape.compression: 0

Vous l’avez ! « shader.surface » (ou « shader.volume » ou même « shader.displacement » si vous souhaitez supprimer le shader de displacement).

Modifiez le script pour supprimer l’assignation :

if Input then
	Output = duplicate (Input)
	Output["shader.surface"] = ""
end

Sauvez Ctrl+S puis vérifiez par vous même :

Comme vous pouvez le voir, le shader est désassigné. :laClasse:

En espérant que ça en débloque certains.

À bientôt !

Dorian

:marioCours: