从零开始编写minecraft光影包(5)简单光照系统,曝光调节,色调映射与饱和度

本文介绍了从零开始编写minecraft光影包的过程中,如何改进光照系统,包括自然环境光和人造光源的处理,以及如何实现曝光调节以适应室内和室外场景。此外,还探讨了ToneMapping(色调映射)技术,以解决过亮图像的细节丢失问题,并通过调整饱和度提升图像色彩效果。
摘要由CSDN通过智能技术生成

完整资源:

我的Github地址

前情提要:

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

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

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

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

从零开始编写minecraft光影包(4)泛光性能与品质优化

前言

国庆放假摸鱼好久了。。。今天来更新一下罢

上次讲到实现了更好品质的泛光,可是因为mc的光照系统过于蛋疼,还是存在种种问题。今天来解决其他的问题。

注:这部分的内容基于上一篇博客中【对低分辨率纹理进行模糊】小节的代码

光照系统

光照是着色器面临的重要部分。一个好的光照系统能够让着色器画面更加逼真。在上一篇的着色器中,我们虽然解决了泛光的问题,但是仍然存在很多潜在的问题:

首先是光源方块也会被染上阴影

在这里插入图片描述

因为阴影的关系,暗处的方块颜色会非常暗:

在这里插入图片描述

而夜间则会显得非常亮,尤其是人造光源的亮度和太阳的亮度相等,这是有违常识的:

在这里插入图片描述

所以我们迫切需要改写mc的光照系统。我们将光照简单的分为两种类型:

  1. 自然环境光,由太阳和月亮提供
  2. 人造光源照明,由玩家放置的方块提供

发光物体确定后,我们需要明确光照的几条规则:

  1. 自然环境光的强度远大于人造光源的照明强度
  2. 夜间的时候,自然环境光的强度应该减少。
  3. 当自然光和人造光源都存在时,取最大的一方作为最终光照的结果

所以我们需要修改 gbuffers_terrain 着色器,我们需要重新计算光照。

还记得顶点着色器中的光照纹理坐标🐎?

lightMapCoord = gl_TextureMatrix[1] * gl_MultiTexCoord1;   

其中 lightMapCoord 的 x 轴表示人造光源的强度,y 轴表示自然光源的强度。如果我们在 gbuffers_terrain 着色器直接输出他们的 x 或 y 坐标,那么会有如下的结果:

blockColor.rgb = vec3(lightMapCoord.x);

or 
 
blockColor.rgb = vec3(lightMapCoord.y);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值