我在Unity 6中使用SpriteRenderers、普通网格(用于非动态静态环境资产)和大量着色器魔法来实现它。

支持双重精灵阴影和无限阴影的混合阴影模型可能是最难实现的。让精灵在没有透视扭曲的情况下渲染确实很困难...

但我最骄傲的是设备系统。虽然我必须手绘每一帧才能保持高质量的衣服/铠甲动画,但我能够实现工具/武器动画精灵附加项。因此,我可以使用相同的动画集并将工具替换而无需绘制每种工具和铠甲的组合。这肯定会杀死我 ;)

那么,让我们深入了解一下它是如何实现的!

由于它是Unity 6,我正在使用URP来渲染两种类型的资产:朝向摄像头的精灵和在MagicaVoxel中完成的体素网格。我的窍门是保持体素和像素比例一致:64像素/体素/单位。精灵使用着色器中的自定义透视投影来避免由于透视而引起的像素拉伸。

对于阴影,我正在使用一个自定义的2D阴影图,通过在全景渲染之前使用一个单独的摄像机来准备它。每个光源都可以是360度的点光源,作为阴影源。每个阴影源都可以是无限障碍物,定义为一系列线段,或是投影到2D平面并在阴影图上投影的精灵。我的摄像机设置使得阴影图保持较小(因为我们看到的区域相对较小)。并且,我可以支持大量阴影源和光源而不影响性能使用这种技术。您在本视频中看到的大多数障碍物都是一个配置为朝向光源并投影无限阴影的单一线段。低处的植被物体被配置为使用精灵阴影源。

我的精灵使用一个名为“NormalMap”的辅助纹理,这实际上并不是一个正常图,但是一张精灵“深度”的高度图。 我还将发光和金属通道编码在此纹理中。这使得精灵看起来更像3D。

动画附加系统并不复杂,但我还是很自豪的。每一帧的角色动画都有一个红、绿和蓝像素的单独层。我将它们视为附加点、附加目标和动画帧变体索引。然后,我将其导出为一个单独的纹理,然后根据当前播放的动画帧来确定工具附加的正确位置和方向。 “变体索引”允许我为每一帧使用不同的精灵,并决定它是否应该在玩家角色前面或后面渲染。

如果您想了解更多细节,我很乐意回答您的所有问题!