跳转至内容

N64 编程/视频协处理器

来自维基教科书,开放的书籍,开放的世界

RCP(VDP、PPU、视频控制器)主要对多边形压缩和后期滤镜效果感兴趣。

由两个组件组成 - RSP(现实信号处理器)和 RDP(现实绘制处理器)。

纹理缓存和帧缓冲区与 CPU 共享在 RDRAM 中。

实际的纹理内存只有 4KB——一次只允许处理这么多内存。

RSP(现实信号处理器)

[编辑 | 编辑源代码]

RSP 是您的变换和光照单元 (TnL)。它操作世界数据和纹理。

在数学上,很多矩阵用来从本地数据-> 世界空间-> 视图空间(带有 z 透视校正的投影)。

变换意味着对多边形、光照法线和纹理 UV 进行缩放、平移和旋转。

为 RDP 创建三角形和线条的图元列表以渲染。

RDP(现实绘制处理器)

[编辑 | 编辑源代码]

RDP 是显示单元。

光栅化、雾化、环境、颜色混合。抗锯齿效果。

更低级的像素处理程序。

RCP 有自己的语言,称为“uCodes”(256 个微码)。

想想来自 OpenGL 的现代顶点和片段着色器,或者来自 Direct3D 的顶点和像素着色器 - 两个阶段组合在一起。

R4000 协处理器(COP2)。每个 uCode 都是由 RSP 运行的一串 ASM 指令。它还设置 RDP 批量渲染器。

显示列表是由游戏定义的一系列 uCode。它被馈送到 RSP。


注意:模拟器作者选择将 uCode 翻译成更高级别的语言。

程序员可以定义自己的顶点/纹理格式。光照方法。过渡检测和其他灵活的魔法。

微码在运行时上传到 RCP。因此,每个游戏都有自己的绘制函数库(有些类似于 DSP1 -> DSP1A -> DSP1B,而另一些则类似于 DSP2、DSP3)。

纹理变化

[编辑 | 编辑源代码]

游戏使用自定义格式。此外,线性位图可以是任何尺寸(320x8、48x13)。4/8/16/32-bpp 是标准。

微码库倾向于定义几个“可接受的”格式。

这是来自视频插件作者的示例列表。

  • 16 位 RGBA = 5551。红色、绿色、蓝色、alpha(透明度)。
  • 32 位 RGBA = 8888。
  • 4 位 IA = 31。灰度强度(亮度、亮度)+ alpha。
  • 8 位 IA = 44。
  • 16 位 IA = 88。
  • 4 位 I = 40。仅灰度。
  • 8 位 I = 80。灰度。
  • 16 位 I = (16)(0)。
  • 4 位 CI = 40。调色板查找 -> 16 位 RGBA 或 16 位 IA。
  • 8 位 CI = 80。调色板查找 -> 16 位 RGBA 或 16 位 IA。

YUV = 其他一些颜色格式。输出为 RGB(888)+ 全透明度。

华夏公益教科书