From 3ccfb05b5c7d938ce5c4b65073a973a850efa367 Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 18 Feb 2022 22:45:22 +0100 Subject: [PATCH] Removed the old liquid mesher, and reused the normal blocky mesher as liquid mesher. It should work as is. --- SCsub | 1 - config.py | 1 - doc_classes/TerrainMesherLiquidBlocky.xml | 13 - .../blocky/terrain_mesher_liquid_blocky.cpp | 484 ------------------ meshers/blocky/terrain_mesher_liquid_blocky.h | 52 -- register_types.cpp | 2 - world/blocky/terrain_world_blocky.cpp | 8 +- 7 files changed, 6 insertions(+), 555 deletions(-) delete mode 100644 doc_classes/TerrainMesherLiquidBlocky.xml delete mode 100644 meshers/blocky/terrain_mesher_liquid_blocky.cpp delete mode 100644 meshers/blocky/terrain_mesher_liquid_blocky.h diff --git a/SCsub b/SCsub index 4cbd997..4e61af6 100644 --- a/SCsub +++ b/SCsub @@ -39,7 +39,6 @@ sources = [ "meshers/terrain_mesher.cpp", "meshers/blocky/terrain_mesher_blocky.cpp", - "meshers/blocky/terrain_mesher_liquid_blocky.cpp", "meshers/default/terrain_mesher_default.cpp", "world/terrain_world.cpp", diff --git a/config.py b/config.py index 777ae7e..eac7c09 100644 --- a/config.py +++ b/config.py @@ -48,7 +48,6 @@ def get_doc_classes(): "TerrainMesherBlocky", "TerrainWorldBlocky", "TerrainChunkBlocky", - "TerrainMesherLiquidBlocky", "TerrainWorldMarchingCubes", "TerrainChunkMarchingCubes", diff --git a/doc_classes/TerrainMesherLiquidBlocky.xml b/doc_classes/TerrainMesherLiquidBlocky.xml deleted file mode 100644 index 5500a07..0000000 --- a/doc_classes/TerrainMesherLiquidBlocky.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/meshers/blocky/terrain_mesher_liquid_blocky.cpp b/meshers/blocky/terrain_mesher_liquid_blocky.cpp deleted file mode 100644 index a381308..0000000 --- a/meshers/blocky/terrain_mesher_liquid_blocky.cpp +++ /dev/null @@ -1,484 +0,0 @@ -/* -Copyright (c) 2019-2022 Péter Magyar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include "terrain_mesher_liquid_blocky.h" - -#include "../../world/default/terrain_chunk_default.h" - -void TerrainMesherLiquidBlocky::_add_chunk(Ref p_chunk) { - Ref chunk = p_chunk; - - ERR_FAIL_COND(!chunk.is_valid()); - - //if ((get_build_flags() & TerrainChunkDefault::BUILD_FLAG_GENERATE_AO) != 0) - // chunk->generate_ao(); - - int x_size = chunk->get_size_x(); - int z_size = chunk->get_size_z(); - - float voxel_scale = get_voxel_scale(); - - uint8_t *channel_type = chunk->channel_get(TerrainChunkDefault::DEFAULT_CHANNEL_TYPE); - - if (!channel_type) - return; - - uint8_t *channel_color_r = NULL; - uint8_t *channel_color_g = NULL; - uint8_t *channel_color_b = NULL; - uint8_t *channel_ao = NULL; - uint8_t *channel_rao = NULL; - - Color base_light(_base_light_value, _base_light_value, _base_light_value); - Color light; - bool use_lighting = (get_build_flags() & TerrainChunkDefault::BUILD_FLAG_USE_LIGHTING) != 0; - bool use_ao = (get_build_flags() & TerrainChunkDefault::BUILD_FLAG_USE_AO) != 0; - bool use_rao = (get_build_flags() & TerrainChunkDefault::BUILD_FLAG_USE_RAO) != 0; - - if (use_lighting) { - channel_color_r = chunk->channel_get(TerrainChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_R); - channel_color_g = chunk->channel_get(TerrainChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_G); - channel_color_b = chunk->channel_get(TerrainChunkDefault::DEFAULT_CHANNEL_LIGHT_COLOR_B); - - if (use_ao) - channel_ao = chunk->channel_get(TerrainChunkDefault::DEFAULT_CHANNEL_AO); - - if (use_rao) - channel_rao = chunk->channel_get(TerrainChunkDefault::DEFAULT_CHANNEL_RANDOM_AO); - } - - Vector liquids; - for (int i = 0; i < _library->terra_surface_get_num(); ++i) { - Ref surface = _library->terra_surface_get(i); - - if (!surface.is_valid()) - continue; - - if (surface->get_liquid()) - liquids.push_back(static_cast(i + 1)); - } - - for (int z = chunk->get_margin_start(); z < z_size + chunk->get_margin_start(); ++z) { - for (int x = chunk->get_margin_start(); x < x_size + chunk->get_margin_start(); ++x) { - - int index = chunk->get_data_index(x, z); - int indexxp = chunk->get_data_index(x + 1, z); - int indexxn = chunk->get_data_index(x - 1, z); - int indexzp = chunk->get_data_index(x, z + 1); - int indexzn = chunk->get_data_index(x, z - 1); - - uint8_t type = channel_type[index]; - - if (type == 0) - continue; - - if (liquids.find(type) == -1) - continue; - - Ref surface = _library->terra_surface_get(type - 1); - - if (!surface.is_valid()) - continue; - - uint8_t neighbours[] = { - channel_type[indexxp], - channel_type[indexxn], - channel_type[indexzp], - channel_type[indexzn], - }; - - //x + 1 - if (neighbours[0] == 0) { - if (use_lighting) { - light = Color(channel_color_r[indexxp] / 255.0, - channel_color_g[indexxp] / 255.0, - channel_color_b[indexxp] / 255.0); - - float ao = 0; - - if (use_ao) - ao = channel_ao[indexxp] / 255.0; - - if (use_rao) { - float rao = channel_rao[indexxp] / 255.0; - ao += rao; - } - - light += base_light; - - if (ao > 0) - light -= Color(ao, ao, ao) * _ao_strength; - - light.r = CLAMP(light.r, 0, 1.0); - light.g = CLAMP(light.g, 0, 1.0); - light.b = CLAMP(light.b, 0, 1.0); - } - - int vc = get_vertex_count(); - add_indices(vc + 2); - add_indices(vc + 1); - add_indices(vc + 0); - add_indices(vc + 3); - add_indices(vc + 2); - add_indices(vc + 0); - - Vector2 uvs[] = { - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 1)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 1)) - }; - - Vector3 verts[] = { - Vector3(1, 0, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(1, 1, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(1, 1, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(1, 0, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale - }; - - for (int i = 0; i < 4; ++i) { - add_normal(Vector3(1, 0, 0)); - - if (use_lighting) - add_color(light); - - add_uv(uvs[i]); - add_vertex(verts[i]); - } - } - - //x - 1 - if (neighbours[1] == 0) { - if (use_lighting) { - light = Color(channel_color_r[indexxn] / 255.0, - channel_color_g[indexxn] / 255.0, - channel_color_b[indexxn] / 255.0); - - float ao = 0; - - if (use_ao) - ao = channel_ao[indexxn] / 255.0; - - if (use_rao) { - float rao = channel_rao[indexxn] / 255.0; - ao += rao; - } - - light += base_light; - - if (ao > 0) - light -= Color(ao, ao, ao) * _ao_strength; - - light.r = CLAMP(light.r, 0, 1.0); - light.g = CLAMP(light.g, 0, 1.0); - light.b = CLAMP(light.b, 0, 1.0); - } - - int vc = get_vertex_count(); - add_indices(vc + 0); - add_indices(vc + 1); - add_indices(vc + 2); - - add_indices(vc + 0); - add_indices(vc + 2); - add_indices(vc + 3); - - Vector2 uvs[] = { - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 1)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 1)) - }; - - Vector3 verts[] = { - Vector3(0, 0, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 1, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 1, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 0, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale - }; - - for (int i = 0; i < 4; ++i) { - add_normal(Vector3(-1, 0, 0)); - - if (use_lighting) - add_color(light); - - add_uv(uvs[i]); - add_vertex(verts[i]); - } - } -/* - //y + 1 - if (neighbours[2] == 0) { - if (use_lighting) { - light = Color(channel_color_r[indexyp] / 255.0, - channel_color_g[indexyp] / 255.0, - channel_color_b[indexyp] / 255.0); - - float ao = 0; - - if (use_ao) - ao = channel_ao[indexyp] / 255.0; - - if (use_rao) { - float rao = channel_rao[indexyp] / 255.0; - ao += rao; - } - - light += base_light; - - if (ao > 0) - light -= Color(ao, ao, ao) * _ao_strength; - } - - light.r = CLAMP(light.r, 0, 1.0); - light.g = CLAMP(light.g, 0, 1.0); - light.b = CLAMP(light.b, 0, 1.0); - - int vc = get_vertex_count(); - add_indices(vc + 2); - add_indices(vc + 1); - add_indices(vc + 0); - add_indices(vc + 3); - add_indices(vc + 2); - add_indices(vc + 0); - - Vector2 uvs[] = { - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_TOP, Vector2(0, 1)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_TOP, Vector2(0, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_TOP, Vector2(1, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_TOP, Vector2(1, 1)) - }; - - Vector3 verts[] = { - Vector3(1, 1, 0) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale, - Vector3(0, 1, 0) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale, - Vector3(0, 1, 1) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale, - Vector3(1, 1, 1) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale - }; - - for (int i = 0; i < 4; ++i) { - add_normal(Vector3(0, 1, 0)); - - if (use_lighting) - add_color(light); - - add_uv(uvs[i]); - add_vertex(verts[i]); - } - } -*/ -/* - //y - 1 - if (neighbours[3] == 0) { - if (use_lighting) { - light = Color(channel_color_r[indexyn] / 255.0, - channel_color_g[indexyn] / 255.0, - channel_color_b[indexyn] / 255.0); - - float ao = 0; - - if (use_ao) - ao = channel_ao[indexyn] / 255.0; - - if (use_rao) { - float rao = channel_rao[indexyn] / 255.0; - ao += rao; - } - - light += base_light; - - if (ao > 0) - light -= Color(ao, ao, ao) * _ao_strength; - } - - light.r = CLAMP(light.r, 0, 1.0); - light.g = CLAMP(light.g, 0, 1.0); - light.b = CLAMP(light.b, 0, 1.0); - - int vc = get_vertex_count(); - add_indices(vc + 0); - add_indices(vc + 1); - add_indices(vc + 2); - - add_indices(vc + 0); - add_indices(vc + 2); - add_indices(vc + 3); - - Vector2 uvs[] = { - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_BOTTOM, Vector2(0, 1)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_BOTTOM, Vector2(0, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_BOTTOM, Vector2(1, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_BOTTOM, Vector2(1, 1)) - }; - - Vector3 verts[] = { - Vector3(1, 0, 0) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale, - Vector3(0, 0, 0) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale, - Vector3(0, 0, 1) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale, - Vector3(1, 0, 1) * voxel_scale + Vector3(x - 1, y - 1, z - 1) * voxel_scale - }; - - for (int i = 0; i < 4; ++i) { - add_normal(Vector3(0, -1, 0)); - - if (use_lighting) - add_color(light); - - add_uv(uvs[i]); - add_vertex(verts[i]); - } - } -*/ - //z + 1 - if (neighbours[2] == 0) { - if (use_lighting) { - light = Color(channel_color_r[indexzp] / 255.0, - channel_color_g[indexzp] / 255.0, - channel_color_b[indexzp] / 255.0); - - float ao = 0; - - if (use_ao) - ao = channel_ao[indexzp] / 255.0; - - if (use_rao) { - float rao = channel_rao[indexzp] / 255.0; - ao += rao; - } - - light += base_light; - - if (ao > 0) - light -= Color(ao, ao, ao) * _ao_strength; - - light.r = CLAMP(light.r, 0, 1.0); - light.g = CLAMP(light.g, 0, 1.0); - light.b = CLAMP(light.b, 0, 1.0); - } - - int vc = get_vertex_count(); - add_indices(vc + 2); - add_indices(vc + 1); - add_indices(vc + 0); - add_indices(vc + 3); - add_indices(vc + 2); - add_indices(vc + 0); - - Vector2 uvs[] = { - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 1)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 1)) - }; - - Vector3 verts[] = { - Vector3(1, 0, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(1, 1, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 1, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 0, 1) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale - }; - - for (int i = 0; i < 4; ++i) { - add_normal(Vector3(0, 0, 1)); - - if (use_lighting) - add_color(light); - - add_uv(uvs[i]); - add_vertex(verts[i]); - } - } - - //z - 1 - if (neighbours[3] == 0) { - if (use_lighting) { - light = Color(channel_color_r[indexzn] / 255.0, - channel_color_g[indexzn] / 255.0, - channel_color_b[indexzn] / 255.0); - - float ao = 0; - - if (use_ao) - ao = channel_ao[indexzn] / 255.0; - - if (use_rao) { - float rao = channel_rao[indexzn] / 255.0; - ao += rao; - } - - light += base_light; - - if (ao > 0) - light -= Color(ao, ao, ao) * _ao_strength; - - light.r = CLAMP(light.r, 0, 1.0); - light.g = CLAMP(light.g, 0, 1.0); - light.b = CLAMP(light.b, 0, 1.0); - } - - int vc = get_vertex_count(); - add_indices(vc + 0); - add_indices(vc + 1); - add_indices(vc + 2); - - add_indices(vc + 0); - add_indices(vc + 2); - add_indices(vc + 3); - - Vector2 uvs[] = { - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 1)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(0, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 0)), - surface->transform_uv(TerrainSurface::TERRAIN_SIDE_SIDE, Vector2(1, 1)) - }; - - Vector3 verts[] = { - Vector3(1, 0, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(1, 1, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 1, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale, - Vector3(0, 0, 0) * voxel_scale + Vector3(x - 1, - 1, z - 1) * voxel_scale - }; - - for (int i = 0; i < 4; ++i) { - add_normal(Vector3(0, 0, -1)); - - if (use_lighting) - add_color(light); - - add_uv(uvs[i]); - add_vertex(verts[i]); - } - } - } - } -} - -TerrainMesherLiquidBlocky::TerrainMesherLiquidBlocky() { -} - -TerrainMesherLiquidBlocky::~TerrainMesherLiquidBlocky() { -} - -void TerrainMesherLiquidBlocky::_bind_methods() { - ClassDB::bind_method(D_METHOD("_add_chunk", "buffer"), &TerrainMesherLiquidBlocky::_add_chunk); -} diff --git a/meshers/blocky/terrain_mesher_liquid_blocky.h b/meshers/blocky/terrain_mesher_liquid_blocky.h deleted file mode 100644 index 8f8b4a6..0000000 --- a/meshers/blocky/terrain_mesher_liquid_blocky.h +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright (c) 2019-2022 Péter Magyar - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#ifndef TERRAIN_MESHER_LIQUID_BLOCKY_H -#define TERRAIN_MESHER_LIQUID_BLOCKY_H - -#include "core/version.h" - -#if VERSION_MAJOR > 3 -#include "core/math/color.h" -#else -#include "core/color.h" -#endif - -#include "core/math/vector2.h" -#include "core/math/vector3.h" - -#include "../default/terrain_mesher_default.h" - -class TerrainMesherLiquidBlocky : public TerrainMesherDefault { - GDCLASS(TerrainMesherLiquidBlocky, TerrainMesherDefault); - -public: - void _add_chunk(Ref p_chunk); - - TerrainMesherLiquidBlocky(); - ~TerrainMesherLiquidBlocky(); - -protected: - static void _bind_methods(); -}; - -#endif diff --git a/register_types.cpp b/register_types.cpp index b9b0a9a..3343205 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -56,7 +56,6 @@ SOFTWARE. #include "world/terrain_world_editor.h" #include "meshers/blocky/terrain_mesher_blocky.h" -#include "meshers/blocky/terrain_mesher_liquid_blocky.h" #include "world/blocky/terrain_chunk_blocky.h" #include "world/blocky/terrain_world_blocky.h" @@ -103,7 +102,6 @@ void register_terraman_types() { ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); - ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); diff --git a/world/blocky/terrain_world_blocky.cpp b/world/blocky/terrain_world_blocky.cpp index 5bd1aa5..3839d4a 100644 --- a/world/blocky/terrain_world_blocky.cpp +++ b/world/blocky/terrain_world_blocky.cpp @@ -25,7 +25,6 @@ SOFTWARE. #include "terrain_chunk_blocky.h" #include "../../meshers/blocky/terrain_mesher_blocky.h" -#include "../../meshers/blocky/terrain_mesher_liquid_blocky.h" #include "../jobs/terrain_light_job.h" #include "../jobs/terrain_prop_job.h" #include "../jobs/terrain_terrain_job.h" @@ -66,7 +65,12 @@ Ref TerrainWorldBlocky::_create_chunk(int x, int z, Refadd_jobs_step(s); tj->set_mesher(Ref(memnew(TerrainMesherBlocky()))); - tj->set_liquid_mesher(Ref(memnew(TerrainMesherLiquidBlocky()))); + + Ref liquid_mesher; + liquid_mesher.instance(); + liquid_mesher->set_channel_index_type(TerrainChunkDefault::DEFAULT_CHANNEL_LIQUID_TYPE); + liquid_mesher->set_channel_index_isolevel(TerrainChunkDefault::DEFAULT_CHANNEL_LIQUID_ISOLEVEL); + tj->set_liquid_mesher(liquid_mesher); Ref pj; pj.instance();