资讯动态

Pyrite64 2D精灵渲染管线:在N64上绘制UI与2D图层的完整指南

发布时间:2026/9/18 3:03:56 来源:尧图企业网站定制
Pyrite64 2D精灵渲染管线在N64上绘制UI与2D图层的完整指南【免费下载链接】pyrite64N64 Game-Engine and Editor using libdragon tiny3d项目地址: https://gitcode.com/GitHub_Trending/py/pyrite64想在N64 复古掌机/主机平台上稳定绘制 2D 精灵和 UI 图层吗Pyrite64是一款基于libdragon 与 tiny3d的 N64 游戏引擎兼编辑器它的2D精灵渲染管线把 N64 图形硬件的限制抽象成了清晰的“3D / PTX / 2D 三层绘制”架构。本文用最少代码带你从图层配置、像素格式到精灵着色器完整看懂 Pyrite64 如何在 N64 上绘制 UI 与 2D 图层。 三层渲染架构3D、PTX 与 2D 图层Pyrite64 的绘制管线核心是DrawLayer模块它把每帧的绘制任务分成三类层层类型用途关键 API3D 层场景模型、光照、雾化use3D()/draw3D()PTX 层粒子特效tiny3d 粒子系统usePtx()/drawPtx()2D 层UI、精灵、2D 图层use2D()/draw2D()图层配置在初始化时一次性声明3D 层数、PTX 层数、2D 层数随后通过 drawLayer.h 中的Setup结构分配好所有 RSP 队列。每一层在运行时由 drawLayer.cpp 的use()函数切换 RSP 队列切换后所有后续绘制指令都自动进入该层的命令队列。层配置结构Conf位于 drawLayer.h控制深度缓冲FLAG_Z_WRITE/FLAG_Z_COMPARE位标志混合器blender字段控制透明度叠加方式雾化FogMode支持关闭、清屏色、自定义色光照模式lightMode按层独立设置设计亮点2D 层默认关闭深度测试直接叠在 3D 场景之上这正是 UI 渲染的标准做法。 N64 像素格式为 2D 图层选对颜色深度N64 的 RDP 只有4KB TMEM纹理内存这是 2D 与 3D 精灵的最大硬件差异。Pyrite64 借助 libdragon 的精灵库2D 精灵可以自动分片加载任意尺寸的图片突破了 3D 纹理必须塞进 4KB 的限制。官方文档 images.md 列出了 N64 支持的像素格式格式最大像素色深透明度推荐场景RGBA3210248 bit8 bit高质量渐变 UIRGBA1620485 bit1 bit通用精灵CI82048调色板 256 色1 或 8 bit复古像素风 UICI44096调色板 16 色1 或 8 bit图标、按钮IA84096单通道 4 bit4 bit光效、渐隐动画I48192单通道 4 bit—黑白描边性能法则纹理成本来自运行时内存流量——尺寸越小、格式越紧凑越好一旦载入 TMEM访问成本与尺寸无关复用同一纹理是省性能的关键。编辑器中可在素材上直接指定目标格式构建流程自动完成转换见 images.md无需手动量化颜色。⚙️ 2D 图层绘制流程draw2D()的实现在 drawLayer.cpp先调用rdpq_set_mode_standard()复位到标准 RDP 模式再依次执行每个 2D 层的队列。每个层绘制前会应用自己的Conf深度开关、混合器、雾效。每帧结束时nextFrame()drawLayer.cpp做3 缓冲轮转——每个层有 3 个 RSP 队列循环使用避免 RSP 还没执行完上一帧命令时就被新帧覆盖这是 N64 多核CPU→RSP→RDP 流水线编程的经典技巧。️ 精灵着色器Pyrite64 的 2D 精灵是怎么画出来的Pyrite64 的 2D 精灵走一套专门的 GLSL 着色器对编辑器端编译运行于 tiny3d 的 RDP 管线顶点着色器sprites.vert.glsl 的工作逻辑将顶点位置经projMat * cameraMat * modelMat变换到屏幕空间用spriteSize与screenSize计算逐像素步长stepPerPixel按gl_VertexIndex % 4展开四角生成矩形用inColor.a通道编码精灵索引从水平精灵表中切片SPRITE_COUNT 1/8即一张图横向切 8 帧片元着色器sprites.frag.glsl 则非常简洁采样纹理后若alpha 0.25直接discard丢弃像素实现透明抠图最终颜色 纹理色 × 顶点色支持逐精灵染色输出ObjID供后续调试/拾取使用实用技巧精灵索引藏在颜色 alpha 通道里意味着一张精灵表最多 256 帧染色只需改顶点色零额外纹理开销。 PTX 粒子精灵3D 场景中的 2D 效果如果你需要在 3D 场景里撒 2D 粒子金币碎片、魔法特效Pyrite64 提供PTX::Sprites粒子精灵系统ptxSprites.cpp基于 libdragon 的sprite_load加载精灵表上传到 RDP TILE0旋转粒子用双线性过滤 乘法混合静态粒子用点采样 低 alpha 阈值保证像素锐利每个粒子的位置、缩放、颜色、精灵偏移都存在 tiny3d 的粒子缓冲区中draw()时整批提交ptxSprites.cpp示例项目中可以查看实际用法Particles.cpp 与 Coin.cpp。 快速上手清单在 Pyrite64 中搭建你的 2D UI导入 PNG 素材编辑器中右键新建 Image 资产指定像素格式UI 推荐 CI8 或 RGBA16配置图层在项目设置中声明 2D 层数2D 层默认关闭 Z 比较创建精灵对象为 UI 面板、图标分配 2D 层索引用use2D(idx)切换后提交绘制验证效果用调试菜单观察 RSP 队列执行确认 3 缓冲轮转正常 更多细节请查阅官方文档像素格式与 TMEM 限制images.md图层 API 头文件drawLayer.h精灵着色器sprites.vert.glsl / sprites.frag.glsl示例项目含完整 2D/粒子场景jam25 示例总结Pyrite64 的 2D 精灵渲染管线证明了即使在 N64 这样受限的硬件上只要分层管理 RSP 队列、选对像素格式、用好 TMEM 复用依然能画出流畅清晰的 UI 与 2D 图层。配合 tiny3d 的 PTX 粒子系统2D 精灵还能无缝融入 3D 场景。打开编辑器为你的 N64 游戏加上第一层 UI 吧【免费下载链接】pyrite64N64 Game-Engine and Editor using libdragon tiny3d项目地址: https://gitcode.com/GitHub_Trending/py/pyrite64创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价