Voxly
- 48 Devlogs
- 364 Total hours
A fully working voxel engine in C
A fully working voxel engine in C
This morning, I focused on the combat subsystem, implementing new mechanics that enhance player interactions and feedback during combat. These changes are pivotal for establishing a robust gameplay foundation.
combat_resist: Implemented a resistance mechanic that determines damage mitigation based on player attributes, allowing for more nuanced combat outcomes.combat_rng: Added a random number generator for damage calculations, introducing variability in combat results to enhance unpredictability and player engagement.combat_knockback: Developed a knockback effect that alters player position upon receiving damage, improving the physicality of combat interactions.combat_log_death_message: Implemented logging functionality to display a message when a player character dies, providing clear feedback for the player on their status.stub out combat_log: Created a basic structure for the combat log system, laying the groundwork for future enhancements in tracking combat events and player actions.
Current progress has established essential combat mechanics. The next step will involve integrating these systems into the overall game loop for testing and refinement.
Today, I focused on the combat subsystem, specifically implementing various components necessary for managing health, damage, and character behaviors during combat scenarios. This work is critical for establishing a solid foundation for player interactions and enemy behaviors.
Combat System: Implemented combat_health, which tracks and manages health points for entities, including health reduction mechanics and thresholds for death events.Combat System: Added combat_invuln, providing temporary invulnerability states for characters, which allows for the management of damage immunity during specific animations or effects.Combat System: Developed combat_knockback, a mechanic that applies force to characters upon receiving damage, enhancing the feedback of combat interactions.Behavior Tree: Stubbed out the combat_combo, which will facilitate chaining of attacks for characters, setting up a framework for more advanced combat mechanics.Behavior Management: Completed behavior_tree_free to ensure proper memory management of behavior trees, preventing memory leaks during runtime.Behavior Management: Initiated behavior_runner_init, which sets up the initial state for behavior execution, crucial for managing different character actions effectively.Combat System: Implemented combat_dmg_info_get, which retrieves damage information relevant for interaction logic, aiding in the clarity of combat events.Cleanup: Conducted code tidying and minor fixes across the combat module to enhance readability and maintainability.
The combat subsystem now has a more cohesive structure with the groundwork laid for complex interactions. The next step will involve fleshing out the behavior tree logic to integrate advanced AI behaviors and attack combos.
Today, I focused on the animation subsystem of the voxl engine, specifically enhancing the animation systems to support skeletal animation and procedural walking behaviors. This work is crucial for implementing character animations that are both dynamic and responsive to gameplay inputs.
behavior_leaf: Implemented the behavior_leaf module, establishing a base for behavior trees that allows for more complex AI decision-making processes.behavior_builder: Developed the behavior_builder to construct behavior trees programmatically, centralizing the creation and management of AI behaviors.behavior_act_target_in_reach: Completed the implementation of the behavior_act_target_in_reach, which checks proximity to targets for AI actions, enhancing interaction capabilities.anim_skeleton: Began scaffolding the anim_skeleton module, which will define the structure and hierarchy of skeletal animations, essential for character rigging.anim_rig: Set up the anim_rig, providing the framework for binding animations to skeletal structures, facilitating smooth character movement.animation_procedural_walk: Expanded the animation_procedural_walk to allow for dynamic adjustments based on character speed and terrain, improving realism in character locomotion.anim_controller: Introduced the anim_controller to manage the state and transitions of animations, allowing for layered animation blending and more responsive character behaviors.entity_render: Implemented entity_render functionality, which integrates the rendering of animated entities into the broader scene graph, ensuring visual coherence.
The current state of the animation system is foundational but progressing well, with core modules in place for skeletal animation. The next steps will involve refining the blending of animations and integrating more complex animation states.
Today, I focused on implementing the initial stages of the animation and AI subsystems, as well as enhancements to the water rendering pipeline. These components are critical for enhancing the game’s dynamic interactions and visual fidelity.
Animation System: Implemented foundational structures for anim_blend. This allows for smooth transitions between different animations, improving character movement fluidity.Entity System: Completed the entity module, enabling proper management of game objects, including their lifecycle and state management, which is essential for gameplay.AI Module: Introduced the pathfind function, allowing entities to navigate the game world effectively. This is a crucial step towards integrating more complex AI behaviors.Water Rendering: Established the water_pass, implementing the water rendering pipeline. This includes setting up reflection and refraction capabilities using a dedicated reflection camera (water_reflcam), enhancing visual realism.Water Effects: Started work on water_wave and water_foam, which will simulate surface interactions and enhance the dynamic appearance of water bodies.AI Updates: Added ai_tick, which will manage updates to AI behaviors each frame, ensuring responsive and engaging NPC interactions.
Current progress includes foundational setups for both animation and AI systems, alongside initial water rendering capabilities. The next logical step involves refining the AI behaviors and continuing the development of the water effects to enhance environmental interactions.
Today, I focused on implementing various aspects of the volumetric rendering subsystem. This work is critical for enhancing the visual fidelity of the water rendering and introducing new volumetric effects, which are essential for achieving realistic environmental interactions in the engine.
water_reflect: Implemented reflective properties for water surfaces, enhancing the realism of water rendering by calculating reflection vectors based on the viewer’s position and the surface normals.volumetric_programs_use_march: Wired up the volumetric rendering programs to utilize a raymarching approach for rendering volumetric effects, allowing for more complex light interactions within volumes.vol_raymarch: Began development of the raymarching algorithm for volumetric rendering, laying the groundwork for subsequent implementations of effects such as fog and smoke.volumetric_pass_run: Implemented the core function to execute volumetric passes, establishing a pipeline for rendering volumetric effects sequentially within the main render loop.vol_caustics: Initiated the caustics rendering system, which will simulate light patterns created by surface reflections on the volumetric medium, enhancing the visual complexity of water interactions.vol_pass: Scaffolded the volumetric pass structure, defining how different volumetric effects will be processed in the render pipeline.vol_medium: Created an initial implementation of volumetric mediums, allowing the engine to define properties such as density and scattering for various materials.
The volumetric rendering subsystem is now more robust and modular, with foundational components in place. The next step is to continue refining the raymarching implementation and integrate the caustics calculations within the rendering pipeline.
Today, I focused on the development of the tonemapping subsystem, which is essential for controlling the luminance and color mapping of rendered scenes to enhance visual fidelity. This work is crucial as it directly affects the output quality of rendered images.
volumetric_blur: Scaffolded the vol_blur module to introduce volumetric blur processing. This lays the groundwork for further development of blur algorithms.tonemap: Established the initial framework for tonemapping, including scaffolded modules for tonemap_params, tonemap_grade, and tonemap_curve. This modular approach allows for easy future enhancements and testing.tonemap_selftest: Wired up self-testing capabilities for tonemapping to ensure that changes can be effectively validated. This includes fleshing out the self-test to cover edge cases and expected behavior.tonemap_lut: Implemented a lookup table (LUT) for tonemapping, which will optimize color grading processes. Set up associated functions to support LUT creation and application.tonemap_exposure: Started the implementation of exposure management in tonemapping, including functions to retrieve and adjust exposure levels dynamically.text_layout: Completed the implementation of the text layout system, which will be utilized for rendering debug information and UI elements related to tonemapping.cleanup: Conducted code cleanup across several modules, focusing on reducing technical debt and improving readability.
The current state of the tonemapping subsystem is foundational, with several key components scaffolded and initial implementations underway. The next logical step involves further developing the tonemapping algorithms and integrating them into the rendering pipeline to evaluate their impact on scene output.
This morning’s work focused on the tonemapping subsystem, particularly enhancing exposure control and initializing the necessary data structures. These changes are critical for achieving realistic rendering through proper dynamic range management.
Tonemap Exposure: Implemented tonemap_exposure to calculate exposure values based on scene luminance, improving how bright areas are rendered.Tonemap Configuration: Added tonemap_config, defining parameters for exposure and curve settings, facilitating easy adjustments and future expansion.Tonemap Curve: Began the implementation of tonemap_curve, establishing a basis for non-linear mapping of color values to enhance dynamic range perception.Text Layout: Completed the text_layout function, which manages text rendering for UI elements, ensuring proper alignment and spacing.Tonemap Debugging: Implemented tonemap_debug_run_split to allow testing of various tonemapping scenarios, aiding in fine-tuning the visual output.
Current progress sets a solid foundation for further work on the tonemapping pipeline, with the next steps aimed at refining the tonemap grading process and integrating it into the rendering loop.
Today, I focused on the text rendering subsystem, specifically the development of the text context and text batch systems. This work is foundational for rendering 2D text efficiently, which is crucial for UI elements and in-game text displays.
text_ctx: Implemented the initial structure for the text context, which manages the state related to text rendering. This includes setting up memory allocations for text data and glyph information.text_batch: Created a scaffold for the text batch system to handle multiple text draw calls efficiently. This will allow for batching of text rendering operations to minimize state changes.text_atlas: Developed the initial setup for the text atlas, which will store glyph images for rapid access during rendering. This will improve performance by reducing texture binding overhead.text_font: Initialized the text font subsystem to load and manage font data. This includes parsing font files and generating the necessary glyph data.text_glyphdata: Started the implementation of glyph data handling, allowing for precise control over individual characters and their metrics.ssr_settings and ssr_pass: Set up the screen space reflections (SSR) settings and pass, which will enhance the visual fidelity of reflective surfaces in the engine.ssrx_material_unpack: Completed the unpacking of material data for SSR, ensuring that material properties are correctly interpreted during rendering.
The text rendering subsystem is now well-structured, and the next step will involve integrating the text rendering into the main rendering pipeline to ensure text is displayed correctly in the game environment.
Today I worked on the implementation of screen space reflections (SSR) and screen space ambient occlusion (SSAO) within the rendering subsystem. These features are vital for enhancing visual fidelity and realism in lighting interactions within the voxel environment.
SSR Module: Introduced the ssr_fsquad, which sets up a full-screen quad for executing the SSR shader pass. This establishes a foundation for reflection calculations.SSR Configuration: Created ssr_config scaffolding to manage SSR parameters, allowing for adjustable settings such as reflection intensity and roughness.SSR Depth Setup: Implemented the ssr_depth, which captures depth information necessary for accurate reflection rendering. This enables proper occlusion of reflections based on scene depth.SSR Debugging: Set up ssr_debug to visualize reflection calculations during development, aiding in the identification of rendering artifacts or inaccuracies.SSAO Configuration: Initialized ssao_settings to provide user-adjustable controls over ambient occlusion effects, including radius and intensity.SSAO Pass Setup: Established the ssao_pass, which integrates the SSAO calculations into the render pipeline, ensuring it runs alongside other post-processing effects.SSAO Sampling: Started working on ssao_sample, which defines the sampling strategy for ambient occlusion, leveraging a kernel to calculate occlusion values based on neighboring pixels.Kernel Statistics: Set up ssao_kernel_stats to track and debug the parameters of the SSAO kernel, which will assist in optimizing performance and quality.
The rendering subsystem now has a foundational implementation for both SSR and SSAO, with key components in place. The next steps will involve refining the sampling methods for SSAO and integrating the blurring effect for the final output to enhance visual quality.
Today, I focused on enhancing the rendering subsystem with the implementation of Screen Space Ambient Occlusion (SSAO). This feature is critical for improving scene depth and realism by simulating how light interacts with surfaces.
SSAO Module: Implemented the foundational SSAO computation logic in ssao_compute, which calculates ambient occlusion based on depth and normal maps to enhance shading realism.SSAO Debugging: Developed ssao_debug to visualize SSAO outputs, allowing for quick verification of occlusion values and aiding in fine-tuning the algorithm.SSAO Blur: Completed the SSAO blur process in ssao_blur, which smooths the occlusion map to reduce artifacts and achieve a more visually appealing result. The blur uses a separable Gaussian filter for performance efficiency.Skybox Renderer: Progressed on the skybox rendering system by fleshing out skyb_renderer_upload_dome and skyb_dome_vertex, which define the dome geometry and texture uploads for the skybox, ensuring proper visual integration with the ambient occlusion effects.Skybox Palette and Gradient: Initiated the scaffolding for skyb_palette and set up skyb_gradient, enabling gradient-based skybox coloring to enhance atmospheric effects in conjunction with SSAO.
The SSAO implementation is now functional, with debug features in place to assess its performance and visual fidelity. The next step will involve further optimizing the SSAO calculations and integrating them seamlessly into the main rendering pipeline.
Today I focused on the lighting subsystem, specifically implementing shadow mapping techniques and enhancing the atmospheric rendering system. These improvements are crucial for achieving realistic lighting and depth effects in the voxel environment.
shadow_map: Implemented the shadow mapping algorithm, which includes creating a depth texture to store the distance from the light source to the nearest surface, enabling more realistic shadows.shadow_pcf: Developed percentage-closer filtering (PCF) for shadows to soften the edges of the shadow map, increasing visual fidelity. This involved setting up the filtering process within the shader pipeline.shadow_split: Introduced the shadow split technique to improve shadow rendering across varying depths. This includes calculating split distances based on the camera’s frustum to reduce artifacts.shadow_matrix: Added a shadow matrix computation to transform world coordinates into shadow map space, ensuring correct shadow projection during rendering.skyb: Began implementing the skybox atmospheric effects, specifically the skyb_atmosphere_clear_color and skyb_billboard. This includes color adjustments for clearer skies and setting up billboards for celestial bodies.shadow_stabilize: Stubbed out a shadow stabilization technique to reduce flickering and aliasing in shadow rendering, which will be fleshed out in future commits.code maintenance: Conducted minor cleanups and cosmetic tweaks across multiple files for better readability and organization, including renaming functions for clarity.
The current state of the shadow rendering system is functional with basic shadow mapping and initial atmospheric effects implemented. The next step will be to refine the shadow stabilization method and continue developing the full atmospheric rendering features.
Today, I focused on the graphics subsystem, specifically enhancing the shader management and shadow rendering capabilities. This work is essential for achieving more sophisticated visual effects and better performance in the rendering pipeline.
Shader Management Module: Implemented shaderman_set_hot_reload, enabling dynamic shader reloading during runtime to facilitate rapid iteration without restarting the engine.Shader Compilation: Completed the shader_compile function, which compiles shader code into GPU executable format, improving the setup time for rendering.Shader Initialization: Added shadow_init, which initializes parameters related to shadow rendering, ensuring proper setup before rendering occurs.Shader Stage Handling: Filled in the shader_stage structure to manage different stages of shader processing, which allows for cleaner organization of shader tasks.Active Uniforms Retrieval: Finalized shaderman_gl_active_uniforms, which retrieves and stores active uniform variables from shaders, enhancing the shader’s interaction with the rendering system.Debugging Support: Set up shader_debug, providing hooks for debugging shader issues during development, which improves the ease of identifying and resolving shader-related problems.Bloom Effect: Added a basic implementation of bloom rendering through bloom_resize and the bloom module, initiating post-processing effects to enhance scene brightness.
The shader management system is now more robust, allowing for dynamic updates and improved shader handling. The next step will involve integrating the shadow rendering into the main rendering loop to evaluate performance and visual fidelity.
Today I focused on the particle system and initial components for voxel chunk mesh building, which are critical for enhancing visual effects and optimizing rendering performance in the engine.
Particle System: Implemented particle_rng, which initializes a random number generator for particle behavior, crucial for generating varied particle effects.Particle Emission: Completed the particles_rng_in_cone function, allowing for particles to be emitted in a cone-shaped area, enhancing the realism of effects like explosions or smoke.Particle Pool Management: Developed particles_pool_clear, which efficiently resets the particle pool between frames, minimizing memory usage and helping maintain performance during high-load scenarios.Vertex Packing: Set up vertex_pack, which organizes vertex data into a compact format suitable for GPU processing, improving data transfer efficiency and reducing memory bandwidth usage.Chunk Mesh Building: Started the meshbuild_chunk implementation to facilitate efficient chunk rendering, laying the groundwork for further optimizations like greedy meshing.Emitter System: Added a basic emitter class to manage particle emission attributes, enabling future extensibility for different particle effects and behaviors.Cleanup and Organization: Conducted minor cleanups and formatting across various files, ensuring code maintainability and consistency.
The particle system is now more robust, and the chunk building process has a foundational structure in place. The next step involves completing the mesh building logic and integrating more complex particle behaviors using the emitter system.
This morning’s work focused on enhancing the rendering pipeline and starting the implementation of the particle emitter system. These improvements are crucial for visual fidelity and performance in voxel rendering.
clamp01: Implemented a function to constrain values between 0 and 1, ensuring proper normalization for graphical calculations.curves: Began the implementation of curve interpolation methods for smoother transitions in animations and particle emissions.gpu_buffer: Added a structured buffer for GPU memory allocation, enhancing the efficiency of data transfer between CPU and GPU for rendering tasks.emitter: Developed the foundational structure for the particle emitter, which will support dynamic visual effects in the game environment.meshbuild_chunk: Completed the initial version of the chunk mesh building algorithm, optimizing how voxel data is converted into renderable geometry.
Current progress sets the stage for integrating the particle system fully and refining the mesh building process. The next logical step will be to finalize the emitter’s functionality and connect it to the rendering pipeline.
Today I focused on the mesh building subsystem, which is critical for generating and managing the geometry of voxel chunks in real-time. This work is foundational for optimizing rendering and ensuring efficient memory usage.
MeshBuild Module: Started the implementation of the meshbuild system, establishing the groundwork for efficient chunk geometry generation. This includes setting up the initial data structures for mesh management.Snapshot System: Implemented the mb_snapshot functionality, which allows for capturing the state of the mesh at a given time. This is crucial for optimizing updates and rendering by reducing unnecessary computations.Statistics Tracking: Scaffolding for mb_stats was added to track performance metrics related to mesh generation, providing insights into the efficiency of the rendering pipeline.Block Properties: Introduced initial definitions for block_shape and face_dir, setting up the essential parameters required for defining voxel geometry.Terrain Type Management: Added the lt_terrain module to manage different terrain types within the game, enabling diverse environments and interaction mechanics.Bounds Checking: Fixed a bounds check issue during initialization, ensuring that the allocation of voxel data structures remains within valid memory limits, thus preventing potential crashes or corruption.
Current state reflects a significant advancement in the mesh building architecture, with basic functionality established. The next steps will involve fleshing out the mesh generation algorithms and integrating them with the rendering pipeline for further testing.
This morning, I focused on establishing the foundational components for the voxel engine’s module system, which is crucial for modularizing functionality and enhancing maintainability. I initiated the groundwork for both configuration and debugging systems.
mb_config: Started the configuration module to manage engine settings, establishing a basic structure for loading and saving configurations.mb_debug: Added the debugging module, scaffolding the structure to allow for runtime diagnostics and performance monitoring.lt_stats_format: Implemented a format for terrain statistics, ensuring that performance metrics can be effectively logged and analyzed.block_shape: Began work on the block shape definitions, laying the groundwork for specifying voxel dimensions and orientations.cross_mesh: Stubbed out the cross-mesh functionality, preparing for future implementation of cross-sectional rendering techniques.
The foundational modules are now in place, and the next step will involve fleshing out the configuration and debugging features to support real-time adjustments and diagnostics.
Today, I focused on the implementation of the instancing subsystem within the rendering pipeline. This work is critical for optimizing draw calls and managing multiple instances of meshes efficiently, which will enhance rendering performance in voxel environments.
lt_mesh: Implemented the initial mesh structure to accommodate instance data. This includes setting up vertex attributes for instance transformations.lt_grid: Created an initial grid structure to manage spatial organization of instances, allowing for efficient frustum culling.lt_gpu: Stubbed out the GPU interface to handle instanced rendering commands, establishing a foundation for future integration.lt_cache_init: Implemented the cache initialization routine for storing instance data, which reduces overhead during rendering.instancing_stats: Completed the stats tracking for instanced objects, capturing performance metrics that can be analyzed for optimization.instancing_transform_bounds: Finished the bounding volume calculations for instances, crucial for frustum culling to avoid unnecessary rendering.frustum_batch: Scaffolded the frustum batching system to group instances based on visibility, optimizing the rendering process and minimizing state changes.Cleanup: Executed minor cleanups across multiple modules to enhance code readability and maintainability.
The instancing subsystem is now in a functional state, with core structures established and initial implementations completed. The next step will involve refining the GPU integration for instanced rendering and testing performance metrics in various scenarios.
Today, I focused on enhancing the rendering pipeline, specifically the implementation of the g-buffer and draw call management. This work is critical for achieving efficient deferred rendering, which is essential for handling complex lighting scenarios in the engine.
Rendering System: Implemented draw_indirect, allowing for batch processing of draw commands without CPU intervention, which reduces overhead and improves performance during frame rendering.Batch Management: Stubbed out batch functionality to prepare for more efficient draw call aggregation, laying the groundwork for optimizing the number of draw calls issued per frame.G-buffer Implementation: Completed the gbuffer_shade, gbuffer_normal, and gbuffer_material modules, each responsible for storing necessary per-pixel data for deferred shading, enhancing the ability to handle multiple light sources effectively.G-buffer Lighting: Initiated the gbuffer_light and gbuffer_brdf_eval_light components, which are responsible for evaluating lighting based on stored g-buffer data and enabling realistic material responses to light.Edge Case Handling: Fixed an edge case in gbuffer_emit_from_chunk, ensuring correct handling when emitting light from chunk edges, which aids in visual consistency across chunk borders.Utility Functions: Implemented clampf for clamping float values, which will be used in various calculations across the rendering pipeline to maintain valid ranges for rendering parameters.Texture Management: Added make_tex to streamline texture creation, facilitating easier integration of textures into the rendering pipeline.
The rendering pipeline has significantly improved with these updates, and the next step will be to integrate the batching process fully and assess the overall performance impact in various rendering scenarios.
Today, I focused on the integration and initial implementation of the G-buffer system and Fast Approximate Anti-Aliasing (FXAA) in the rendering pipeline. This work is crucial for improving the visual fidelity and performance of the rendering process.
G-buffer Module: Implemented the initial G-buffer structure, facilitating the storage of geometry attributes for deferred rendering. This involves creating texture storage for position, normal, and albedo data.G-buffer Initialization: Developed the gbuffer_init function to allocate and configure the G-buffer textures, ensuring proper setup for rendering operations.FXAA Implementation: Added the core FXAA functionality, including fxaa_main and fxaa_settings_apply, allowing for real-time anti-aliasing effects to smooth out jagged edges in rendered frames.Self-Test for FXAA: Completed the fxaa_selftest implementation to validate the correctness of the FXAA algorithm, ensuring that edge cases are handled and results are consistent across different scenarios.Sampling and Quality: Finished the grid_sample function to enhance texture sampling for FXAA and initiated fxaa_quality, laying the groundwork for different quality settings in the anti-aliasing process.Historical Data Management: Implemented fxaa_history to maintain previous frame data necessary for temporal smoothing in the FXAA algorithm.Stubs for Future Work: Created stubs for fxaa_blit and fxaa_debug, preparing the framework for future enhancements and debugging capabilities.
The rendering engine now has foundational G-buffer and FXAA support, significantly advancing the visual quality of the output. The next steps will involve refining the FXAA implementation and integrating the remaining stub functions to complete the
Today, I focused on implementing the depth of field (DoF) post-processing effect within the rendering pipeline. This is a critical enhancement for visual fidelity, as it allows for more realistic focus transitions in the scene.
Depth of Field (dof_programs): Implemented dof_programs_unload, which properly releases shaders and associated resources when no longer needed, optimizing memory usage.Depth of Field (dof_pass): Began the development of the dof_pass, which will serve as the new rendering stage to handle depth of field computations, ensuring it integrates smoothly with the existing render pipeline.Depth of Field (dof_gather): Completed the dof_gather function, which samples the scene to collect color and depth information needed for the DoF effect, with attention to efficient texture access patterns.Depth of Field (dof_quad): Started implementing the dof_quad, which will represent the screen-space quad used for applying the DoF effect in a fragment shader.Depth of Field (dof_focus): Added functionality for dof_focus, allowing users to set the focal distance dynamically, enhancing control over the DoF effect.Depth of Field (dof_coc): Initiated the dof_coc (circle of confusion) calculations, which are essential for determining which parts of the scene should appear in focus versus out of focus based on their distance from the camera.Code Cleanup: Performed various minor cleanups and formatting changes throughout the modules to improve code readability and maintainability.
The depth of field implementation is progressing well, with foundational components in place. The next step will involve integrating the dof_coc calculations into the rendering pipeline and refining the dof_pass to ensure correct visual output.
Today, I focused on implementing the decals subsystem, which is critical for enhancing visual fidelity by allowing textured decals to be rendered on surfaces in the voxel environment. This will significantly improve the realism of interactions and environmental details.
Decals Types: Established the decals_types module to define various decal types and their properties, facilitating extensibility for future decal features.Decals Pass: Implemented the decals_pass, which organizes the rendering of decals in the pipeline. This pass is integrated into the main render loop to ensure decals are drawn after opaque geometry.GLSL Shader Setup: Began the decals_glsl to handle decal shaders, ensuring that the shaders can accommodate blending and fading effects, which are crucial for realistic rendering.Decal Atlas: Developed the decals_atlas, allowing for efficient texture sampling by consolidating multiple decal textures into a single texture atlas, reducing state changes during rendering.Decals Fade and Blend: Added functionality for decals_fade and decals_blend, implementing visual effects that allow decals to gradually appear or disappear and blend with underlying textures, enhancing realism.Debug Drawing: Finished the debugdraw_timed and fleshed out debugdraw_flush_labels, providing tools for visual debugging of decals, which will assist in ensuring correct placements and transitions.
The decals subsystem is now partially operational, with foundational components in place for rendering. The next step will involve completing the decals_config and integrating it fully into the scene management system.
Today, I focused on the debug rendering subsystem, which is crucial for visualizing various components of the engine during development. This work will facilitate easier debugging of spatial relationships, frustum culling, and occlusion handling.
debugdraw: Established the foundational structure for the debug drawing system, enabling visualization of shapes and paths in the rendering pipeline.debugdraw_helpers: Completed the implementation of helper functions to streamline the rendering of basic shapes (lines, spheres, etc.), improving the clarity of debug visuals.debugdraw_path: Added functionality to visualize paths, which aids in debugging movement and AI-related features.debugdraw_frustum: Implemented frustum visualization, allowing for the assessment of what is currently visible in the scene, thereby enhancing frustum culling debugging.frustum_cull: Integrated frustum culling logic to improve performance by eliminating objects outside the view, with bounds checks refined for edge cases.sphere_cull: Developed a sphere-based culling mechanism to efficiently determine visibility of spherical objects, optimizing rendering performance.cull_occlusion_run: Fixed a bounds check issue within the occlusion culling routine, ensuring accurate visibility determinations.chunk_dist_sq: Implemented a distance-squared function for chunks, which will be useful in sorting and rendering optimization.
The debug rendering system is now significantly more functional, laying the groundwork for more complex visualizations. The next step will involve integrating these debug features with the main rendering loop to ensure they can be toggled during runtime for effective debugging.
Today’s work focused primarily on the implementation of the bloom post-processing system, specifically the initial setup and functionality of the bloom2 module. This subsystem is essential for enhancing the visual quality of the rendered scene by simulating the effect of light bleeding and softening bright areas.
bloom2_pass: Implemented the initial pass for the bloom effect, which includes setting up the framebuffer and rendering targets to capture bright sections of the scene.bloom2_target_bind: Defined the binding process for the bloom render target, ensuring that the correct framebuffers are activated during the bloom rendering sequence.bloom2_blur_v: Stubbed out the vertical blur function, which will be responsible for processing the intermediate bloom render results, preparing for the subsequent blur pass.bloom2_gauss_eval: Added an evaluation function for Gaussian weights, which will be used in the blur calculations to create a smooth transition effect.bloom2_quad: Set up a quad for rendering the bloom effect onto the screen, which serves as the final output display of the bloom post-processing.bloom2_params: Began the definition of parameters for the bloom effect, including thresholds for bright areas and intensity settings, allowing for future adjustments.upload_taps: Implemented the upload process for the sampling taps used in the Gaussian blur, ensuring efficient access to texture samples during rendering.
The bloom post-processing pipeline is now in its early stages, with the foundational components established. The next step will be to flesh out the blur functionality and integrate it with the bloom pass for a complete visual effect.
Today, I focused on the initialization and setup of various subsystems related to rendering and environmental simulation within the voxl engine. This work is foundational, as it establishes the groundwork for rendering techniques and weather simulation mechanics.
OpenGL Module: Implemented initial OpenGL context creation to prepare for rendering. This included setting up basic state configurations for future draw calls.Camera System: Added a camera system to manage view transformations. The camera setup allows for dynamic movement and orientation adjustments, facilitating a clean separation of view logic from game entities.Chunk Queue: Began the implementation of a chunk queue to handle asynchronous chunk loading. This structure will optimize memory usage and improve performance by deferring loading operations until necessary.Ambient Occlusion: Scaffolded the ambient occlusion module, allowing for more realistic lighting interactions. Initial ambient occlusion calculations were introduced, which will be refined in subsequent iterations.Weather Simulation: Implemented core components of the weather simulation system, including the weathersim_front and weathersim_front_pool_init functions. This lays the foundation for managing weather states and transitions effectively.
The current state of the engine includes basic rendering capabilities and preliminary environmental simulations. The next step involves refining the ambient occlusion calculations and expanding the weather simulation features to include precipitation dynamics.
Today’s work focused primarily on foundational systems related to environmental effects and rendering, specifically fog, camera setup, and ambient occlusion. These components are crucial for enhancing the visual quality and atmospheric realism of the engine.
Camera Module: Implemented a basic camera system that supports perspective projection, allowing for a flexible viewpoint in the 3D environment.Fog Implementation: Began initial work on fog rendering, laying out a basic framework to integrate atmospheric effects into the scene, improving depth perception.Chunk Queue System: Established a chunk_queue to manage chunk updates and rendering efficiently, which is vital for optimizing visibility and performance.Ambient Occlusion: Started scaffolding the ambient occlusion module to simulate soft shadows and improve lighting realism, enhancing the overall visual fidelity.Weather Simulation: Developed foundational components for weather simulation, including the weathersim_report and weathersim_front, which will facilitate dynamic environmental changes.
Current progress sets a strong base for further development of visual effects. The next steps will involve completing the ambient occlusion implementation and integrating fog into the rendering pipeline.
Weather’s looking a lot more interesting in voxly! Today, I kicked off the weather simulation with some solid progress on precipitation and the foundations for advecting particles through the environment. The rain isn’t just for show, it’s got a role to play now. Also worked out the tree generation system, which means they will have more than just empty ground to stand on.
Just when I thought I was digging in the trenches, the trees started working! Finally got the tree generation demo up and running, which has been a bit of a puzzle piece I’ve been working on for a while. Cleared out a bunch of clutter in the codebase too. It feels good to put some roots down in this project, literally and figuratively.
The puzzle pieces are finally coming together with the struct generators. I wrestled with structgen_buffer_init today. Thats such a simple name for a surprisingly deep rabbit hole, but getting it wired up felt like unlocking a secret door. A few cosmetic tweaks and renamings later and im already done. Onward to strongholds!
Just wrapped up the stronghold_rng_next implementation, and let me tell you, it feels good to finally have that randomness flowing where it needs to! The stronghold features are coming together with stronghold_query also in the mix. Sure, there were some cosmetic tweaks and minor cleanups along the way, but every small piece is building towards that epic world.
Building a stronghold feels a bit like crafting a slice of medieval magic. Today, I wrangled a bunch of components into our stronghold system with corridors, boxes, and initial buffers. Not to mention, I tamed the chaotic skies with some weather initialization.
Finally got the rivers flowing with some real depth implemented everything from types to flow mechanics. It’s like watching the world come alive; every little tweak adds to that immersion. And yes, the moon now has phases that actually reflect in the sky.
Cracked open the vault of regions today, and finally wrangled the region_codec into shape! It feels good to see that component take form after a few iterations. Took the time to clean up and scaffold the cache while getting those chunks to read smoothly. A few cosmetic tweaks here and there, but hey, every small fix adds to the whole.
Diving into the wild world of noise generation today, specifically ravines. After a good chunk of head-scratching, I’ve got the initial ravine noise and debug systems wired up, laying the groundwork for some seriously dramatic landscapes.
Nothing quite like the rush of finally tackling those mineshaft features. After all the planning, I can now see the maze taking shape and the ore types just begging to be mined. I spent a good chunk of time cleaning up leaks and renaming stuff for clarity. The mineshaft feels alive and thats really cool and important
After a marathon of coding, I finally got the loader queue working. It’s a joy to see all those little pieces, like logic grids and queues, slot together. There’s something satisfying about renaming for clarity. Its kinda like cleaning up a messy drawer and finding all the tools you forgot you had. Now, on to scaffolding the loader worker.
. After wrangling with a mountain of renames and tidying up the loader, I finally got the light properties implemented and running through the pipeline. The loader’s debug functions are on the horizon too, which means I’ll be able to dive deep into those shadows and highlights soon.
Finally cracked the heightmap samples, they’re now alive with weirdness! It’s a subtle but game-changing layer to the terrain; I can already picture the landscapes taking shape. Spent way too long wrangling typos and cleaning up the code, but hey, it’s all part of the grind. The scaffolding for some tree and structure features is in place, so we’re on the wya to success
Fluid dynamics are finally bubbling to the surface! I spent the day diving into the guts of the voxel engine, fleshing out the fluid simulation code. I’ve carved out the groundwork for water spreading and even kicked off lava behavior.
So I dove into the farming system today, and let me tell you, crafting the mechanics feels like planting seeds in soil. I even tackled some erosion dynamics, which is just a fancy way of saying I’m making dirt work for me.
Experimenting with erosion algorithms has been a wild ride today. I finally got the thermal erosion system wired up and running in tandem with the various types. Implementing that flux function was a puzzle, but seeing the terrain shift under different conditions was totally worth it.
After a long grind, I finally got cave generation fleshed out and worms and ravines are slithering their way into the world! It’s all about those small victories right now.
Finally wrangled the biomes into something that feels alive. Implemented the blending and height parameters, and even dived into the noise generation getting the worldgen to feel organic is like layering a sweet melody over a rough track. There’s still a ton of work to do, but it’s exciting to see the terrain start to take shape, complete with the first ore deposits peeking through. This is one step closer to that voxel heaven
There’s something satisfying about watching light dance across a voxel landscape. Today, I wired up the lighting for chunk re-computation, finally getting that glowy ambience just right. The little wins all add up, and each tweak brings me closer to my vision.
Cracked the code for serialization today. Finally got ‘serialize_save’ up and running, which means I can actually save my voxel worlds without losing my work to the void of digital oblivion. 🥳 The octree stuff is coming together too. wired up the raycasting and node setup, making progress on spatial queries.
Octrees are now officially part of the voxl family! After wrestling with a JSON function, I finally got the octree’s initial structure up and running. Implementing the octree_collect_pairs was a puzzle, but seeing it all click is worth it. Still a ways to go, but today feels like a solid step toward the final goal!
Finally got the job system framework working! The scaffolding is up, and I’ve wired in the parallel execution and fence management. It’s like building a complicated LEGO set and each piece finally feels like it fkts.
Finally managed to defeat bounding volume hierarchy (BVH) . I’ve wrapped up the raycasting and query functions. Tidied up some code, renamed a few things for clarity, and even kicked off a basic profiler. The structure is starting to solidify, and I can almost taste the optimization magic.
made some good progress today, finally started on the README and added a basic skeleton for the Makefile. also cleaned up some formatting and added a stub config along with an AABB implementation