小IVan:专题概述及目录
灯光篇开篇概述:
灯光在游戏里非常重要,游戏画面的整体感觉,游戏运行的效率都和它息息相关。然而虚幻把这些逻辑封得死死地。各种概念和庞大的系统常常令人束手无策。本篇将从灯光光影的原理入手,先自己实现一些灯光再自己动手打光做效果,想必这样会事半功倍。
本小节将在虚幻中用蓝图脚本“手连”各种基础ShadowMap。感谢技术美术图形交流群的小伙伴们的共同探讨@。
最基础的ShadowMap
shadow map的原理网上一搜一大把。总的来说就是:“在灯光方向架一台摄像机,获取深度图,然后再正常渲染自己的场景,再在正常渲染场景的时候把fragment转换到光源空间,把它和之前渲染的Shadowmap中高度深度作比较,看它是否在影子里,如果是就返回0,不是就返回1”。上述就是最原始的shadow map了。下面就在虚幻中实现它吧。
首先创建几个资源
在BP_Light中创建一个SceneComponent和一个SceneCapture2D,然后设置它的参数,把RT_DepthMap设置给它。如图所示:
然后创建一个MaterialParamerterCollection
因为我们在材质里直接“连”我们的shadow map,但是在材质层拿不到视口矩阵和投影矩阵,所以我们自己构建我们的矩阵。矩阵的推导可以去看看龙书d3d11的shadow map那一章
首先在BP_Light的构造函数中,先把灯光的位置传进去
然后构造我们的灯光摄像机视口矩阵