* Lighting engine improvements
Now objects will be affected by the lighting engine. This is
accomplished by passing the renderer the object's model matrix
(uncombined with the view or projection). You can now setup the
lighting engine mode to affect all shaded surfaces, lighting can
be affected by surface normals, and you can control what type of
tone mapping is applied.
added le_set_mode(mode)
By default we retain the previous behavior.
When set to LE_MODE_AFFECT_ALL_SHADED the lighting engine will
affect every shaded material.
This way we don't have to recompile every object and level that
we want shaded with special coop-specific commands
added le_get_mode()
added le_set_tone_mapping(toneMapping)
Tone mapping is what happens when a color value exceeds its 0-255
range.
By default we retain the current tone mapping (called
LE_TONE_MAPPING_TOTAL_WEIGHTED).
LE_TONE_MAPPING_WEIGHTED is now accessible, it was the tone
mapping that was previously left out of the compile through ifdefs.
LE_TONE_MAPPING_CLAMP is just simple additive with a clamp at a
color value of 255.
LE_TONE_MAPPING_REINHARD is reinhard tone mapping
(vout = (vin + 1) / vin).
added le_set_light_use_surface_normals(id, useSurfaceNormals)
By default lights retain their previous behavior (of ignoring
surface normals).
When enabled lights cast on one side of the object will not
appear on the other side of the object.
It is kind of like backface culling, but for lights.
added le_calculate_lighting_color_with_normal(pos, normal, outColor, lightIntensityScalar)
It's just like le_calculate_lighting_color(), but you can pass
in normals now.
* Removed normal calculation from vertex colored surfaces - they don't have normals
* Use packed normals correctly
* made LE_MODE_AFFECT_ALL_SHADED the default
* made useSurfaceNormals the default for lights
* Set ambient color, performed le_is_enabled() checks
The ambient color was black, which is why everything was dark by default.
If we set ambient to white then people will never see the effects of their
lights unless they set ambient to a lower value. So I added checks for
if a light has ever been added. The alternative would be to have something
like le_set_enabled()
* Rewrite how we obtain the model matrix - invert the camera
* run autogen
* Change default tonemapper to weighted, make setting ambient enable LE, fix null deref
* Address Peachy's comments
---------
Co-authored-by: MysterD <myster@d>
* set_gfx_command part 2
* part 3
* get gfx/vtx from name; copy gfx/vtx
* gfx/vtx dynamic allocation lua
* gfx/vtx_new: don't take level/model/vanilla names
* Clean up gbi constants
* update example
* Isaac review; add gfx_get_next_command and vtx_get_next_vertex
* make all commands length 1; missing NULL checks
* CONCEPT: Basic vertex lighting engine
Set the geometry mode on your model to G_LIGHTING_ENGINE_EXT, spawn a `bhvAmbientLight`, spawn some `bhvPointLight`s, and then you got yourself a mighty interesting scene.
* Fixes
* How did I miss this
* Make light set home pos
The birth of a custom user interface system.
Has the ability to draw things to the screen at native resolution
regardless of window size.
Components can be nested within one another to an arbitrary depth.
Text rendering is completely rewritten.
Text and images can be clipped by their parent container.