From a65848fac80e64d77129e72849c65bd689dbc1e6 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Wed, 24 Apr 2024 21:18:47 -0400 Subject: [PATCH] biome mapping --- .vscode/launch.json | 2 +- engine/world_generation/src/heightmap.rs | 14 +++---- game/camera_system/src/lib.rs | 3 +- game/main/assets | 2 +- game/main/src/main.rs | 2 +- game/main/src/phos.rs | 3 +- game/main/src/prelude.rs | 39 ++----------------- .../src/shader_extensions/chunk_material.rs | 18 +++++++++ game/main/src/shader_extensions/mod.rs | 1 + 9 files changed, 34 insertions(+), 50 deletions(-) create mode 100644 game/main/src/shader_extensions/chunk_material.rs create mode 100644 game/main/src/shader_extensions/mod.rs diff --git a/.vscode/launch.json b/.vscode/launch.json index 8cc2e22..4243aed 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,7 +7,7 @@ { "type": "cppvsdbg", "stopAtEntry": false, - "console": "externalTerminal", + // "console": "externalTerminal", "request": "launch", "name": "Debug", "program": "${workspaceRoot}/target/debug/phos.exe", diff --git a/engine/world_generation/src/heightmap.rs b/engine/world_generation/src/heightmap.rs index 7ae0d0f..6ca4530 100644 --- a/engine/world_generation/src/heightmap.rs +++ b/engine/world_generation/src/heightmap.rs @@ -32,12 +32,10 @@ pub fn generate_chunk(chunk_x: f64, chunk_z: f64, cfg: &GenerationConfig, seed: &noise, ); result[x + z * Chunk::SIZE] = sample; - moisture[x + z * Chunk::SIZE] = sample_simple( - x as f64 + chunk_x * Chunk::SIZE as f64, - z as f64 + chunk_z * Chunk::SIZE as f64, - &cfg.layers[0], - &noise, - ) as f32; + moisture[x + z * Chunk::SIZE] = noise.get([ + (x as f64 + chunk_x * Chunk::SIZE as f64) / &cfg.noise_scale, + (z as f64 + chunk_z * Chunk::SIZE as f64) / &cfg.noise_scale, + ]) as f32; temp[x + z * Chunk::SIZE] = sample_tempurature( z as f32 + chunk_z as f32 * Chunk::SIZE as f32, sample, @@ -57,10 +55,10 @@ pub fn generate_chunk(chunk_x: f64, chunk_z: f64, cfg: &GenerationConfig, seed: fn sample_tempurature(z: f32, height: f32, cfg: &GenerationConfig, equator: f32) -> f32 { let d = (equator - z).abs(); let max_d = equator.max(cfg.get_total_height() as f32 - equator); - let t_mod = d.remap(0., max_d, 0., 1.); + let t_mod = d.remap(0., max_d, 0., 1.).clamp(0., 1.); // let max_d = d.max() - return height.remap(0., 100., 0., 1.).clamp(0., 1.) * t_mod; + return (height.remap(0., 50., 0., 1.).clamp(0., 1.) + t_mod) / 2.; } fn sample_point(x: f64, z: f64, cfg: &GenerationConfig, noise: &impl NoiseFn) -> f32 { diff --git a/game/camera_system/src/lib.rs b/game/camera_system/src/lib.rs index 46e8b8c..dc6bba6 100644 --- a/game/camera_system/src/lib.rs +++ b/game/camera_system/src/lib.rs @@ -25,8 +25,7 @@ impl Plugin for PhosCameraPlugin { } } -fn setup(mut commands: Commands, mut msaa: ResMut) { - *msaa = Msaa::Off; +fn setup(mut commands: Commands) { commands.spawn(( Camera3dBundle { transform: Transform::from_xyz(0., 30., 0.) diff --git a/game/main/assets b/game/main/assets index b5c3a16..256b49c 160000 --- a/game/main/assets +++ b/game/main/assets @@ -1 +1 @@ -Subproject commit b5c3a166a086062525ed738f68e93c5207a43bac +Subproject commit 256b49cc29096a2528790bd6087db907ad77e377 diff --git a/game/main/src/main.rs b/game/main/src/main.rs index bdeec35..7f669f7 100644 --- a/game/main/src/main.rs +++ b/game/main/src/main.rs @@ -5,7 +5,7 @@ use bevy_inspector_egui::quick::WorldInspectorPlugin; mod phos; mod prelude; - +mod shader_extensions; use phos::PhosGamePlugin; fn main() { diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index 7b6f476..c93ba16 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -1,4 +1,5 @@ use crate::prelude::*; +use crate::shader_extensions::chunk_material::ChunkMaterial; use bevy::asset::LoadState; use bevy::core_pipeline::experimental::taa::TemporalAntiAliasPlugin; use bevy::pbr::ExtendedMaterial; @@ -8,7 +9,7 @@ use bevy_rapier3d::render::RapierDebugRenderPlugin; use camera_system::PhosCameraPlugin; use iyes_perf_ui::prelude::*; use world_generation::biome_painter::{ - self, BiomePainterAsset, BiomePainterLoadState, BiomePainterPlugin, + BiomePainterAsset, BiomePainterLoadState, BiomePainterPlugin, }; use world_generation::hex_utils::offset_to_world; use world_generation::tile_manager::{TileAsset, TileAssetLoadState, TileAssetPlugin, TileManager}; diff --git a/game/main/src/prelude.rs b/game/main/src/prelude.rs index 2f60177..bcc1d05 100644 --- a/game/main/src/prelude.rs +++ b/game/main/src/prelude.rs @@ -1,9 +1,6 @@ -use bevy::asset::{Asset, Handle}; -use bevy::pbr::{MaterialExtension, MaterialExtensionKey, MaterialExtensionPipeline, MaterialPipeline, MaterialPipelineKey}; -use bevy::prelude::{Component, Image, Mesh, Resource, TypePath}; -use bevy::render::mesh::{Indices, MeshVertexBufferLayout}; -use bevy::render::render_resource::{AsBindGroup, RenderPipelineDescriptor, ShaderRef, SpecializedMeshPipelineError}; -use world_generation::prelude::ATTRIBUTE_TEXTURE_INDEX; +use bevy::asset::Handle; + +use bevy::prelude::{Component, Image, Resource}; #[derive(Resource)] pub struct ChunkAtlas { @@ -19,33 +16,3 @@ pub struct PhosMap { #[derive(Component)] pub struct PhosChunk; - - -#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] -pub struct ChunkMaterial { - #[texture(100, dimension = "2d_array")] - #[sampler(101)] - pub array_texture: Handle, -} - -impl MaterialExtension for ChunkMaterial { - fn fragment_shader() -> ShaderRef { - "shaders/world/chunk.wgsl".into() - } - - // fn specialize( - // _pipeline: &MaterialExtensionPipeline, - // descriptor: &mut RenderPipelineDescriptor, - // layout: &MeshVertexBufferLayout, - // _key: MaterialExtensionKey, - // ) -> Result<(), SpecializedMeshPipelineError> { - // let vertex_layout = layout.get_layout(&[ - // Mesh::ATTRIBUTE_POSITION.at_shader_location(0), - // Mesh::ATTRIBUTE_UV_0.at_shader_location(1), - // Mesh::ATTRIBUTE_NORMAL.at_shader_location(2), - // ATTRIBUTE_TEXTURE_INDEX.at_shader_location(3), - // ])?; - // descriptor.vertex.buffers = vec![vertex_layout]; - // Ok(()) - // } -} diff --git a/game/main/src/shader_extensions/chunk_material.rs b/game/main/src/shader_extensions/chunk_material.rs new file mode 100644 index 0000000..fdd8842 --- /dev/null +++ b/game/main/src/shader_extensions/chunk_material.rs @@ -0,0 +1,18 @@ +use bevy::asset::{Asset, Handle}; +use bevy::pbr::MaterialExtension; +use bevy::reflect::TypePath; +use bevy::render::render_resource::{AsBindGroup, ShaderRef}; +use bevy::render::texture::Image; + +#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)] +pub struct ChunkMaterial { + #[texture(100, dimension = "2d_array")] + #[sampler(101)] + pub array_texture: Handle, +} + +impl MaterialExtension for ChunkMaterial { + fn fragment_shader() -> ShaderRef { + "shaders/world/chunk.wgsl".into() + } +} diff --git a/game/main/src/shader_extensions/mod.rs b/game/main/src/shader_extensions/mod.rs new file mode 100644 index 0000000..ad9d4df --- /dev/null +++ b/game/main/src/shader_extensions/mod.rs @@ -0,0 +1 @@ +pub mod chunk_material;