-
Notifications
You must be signed in to change notification settings - Fork 61
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Compute sprite vertexes on CPU, not with GLSL #1281
Draft
slipher
wants to merge
4
commits into
master
Choose a base branch
from
slipher/autosprite-cpu
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Commits on Sep 19, 2024
-
Don't omit light factor when using depth fade
The overbright correction shouldn't be skipped here. Currently all depth fade assets also use vertex sprite so the USE_DEPTH_FADE variant of the depth fade code is never run, only the USE_VERTEX_SPRITE one.
Configuration menu - View commit details
-
Copy full SHA for 40c3fe3 - Browse repository at this point
Copy the full SHA 40c3fe3View commit details -
Tess_SurfacePolychain: don't skip tangents randomly
I needed this to test depth fade with /testshader
Configuration menu - View commit details
-
Copy full SHA for 3ade40a - Browse repository at this point
Copy the full SHA 3ade40aView commit details -
Do autosprite calcs with CPU, not GLSL
Get rid of vertexSprite_vp.glsl/USE_VERTEX_SPRITE and return to doing deformvertexes autosprite/autosprite2 vertex calculations on the CPU (like it was until 2015). This fixes various bugs with autosprite[2] BSP surfaces. Also it fixes some particle systems which were broken for unknown reasons. One problem with the vertex sprite GLSL is that it always applied depth fade, regardless of whether it was requested. Depth fade means the alpha will be reduced if there is something close behind the particle within a certain depth (judging by the z buffer). With autosprite1, this depth parameter was set equal to the size of the sprite. So it is like a cube-shaped cloud (which matters when part of the cloud is inside a wall). The shader-specified fade depth, if any, was ignored. With autosprite2, the shader used a negative depth parameter, which just breaks everything. By removing unwanted depth fade for BSP surfaces, this fixes #997 (non-opaque autosprite2 BSP surfaces do not show up, as seen with the various flames on KOsAD's metro map). Also depth fade will no longer be automatically applied to all particles. I believe we have just 3 Unvanquished shaders configured with depth fade: acid tube acid, booster effect, and grenade smoke. Any other particles could potentially look different due to removing depth fade. So we may need some asset changes to adjust to this change. Another issue is that USE_VERTEX_SPRITE was not available for lightmap shaders. This meant that vertex positions were out of sync between the generic and lightmap shaders, and the lightmap shader failed to render anything. So this commit fixes #1246 (wrong lighting for autosprite[2] BSP surfaces with lightmaps, as seen on map "defenxe") by calculating the final vertex positions before uploading them, which ensures they are the same for all GLSL shaders used. With this commit, some particles that were previously not visible are now rendered, for example: - ones with the gfx/players/alien_base/green_acid shader which are emitted upon evolving, or damaging or destroying an alien buildable - orange glowing "mark" (which is actually a particle) added at impact point of several weapons (rifle, shotgun...) I believe the problem must have been that Tess_AddSprite oriented the triangles backward (CW instead of CCW or vice versa). And unlike most particle shaders, the acid one fails to specify double-sided culling, so it would disappear if oriented backward. To implement CPU-side autosprite/autosprite2 transformations, I took the code from an old (~2015) version of the file. But I ended up completely writing the autosprite2 one. When autosprites were first implemented in GLSL, there was also a change in how the polygon is positioned: in the GLSL implementation it faces towards the viewer, rather than Tremulous' behavior to face opposite the view direction. I decided that the GLSL behavior is superior for autosprite2 and reimplemented the CPU version that way (but you can get the old behavior by setting the r_autosprite2Style cvar). For autosprite the old behavior seems good enough so it once again faces opposing the view direction. This commit makes autosprite2 surfaces work with material system enabled for the first time, by virtue of rendering them without using the material system.
Configuration menu - View commit details
-
Copy full SHA for 0dad856 - Browse repository at this point
Copy the full SHA 0dad856View commit details -
Make particles face in view direction (not toward viewer)
Make RT_SPRITE entities whose shaders were registered with RSF_SPRITE face opposite the view direction, instead of toward the viewer. This prevents pathological cases where the normal of a closeby sprite is oriented nearly orthogonally to the view direction, making its 2-D nature obvious and ugly. I found that to happen with the alien evolve acid particle system if I walked backward right after evolving from Dretch to Mantis. RT_SPRITE entities without the RSF_SPRITE shader flag continue to face toward the viewer. Light flares go in this category.
Configuration menu - View commit details
-
Copy full SHA for d440b4f - Browse repository at this point
Copy the full SHA d440b4fView commit details
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.