Changed to the high compatible F3DEX microcode
gspFast3D, gspFast3D.dram, gspFast3D.fifo, gspF3DNoN, gspF3DNoN.dram, gspF3DNoN.fifo
High-quality 3D polygonal geometry RSP microcode
This is the optimized, high-quality, full-featured 3D polygonal geometry RSP microcode.
It supports 3D clipping, lighting, texture coordination generation, fog, and matrix stack.
The DRAM version of the microcode directs the output (RDP display list) to a memory buffer (DRAM), not to the RDP.
The fifo version of the microcode uses memory buffer (RDRAM) as FIFO, and transfers the RDP display list to RDP.
gspFast3D, gspFast3D.dram, and gspFast3D.fifo versions of microcode are equivalent to gspF3DNoN, gspF3DNoN.dram, and gspF3DNoN.fifo versions, respectively. The only difference is that the former versions performs clipping in near clipping while the latter versions perform clipping in eyepoint. (See Note for Near Clipping)
All computations are performed with as much precision as is practical, in order to create the highest quality images
The following GBI commands are not supported by this microcode.
All gSPLine3D are compiled as noop, and they don't affect at all.
In order from the fastest to the slowest, the following types of triangles can be generated by this microcode:
Filled Flat Shaded (must set primitive color in DP appropriately) Gouraud Shaded Gouraud Shaded, Z-buffered Gouraud Shaded, Textured Gouraud Shaded, Textured, Z-bufferd
Triangle attribute computation is heavily vectorized, so generation of Gouraud shading attributes is essentially free, if you are generating any other attributes.
Vertex transformations and lighting calculations are heavily vectorized, so it is best to operate on as many vertices as possible. Even number-sized loads are more efficient because vertices are processed in groups of two.
When doing lighting, and any vertices are clipped, clipping and lighting are implemented as ucode overlays, using a most recently used algorithm. Lighting happens at vertex load time and clipping happens at triangle draw time, so this division of microcode is acceptable. However, a display list that loads only a few vertices at a time and then draws a small number of triangles, would not amortize the microcode swapping overhead very effectively.
The RCP is designed to draw high quality textured primitives. Where possible, use texture-mapping to achieve visual complexity rather than additional geometry.Notes on Different Versions
There are some differences when calling the DRAM and fifo versions of this microcode.
Near Clipping removes geometry either behind the viewer or between the viewer and the Near Clipping plane. In actual circumstances, an object never disappears when getting closer to the viewpoint, so it should not happen in a N64 program. One way to achieve this is to locate the near plane very close to the viewpoint. (By calling guPerspective, make the near value small.) However, it does not always work because the smaller ratio of near/far makes the accuracy of Z and texture mapping worse. Another way to accomplish this is to use a gspF3DNoN microcode (or its DRAM or fifo version) which does Near Clipping. An object behind the viewer is clipped and an object far from the near plane is visible. However, an object between the near plane and the viewer is also visible. In this way, the near value can be increased without geometry disappearing between the viewpoint and the near plane. Z buffering never functions in the area between the viewpoint and the near plane. As a result, objects between the near plane and viewer never hide each other. For example, in an asteroid type game, when an asteroid approaches the view point closer than the near plane, the asteroid is drawn correctly. (objects far from the near plane are hidden.) However, when two asteroids approach closer than the near plane, they cannot be hidden correctly.
Whenever a graphic task is first started, some of the RDP states are initialized to their default states. The rest of the states keep their previous values. After restarting from yield, RDP states are restored with states set at yield. The following are RDP default settings:
gspLine3D, gspTurbo3D, osSpTaskStart