EasyX实现镜面反射倒影效果

最近通关了《闪避刺客》,非常不错的游戏,爽快的战斗、宏大但细节拉满的演出与同品类游戏中让人印象深刻。无论是室外还是室内,游戏场景中多次使用了类似下图所示的静面反射效果,用来烘托氛围和叙事;在《刀剑神域》中,也有类似的倒影地面,本文分享使用EasyX实现镜面反射效果的思路。

闪避刺客(左)/ 刀剑神域(右)

在图形学中,一提到“镜子”,最直接的思路一定是帧缓冲,比较通用且简单的思路就是使用额外的摄像机渲染场景到纹理中,然后再将其贴到场景中的物体上。在EasyX中,我们可以使用IMAGE对象实现帧缓冲纹理,并借助SetWorkingImage函数切换当前的渲染目标,整体流程如下图所示:

镜面反射场景渲染流程

阅读更多

EasyX游戏帧动画效果处理

通过对一组动画帧IMAGE对象色彩缓冲区的操作,实现了动画帧翻转、无敌帧闪烁、冻结三种常见的游戏效果,本文介绍这三种效果的相关概念和实现思路。程序中所使用的帧动画素材为提瓦特幸存者进阶版中分享的素材,需要测试的小伙伴可以在文末找到相关素材的下载链接。

原始动画和三种效果

阅读更多

EasyX渲染黑客风格泛光文本

朋友的社团邀请我去做技术培训,带着小伙伴们一起做一款小游戏,正好手头有一个黑客题材游戏的灵感,便整理了一下策划案,准备以教学为目的带着大家做一部完整的游戏作品;一开始是打算用引擎的,但是引擎使用中的诸多概念对仅有浅薄编程语法基础的同学们来说还是有点为时过早了,想来近期在做的EasyX系列教程,便试着用EasyX实现一点高级的画面效果。本文代码作为软渲染的实践,仅用作算法思路分享,实际工程中还需要考虑渲染效率的优化等问题。

本文算法和实现思路参考了以下内容:

泛光概述

为什么要做泛光?泛光在一般用来强化画面中的亮部,因为显示器的亮度范围是有限的,例如游戏画面中有一张阳光下的白纸,白纸显示为纯白色,而太阳为了表达光亮最多也是为纯白色,二者同时出现时便会有亮度一样的感觉,而当我们给太阳加一个光晕,这样二者的亮度就有所区分了。

色彩亮度相同时泛光可以显著提升光源感官亮度

泛光可以看做是在摄像机视角下,光源的颜色向着画面中其他物体的颜色逐渐侵染的过程。泛光的通用实现思路主要分为以下几步:亮部提取 -> 模糊处理 -> 混叠渲染

阅读更多

基于EasyX软渲染实现常见故障艺术

本文极大地参考了毛星云大师的《高品质后处理:十种故障艺术(Glitch Art)算法的总结与实现》一文,以及由他开发的 Unity 高品质后处理库 X-PostProcessing-Library源码,能力有限,但也希望本文能够给感兴趣的小伙伴们抛砖引玉,为国产 3A 游戏续星星之火。

怎么绘事呢?

故事的起因是群友的一句话让我想起了当年做 3D“软渲染”的冲动,想来 CodeBus 上已经有大佬给出了相对不错的实现,便重新拉取代码本地编译查看,却没料到性能比预想的还要差一些,就算是在此基础上费尽心思实现了导入 3D 模型导入进行渲染,在没有 PBR 等高性能需求的技术实现可能的情况下,“炫酷”这方面可能就多少差点意思——不过,既然 3D 软渲染提升的空间有限,那么实现 2D 软渲染应该还可以有相当大的操作可能。

EasyX 群聊天记录

想来近期工作研究的故障艺术效果(Glitch Art),便重新翻出了收藏夹中毛星云大师的文章,试着将应用于 GPU 的 shader 实现移植到 CPU 端。
本文着重探究在 CPU 端逐像素的图像处理逻辑,即模拟 shader 程序在片段着色器阶段的工作,这就导致其工作流并不一定是 CPU 这种相对线性的工作者所喜欢的,也就是说在实际运行的过程中,效率可能远不及 GPU 的并行处理。尽管如此,考虑到本文重点在于算法和编程思想的分享,而非高性能场景的实际应用,况且对于 60 帧的游戏 demo 而言,本文提及的大部分算法实现都还算可以勉强胜任。

阅读更多