shader從入門到精通

關于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 是共享材質球。

<待續>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容