[Resolu]Probleme Eclairage TextMesh

Questions techniques liées à l’utilisation d'Unity (et n'entrant pas dans le cadre d'une des sections suivantes)
EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

[Resolu]Probleme Eclairage TextMesh

Message par EmileF » 04 Avr 2019 16:51

Bonjour à tous,

J'ai encore besoin de vos lumières...
Encore ? oui, voir viewtopic.php?f=2&t=16681

Toujours dans mon jeu dans un univers sombre j'utilise des TextMesh. Afin qu'il ne soit pas visibles quand il sont derrière un autre objet j'utilise le shader :

Code : Tout sélectionner

Shader "GUI/3D Text_Cull Back" {
	Properties{
		_MainTex("Font Texture", 2D) = "white" {}
		_Color("Text Color", Color) = (1,1,1,1)
	}

		SubShader{
			Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
			Lighting On Cull Back ZWrite Off Fog { Mode Off }
			Blend SrcAlpha OneMinusSrcAlpha
			Pass {
				Color[_Color]
				SetTexture[_MainTex] {
					combine primary, texture * primary
				}
			}
		}
}
On peut remarquer dans la ligne "Lighting On Cull Back ZWrite Off Fog { Mode Off }" que Lighting est à On.
Normalement cette valeur est à Off.

Voilà je voudrais que mes TextMesh soient sensible à la lumière au lieu d’être en permanence lumineux.
Si je mets Lighting à On, c'est à peu près ça, mais le texte est noir, et la couleur n'est plus appliquée.
si je mets Lighting à Off, la couleur est appliquée, mais même dans le noir il est visible.

Je voudrais pouvoir appliquer les couleurs, et quand la lumière s'éloigne le texte s’assombrisse jusqu’à ne plus le voir quand il n'est plus éclairé.

J'ai vu, mais en c'était en 2011, dans ce post viewtopic.php?f=8&t=2620, que ce n'était pas possible, Je pense que les choses ont du évoluer depuis et que maintenant il y a moyen d'obtenir ce résultat.

Si quelqu'un pouvait m'aider...

En tout cas, merci à tous.
Dernière édition par EmileF le 05 Avr 2019 16:07, édité 1 fois.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: Probleme Eclairage TextMesh

Message par Max » 04 Avr 2019 18:23

Bonsoir,
EmileF a écrit :
04 Avr 2019 16:51
Je pense que les choses ont du évoluer depuis et que maintenant il y a moyen d'obtenir ce résultat.
Oui, et cela s'appelle TextMesHPro.
Je pense que tu as tout intérêt à y passer. Et pour l’éclairage, ben cela devrais pas poser de soucis, avec un material basé sur un TextMeshPro/Distance Field par exemple.

Image
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

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Probleme Eclairage TextMesh

Message par EmileF » 04 Avr 2019 18:52

Oui, merci Max,

J'ai essayé textMeshPro, mais ça ramait terrible. Il est vrai que je suis sur Unity 5.6, et que mon jeu est déjà assez limite.
De plus je ne suis pas arrivé à obtenir le Cull Back

J'avais commencé mon jeu avec 5.6, quand j'ai voulu passer à 2018, les textures n'ont pas suivi, et je ne suis pas arrivé à corriger le problème, aussi je suis revenu à 5.6.

Je vais voir si je peux utiliser les shaders de Distance Field.

Merci
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

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

Re: Probleme Eclairage TextMesh

Message par Max » 04 Avr 2019 19:36

EmileF a écrit :
04 Avr 2019 18:52
Il est vrai que je suis sur Unity 5.6, et que mon jeu est déjà assez limite.
Arf, effectivement....
Je ne pense pas que tu puisse arriver à tes fins avec le 3DText. Il ne possède pas de MeshFilter, et donc pas évident.... pour moi c'est mort.
Après en éventuelle solution de remplacement, si tes textes sont fixes, et que tu n'en à pas des centaines, tu peux toujours essayer de les transcrire sous forme de textures et les appliquer sur de planes ou Quads.
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

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Probleme Eclairage TextMesh

Message par EmileF » 04 Avr 2019 20:15

