Resource icon

Misc How it works: UO Software Renderer

The Ultima Online Classic client uses a software renderer to display the game on the screen. What does this mean? It means that UO doesn't use the hardware acceleration from your graphics card to render the game on the screen. It uses your CPU instead, which is much less efficient. This is why clients like the UO XNA Client have so much smoother graphics than the classic client.
Wikipedia explains it well.

There are two types of graphics that the game engine uses. The first type is graphics that are simply drawn on the screen without any alteration, using a typical transparency strategy.

When the UO game engine renders flat terrain, it simply draws the the land graphics in a large grid (44x44 pixels per grid tile). It only draws 18x18 grid tiles at a time according to where you are on the map.


Any static objects or other objects that are logically sitting on the ground are draw right on the grid. The image is drawn with its bottom center lined up with the bottom center of the grid tile in which it resides. It has a y offset calculated based on a scalar of it's z altitude value.


The result is that the image matches up on the grid as you would expect. The object has the appearance that it is in the game world sitting on the ground at that location.


The second type of graphic is the rendered terrain / land graphics. These graphics are textures that get stretched over triangles. 3D renderers build up meshes and shapes using many triangles. Even circles and spheres are made using many triangles.


The UO terrain engine only draws a grid tile as a flat tile graphic if the altitude of the surrounding two tile vertices is the same. Notice I said tile vertices and not grid tiles. The rendering engine considers the grid to be on the north-west (upper-left corner of the square when turned 45 degrees counter clockwise) vertex of each tile square.

Raising a single tiles z altitude will cause a 4x4 square grid of tiles to be rendered as stretched textures instead of flat tiles. Those tiles are now rendered as triangles with the texture stretched across them.


Raising the z altitude of the tile directly to the west will show a ridge across the two tiles and expand the textured tiles by 4 in the east direction.


Raising the z altitude of the north two tiles shows how the triangles are rendered.



When a landtile doesn't have a corresponding texture, it cannot be drawn as triangles, and instead is just drawn on the screen as a normal graphic. This results in "holes" in the graphics around the tile since the surrounding tiles are still stretched across the triangles.

  • ai22.photobucket.com_albums_b347_Praxiiz_1.png
    56.8 KB · Views: 1
  • ai22.photobucket.com_albums_b347_Praxiiz_8.png
    8.2 KB · Views: 1
  • ai22.photobucket.com_albums_b347_Praxiiz_9.png
    67.5 KB · Views: 1
  • awww.ccs.neu.edu_course_cs4300old_s11_sphere_sphere_wireframe_hidden.png
    29.6 KB · Views: 1
  • ai22.photobucket.com_albums_b347_Praxiiz_2.png
    73.4 KB · Views: 1
  • ai22.photobucket.com_albums_b347_Praxiiz_3.png
    79.4 KB · Views: 1
  • awww.vectorstash.com_articles_100vectors_image01.jpg
    22.2 KB · Views: 1
First release
Last update
0.00 star(s) 0 ratings

More resources from Praxiiz