2D阴影
using UnityEngine;
public class Shadow2D : MonoBehaviour {
public Material matShadow;
public Texture texture;
private RenderTexture targetRT;
void Start() {
targetRT = new RenderTexture(512, 512, 0);
GetComponent<MeshRenderer>().materials[0].mainTexture = targetRT;
doRender();
}
private void doRender() {
RenderTexture tmp1 = RenderTexture.GetTemporary(512, 512);
RenderTexture tmp2 = RenderTexture.GetTemporary(512, 512);
Graphics.Blit(texture, tmp1, matShadow, 0);
Graphics.Blit(tmp1, tmp2, matShadow, 1);
RenderTexture.ReleaseTemporary(tmp1);
var cur = tmp2;
cur.filterMode = FilterMode.Point;
int y = 512;
while (y > 1) {
y /= 2;
var old = cur;
cur = RenderTexture.GetTemporary(512, y, 0);
cur.filterMode = FilterMode.Point;
Graphics.Blit(old, cur, matShadow, 2);
RenderTexture.ReleaseTemporary(old);
}
Graphics.Blit(cur, targetRT, matShadow, 3);
RenderTexture.ReleaseTemporary(cur);
}
}
相关shader:
1)方法1
// refer