Je te remercie, Max,

Je m'en doutais un peu. J'ai regardé un peu les shaders de TextMeshPro, mais j'avoue que pour moi, c'est de l'ébreu , et les quelques essais que j'ai pu faire, n'ont rien donné.
Max a écrit :tu peux toujours essayer de les transcrire sous forme de textures et les appliquer sur de planes ou Quads.
C'est ce que j'ai entrepris de faire, avec une texture de sprites, mais le résultat au niveau de l'antiliasing n'est pas super, je cherche un moyen pour affiner les bords. Ça je maitrise un peu mieux.

En tout cas merci

Je mettrai la solution que j'aurai adopter.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

EmileF
Messages : 674
Inscription : 18 Mars 2017 19:39

Re: Probleme Eclairage TextMesh

Message par EmileF » 05 Avr 2019 12:56

Voilà le package de la solution que j'ai adopté:

https://drive.google.com/open?id=1n0VYN ... J_Z_Q1XeZy

J'ai tapé les caractères qui intéressaient sur l'écran.
J'ai fait une capture d'écran pour récupérer l'image.
Dans Gimp, j'ai mis le fond en transparent et j'ai légèrement flouté les contours.
J'ai sauvegardé la texture dans les assets d'Unity.
Dans unity, j'ai mis le Type de texture en Sprite2D, et le Mode à multiple
Dans la fenêtre Sprite Editor j'ai appliqué un Slice/Automatic,
J'ai supprimé les sprites des accents et agrandi les Sprites des caractères accentués pour englober leur accent
J'ai renommé chaque Sprite,
Dans la hyérarchy, j'ai ajouté un par un les Sprites de mes caractères dans l'empty "Font" en corrigeant leur position en hauteur pour obtenir un certain alignement en cas de changement de caractère.
J'ai désactivé tous les caractères pour éviter les chevauchements
Dans l'objet "Font" j'ai ajouté le Script "MyFont" qui me permet de retouver le caractère utilise et sa couleur.
J'ai mis Font en préfab.

Voilà chaque font peut afficher un caractère de taille et de couleur différente et surtout il sont sensibles à la lumière à condition d'utiliser le shader Sprites/Diffuse

Code : Tout sélectionner

using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class MyFont : MonoBehaviour
{
    List<Transform> Sprites;
    string cars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzàâäçèéêîïôöùû}{&'@²][°:#=€!?-§)(+.;/~_|,";
    SpriteRenderer current;
    string exText;
    [SerializeField] string text;
    public string Text
    {
        get { return exText; }
        set
        {
            exText = value;
            text = value;
            int index = cars.IndexOf(value);
            if (index > -1)
            {
                if (current)
                {
                    current.gameObject.SetActive(false);
                }
                current = Sprites[index].GetComponent<SpriteRenderer>();
                current.gameObject.SetActive(true);
                Color = color;
            }
        }
    }

    Color exColor;
    [SerializeField] Color color;
    public Color Color
    {
        get { return color; }
        set
        {
            exColor = value;
            color = value;
            if (current)
            {
                current.color = color;
            }
        }
    }

    private void Start()
    {
        Initialise();
        Text = text;
        Color = color;
    }

    private void Initialise()
    {
        Sprites = new List<Transform>();
        foreach (Transform item in transform)
        {
            Sprites.Add(item);
            item.gameObject.SetActive(false);
        }
    }

    private void Update()
    {
        if (!Application.isPlaying)
        {
            if (Sprites == null || Sprites.Count == 0)
                Initialise();
            Text = text;
            Color = color;
        }
        else
        {
            if (exColor!= color)
            {
                Color = color;
            }
            if (exText != text)
            {
                Text = text;
            }
        }
    }
}
L'utilisation est très simple, il suffit de mettre le Font à l'emplacement désiré, de taper le caractère à afficher dans Text et choisir sa couleur. Ça peut être fait par script en cours d'exécution.

Voilà, si ça peut rendre service à quelqu'un ce sera avec plaisir.
Si quelqu'un a un retour à faire j'en serait très content.

A bientôt
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Répondre

Revenir vers « Unity le logiciel »