Tutorial de Unity ShaderGraph: sombreador básico

 1. Sombreador de textura básico:

 Implementación básica del mapa: mapa principal, mapa de autoiluminación, mapa de suavidad, mapa de autoiluminación (la autoiluminación también agrega efectos de color e interruptores de botones).

Pasos: el grupo de operaciones en el extremo izquierdo: cree una nueva textura 2D: cree una nueva textura de muestra 2D para tomar el control de la imagen y transferirla al sombreador de fragmentos.

Cada valor de color RGB es [0,1]. La multiplicación de los valores de color inevitablemente hará que el valor del color disminuya (el objeto es más oscuro), y la suma inevitablemente hará que el valor del color aumente más cerca de 1 (el objeto es más brillante). La mayoría de las áreas del mapa de autoiluminación tienen valores inferiores a 1, por lo que se agregan al color y la salida.

Nota: El mapa metálico no se utiliza en este momento. Para el mapa metálico, recuerde conectar la salida del canal transparente al metálico, no todos.

 Agrupe nodos relacionados complejos en partes separadas para reducir el desorden.

2. Luz de contorno exterior: nodo efecto fresnel

 Cree un flotador para controlar el grado de brillo exterior y cree un color para ajustar el color del brillo exterior. Multiplique Fresnel y el color del brillo a través de Mutiply. Los datos de Fresnel son relativamente grandes y el valor obtenido al multiplicar los colores es más razonable.

3. Disolver:

 clipfloat es un valor que controla el grado de ablación. Si se requiere ablación automática, se puede lograr utilizando el sen o cos del nodo de tiempo en combinación con el nodo reamp.

Disolución de control de código:

 public float DissloveTime = 3f;

    private SkinnedMeshRenderer[] _renders;

    private void Start()
    {
        //获得所有的蒙皮网格渲染器
        _renders = transform.GetComponentsInChildren<SkinnedMeshRenderer>();
        StartCoroutine(Dissolve());
    }

    private IEnumerator Dissolve()
    {
        //调用获取shader参数
        SetDissolveRate(0);
        float time = 0f;
        while (time < DissloveTime)
        {
            time += Time.deltaTime;
            //根据时间给shader对应参数赋值
            SetDissolveRate(time / DissloveTime);
            yield return null;
        }
    }

    private void SetDissolveRate(float value)
    {
        //获取控制溶解的float参数值
        int shaderid = Shader.PropertyToID("_clipfloat");
        foreach (SkinnedMeshRenderer meshrender in _renders)
        {
            foreach (Material materia in meshrender.materials)
            {
                //给控制溶解程度的参数动态赋值,控制所有skin数据变化
                materia.SetFloat(shaderid, value);
            }
        }
    }

 //Obtiene el valor del parámetro flotante que controla la disolución
        int shaderid = Shader.PropertyToID("_clipfloat");

En este paso, debe ir al sombreador para verificar el nombre de ID del nodo establecido.

Supongo que te gusta

Origin blog.csdn.net/qq_29296473/article/details/132452815
Recomendado
Clasificación