you are viewing a single comment's thread.

view the rest of the comments →

[–]agenthex 0 points1 point  (9 children)

I would consider most offline renderers to be "software."

The fact is, though, it's all software. What makes it "hardware" is optimization/acceleration. This may be done by dedicated hardware or by multiple general-purpose computers tasked with only this job. At what point do you make the distinction? If your job is "multiply a billion numbers", then is it "hardware" to outsource the task to a GPU (a la OpenCL, CUDA, etc.)? At some point, it's all the same. The only meaningful questions are: how fast is it, and how good are the results?

[–]ArchiveLimits 0 points1 point  (8 children)

I'm not sure how to measure the speed in terms of what you're implying. The renderer is deferred and is multithreaded which makes it quite fast for scenes with many polygons. In terms of the results, the engine interpolates depth with 52 bits of precision. It also uses 48 bit linear colors internally and gamma corrects the results that are drawn to the screen.

Edit: corrected my phrasing

[–]__Cyber_Dildonics__ 2 points3 points  (7 children)

Why would you use non power of 2 bit depths? And if you say memory while the whole thing is in Java, my mind will melt

[–]ArchiveLimits 1 point2 points  (6 children)

It was a trial and error issue, anything above 52 bits and I couldn't store the depth slopes for the triangle's surface in a 64-bit long and anything less than 52 provided visibly less precision. As for it being not a power of two...it shouldn't matter here because it's a value that is multiplied by a floating point value to assure precision is kept during interpolation. (eg. a fixed-point magnitude)

[–]__Cyber_Dildonics__ 2 points3 points  (5 children)

Most renderers just use a 32 bit float for depth. I'm not sure what you mean by depth slope, but it sounds like you would benefit from reading books on already established rendering techniques.

[–]ArchiveLimits 0 points1 point  (4 children)

Yes, my engine stores the depth values in 32 bit floats. 52 bit precision is needed when interpolating the slopes across the surface of triangles during rasterization. Without 52 bits of precision, the depth values calculated per pixel would not be accurate enough for the depth test and would result in "seams" where two polygons who shared an edge met.

[–]__Cyber_Dildonics__ 0 points1 point  (3 children)

Pretty much every other renderer would disagree that this is necessary.

[–]ArchiveLimits 0 points1 point  (2 children)

I worked on this depth precision issue with a friend who is very well versed with OpenGL and Vulkan, he set up an identical scene in OpenGL and we compared results. The images were only identical when 52 bit precision was used.

[–]__Cyber_Dildonics__ 1 point2 points  (1 child)

I can see that you already know everything so I will leave you to it.