現代插槽中的渲染和圖形技術
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和可讀性。這就是現代插槽誕生的方式:美麗、快速和誠實。