现代插槽中的渲染和图形技术
1.字符和胜利的可读性,2。稳定的60 FPS不过热,3。轻松的乐队和快速的开始,4."哇效果"与结果的诚实性毫不妥协(所有视觉效果都在已经计算出的结果之上)。
下面是技术,管道和度量的系统海德。
1)渲染堆栈: 它由什么组成
2D/WebGL/Canvas — PixiJS, Phaser, in-house движки (HTML5/WebView).
2.5D/3D-Unity(WebGL/mobile),PlayCanvas,Three。js.
WebGPU(出现)-着色器/后进程和内存控制的增益。
音频/时段-WebAudio/Unity Audio+时段动画(GSAP/Spine/Unity Timeline)。
Assettes-精灵地图集,SDF/MSDF字体,Spine/DragonBones,视频/Web编解码器,压缩纹理。
工具-Spector。js/DevTools/Unity Profiler, atlas packers,压缩机ASTC/ETC2/BCn。
2)图形模型: 2D, 2.5D和适度3D
清洁的2D:扁平鼓,层上的UI,过滤器和掩码。快速和可预测。
2.5D:2D UI顶部的透视鼓、视差、倾斜/倒圆角、3D元素。最佳的"哇/表演"比例。
完整的3D:奖金/介绍场景,运气轮,"相机周围"。要求纪律:LOD,材料限制,简化laytinґ。
建议:在插槽中,关键的可读性在2D/UI层上;3D-用于简介和稀有套装。
3)着色器和后期效果(安全和经济)
类型着色器块:- 符号/获胜的Glow/Outline(渲染目标中的SDF/蓝调)。
- Color Grading/HSV Shift用于主题阶段(昼夜,奖金)。
- 背景中的Distortion/Heatwave,以免干扰文本。
- 烟花爆竹的Additive particles(通过搅拌便宜)。
- Masks/Stencils用于鼓上的"窗口",保存超速。
合理级别的后处理:带有下标链、Vignette、Chromatic aberration(最小值)的Bloom。在移动上-通过LOD禁用/简化。
4)动画: 时线,背面和"胜利感"
时间线:State machine 'Idle → Spin → Stop → Count → Celebrate',动画-确定时间,结果已经知道。
骨架动画(Spine/DragonBones):蒙面英雄/角色,节省内存,易于更改剪辑。
Tweening (GSAP/Animator):数字界面动画和赢家计数器(easeOutExpo for"增长感")。
与音频同步:关键点(鼓停止/组合)-通过时间线中的标记而不是帧逻辑。
运动可用性:"运动更少"模式,断开颈部/视差。
5)纹理,地图集和压缩
精灵图集:大图集(2048-4096),以减少纹理切换;按分组。
压缩:- ASTC(iOS/现代 Android),ETC2(Android),BCn(台式机/WebGL2),fallback WEBP/PNG。
- 我们为3D和大型背景保留mip级别(减少闪烁)。
- 预冲压的alpha通道:正确混合,光晕更少。
- MSDF/SDF字体:带有轮廓/光芒的清晰标题/数字,没有巨大的纹理。
6)粒子(GPU友好)
带有+GPU安装图集(3D)或战斗图集(2D)的广告牌。
Additive/Alpha-blend逐层;限制发射器的持续时间。
精细剂量:颗粒"提示"胜利,但不重迭符号。
Pooling对象,以免产生GC香料。
7)场景构图和渲染顺序
Слои: Back → Reels → Symbols → FX → UI → Overlay.
首先是不透明的,然后是半透明的。
鼓上的面具/句子-使背景不会在透明区域"下方"渲染。
清晰Z顺序,在2D中关闭深度,因此没有额外的测试。
8)引导线和下载
地图集生成(TexturePacker/Spine Export),自动切割,哈希名称('icon。ab12.png`).
延迟加载奖励场景和沉重的FX(懒惰)。
字体格式(MSDF),导出动画曲线。
CDN&kesh basting: immutable assets, manifest中短片TTL。
WebCodecs/WebAssembly用于快速解码,OffscreenCanvas用于主线程之外的渲染(可用)。
9)性能: 目标和测量结果
目标:参考设备上的60 FPS;First Playable <5-10 with web/< 10 with mobile;温度稳定。
关键SLI:- Draw calls(更多战斗,更少纹理切换)。
- Overdraw(热图-避免透明的"床单")。
- GPU 时间/CPU帧时间(渲染和逻辑时间分别为)。
- 内存/VRAM(峰值,泄漏)。
- 帮派的大小和p95引导。
- Stutters/GC(持续时间)。
工具: Spector。js, Chrome DevTools/Performance, Safari Web Inspector, Xcode/Android GPU Inspector, Unity Profiler/Frame Debugger.
10)"制造天气"的优化"
Batching:按材料/地图集/搅拌分组;在Pixi中-"ParticleContainer"/"Geometry"模式。
LOD:关闭弱设备上的重着色器/粒子;较低分辨率的替代地图集。
像素snap和整数位置-卷轴滚动时较少模糊。
降低透明度:我们用扁平的小袋/口罩代替大型alpha小块。
我们缓存目标渲染(RTT)以实现重复效果。
我们缩写字体:一个带有动态样式的MSDF集而不是十几个PNG字体。
半分辨率后处理程序(quarter/half res)+双向上划线。
计数器动画:frame clump(每秒不超过N更新)。
合理的物理学:没有"沉重"的模拟-只有预先准备好的曲线。
11)颜色、色域和可读性
sRGB/线性渲染:正确的颜色和溷合。
UI对比:获胜数字是高对比度和阴影/外线。
颜色光泽友好:避免关键组合(红色/绿色无打折编码形式)。
专有色彩分布-小心,不要杀死字符的可读性。
12)将图形与游戏玩法和音频同步
在动画之前计算自旋/奖金的结果;图形只播放脚本。
"渐进"点(鼓的停止,巨型胜利)是时间线中的标签;声音和颤音与它们联系在一起。
Duration budget:鼓脚<1.2–1.6 s,胜率是快速的,并且可以"跳跃"。
13)图形质量测试
视觉快照(regression):字符、字体、定位。
Devys Matrix:预算Android(Mali/Adreno),旧iPhone/iPad,台式机。
过热图和GPU配置文件。
可读性:3-5受访者,不同的对角线/亮度,光泽条件。
可用性:"运动更少",大型CTA,高对比度模式。
14)迷你食谱(现成模板)
A.伪三维鼓
字符平带+窗口掩码。
具有轻视差的背景(两个纹理,不同的速度)。
"倒圆角"着色器在窗口内边缘和浅色阴影。
在RNG逻辑上不按时线切换动画状态。
B."大赢"效应"
标头尺度弹跳(0。9 → 1.1 → 1.0, easeOutElastic).
烟花的附加粒子0.8–1.2页。
Glow SDF文本+半分辨率软流光。
"跳过"按钮始终可用。
C."廉价"级联节奏
一种带有标记的复合声音;图形只是"眨眼"。
X计数器通过步骤生长,字符轮廓通过MSDF扩展。
后期效果在LOD上禁用弱值。
15)频繁的错误以及如何避免错误
巨大的透明精灵→野生超速。解决方桉:切入"形状"/口罩/RTT。
VRAM爆炸→字体/样式太多。解决方案:一个MSDF pack,着色器中的样式。
没有压缩/暂停的视频录像机→帧空白/加热。解决方案:短周期,低比特率,折叠时停止。
获胜时随机GC。解决方桉:object pools, prewarm发射器。
帧计时而不是时间→ rasinchron。解决方桉:绑定到"deltaTime"/时间线。
太明亮的血腥→"肥皂"。解决方案:downsample链+强度限制。
对每个人都有沉重的后期效果。解决方案:LOD/标志。
16)图形发行支票清单
表演表演
- 60个FPS在参考上;高峰框架<目标预算
- 在走廊上绘制电话;通过地图集/材料进行战斗
- Overdraw在鼓和UI上不是"红色"
- 内存/VRAM在预算中,不泄漏
阿塞特
- 哈希图集,压缩图:ASTC/ETC2/BCn+fallback
- SDF/MSDF字体,每个项目一组
- LOD版本的效果/背景场景
动画/时间线
- 所有关键事件-按标记,"skip"可用
- 与音频/振动同步
- 运动还原模式启用
测试
- 视觉快照绿色
- Devays矩阵上的GPU/CPU Profyles
- 负载场景(多赢得,"很多粒子")
分销
- CDN融化,kesh-basting工作
- 懒洋洋地加载奖金和沉重FX
- 乐队在极限中,第一演奏到目标
插槽中的图形是美学和工程学的平衡:情感着色器和效果,速度的战斗和压缩,可控戏剧的时间线,所有玩家的可用性。团队在设计视觉数据驱动程序时获胜,测量从抽签电话到超速的所有内容,保持乐队轻巧,并为玩家提供"哇"而不会丢失FPS和可读性。这就是现代插槽诞生的方式:美丽、快速和诚实。