从零开始编写minecraft光影包(2)阴影优化

本文介绍了如何通过修改太阳偏移角度和提高shadow纹理分辨率解决minecraft光影包中的阴影误判和分辨率问题。进一步,文章探讨了使用鱼眼镜头变换提升阴影细节,以及在保持纹理分辨率不变的情况下提升阴影质量。最后,讨论了软阴影的实现和对小瑕疵的修复,以创建更逼真的光影效果。
摘要由CSDN通过智能技术生成

完整资源:

我的Github地址

前情提要:

从0开始编写minecraft光影包(0)GLSL,坐标系,光影包结构介绍

从零开始编写minecraft光影包(1)基础阴影绘制

前言

今天没啥课了 ,继续填坑

上回提到基础阴影的种种问题,比如:

比如分辨率堪忧,阴影的细节不够还原

在这里插入图片描述

或者是阴影的误判:

在这里插入图片描述

阴影绘制误判解决方案

通过观察发现,误判的情况往往发生在光线平行于方块表面时:

在这里插入图片描述

而且mc默认的太阳,运行轨迹永远是在正上方的:

在这里插入图片描述
正上方的太阳有一个问题,就是无论何时,太阳光方向,都能和所以方块的侧面平行:

在这里插入图片描述

这个问题有一个简单的解决方案,那就是修改太阳的偏移角度,而 shadermod 中设置了一个可控变量来描述

所谓可控变量,就是通过设置这些变量,来修改一些默认的光影设置。比如太阳的运行轨迹,就是shadermod默认生成的,但是可以通过改变可控变量,进行修改。

通过可控变量修改太阳运行轨迹的方法很简单,在顶点着色器(任意一个)中加入:

const float	sunPathRotation	= -40.0;

即可修改太阳的偏移角度(0就是mc的默认值):

修改之后,太阳会按照偏移的较度运行,入射光和方块表明平行的情况相对较少了。。。 但是注意,修改太阳偏移角之后,一天中总有某个时间段,太阳入射光平行于方块表明,但是这个时间段短到可以接受

好吧其实我是懒狗,加一个法线判断一下就好了,关于法线打算留到水面反射的绘制再进行讲解,那时候再补上吧。。咕了

可以看到,入射光和方块表明平行的情况少了,但是任然存在阴影分辨率不足的问题:

在这里插入图片描述

提高shadow纹理的分辨率

上一篇博客讲到阴影的绘制,离不开shadow纹理,所以shadow纹理的精细度,决定了阴影的质量。和太阳偏移角一样,我们可以通过设置可控变量来实现修改:

在任意顶点着色器中加入:

const int shadowMapResolution = 4096;  

其中shadow纹理默认的分辨率是1024,我们将其变为原来的4倍:

在这里插入图片描述

可以看到效果还是十分有效的,因为精度提高,误判减少了,而且阴影分辨率变高了:

在这里插入图片描述

但是,这一切值得吗

因为shadow纹理是shadermod预先绘制的,那么提高分辨率,性能就会下降,会掉帧。。。

在这里插入图片描述
所以,单纯提升shadow纹理的分辨率,不是一个好的方法,那么有没有什么方法,能够不改变纹理分辨

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值