light: use the minlight codepath for self-illumination of emissive surfs. wip
This commit is contained in:
parent
5616fd97f4
commit
feeaae6a09
|
|
@ -64,6 +64,8 @@ struct surfacelight_t
|
|||
float intensity = 0; // Surface light strength for each point
|
||||
float totalintensity = 0; // Total surface light strength
|
||||
qvec3d color; // Surface color
|
||||
|
||||
bool operator==(const per_style_t &other) const;
|
||||
};
|
||||
|
||||
// Light data per style
|
||||
|
|
|
|||
|
|
@ -1650,7 +1650,7 @@ static float Mottle(const qvec3d &position)
|
|||
* ============
|
||||
*/
|
||||
static void LightFace_Min(const mbsp_t *bsp, const mface_t *face, const qvec3d &color, vec_t light,
|
||||
lightsurf_t *lightsurf, lightmapdict_t *lightmaps, int32_t style)
|
||||
lightsurf_t *lightsurf, lightmapdict_t *lightmaps, int32_t style, bool nomottle)
|
||||
{
|
||||
const settings::worldspawn_keys &cfg = *lightsurf->cfg;
|
||||
|
||||
|
|
@ -1675,7 +1675,7 @@ static void LightFace_Min(const mbsp_t *bsp, const mface_t *face, const qvec3d &
|
|||
sample.color += color * (value / 255.0);
|
||||
hit = true;
|
||||
} else {
|
||||
if (lightsurf->minlightMottle) {
|
||||
if (lightsurf->minlightMottle && !nomottle) {
|
||||
value += Mottle(surf_sample.point);
|
||||
}
|
||||
hit = Light_ClampMin(sample, value, color) || hit;
|
||||
|
|
@ -1999,6 +1999,17 @@ LightFace_SurfaceLight(const mbsp_t *bsp, lightsurf_t *lightsurf, lightmapdict_t
|
|||
|
||||
auto &vpl = *surf_ptr->vpl.get();
|
||||
|
||||
// don't emit onto ourself
|
||||
if (surf_ptr.get() == lightsurf)
|
||||
continue;
|
||||
|
||||
// if we are emissive, don't emit from other faces with matching emissive settings
|
||||
if (auto &our_vpl_ptr = lightsurf->vpl) {
|
||||
if (our_vpl_ptr->styles == vpl.styles) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &vpl_setting : surf_ptr->vpl->styles) {
|
||||
|
||||
if (vpl_setting.bounce != bounce)
|
||||
|
|
@ -3432,7 +3443,7 @@ void PostProcessLightFace(const mbsp_t *bsp, lightsurf_t &lightsurf, const setti
|
|||
}
|
||||
|
||||
if (minlight) {
|
||||
LightFace_Min(bsp, face, minlight_color, minlight, &lightsurf, lightmaps, 0);
|
||||
LightFace_Min(bsp, face, minlight_color, minlight, &lightsurf, lightmaps, 0, false);
|
||||
}
|
||||
|
||||
if (lightsurf.vpl) {
|
||||
|
|
@ -3445,7 +3456,7 @@ void PostProcessLightFace(const mbsp_t *bsp, lightsurf_t &lightsurf, const setti
|
|||
minlight = std::get<0>(value.value()) * surface_minlight_scale;
|
||||
minlight_color = std::get<2>(value.value());
|
||||
LightFace_Min(
|
||||
bsp, face, minlight_color, minlight, &lightsurf, lightmaps, std::get<1>(value.value()));
|
||||
bsp, face, minlight_color, minlight, &lightsurf, lightmaps, std::get<1>(value.value()), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ See file, 'COPYING', for details.
|
|||
#include <vector>
|
||||
#include <map>
|
||||
#include <mutex>
|
||||
#include <tuple>
|
||||
|
||||
#include <common/qvec.hh>
|
||||
|
||||
|
|
@ -42,6 +43,17 @@ using namespace polylib;
|
|||
|
||||
static std::atomic_size_t total_surflight_points;
|
||||
|
||||
static auto as_tuple(const surfacelight_t::per_style_t &s)
|
||||
{
|
||||
return std::make_tuple(
|
||||
s.bounce, s.omnidirectional, s.rescale, s.style, /* s.intensity, s.totalintensity,*/ s.color);
|
||||
}
|
||||
|
||||
bool surfacelight_t::per_style_t::operator==(const per_style_t &other) const
|
||||
{
|
||||
return as_tuple(*this) == as_tuple(other);
|
||||
}
|
||||
|
||||
void ResetSurflight()
|
||||
{
|
||||
total_surflight_points = {};
|
||||
|
|
|
|||
|
|
@ -0,0 +1,132 @@
|
|||
// Game: Quake 2
|
||||
// Format: Quake2 (Valve)
|
||||
// entity 0
|
||||
{
|
||||
"mapversion" "220"
|
||||
"classname" "worldspawn"
|
||||
"_tb_textures" "textures/e1u1"
|
||||
"_bounce" "0"
|
||||
// brush 0
|
||||
{
|
||||
( -160 -256 16 ) ( -160 -255 16 ) ( -160 -256 17 ) e1u1/skip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 64 32 ) ( 240 64 32 ) ( 240 64 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -256 16 ) ( 81 -256 16 ) ( 80 -255 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -31 32 ) ( 497 -32 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 0 ] 0 1 1
|
||||
( 496 176 32 ) ( 497 176 32 ) ( 496 176 33 ) e1u1/skip [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -32 33 ) ( 496 -31 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 1
|
||||
{
|
||||
( 288 -256 16 ) ( 288 -255 16 ) ( 288 -256 17 ) e1u1/skip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -32 16 ) ( 80 -32 17 ) ( 81 -32 16 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -256 16 ) ( 81 -256 16 ) ( 80 -255 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -31 32 ) ( 497 -32 32 ) e1u1/baselt_5 [ 1.0000000000000002 0 0 0 ] [ 0 1.0000000000000002 0 32 ] 0 1 1 0 1 100
|
||||
( 288 64 32 ) ( 240 64 160 ) ( 240 64 32 ) e1u1/skip [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 320 -32 32 ) ( 320 -32 33 ) ( 320 -31 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 2
|
||||
{
|
||||
( 256 0 32 ) ( 256 -48 160 ) ( 256 -48 32 ) e1u1/skip [ -6.123233995736766e-17 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 512 0 16 ) ( 511 0 16 ) ( 512 0 17 ) e1u1/skip [ 1 -6.123233995736766e-17 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 512 -208 16 ) ( 512 -207 16 ) ( 511 -208 16 ) e1u1/skip [ -6.123233995736766e-17 -1 0 0 ] [ 1 -6.123233995736766e-17 0 0 ] 90 1 1
|
||||
( 288 208 32 ) ( 287 208 32 ) ( 288 209 32 ) e1u1/baselt_5 [ 1.0000000000000002 0 0 0 ] [ 0 1.0000000000000002 0 32 ] 0 1 1 0 1 100
|
||||
( 288 32 32 ) ( 288 32 33 ) ( 287 32 32 ) e1u1/skip [ -1 6.123233995736766e-17 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -208 16 ) ( 288 -208 17 ) ( 288 -207 16 ) e1u1/skip [ 6.123233995736766e-17 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 3
|
||||
{
|
||||
( 320 -32 32 ) ( 320 -31 32 ) ( 320 -32 33 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 32 32 ) ( 240 32 32 ) ( 240 32 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -256 16 ) ( 81 -256 16 ) ( 80 -255 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -31 32 ) ( 497 -32 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 0 ] 0 1 1
|
||||
( 288 64 32 ) ( 240 64 160 ) ( 240 64 32 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -32 33 ) ( 496 -31 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 4
|
||||
{
|
||||
( 320 -32 32 ) ( 320 -31 32 ) ( 320 -32 33 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -32 32 ) ( 240 -32 32 ) ( 240 -32 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -256 16 ) ( 81 -256 16 ) ( 80 -255 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -31 32 ) ( 497 -32 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 0 ] 0 1 1
|
||||
( 288 32 32 ) ( 240 32 160 ) ( 240 32 32 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -32 33 ) ( 496 -31 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 5
|
||||
{
|
||||
( -160 -256 16 ) ( -160 -255 16 ) ( -160 -256 17 ) e1u1/skip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 32 32 ) ( 240 32 32 ) ( 240 32 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -256 16 ) ( 81 -256 16 ) ( 80 -255 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -31 32 ) ( 497 -32 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 0 ] 0 1 1
|
||||
( 288 64 32 ) ( 240 64 160 ) ( 240 64 32 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -32 32 ) ( 288 -32 33 ) ( 288 -31 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 6
|
||||
{
|
||||
( -160 -256 16 ) ( -160 -255 16 ) ( -160 -256 17 ) e1u1/skip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 0 32 ) ( 240 0 32 ) ( 240 0 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -256 16 ) ( 81 -256 16 ) ( 80 -255 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -32 32 ) ( 496 -31 32 ) ( 497 -32 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 0 ] 0 1 1
|
||||
( 288 32 32 ) ( 240 32 160 ) ( 240 32 32 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 256 -32 32 ) ( 256 -32 33 ) ( 256 -31 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 7
|
||||
{
|
||||
( -160 -320 16 ) ( -160 -319 16 ) ( -160 -320 17 ) e1u1/skip [ 0 -1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -32 32 ) ( 240 -32 32 ) ( 240 -32 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -320 16 ) ( 81 -320 16 ) ( 80 -319 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
|
||||
( 496 -96 32 ) ( 496 -95 32 ) ( 497 -96 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 0 ] 0 1 1
|
||||
( 288 0 32 ) ( 240 0 160 ) ( 240 0 32 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -96 32 ) ( 288 -96 33 ) ( 288 -95 32 ) e1u1/skip [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 8
|
||||
{
|
||||
( -160 -464 16 ) ( -160 -463 16 ) ( -160 -464 17 ) e1u1/skip [ 0 -1 0 16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -144 32 ) ( 240 -144 32 ) ( 240 -144 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -464 16 ) ( 81 -464 16 ) ( 80 -463 16 ) e1u1/skip [ -1 0 0 0 ] [ 0 -1 0 16 ] 0 1 1
|
||||
( 496 -240 32 ) ( 496 -239 32 ) ( 497 -240 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 16 ] 0 1 1
|
||||
( 496 -32 32 ) ( 497 -32 32 ) ( 496 -32 33 ) e1u1/skip [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 496 -240 32 ) ( 496 -240 33 ) ( 496 -239 32 ) e1u1/skip [ 0 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 9
|
||||
{
|
||||
( -160 -176 32 ) ( -160 -224 160 ) ( -160 -224 32 ) e1u1/skip [ -6.123233995736766e-17 -1 0 16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 160 -272 16 ) ( 159 -272 16 ) ( 160 -272 17 ) e1u1/skip [ 1 -6.123233995736766e-17 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 160 -384 16 ) ( 160 -383 16 ) ( 159 -384 16 ) e1u1/skip [ -6.123233995736766e-17 -1 0 16 ] [ 1 -6.123233995736766e-17 0 0 ] 90 1 1
|
||||
( -64 32 32 ) ( -65 32 32 ) ( -64 33 32 ) e1u1/baselt_5 [ 6.123233995736767e-17 1.0000000000000002 0 -16 ] [ -1.0000000000000002 6.123233995736767e-17 0 -64 ] 270 1 1 0 1 150
|
||||
( -64 -144 32 ) ( -64 -144 33 ) ( -65 -144 32 ) e1u1/skip [ -1 6.123233995736766e-17 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 48 -384 16 ) ( 48 -384 17 ) ( 48 -383 16 ) e1u1/skip [ 6.123233995736766e-17 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 10
|
||||
{
|
||||
( 48 -464 16 ) ( 48 -463 16 ) ( 48 -464 17 ) e1u1/skip [ 0 -1 0 16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 288 -272 32 ) ( 240 -272 32 ) ( 240 -272 160 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 80 -464 16 ) ( 81 -464 16 ) ( 80 -463 16 ) e1u1/skip [ 0 1.0000000000000002 0 -16 ] [ 1.0000000000000002 0 0 0 ] 0 1 1
|
||||
( 496 -240 32 ) ( 496 -239 32 ) ( 497 -240 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 16 ] 0 1 1
|
||||
( 288 -144 32 ) ( 240 -144 160 ) ( 240 -144 32 ) e1u1/skip [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 480 -240 32 ) ( 480 -240 33 ) ( 480 -239 32 ) e1u1/skip [ 0 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 11
|
||||
{
|
||||
( 480 -176 32 ) ( 480 -224 160 ) ( 480 -224 32 ) e1u1/color1_6 [ 0 0 1.0000000000000002 16 ] [ 0 1.0000000000000002 0 16 ] 0 1 1
|
||||
( 384 -256 32 ) ( 383 -256 32 ) ( 384 -256 33 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 0 1.0000000000000002 -16 ] 0 1 1
|
||||
( 608 -384 16 ) ( 608 -383 16 ) ( 607 -384 16 ) e1u1/skip [ 0 1.0000000000000002 0 -16 ] [ 1.0000000000000002 0 0 0 ] 0 1 1
|
||||
( 384 32 32 ) ( 383 32 32 ) ( 384 33 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 1.0000000000000002 0 16 ] 0 1 1
|
||||
( 384 -144 32 ) ( 384 -144 33 ) ( 383 -144 32 ) e1u1/color1_6 [ 1.0000000000000002 0 0 -48 ] [ 0 0 -1.0000000000000002 -32 ] 0 1 1
|
||||
( 496 -384 16 ) ( 496 -384 17 ) ( 496 -383 16 ) e1u1/skip [ 0 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
// brush 12
|
||||
{
|
||||
( 480 -176 32 ) ( 480 -224 160 ) ( 480 -224 32 ) e1u1/skip [ -6.123233995736766e-17 -1 0 16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 608 -272 16 ) ( 607 -272 16 ) ( 608 -272 17 ) e1u1/skip [ 1 -6.123233995736766e-17 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 608 -384 16 ) ( 608 -383 16 ) ( 607 -384 16 ) e1u1/skip [ -6.123233995736766e-17 -1 0 16 ] [ 1 -6.123233995736766e-17 0 0 ] 90 1 1
|
||||
( 384 32 32 ) ( 383 32 32 ) ( 384 33 32 ) e1u1/baselt_5 [ 6.123233995736767e-17 1.0000000000000002 0 -16 ] [ -1.0000000000000002 6.123233995736767e-17 0 0 ] 270 1 1 0 1 150
|
||||
( 384 -256 32 ) ( 384 -256 33 ) ( 383 -256 32 ) e1u1/skip [ -1 6.123233995736766e-17 0 0 ] [ 0 0 -1 0 ] 0 1 1
|
||||
( 496 -384 16 ) ( 496 -384 17 ) ( 496 -383 16 ) e1u1/skip [ 6.123233995736766e-17 1 0 -16 ] [ 0 0 -1 0 ] 0 1 1
|
||||
}
|
||||
}
|
||||
// entity 1
|
||||
{
|
||||
"classname" "info_player_start"
|
||||
"origin" "288 144 56"
|
||||
"angle" "270"
|
||||
}
|
||||
Loading…
Reference in New Issue