Nico de Poel
8d51e7e252
Embed the texture atlas data inside the exported .ps1bsp file and name those files after the actual map.
Makes it a bit easier to switch between maps for testing.
3 years ago
Nico de Poel
dfe7806450
Reorganized model data so as not to cause any memory alignment issues
3 years ago
Nico de Poel
97a08243b5
Added a world spawn element with a generic sky color derived from the sky texture
3 years ago
Nico de Poel
45796822cd
Reorganized poly vertex data structure to allow for faster copying in the PS1 code
3 years ago
Nico de Poel
caaccee1dd
Export model data for dynamic world objects
3 years ago
Nico de Poel
dc78b9700d
Calculate average and dominant colors per texture, and use those to precalculate combined color * light values per face vertex, for cheap vertex colored drawing.
3 years ago
Nico de Poel
cc18611de8
Reorganized texture code so that the palette is loaded separately, and metadata used to calculate UVs are kept out of the exported file for PS1.
3 years ago
Nico de Poel
9f1ed1f35f
Draw lava, slime and teleporters as liquids, but not transparent.
3 years ago
Nico de Poel
c8d8d0b905
Added a few more file extensions to the ignore list
3 years ago
Nico de Poel
64d9b16c12
Duplicate the Quake palette CLUT with transparency flag set, to use for water surfaces. Doesn't actually work yet but the solution should be something in this direction.
3 years ago
Nico de Poel
c6a8abbb7b
Made the texture space transform available outside of Tessellator and used it to generate some more Face bounds data for later use.
3 years ago
Nico de Poel
fb66f93b46
Provide some additional data in the PS1 BSP file, including linked list pointers for leaf-based polygon sorting
3 years ago
Nico de Poel
cc1fcec7ea
Also add leaf bounding sphere for optional per-leaf frustum culling.
3 years ago
Nico de Poel
c91e8e6167
Added bounding spheres to node data, used for frustum culling
3 years ago
Nico de Poel
0df5801eba
Export face vertex data again, to allow for simplified rendering routines
3 years ago
Nico de Poel
93551117b1
Added surface flags, allowing for rendering of water surfaces
3 years ago
Nico de Poel
4655246b69
Retired the concept of surface vertices, as UVs can in fact not be shared between polygons.
I may revisit this idea when trying to compress data size, as lighting data can be shared between poly vertices.
3 years ago
Nico de Poel
ef9adf8de0
Introduced some matrix math to properly construct a texture space transform, that we can also invert to create a transform back to world space. Finally our tesselated polygons are working perfectly!
3 years ago
Nico de Poel
4e11041b93
Desaturate palette colors to more closely match Quake's look, and made an exception for the big Quake sign on the start map, so it maintains a higher mip level.
3 years ago
Nico de Poel
fc281251ea
Overhaul of geometry conversion:
- Faces are now tessellated into one or more polygons, based on UV coordinates and texture tiling
- Polygons have their own vertex index list and light/UV values per vertex
- Lighting is sampled per polygon vertex, allowing for more light samples in general and more refined lighting
- There are still problems with reconstruction of vertices for sloped surfaces, but this is enough of a result for a checkpoint commit
3 years ago
Nico de Poel
4f99baea65
Encapsulated GPC-based tesselation into a Tesselator class, which now also produces normalized UVs per vertex-texture pair and a list of Polygon structs with texture and vertex index data.
3 years ago
Nico de Poel
f413e8c47f
First test with GPC to cut faces into multiple polygons, based on a grid of texture boundaries. Reconstruct the texture space (s,t) coordinates back into world space. Store vertices and indices while avoiding duplicate vertices.
3 years ago
Nico de Poel
e5b2e6244a
Imported General Polygon Clipper library, which could come in handy to cut up faces to accomplish texture tiling
3 years ago
Nico de Poel
568f2450eb
Added a new lighting sampler to take advantage of the improved lightmap indexing: use a pseudo-random jitter pattern to take multiple light samples in an area around the sample point, from all surrounding faces at a shallow angle.
This further smooths out the lighting and reduces artifacts, while also better representing each face's entire lightmap.
3 years ago
Nico de Poel
6d6766663b
Realized we can include the UV offsets into the UVs stored in the exported map file, so we don't need to add those at runtime. Easy performance win.
3 years ago
Nico de Poel
3bc9167885
Tweaked heuristics of the rectpack algorithm to produce better results for our non-square texture atlases.
Ensure we don't exceed the maximum range of PS1 UV coordinates by limiting texture width and height.
3 years ago
Nico de Poel
fb3d1ac6a1
Upgraded dot product and cross product-related functions to doubles, to improve accuracy of various calculations
3 years ago
Nico de Poel
161ef0acee
Improved lightmap sampling accuracy. The generated UVs now more closely match what Quake is doing, we can reject invalid UVs, and we're getting less false rejects of valid faces to sample from.
3 years ago
Nico de Poel
5e85e2c73a
Modified texture packer to allow for arbitrary input bin sizes. Added transparency flag to final palette entry.
3 years ago
Nico de Poel
0a19ca70f5
Texture atlasing tool now directly exports images in .TIM format for use on PS1
3 years ago
Nico de Poel
628955d7a0
Added code and resources for exporting TIM image files directly
3 years ago
Nico de Poel
3e0706c9f9
Small tweaks to make a few textures on n64start a bit nicer
3 years ago
Nico de Poel
beb1ad6382
Fixed texture seams and bleeding caused by making our UVs one texel too large
3 years ago
Nico de Poel
6c2d61b2dc
Invent some texture UVs that remain within each face's UV bounds, to prevent tiling and still get some UVs that make at least a bit of sense.
3 years ago
Nico de Poel
72d03aff9c
Fixed some issues with texture atlas, page and ID generation. Texture references generally seem to be in order now, but UVs are still a problem.
3 years ago
Nico de Poel
d84a14973b
First pass at converting texture info to PS1 VRAM data. Not quite right yet but it's starting to work.
3 years ago
Nico de Poel
5137fe0a15
A bit of cleanup and moved the facesWithPoint function to world_t, for easier reuse
3 years ago
Nico de Poel
e0373524ca
Further improvement to lightmapping system:
- Added a function to find all faces that contain a given point. This is useful for both sampling lightmaps, and sampling textures later.
- New face vertex lighting function simply collects all faces for a given vertex, and samples all relevant lightmaps for it
- A whole bunch more experiments that were more complex and that went nowhere
- Ironically all this doesn't really change the current quality of the lighting but hey, that's a result too. And this added code will prove useful soon enough.
3 years ago
Nico de Poel
1882d246b9
A bit of cleanup ahead of attempting to make textures work
3 years ago
Nico de Poel
bf3bf810f6
Added computation of face area by projecting its vertices onto its plane and then generating a bounding box. Will be used for determining tessellation subdivisions.
3 years ago
Nico de Poel
219fc6db32
Implemented an alternative method for computing lighting per face vertex, one that's simpler, faster and that produces better results.
Still not quite perfect yet but about where I want it to be for now.
3 years ago
Nico de Poel
e65ce7b673
First attempt at calculating lighting per face-vertex with smoothing based on the angle between faces, using edge adjacency to determine neighbouring faces.
Not quite right yet but it does get a result, and it's given me a good idea of what the correct solution for this should be.
3 years ago
Nico de Poel
a1e289f5fa
Export plane type field, to allow optimizations for axis-aligned planes
3 years ago
Nico de Poel
eb548d13d8
Added plane and center point to face struct, for early backface culling.
3 years ago
Nico de Poel
f6da144c6a
Padded some structs to make them 32-bit aligned
3 years ago
Nico de Poel
86343e96a9
Added export of PVS data
3 years ago
Nico de Poel
049a02fec7
Added conversion of plane, node and leaf data
3 years ago
Nico de Poel
a631e5a90d
Reworked PS1BSP format to use dentry-style header info, and added structs for planes, nodes and leafs.
3 years ago
Nico de Poel
9af577773d
Improved lightmap sampling for face vertices
3 years ago
Nico de Poel
f596c008d7
Store sampled light data per face vertex, so we can individually light each face without having to average lighting values.
Keeping averaged light per vertex intact for now, as sampling isn't quite perfect yet and I like to have some options.
3 years ago