学习OpenGL ES之ShadowMap(二)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习OpenGL ES之ShadowMap(二)相关的知识,希望对你有一定的参考价值。
参考技术A 本文将为大家解决上一篇文章留下来的问题。在上一篇文末,我们看到了有问题的阴影效果,我们常把这种问题称为Shadow acne,在不该出现阴影的地方出现了亮暗相间的条纹。我们通过下面这张图解释产生问题的原因。
修复后效果如下。
因为面的法线不同,需要调整的深度值也不一样,一般会把bias设置成与法线相关的一个值。
我们看上面的效果图会发现影子和物体有一段偏移量,我们一般称这种现象为Peter Panning,正如彼得·潘故事里的主人公和影子分离的现象。
想要修复这个问题,可以提高深度纹理的精度。我们在设置光源投影矩阵的时候,nearPlane和farPlane都设置的比较大,这导致了深度纹理需要表达更大范围的值,从而丧失了精度。
我们将它修改成如下数据。
效果就会好很多。
现在的阴影看起来还可以,不过边缘会有些锯齿。真实的阴影边缘往往比较柔和,我们可以通过多重采样让阴影变得柔和。
vec2(1024, 1024) 是阴影贴图的大小,你也可以通过uniform把贴图大小传递进来。通过采样相邻点的深度值,判断是否需要阴影,然后求出平均值,从而达到平滑的效果。效果如下。
目前我们的算法有一个瑕疵,你所看见的区域有可能不会全部被阴影贴图覆盖到,我们把下面的正方体变大就可以看到问题。floor的大小改为30,1,30。
效果如下。未被阴影贴图覆盖的区域都是黑色的。
我们只要在Fragment Shader中添加一个分支条件就可以解决这个问题。
最后我们打开法线贴图,效果如下。
ShadowMap的两篇文章主要介绍了ShadowMap的基本原理和常见问题的修复思路,除了这些之外还有其他更加复杂的优化和解决issus的方案。想要继续深入了解,可以参考 常用的ShadowMap问题解决方案 ,以及它的底部标明的引用的文章。
Shadow Mapping
Common Techniques to Improve Shadow Depth Maps
我的OpenGL学习进阶之旅学习OpenGL ES 3.0 的实战 Awsome Demo (下)之 图片转场和轮播特效专场
前面两篇文章
介绍了一下项目和部分案例效果展示,这篇接着介绍其他的案例效果展示。
三篇完整版链接:
一、介绍
最近在学习OpenGL ES 3.0 相关技术,写了一个Demo工程,记录学习。
1.1 项目地址:
1.2 项目介绍
主要是将下面来源的特效,自己手动敲一遍,熟悉OpenGL ES相关API和GLSL语法以及C++语法
- 《OpenGL ES 3.0编程指南》 这本书
- 【Learn OpenGL ES】 网站的一些示例
- 字节流动的 NDK_OpenGLES_3_0 项目代码
- 部分ShaderToy网站和 GLSL SANDBOX 网站上的特效移植到android端
- 转场动画GLTransitions网站上的特效移植到android端
1.3 相关链接
关于 OpenGL ES的相关知识,
可以参考下面的博客查看:
- 字节卷动 的 OpenGL ES 专栏
- 字节流动 的 Android OpenGLES 3.0 专栏
- 【Learn OpenGL ES】
- ShaderToy
- GLSL SANDBOX
- 转场动画 https://gl-transitions.com/gallery
二、案例效果展示
接下来几个案例都是转场动画GLTransitions网站上的特效,移植到Android端来展示 Android 图片转场和轮播特效
学习 Android 图片转场和轮播特效 如何实现
1 图片转场效果1
2 图片转场效果2
3 图片转场效果3
4 图片转场效果4
5 图片转场效果5
6 图片转场效果6
7 图片转场效果7
8 图片转场效果8
9 图片转场效果9
10 图片转场效果10
11 图片转场效果11
12 图片转场效果12
13 图片转场效果13
14 图片转场效果14
15 图片转场效果15
16 图片转场效果16
17 图片转场效果17
18 图片转场效果18
19 图片转场效果19
20 图片转场效果20
21 图片转场效果21
以上是关于学习OpenGL ES之ShadowMap(二)的主要内容,如果未能解决你的问题,请参考以下文章
openGL之API学习(一七七)opengl gles glsl glsl es版本对应关系
uboot学习之二----主Makefile学习之二----环境变量之:主机的操作系统和主机架构(HOSTOSHOSTARCH)(31-43行)