What are the usages of software rasterization in modern game engines? I am taking a Computer Graphics course this quarter.
One of our lab project is about software rasterization.

Now I am planing the project proposal and
thinking about how to make it useful for other people in contemporary game development.

After some brief search,
I learned a technique called Software Occlusion Culling.
It does software rasterization on buffers of various resolutions.
And we can query for occlusion using the hierarchical z buffers.

My question: What are the usages of software rasterization
in modern game engines besides the Software Occlusion Culling?
To my knowledge, Software Occlusion Culling (which you already mentioned), is pretty much the only thing a software rasterizer would still be used for. Procworld makes use of a similar technique to display its huge voxel environments.

Most other culling methods like frustum culling do work on the CPU, but, to stick with the example, the test against the frustum happens on object level, probably with an axis-aligned bounding box (AABB). This intersection test is way simpler than using a full-blown software rasterizer.

In certain cases, software rasterization could be used for mouse picking of objects. In game engines, this is often solved using a physics engine and ray-triangle collision with a simplified mesh.

With the CPU being idle while waiting for the GPU in modern interactive 3D applications, one could think that it might be beneficial to use these idle cycles to render on the CPU using a software rasterizer. The problem here, besides the rendering getting horribly complex and convoluted, will often be the bandwidth. Images rendered on the CPU need to be transferred to the GPU before getting displayed, which might cancel out the benefit.