这边文章会按照阴影实现的原理一步一步去解释每一步的代码和实现
这篇文章使用的是常规的阴影贴图的原理实现,原理很简单,就是在光源的位置假设一个摄像机我们叫做L,然后用L摄像机把照射物体A的深度值存储到一个深度贴图里面,我们正常渲染场景的摄像机叫做E,我们把E照射的物体P点,转换光源空间,然后对比两个点的深度值,就知道p点是否有阴影。
1 如图我们先建立一个简单的场景然后在光源下面建立一个摄像机用来渲染深度图,cube是我们产生阴影的物体,plane是我们接受阴影的物体。
2. 我们建立一个ShadowTest脚本挂接在光源上,在Start函数里面创建渲染贴图
Camera m_renderCam;
RenderTexture rt;
void Start()
{
m_renderCam = transform.Find("Camera").GetComponent();
rt = new RenderTexture(512, 512, 24);
m_renderCam.targetTexture = rt;
}
3.因为我们只对cube产生阴影,所以我们新添加一个player的层级,把cube的层级设置为player,同时把灯光摄像机的cullingmask设置为player,保证我们的深度图上只有这个cube。
4. 我们简单的建立一个unlit sh