【我的世界原理分析】1.光照原理

【我的世界原理分析】1.光照原理

前言

最近在研究类我的世界这样的游戏,方便以后开发以及提供给更多人一个思路。大家多多评论留言我会不断更新更多相关内容。

首先看一下我的世界的画面效果,我们后面的一章节再讲讲地形生成原理。
我的世界1.12.2最终显示效果
(最终效果)

1.平滑光照

拆分效果首先从最终效果开始拆,先把我的世界中的平滑光照关闭和开启来对比一下。
关闭平滑光照的按钮
关闭平滑光照后的效果
开启平滑光照的按钮
开启平滑光照后的效果
可以对比出来效果只是在方块的边缘和夹角设置了明暗部的过度。这个可以在shader中的着色器增加顶点颜色(后面的效果其实都可以基于顶点颜色来实现)或者其他效果来实现。这里不做实现只是提供方案,而且网上可以找到对应的shader代码实现效果。

2.环境光

我们已经关闭了平滑光照效果。那么再来看看这个方块有什么玄机。
普普通通的草方块
以上这个是天亮时的方块
黑暗下的草方块
以上是天黑时的方块

我们可以看到它除了整体颜色变暗了,但是明暗面却没有变,它不会因为太阳光的位置而改变明暗部的面。因此我们可以大胆猜测这个方块的面其实就是写死的(写成了固定的明暗效果)。

在shader中依然可以用顶点颜色来实现,我们可以根据世界时间来定义一个黑色到白色的颜色值我们叫它亮度颜色。将原本显示的顶点颜色 乘以 这个亮度值 就可以了。

3.光照算法

到此我们实现了因时间而变化颜色深度的效果 和 平滑光照的效果。
但是还差了一步。平滑光照的光照是什么?仅仅只是夹角部分会变暗而已吗?
在我的世界里面挖了一个矿洞,虽然是白天矿洞内依然是黑色的,但洞口是亮的。
其实这个就是光照算法,根据光的传播来实现方块某个面的颜色亮度。

用羊毛简单搭建的模拟矿洞
我们用羊毛来简单搭建的模拟矿洞。
可以看到洞口是亮的,到洞内越来越暗。(这种效果称为AO环境光遮蔽(Ambient Occlusion)“AO”为Ambient Occlusion的缩写。MC通过算法实现AO)

我们可以把光也看做为一种光源方块。天光直接照射到的地方是最亮的地方。
然后这些方块以此向四周蔓延。天光直接照射到地面的亮度在mc中为15。最暗的是0,也就是完全黑色(想想你没有带火把在矿洞里摸黑的感觉)。
概念图
这个光源方块亮度设置为15,然后向四周衰减蔓延。向四周衰减为14,然后得到14亮度的光源们再向四周衰减到13亮度。然后依次衰减到0。
如果有两个光源衰减传播,就取亮度最大的。
平面示意图
平面原理图。(如果还不懂可以评论区留言)
萤石亮度传播

比如萤石这种有亮度的方块其实也可以按照这种方式来衰减传播亮度。你也可以每次衰减2的亮度来达到缩减一倍的亮度范围。

下一篇来讲讲我的世界的无限范围的mesh地形生成和优化。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值