我想知道要设置哪些选项(或着色器),以便我的OpenGL游戏看起来像Playstation 1游戏。我知道它可能无法100%实现,因为PSX使用的电视和电视渲染的显示器不同。谢谢。:)
我想知道要设置哪些选项(或着色器),以便我的OpenGL游戏看起来像Playstation 1游戏。我知道它可能无法100%实现,因为PSX使用的电视和电视渲染的显示器不同。谢谢。:)
Answers:
在我看来,使OpenGL场景看起来像PSX场景的最重要的方面是确保关闭过滤(PS1只有最近的邻居),并关闭Z缓冲(没有)并渲染用画家算法绘制场景。
照明仅针对每个顶点,实际上实际上没有任何照明硬件仅使用gouraud阴影顶点着色。照明是由软件驱动的,因此您可以在CPU时间限制内做任何事情,其中没有太多余地用于诸如“照明”之类的智能高级操作。:)我们设法在某一点得到镜面反射,但是由于它是每个顶点,所以场景看起来很闪亮,因此我们将其删除。我们从来没有想过要使用镜面反射来将蒙皮网格用作混合法线,然后使用它们就花费了太多时间。
PS1也有一些纹理变化,我不确定您如何使用OpenGL来实现,但是如果您追求真实的体验,也许只是想在靠近屏幕边缘时使UV崩溃即可会给出一个合理的近似值。
我还建议您查看顶点变换:PS1没有浮点,因此渲染是使用固定点管线进行的,这是播放动画时抖动的原因。一个顶点只能处于这么多的位置,而在16位固定点上,甚至还没有那么多的位置。观看一些PS1 youtube视频,以了解其如何影响游戏,http://www.youtube.com/watch?v = RSV4IBa1pMI您可以在此处看到,这意味着当相机接近水平时,直线会抖动。我认为,模拟此问题的一种好方法是使用软件来改变您的世界(就像PS1一样),并始终将整数屏幕坐标输出为模拟的屏幕大小(这是多边形在周围晃动的主要原因之一,它们无法渲染为子像素)。
编辑
纹理游动归因于PS1根本没有3D插值。如用户712092所述,仿射渲染器只能在屏幕空间内插值,因此最终导致对角线全部错误。这可以通过打开noperspective
插值限定符来实现,也可以通过手动变换场景进行仿真,然后将x和y屏幕坐标除以该z值,然后丢弃顶点中的最终Z值。