美文网首页
shader从入门到精通

shader从入门到精通

作者: 土豆_9724 | 来源:发表于2017-10-25 15:28 被阅读0次

    关于shader研究

    大家好,我是北京菜鸟在线的unity3d 高级讲师,范老师,今天给大家分享的是shader从入门到精通

    1-1: 创建一个场景,建立一个Cube, 网格过滤器,风格渲染器,材质球,shader都是必不可少的

    1-2 : 下面我们制作一个shder的小例子(一个广告移动切换的效果)

    我们先创建一个场景 ,创建一个这Panel, 把这个图片,拉到 Quad 上,首先这张图片的分辨率是: 9600 * 1080, 一次显示一幅图,那么,我们给它们改变一下分辨率。9600/5, * 1080/5.

    此时,发现场景中,很黑,在这里,需要注意的是,肯定不是因为没有灯光的原因,我们把它的shader 更改一下。使用自发光:

    我们想要的是只显示一幅图,那么:

    1-2 把单个的图调的光亮清晰些:(利用序列帧图,能大大节省 Draw Call)

    1-3 给这个Quad 添加脚本:如下图所示:

    上图中代码如下:

    using UnityEngine;

    using System.Collections;

    public class UVAnimation : MonoBehaviour {

                 private MeshRenderer mRenderer;
    
                 // Use this for initialization
                 void Start () {
    
                                mRenderer = this.GetComponent<MeshRenderer >();
                }      
    
                 // Update is called once per frame
                 void Update () {  // 下面两行代码都能实现贴图的偏移移动。
                                mRenderer.material.SetTextureOffset ( "_MainTex", new Vector2 ( Time.time / 3, 0));  // 第一种方法,如果有很多个贴图,你想更改哪个贴图的offset,就用这个
                                mRenderer.material.mainTextureOffset = new Vector2 (Time.time / 3, 0);   // 第二咱方法,如果你想更改第一张贴图的 Offset ,就用这个
                }
    

    }

    1-4: 如果我们复制很多张这样的东东,会发现。 Draw Call 一直在增加,但是,根据,我们以前的经验,如果,多个qude使用同一个材质球,Draw Call 是不会增加的。如下图:


    我们观察Quad上的材质球,是一种显示。停止运行后,材质球又是另一种显示:如下图:



    那么:我们需要更改代码,更改完成以后,再多的Quad都使用一个材质球,那么,Draw Call 就会保持不变了。更改代码如下:

    using UnityEngine;

    using System.Collections;

    public class UVAnimation : MonoBehaviour {

                 private MeshRenderer mRenderer;
                 // Use this for initialization
    
                 void Start () {
    
                                mRenderer = this.GetComponent<MeshRenderer >();
                }
    
                 // Update is called once per frame
                 void Update () {
                   // 目前,下面三行代码都能实现偏移贴图,但是前两种相当增加 Draw Call. 而且 用后一种方法,无论你增加多少个quad ,你会在属性面板里,发现所有的,都共2用一个材质球。
    
        mRenderer.material.SetTextureOffset( "_MainTex", new Vector2( Time.time / 3, 0));  // 第一种方法,如果有很多个贴图,你想更改哪个贴图的offset,就用这个
    
        mRenderer.material.mainTextureOffset = new Vector2 (Time.time / 3, 0);   // 第二咱方法,如果你想更改第一张贴图的 Offset ,就用这个
    
        mRenderer.sharedMaterial .SetTextureOffset( "_MainTex", new Vector2( Time.time / 3, 0));// 第三种方法:当你想更改一个材质球,大家一起更改材质球,就用这一个方法。这个是批次的更改材质球
                }
    

    }
    //其实,上面的 material 是独立材质球,sharedMaterial 是共享材质球。

    <待续>

    相关文章

      网友评论

          本文标题:shader从入门到精通

          本文链接:https://www.haomeiwen.com/subject/djbqpxtx.html