Unity ShaderGraph教程——基础shader

 1.基本贴图shader:

Unity ShaderGraph教程——基础shader_第1张图片

 基础贴图实现:主贴图、自发光贴图、光滑度贴图、自发光贴图(自发光还加入了颜色影响和按                              钮开关).

步骤:最左侧操作组——新建texture2D——新建sample texture 2D承接图片,转接到fragment片元着色器

颜色的rgb的每个值都是[0,1]的,颜色值相乘必然会使颜色值减小(物体更暗),相加必然会使颜色值增加更加接近1(物体更亮),自发光贴图大部分区域都是小于1的值,所以和颜色相加输出。

注意:此时未用到金属度贴图,金属度贴图记得是把透明通道输出接给metallic,而不是all

Unity ShaderGraph教程——基础shader_第2张图片

Unity ShaderGraph教程——基础shader_第3张图片

 将复杂的相关节点打组生成单独的部分减少混乱度。

Unity ShaderGraph教程——基础shader_第4张图片

2.外轮廓光:fresnel effect节点

Unity ShaderGraph教程——基础shader_第5张图片

Unity ShaderGraph教程——基础shader_第6张图片

 创建float控制外发光程度,创建颜色用作外发光颜色调节,将菲涅尔和发光颜色通过Mutiply乘起来,菲涅尔数据比较大,通过颜色相乘得到的数值比较合理。

3.溶解:

Unity ShaderGraph教程——基础shader_第7张图片

Unity ShaderGraph教程——基础shader_第8张图片

 clipfloat是控制消融程度的数值,如果需要自动消融可以用time节点的sin或者cos结合reamp节点实现。

代码控制溶解:

 public float DissloveTime = 3f;

    private SkinnedMeshRenderer[] _renders;

    private void Start()
    {
        //获得所有的蒙皮网格渲染器
        _renders = transform.GetComponentsInChildren();
        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);
            }
        }
    }

 //获取控制溶解的float参数值
        int shaderid = Shader.PropertyToID("_clipfloat");

这一步需要去shadergraph里查看设置的节点id名是什么

Unity ShaderGraph教程——基础shader_第9张图片

你可能感兴趣的:(unity,贴图,游戏引擎)