从零开始编写minecraft光影包(6)天空绘制

完整资源:

我的Github地址

前情提要:

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

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

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

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

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

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

前言

在国庆又当懒狗了几天之后,终于决定又来更新博客了。。。。

今天更新天空的绘制,我们将绘制自定义的天空颜色以及太阳,月亮,雾,以及他们的昼夜交替效果。

注:本章节博客基于 上一篇博客 中完成的光影包代码

干掉原版天空

要绘制我们自定义的天空,首先我们需要干掉原版的天空,通过查阅资料可知,有两个着色器负责天空的绘制:

  1. gbuffers_skybasic :天空原色 + 星星
  2. gbuffers_skytextured : 太阳与月亮

那么我们需要干掉原版的天空,让这两个着色器输出纯黑即可。我们编写四个着色器,分别是:

gbuffers_skybasic.fsh,gbuffers_skybasic.vsh,gbuffers_skytextured.fsh,gbuffers_skytextured.vsh

在这里插入图片描述
其中 .vsh 的内容都是:

#version 120

void main() {
	gl_Position = ftransform();
}

与之对应,.fsh 的内容为:

#version 120

void main() {
	gl_FragData[0] = vec4(vec3(0), 1.0); 
}

再次加载光影包,我们发现原版的天空已经被我们干掉了,太阳,月亮以及其他天空颜色都消失了。。。现在可以开始着手绘制我们的天空了

在这里插入图片描述

天空基色绘制

因为没有一个很好的机制来判断何处是天空,我们采用曲线救国的方式,通过距离计算原色与天空颜色混合(即mix线性混合)。

即:越远的方块,颜色越靠近天空的颜色,这样绘制最终会形成的效果。这样会比直接使用距离作为阈值来绘制天空要平滑很多。

要绘制天空颜色,首先我们需要有昼夜变换的的天空颜色,我们在 composite.vsh 中加入:

uniform int worldTime;

varying vec3 mySkyColor;

vec3 skyColorArr[24] = {
    vec3(0.1, 0.6, 0.9),        // 0-1000
    vec3(0.1, 0.6, 0.9),        // 1000 - 2000
    vec3(0.1, 0.6, 0.9),        // 2000 - 3000
    vec3(0.1, 0.6, 0.9),        // 3000
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值