关于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 是共享材质球。
<待续>