Ian Curtis
42eaa7f3d8
fix copy paste error :]
2018-10-14 10:05:24 +00:00
Ian Curtis
3eeec35e7c
Correctly emulate the real3d pro-1000 texture modes in our shader.
2018-10-13 13:29:45 +00:00
Ian Curtis
3dbfa73734
Both lemans24 and dirt devils are rendering some totally transparent objects as the first model in each viewport. The HW seems to skip these entirely, and including them breaks our near/far plane calculations leading to Z fighting.
2018-09-19 20:43:41 +00:00
Ian Curtis
e3255e45f3
Tweak the ratio for the near plane. Fixes missing text on the map indicator at the start of spikeout. The vertices are 0.003 units apart so a tonne of precision is required at the near plane to not depth test out.
2018-09-18 21:46:38 +00:00
Ian Curtis
c5b156d95d
remove debug code
2018-09-18 21:20:15 +00:00
Ian Curtis
5dab9910e2
avoid double matrix load
2018-09-16 08:43:13 +00:00
Ian Curtis
b5f9ad9651
Quad rendering engine. Set QuadRendering = 1 in the ini file to use, or -quad-rendering at the end of the command line to use.
2018-09-13 12:50:34 +00:00
Ian Curtis
e4f5f0bcaf
Sega bass fishing is starting some off the meshes with a shared vertex. Without having a previous vertex to share with, the values were just uninitialised and junk. The hardware itself seems to hold the value from the previous mesh, and sega bass fishing relies on this undefined behaviour to function correctly. Storing the cached vertices as member variables instead of locally to the function means it holds the values from the last mesh, and uses those values instead of random garbage.
2018-09-02 21:36:24 +00:00
Ian Curtis
9f5a19a04a
Use correct PCI IDs (Harry Tuttle)
2018-07-09 08:06:06 +00:00
Ian Curtis
f9be1259c0
Opaque polys definitely depth test with less than or equal. Virtua striker is drawing co-planar polys for the bar gfx
2018-06-17 11:30:01 +00:00
Ian Curtis
c7ffd0a808
Draw transparent polys to separate layers and composite at the end. This solves a tonne of transparency errors we had been battling with for a long time. The model3 is strange in the fact it only supports a max of two translucent overlapped polys. They are not blended into the frame normally. Doing this means the topmost translucent polys only are visible in the scene, the equivalent of doing a depth pass first, but without the added cost.
2018-06-16 21:31:29 +00:00
Ian Curtis
f9f43ca66b
2018-05-28 12:55:13 +00:00
Ian Curtis
c1e0e3728b
optimise hash function and parse out transparency layer select bit
2018-05-28 11:59:48 +00:00
Ian Curtis
4d275ba49e
Parse siblings after children. It's the only way to get Daytona water fall to look correct without h/w poly sorting.
2018-05-03 18:37:49 +00:00
Bart Trzynadlowski
3f9b1b76e5
Added a stretch mode (-stretch) and modified new renderer's viewport code (hopefully correctly) to handle aspect ratio correction and widening the way the legacy one does.
2018-05-03 03:46:44 +00:00
Ian Curtis
c6b86c0812
Render the opaque part of texture transparency in the first pass. Fixes numerous transparency related issues in lemans24 and some in ocean hunter. I don't really know if this is the 'correct' way of solving this because the real3d pro-1000 is a complete black box. There is still a lot we don't understand about how it handles transparency.
2018-05-02 20:10:02 +00:00
Ian Curtis
d21e71dced
work around for non working jtag code in star wars
2018-03-21 10:26:05 +00:00
Ian Curtis
8266eecabb
Parse out line of sight position. Only known to be used by scud.
2018-01-15 21:27:21 +00:00
Ian Curtis
22a6166b82
fix Ian's bad maths :)
2018-01-15 13:08:39 +00:00
Ian Curtis
a1350d95a2
Update microtexture coordinate logic (Harry Tuttle)
2018-01-14 12:56:24 +00:00
Ian Curtis
863ea95013
simplify maths
2018-01-10 20:37:21 +00:00
Ian Curtis
adb5196625
comment out unneeded code
2018-01-10 16:12:33 +00:00
Ian Curtis
d708ce9ba2
top/bottom were swapped for off axis projection
2018-01-10 16:08:02 +00:00
Ian Curtis
6efa03112e
Rewrite projection maths based upon previously unknown viewport values. The previous values used roughly worked as the normals for frustum planes. Perhaps they were only used for culling and not actually rendering, as sometimes the values don't work correctly.
2018-01-08 18:35:42 +00:00
Ian Curtis
bc7f1e9fac
Fixed shading also works with untextured polys. Fixes some shading issues in La machineguns. (Harry Tuttle)
2017-11-07 00:15:57 +00:00
Ian Curtis
eb798ed15e
Star wars is the only game to pass unsigned fixed shaded values (per vertex brightness) to the renderer. Originally we thought that the specular flag would turn on unsigned values since it's the only game to set specular with these polys, but this logic turned out to be incorrect. The JTAG interface seems to config the GPU to turn on this functionality. (Harry Tuttle)
2017-10-05 19:15:00 +00:00
Ian Curtis
43cf6b3bbf
update spotlight code (Harry Tuttle)
2017-10-05 18:49:08 +00:00
Bart Trzynadlowski
55bb02d4e5
- New work-in-progress frame timing code (disabled by default, compile with NEW_FRAME_TIMING defined to activate it)
...
- New JTAG emulation, moved into its own class, CJTAG
- Removed game-specific sun clamp hacks from CNew3D (JTAG and Real3D emulation will call the appropriate method to configure this at run-time)
- Removed JTAG from Real3D save state data and reused some of that space for new state variables having to do with the internal JTAG-based config as well as new frame timing state variables
2017-09-24 20:52:48 +00:00
Ian Curtis
2786d95795
add interface for sun clamp
2017-09-02 14:54:16 +00:00
Ian Curtis
266c911133
Optimise vertex data to cut down on unnecessary copying
2017-08-30 21:45:25 +00:00
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
b21ed49512
cosmetic
2017-08-21 23:00:29 +00:00
Ian Curtis
cd5978773a
Harry made some important discoveries with regards to fixed shading on the model 3 (per vertex poly brightness values). Firstly values are allowed to be negative, and they are used as a drop in replacement in the standard lighting equation for the normal dot light vector. This quite radically changes the brightness in LA Machine guns, but now correctly matches the arcade.
2017-08-19 20:06:31 +00:00
Ian Curtis
0efd4dac39
Finish fixed shading for 2.0 hardware. I'm pretty sure it actually works identically to step 1.5 hardware. The oddball is LA machine guns where the viewport ambient doesn't seem to effect the brightness. But the ambient works differently in this game because it uses the unclamped light model. Still need to investigate if the diffuse factor effects fixed shading.
2017-08-15 23:21:57 +00:00
Ian Curtis
2422caadc6
Pad struct and align on 4 byte boundary.
2017-08-15 20:45:08 +00:00
Ian Curtis
eac76f0908
simplify
2017-08-14 23:30:34 +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
b1bd877b82
Ski champ for some reason is passing denormalised numbers for the modelscale. This is causing a NaN in our shader killing the lighting for these models, so we simply skip these, since they are essentially zero anyway. Thanks to Harry for finding this bug :)
2017-08-01 23:48:53 +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
9e9a549283
remove WIP code
2017-06-25 20:09:45 +00:00
Ian Curtis
ec3872d108
convert sun angle coordinate system outside of the shader
2017-06-25 19:50:02 +00:00
Ian Curtis
97781108e8
A second go at fixing the fixed lighting in star wars .. Fixed shading is per vertex poly colours. For some reason in star wars they are treated as unsigned values instead of signed, like in every other game. These polys are all marked with specular enabled, where as in the rest of the games they are missing this flag. That's the only difference I can find.
2017-06-21 17:04:53 +00:00
Ian Curtis
1532168af7
fix double offset
2017-06-20 21:44:58 +00:00
Ian Curtis
b00315b072
Revert previous fixed shading changes. Implement new logic for fixed shading on step 1.5 hardware based upon Harry's findings.
2017-06-20 20:13:42 +00:00