test: lightmap artifacts on a low luxel scale

This commit is contained in:
Eric Wasylishen 2023-04-29 23:59:53 -06:00
parent 5f7e08d0ef
commit cfd3336644
2 changed files with 114 additions and 2 deletions

View File

@ -0,0 +1,98 @@
// Game: Quake 2
// Format: Quake2 (Valve)
// entity 0
{
"classname" "worldspawn"
"_tb_textures" "textures/e1u1"
"_minlightMottle" "0"
"_minlight" "0"
// brush 0
{
( 2960 1064 -656 ) ( 2960 1048 -656 ) ( 2960 1048 -672 ) e1u1/color1_2 [ 0 1 0 -8 ] [ 0 0 -1 0 ] 0 1 1
( 2960 1048 -656 ) ( 2968 1048 -656 ) ( 2968 1048 -672 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 1048 -672 ) ( 2968 1064 -672 ) ( 2960 1064 -672 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 8 ] 0 1 1
( 2960 1064 -656 ) ( 2968 1064 -656 ) ( 2968 1048 -656 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 8 ] 0 1 1
( 2968 1064 -672 ) ( 2968 1064 -656 ) ( 2960 1064 -656 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 1048 -656 ) ( 2968 1064 -656 ) ( 2968 1064 -672 ) e1u1/color1_2 [ 0 1 0 -8 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 1
{
( 2960 1064 -696 ) ( 2960 1048 -696 ) ( 2960 1048 -712 ) e1u1/color1_2 [ 0 1 0 -8 ] [ 0 0 -1 0 ] 0 1 1
( 2960 1048 -696 ) ( 2968 1048 -696 ) ( 2968 1048 -712 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 1048 -712 ) ( 2968 1064 -712 ) ( 2960 1064 -712 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 8 ] 0 1 1
( 2960 1064 -696 ) ( 2968 1064 -696 ) ( 2968 1048 -696 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 8 ] 0 1 1
( 2968 1064 -712 ) ( 2968 1064 -696 ) ( 2960 1064 -696 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 1048 -696 ) ( 2968 1064 -696 ) ( 2968 1064 -712 ) e1u1/color1_2 [ 0 1 0 -8 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 2
{
( 2964 1128 -544 ) ( 2964 980 -544 ) ( 2964 1128 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 980 -760 ) ( 2964 980 -760 ) ( 2968 980 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 1128 -760 ) ( 2964 1128 -760 ) ( 2968 980 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2968 980 -544 ) ( 2964 980 -544 ) ( 2968 1128 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2968 1128 -544 ) ( 2964 1128 -544 ) ( 2968 1128 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2968 980 -544 ) ( 2968 1128 -544 ) ( 2968 980 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 3
{
( 2744 980 -760 ) ( 2744 1128 -760 ) ( 2744 980 -544 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2744 980 -544 ) ( 2748 980 -544 ) ( 2744 980 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2744 980 -760 ) ( 2748 980 -760 ) ( 2744 1128 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2744 1128 -544 ) ( 2748 1128 -544 ) ( 2744 980 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2744 1128 -760 ) ( 2748 1128 -760 ) ( 2744 1128 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2748 980 -760 ) ( 2748 980 -544 ) ( 2748 1128 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 4
{
( 2748 1128 -544 ) ( 2748 1124 -544 ) ( 2748 1128 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 1124 -544 ) ( 2964 1124 -760 ) ( 2748 1124 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2748 1128 -760 ) ( 2748 1124 -760 ) ( 2964 1128 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2964 1128 -544 ) ( 2964 1124 -544 ) ( 2748 1128 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2964 1128 -544 ) ( 2748 1128 -544 ) ( 2964 1128 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 1128 -760 ) ( 2964 1124 -760 ) ( 2964 1128 -544 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 5
{
( 2748 980 -760 ) ( 2748 984 -760 ) ( 2748 980 -544 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 980 -760 ) ( 2748 980 -760 ) ( 2964 980 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 980 -760 ) ( 2964 984 -760 ) ( 2748 980 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2748 980 -544 ) ( 2748 984 -544 ) ( 2964 980 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2748 984 -760 ) ( 2964 984 -760 ) ( 2748 984 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 980 -544 ) ( 2964 984 -544 ) ( 2964 980 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 6
{
( 2748 984 -544 ) ( 2748 984 -548 ) ( 2748 1124 -544 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 984 -544 ) ( 2964 984 -548 ) ( 2748 984 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 1124 -548 ) ( 2748 1124 -548 ) ( 2964 984 -548 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2964 1124 -544 ) ( 2964 984 -544 ) ( 2748 1124 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2748 1124 -544 ) ( 2748 1124 -548 ) ( 2964 1124 -544 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 1124 -544 ) ( 2964 1124 -548 ) ( 2964 984 -544 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
// brush 7
{
( 2748 1124 -760 ) ( 2748 1124 -756 ) ( 2748 984 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2748 984 -760 ) ( 2748 984 -756 ) ( 2964 984 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2748 1124 -760 ) ( 2748 984 -760 ) ( 2964 1124 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2748 984 -756 ) ( 2748 1124 -756 ) ( 2964 984 -756 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 -1 0 0 ] 0 1 1
( 2964 1124 -760 ) ( 2964 1124 -756 ) ( 2748 1124 -760 ) e1u1/color1_2 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1
( 2964 984 -760 ) ( 2964 984 -756 ) ( 2964 1124 -760 ) e1u1/color1_2 [ 0 1 0 0 ] [ 0 0 -1 0 ] 0 1 1
}
}
// entity 1
{
"classname" "info_player_start"
"origin" "2888 1058 -712"
}
// entity 2
{
"classname" "light"
"origin" "2936 1044 -702"
"light" "100"
}
// entity 3
{
"classname" "light"
"origin" "2936 1044 -666"
"light" "100"
}

View File

@ -260,10 +260,13 @@ static void CheckFaceLuxelAtPoint(const mbsp_t *bsp, const dmodelh2_t *model, co
}
const auto coord = extents.worldToLMCoord(point);
const auto int_coord = qvec2i(round(coord[0]), round(coord[1]));
const qvec3b sample = LM_Sample(bsp, lit, extents, offset, qvec2i(coord));
const qvec3b sample = LM_Sample(bsp, lit, extents, offset, int_coord);
INFO("world point: ", point);
INFO("lm coord: ", coord[0], ", ", coord[1]);
INFO("lm int_coord: ", int_coord[0], ", ", int_coord[1]);
INFO("face num: ", Face_GetNum(bsp, face));
CHECK(sample == expected_color);
}
@ -517,7 +520,7 @@ TEST_CASE("light channel mask / dirt interaction")
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {26, 26, 26}, {1432, 1480, 944});
INFO("worldspawn not receiving dirt from func_wall on different channel");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {62, 62, 62}, {1212, 1272, 1014});
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {60, 60, 60}, {1212, 1272, 1014});
INFO("func_wall on different channel not receiving dirt from worldspawn");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[1], {64, 64, 64}, {1216, 1266, 1014});
@ -667,4 +670,15 @@ TEST_CASE("q2_light_low_luxel_res")
INFO("sloped cube");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {232, 185, 0}, {2164, 712, -968}, {0, 1, 0}, nullptr, &bspx);
}
}
TEST_CASE("q2_light_low_luxel_res2" * doctest::may_fail())
{
auto [bsp, bspx] = QbspVisLight_Q2(
"q2_light_low_luxel_res2.map", {"-world_units_per_luxel", "32", "-debugface", "2964", "1020", "-696"});
INFO("should be a smooth transition across these points");
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {49, 49, 49}, {2964, 1046, -694}, {-1, 0, 0}, nullptr, &bspx);
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {25, 25, 25}, {2964, 1046, -706}, {-1, 0, 0}, nullptr, &bspx);
CheckFaceLuxelAtPoint(&bsp, &bsp.dmodels[0], {1, 1, 1}, {2964, 1046, -716}, {-1, 0, 0}, nullptr, &bspx);
}