级联阴影贴图实现
阴影贴图的局限 阴影贴图(shadow map)是3D场景中实现阴影效果的基础手段,它通过预先将光线方向的场景深度存储到贴图中,在渲染的时候取每个场景中的点到光源的距离和深度贴图作比较,来判定该点是否在阴影当中。 但是在较大的场景中,使用阴影贴图会有几个明显的不足: 阴影贴图只能覆盖部分场景,在渲染较大的场景的时候(如大世界),远处的场景基本上无法被阴影贴图所覆盖。 贴图的分辨率是有限的,太大的分辨率会对性能造成非常大的影响。但是在覆盖较大场景的时候,贴图分辨率不足会导致阴影模糊,效果不佳。 阴影贴图的实现一开始其实并没有考虑玩家相机的视椎体,也就是说在玩家没有看的地方也会渲染阴影贴图,这对渲染资源来说显然是个浪费。 KongEngine计划在后面接入大地形的渲染,借此机会接入了级联阴影贴图的能力。 实现方法参考了LearnOpenGL的教程。 级联阴影贴图的实现 级联阴影贴图的基本概念包括如下几点: 将玩家的视椎体划分为几段,每一段视椎体构建一张阴影贴图覆盖,这个阴影贴图完美贴合从光源方向投射到这段视椎体中心点的正交投影。 和模型LOD的理念类似,离相机近的阴影贴图需要采...
程序化地形生成-1
ShaderToy是一个很有趣的网站,它上面有着非常多的渲染案例分享,最近一段时间我也是沉迷了。在看了不少大佬的作品之后,不禁手痒。前一段时间看了Inigo大佬的一个教程案例,想着把这个效果自己来实现一次,因此就有了今天的这篇文章。 我最终的成品也放到了shadertoy上面,有兴趣的同学可以一起讨论参考一下。看起来还不错对吧,虽然还有不少地方需要完善,但这个demo已经实现了我心中的大部分效果,包括无限的基于噪音的地形生成、地形阴影、雾气、云等等。 那么下面,就让我来一步步说明这个demo的实现过程吧。 基础知识 在ST上渲染地形 对ShaderToy上运行的Shader代码,对应着可编程渲染管线的片段着色器(或者叫像素着色器)。片段着色器主要是是图形光栅化后的像素信息,所以渲染3D场景需要进行一些额外的步骤。 ShaderToy的程序一般是这样的: 1234void mainImage(out vec4 fragColor, in vec2 fragCoord){ ...} fragColor是输出,代表这这个像素的最终颜色;fragCoord是输入,代...
个人博客启动
晚上好。 还是打算在个人的github.io继续更新自己的技术博客了。原网站本来是打算用于和朋友一起写点东西上去的,结果现在倒是变成了只有我自己的碎碎念,着实不太好。 最近一段时间会尽快的将我的部分文章搬运过来,一些琐碎的文章暂时就不管了。






