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