Commit graph

18 commits

Author SHA1 Message Date
Ian Curtis 165926aa06 Modern hardware does backface culling in window space by calculating the face normal for the polygon, then doing a dot product against the view vector. The real3d pro-1000 on the other hand passes a pre-calculated face normal for each polygon which is used for culling. We were using this face normal to rewind the polygons so that regular backface culling would work. This worked 99.9% of the time. However this was failing on some models in Virtua Striker. The reason was because the pre-calculated face normals being passed were actually completely different to the actual face normals for the poly (not just inverted like you would expect). This broke our code. The solution was to emulate face culling directly in the vertex shader using the pre-calculated face normals directly. Only minimally tested this but hopefully there are no obvious regressions. 2017-08-29 10:27:29 +00:00
Ian Curtis c12e4c3215 Fixed shading (per vertex poly colours) on step 1.5 hardware have the viewport ambient value added to them. This fixes various shading on scud. To do this had to switch the maths to the vertex shader. 2017-08-14 09:14:06 +00:00
Ian Curtis 8f622714a7 Fix attribute locations. glBindAttribLocation must be called linking 2017-08-11 11:59:41 +00:00
Bart Trzynadlowski a315627401 Added support for loading shaders from files for new engine and tile renderer. Changed help text to reflect new engine being default. 2017-08-11 00:41:10 +00:00
Ian Curtis d7403afda6 use generic vertex attributes 2017-08-10 15:43:03 +00:00
Ian Curtis 5709ee2659 Sometime ago I managed to work out that specular on the model3 is not real specular, and really is just an extension of diffuse lighting. But attempts were derailed by corner cases and the fact we were not handling the normals correctly. Anyway Harry managed to successfully come up with an algorithm, and coefficients that give an almost perfect match to specular on the model3, based soley on observations from video footage! He also worked out that the lighting on hardware 1.5 onwards appears to be unclamped (ie greater than 1). This quite radically changes the brightness of some of the games, but much better matches the original hardware. 2017-08-09 16:56:56 +00:00
Ian Curtis 3fc28159eb Add the unclamped light model we know exists to the shaders. 2017-08-03 10:41:18 +00:00
Ian Curtis 9aa3f13777 We were force normalising the result of matrix * normal, which looked correct in most cases. But this didn't preserve the scaling of the matrix, or the scaling of the model normals which resulted in many over bright areas. On it's own this generally worked, but games like Star Wars looked quite broken. Harry correctly figured out if you scale these normals by the scaling value that is sometimes present in the culling nodes the lighting looks correct. Still more work to do to correctly figure out the model3's lighting model. 2017-07-29 16:30:30 +00:00
Ian Curtis a9b49c1676 Implement unclamped light model based upon Harry's findings. Unknown how this is turned on/off. 2017-07-22 17:15:14 +00:00
Ian Curtis edfb521a9b Daytona seems to use this completely undocumented feature of the real3d pro-1000, the ability to invert texture colours. This patch fixes the colours on the cars, and the signs which should flash by alternating their colours. 2017-04-05 17:57:38 +00:00
Ian Curtis f0e00c5dc7 Rewrite the spot light code, and implement the missing fog logic. (HarryTuttle) 2017-04-02 21:03:59 +00:00
Ian Curtis 69eac95846 Replace glsl 3 function. Apparently this doesn't work on OS X. 2017-03-28 20:24:44 +00:00
Ian Curtis 2c23268d88 Support microtexture relative scale. The exact scaling values are not known, but a 2x difference between each level seems highly likely. We know from visual inspection from scud that the first level is exactly 4. The SDK has a function that accepts a float input for scale and does this. lod = (1/scale) + 0.5. If lod>3 lod = 3. So this is our best guess. 2016-12-09 14:13:46 +00:00
Ian Curtis 2086b1c9af Stencil layered polys, fixes shadow z fighting in some of the games. Other games maybe using stipple alpha (yuck), not sure yet. 2016-05-27 19:30:40 +00:00
Ian Curtis bc08276d60 preliminary specular 2016-05-15 16:24:49 +00:00
Ian Curtis c545b9fd85 preliminary microtexture 2016-05-04 00:35:07 +00:00
Ian Curtis f031e5d095 finish front/back face culling code based on matrix determinant. Optimised opengl to avoid redundant state changes. 2016-03-22 23:39:59 +00:00
Bart Trzynadlowski 34301e97e1 Adding new 3D engine by Ian Curtis. Old engine moved to Graphics/Legacy3D/. 2016-03-21 04:10:14 +00:00