Renderer/docs/src/progress/renderertodo.md
austin a34dc4a4dc
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
cleaning up top level folder
2024-11-23 14:49:57 -05:00

44 KiB

@page renderertodo TODO

@subpage bigthings Big Things To Build

DONE

(6/10/2023)

Scene

  • Generic entity & btree grouping mechanism

Server Data Cell

  • Wrapper around scene used by server to manage server scenes and players associated with them Realm
  • Manages server data cells including rudimentary spin up/down Realm Manager
  • Manages all realms + provides constructors for types of realms Data Cell Manager
  • Interface defining method for laying out cells and querying for cells based on real or world coordinates Gridded Data Cell Manager
  • Implementation of Data Cell Manager that manages a grid of data cells if using terrain engine Data Cell Location Resolver
  • Takes a vector3d and an entity and figures out what data cell that should correspond to
  • Breaks the above resolver relationship out of cells so that can support different "worlds" Entity Data Cell Mapper
  • Takes an entity and gives the data cell that entity is inside of
  • Breaks this out from data cell manager to support multiple worlds Data Cell Physics Manager
  • Breaks the physics generation for chunks out of the data cell manager Data Cell Search Utils
  • Combine the above classes to provided utilities for searching cells nearby a location for groups of entities

Client Scene Wrapper

  • Wrapper around scene used by client
  • Specifically adds translating server/client entity IDs to one another

Loading Threads

  • Separate client and server versions of loading threads to different files

Server Bone Loader

  • Server bone loading for server only collision simulation

Instancing support

Server Scene Management

  • Creating and simulating entities per chunk

Server Terrain Management (specifically for collision)

  • Generation collision meshes
  • Also generate texture array

Terrain Chunk Shader

  • Procedural textures for eg rock and dirt

Client Terrain Entity Management (specifically creation/teardown for client)

  • Do the basic query stuff for getting terrain

Diagnose weird walking physics

  • Character terrain collision messiness

Upgrade terrain editing user experience

  • Sphere pallete
  • Gradual updates
  • Terrain Deletion

Upgrade Terrain Chunk

  • Fully connect world chunks

Terrain Editing

  • Server interface for editing terrain
  • Ability to request terrain change from client

Voxel Data Storage

  • Store metadata about types of voxels (rgb offsets, foliage placements, etc)

Foliage Manager upgrades

  • Place foliage based on voxel type
  • Use timeout queueing system to evaluate voxel locations to place foliage
  • Destroy foliage on voxel edit
  • Regrow foliage on empty cells after timeout
  • Gradually regrow

Chunk Saving System

  • File that maps world position to chunk file
  • Save chunks to compressed files
  • Server load chunks as needed
  • Unload chunks after 100 frames of not being used
  • Save chunks on unload

Convert client and server terrain entity composition to use 8 chunks instead of 1

Server Diagnose Physics potentially broken

  • Server physics calculation not happening <-- hard to test bc gravity tree might not actually be updating client to turn off or something

Foliage Manager upgrades

  • Fix popping

(2/25/2024) Generate Tree Entities

  • Generate leaf blobs container entity
  • Attach individual leaf blob entities to container entity
  • Sways in the wind
  • Synchronize creation on server and client
  • Synchronize swinging on server and client
  • Tree types configurable via files Scene Streaming (streaming state of a scene to client)
  • Solidify the work that has already been done in this space and PARTICULARLY add good high level documentation Server Content Engine
  • On first loading a new-to-server chunk, generate all content (foliage, terrain objects (boulders), structures, etc) entities for the chunk

(2/28/2024) Improve Fonts

(2/29/2024) Properly prioritize close trees over far trees

Implement proper Frustum Culling

  • Regular Actors
  • Instanced Actors

(03/06/2024) Bake in imgui

(03/07/2024) Server frametime bar graph

(03/09/2024) Ability to attach ambient audio emitters to entities

Timekeeping class that defaults to gltf time and falls back to systemCurrentTimeMillis

Methods for sleeping physics bodies if nothing nearby them is dynamic (ie trees if there are no moving creatures near them)

  • SAP2 space from ode4j specifically (ended up using BVH space instead)

Overhaul mesh class

  • remove unused stuff
  • private constructor (this is going to require changing a lot of dependencies)

(03/10/2024) De-dupe render calls via doing mutations in render pipeline status and dont call setting variables to values they are already set to Render pipeline updates to support multiple pipelines defined in different files

  • Grouping meshes together independent of actor so don't have to rebind shader programs or VAOs to redraw

(03/12/2024) Foliage Manager upgrades

  • Place foliage intelligently

Fix arena mode (terrain be crazy)

(03/17/2024) Optimize instance logic (currently sorting the list of objects to push to buffer each frame nukes the cpu) sort nukes cpu because capacity logic is after sort, so it tries to sort ~600k items every frame before caping The way to optimize this is to completely gut existing code. One draw call per tile. Draw call calles drawInstanced for all blades within that cell. Provide a texture that contains data per blade of grass to the cell on draw. Store positions in that once at creation. For dynamic wind later will need to use UBOs or something like that. Fix grass flickering (it's frustum culling being inconsistent, try commenting it out in InstancedActor and see what happens :| ) (well we won't have that problem anymore lol)

(03/20/2024) Free camera system that can detatch from player entity

(03/20/2024) Half pass at cellular automata fluid dynamics system

  • Diffuse density
  • Streaming chunks over network
  • Basic model creation

(03/21/2024) Fix character movement (allegedly fixed -- maybe by camera stuff?)

  • Walking left or right while turning camera is very jittery
  • Can lock on moving

Fix Frustum Culling for skybox

Fix Character creation preview not working

(03/23/2024) Physics-controlled objects system

Clean up main method/class

  • Include Remotery library

(03/24/2024) Bring LWJGL version up to latest

Automatic Scene unloading

  • Tree structure inside scenes for tearing down groups of entities
  • Entity decomposition
    • Server handling
    • Client handling when scene should be unloaded

Level loading/saving + Basic Editor

  • Spin up voxel level (think arena mode)
  • Save voxel level

(04/10/2024) Level loading/saving + Basic Editor

  • Basic editor functionality
    • Menu of types of entities to spawn
    • Button to spawn them at cursor

UI Work

  • Make ui feel more responsive, whatever that means (answer is make hover-over styling work lol)
  • Frames for windows (WIP)
  • Need to figure out style-wise what we want to do here (generally minimalist)
  • Fix scrollable handling

Terrain editing UI

  • Menu to select palette to generate, populated based on data

(04/13/2024) UI Work

  • Level editor ability to destroy an entity on server, have it also destroy on client, AND not persist on save
  • Environment controls (not persisting in save yet)

Fix Movement Bug where player keeps running after releasing control

(04/21/2024) UI Fixes

  • Refactor ui toolkit elements to separate absolute and relative position
  • Fix inventory menus

Touch Up working with items

  • Make sure the models are appropriately scaled
  • Remove all logic from before client-server separation

More Debug menus

  • Screen that shows the overall status of client scene
  • Number of entities
  • Maybe a listing of each one?

Another pass at grass

  • Fix shader being camera position independent (if you move the wind moves with you lol)

Make cursor less jittery (ie always up to date with where the camera is facing)

Physics Tweaks

Fix controls not repeating

(04/22/2024) Data Cleanup

  • Clean up audio
  • Fix ui audio effects having play times that are wayyyy too long

(04/30/2024) Fix grass not generating for closest tiles

  • There is no distance check in the ClientFoliageManager

(05/04/2024) Ground Texture Atlas system

  • Basic atlas working with marching cubes
  • Make it work with triplanar mapping

(05/05/2024) Synchronize attack tree over network

Clean up data

  • Tree Model Paths

(05/07/2024) Ground Texture Atlas system

  • Refactor to block main thread only when creating the actual texture object (load buffered image separately)

First Person Camera

(05/15/2024) More consistent terrain editing

(05/16/2024) Reintroduce strafing

(05/??/2024) First person render pipeline

  • Properly compositing onto main texture
    • Potentially look at storing the framebuffer for the pipeline in the pipeline class itself

(05/19/2024) Character movement in particular feels off

  • Bring back strafing
  • Fix interaction with networking
  • Potentially facing vector on server misaligned with client facing vector? - Nope! They're perfectly aligned
  • May be in the ground move tree itself the hard setting velocity instead of applying a force is causing weirdness

(05/23/2024) Viewmodel

  • Fix hands placement
  • Animations defined in data file

(05/24/2024) Viewmodel

  • Add animations queues in btrees
  • idle
  • jump
  • ground movement
  • land
  • fall
  • attack

Attaching items to hands in first person

Fix grass placement

(05/26/2024)

VERY rudimentary first person documentation to give basic navigation to relevant files.

Fix attacking looping and freezing the character in place

  • Was using delta real time (0.02ms) instead of delta frames in server and client attack trees (1 frame/simulate() call)

Document hitboxes

  • Documented how it works currently and the architecture we want to move towards

Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)

  • Need to have an object attached to creature that stores the rigid body
  • When creating the creature, for each hitbox, create shapes for the rigid body
  • Attach the overall object to the creature entity

(05/27/2024)

Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)

  • Synchronize hitbox positions each frame

(05/31/2024) Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)

  • Write custom callback for the collision engine for just hitboxes

(06/04/2024) Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)

  • Need to have an object attached to creature that stores the rigid body
  • When creating the creature, for each hitbox, create shapes for the rigid body
  • Attach the overall object to the creature entity

(06/07/2024) Hitboxes work to properly use capsules (constantly destroy/recreate every frane because od4j doesn't allow rescaling :<)

(06/10/2024) Add flow for demo menu/level loading

(06/11/2024) Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)

  • Properly calculate the capsule that bridges from previous frame to current frame hitbox location
  • Write custom callback for the collision engine for just hitboxes Fix player model side-jog animations

(06/13/2024) Fix newly exported model not rendering correctly

  • All bones are passed into the shader every render call, the bone values must be corrupted
  • NIGHTMARE BUG Fix equipping an item spawning two items

(06/14/2024) Fix inventory ui not closing when you hit 'i' key (will need to update utility functions to manage input mode so you're not doing it in callback) Develop debug ui for equip points

(06/18/2024) Block state synchronization between client and server Highlevel netcode gen updates

  • Fix formatting for imports so it doesn't put an extra newline
  • Fix formatting for function generation so it DOES put a new line when the function isn't being replaced
  • Convert fields to using id variables so all behavior tree classes don't get git updates every time the ids shuffle
  • Furthermore, keep tracking of the existing ids for trees and fields and only generate ids for new trees and fields Fix client gravity tree name

(06/19/2024) Transvoxel implementation

  • Begin work on transvoxel algo

(06/21/2024) Transvoxel implementation

  • First working implementation of mesh generation for transvoxel chunks (architecture of adding it to drawcellmanager still todo)

(06/22/2024) Transvoxel implementation

  • Scaling LODed chunks by lod level

Fix items falling below the ground Fix server always rotating entity to face client camera -- should only be changing movement vector Probably some kind of tutorial text

(06/??/2024) Start working on script engine documentation/design

(06/27/2024) Animations

  • 2H Sword Hold (3rd person)
  • 2H Sword Attack (3rd person)
  • 2H Sword Block (3rd person)
  • 2H Sword Hold (1st person)
  • 2H Sword Attach (1st person)
  • 2H Sword Block (1st person)

Audio

  • Sword Swing
  • Sword Sheath
  • Sword Unsheath
  • Sword Hit Metal
  • Sword Hit Flesh

(07/02/2024) better scaffolding for scripting engine with hooks for equipping items, spawning entities, pausing/resuming play, etc Redo hitboxes to have capsules and also chaining between frames (but not between swinging the camera around)

  • Introduce block hitbox (blockbox) type
  • Sour spot, sweet spot for damage hitboxes and hurtboxes

(07/03/2024) Clean up framebuffer class

  • Comment everything
  • Error checking Overhaul opengl error checking generally (as in, actually use it)
  • Add all over the place to help debugging graphics issues
  • Handle uniforms being sent to shaders that don't have the uniform defined Extracting pixels from framebuffers

(07/07/2024) Work on testing

(07/16/2024) Scene Loading Refactor Hooking into engine from script-side

(07/19/2024) Element Manager debugging and logic simplification Hooks debugging On add item to inventory hook Hook manager debugging

(07/20/2024) Properly drill static classes to script context Expose framestep control to script side Show tutorial hints from script side TextBox element (not editable yet) Word element Text Wrap handling Overflow handling

(07/21/2024) AI scaffolding Attacker ai tree

(07/24/2024) 2 Hand katana Switching between first and third person Devtools for updating first person attachment rotations

(07/26/2024) Viewmodel equipped item rotates inverted to bone rotation Utility object for reducing boilerplate when writing btree transitions that just play an animation then transition First animations flickering in first person (enforce animation priority requirement) Debug third person animations flickering (attachments not reflecting animations that were played that frame) Small data fix Refactor spawn point to not be global Synchronize objects between client and server Synchronize life state between client and server

(07/27/2024) Small bugfix with blocking Refactor math to be client/server agnostic in attach utils Attach utils fixes for first person handling

(07/28/2024) Tear out first person rendering pipeline Partially fix first person attachment to viewmodel Creature data validation Unify animation format data on disk Leverage animation masks to block while moving Remove Airplane movement system Fix client-attached models to viewmodel drawing on previous frame Alignment work for human right hand

(07/29/2024) Option to load all cells on init scene file Insidious Entity protocol bugfix on server Refactor network protocols to enforce async/sync split

(07/30/2024) Fix depth texture for shadow rendering Fix eyebrow weights on human model

(07/31/2024) Massive netcode gen refactor Server synchronization manager Jump tree synchronization Fix jump bugginess

(08/01/2024) Fix server entity camera rotation Fix world bounds application Bone debug rendering

(08/02/2024) State transition packets and support on both client and server State transition utils interrupt support Block animation cancels immediately on first person model Bone-attachment fix Fix data for viewmodel hand.r equip point Support audio on state transition Audio on block state transitions

(08/04/2024) Strafe/backpedal movement speed multipliers Properly equipping/unequipping 2hand items

(08/08/2024) Client surface-audio system Sound effects on footstep New sound effects for movement Jump sound effects Don't play walking audio when entity is jumping Server alert client on collision Sound effect on sword hit Fix walk animation not stopping on state change in ground movement trees Fix server entity not rotating when ai commands it to

(08/09/2024) Math overhaul

  • Engine defined origin, up, and left vectors
  • Redo math for camera calculations Rotate player models to face correct direction Remove BLENDER_TRANSFORM token Redo of creature-spawning logic to support including attached items
  • Items do not necessarily send from server if they are in the scene! They must also not have a parent Ability to serialize/deserialize a creature with equipped items
  • Serialize
  • Deserialize
  • Send to client
  • Receive from server

(08/11/2024) Sending initial synchronized state on player connect to chunk Pass at client-server physics synchronization

(08/12/2024) Fix server animation playing at reduced timescale Block override concept for hitboxes Block sfx Fix server hitboxes freaking out at animation end Fix hitcapsule misalignment Always upright tree Fix upright tree clearing linear force/velocity Movement tweaks

(08/13/2024) Hitbox support offsets now Multiple hitboxes per bone Potential fix for client concurrency issue Debounce attack collisions Remove entities on death Remove movement restriction on attack Update frame data for first person 2h sword swing to align with third person better and make it feel snappier Fix katana is frustum culled incorrectly

  • This is because the data is incorrect (blender has an animation already applied, need to push down)

(08/14/2024) Fix rendering pipelines being broken when the katana is not drawn Fix deleting entities on server not properly deleting the whole entity Windup and Cooldown animations on 2h block AI rearchitecture to actually do behavior trees now that I know what they are

(08/15/2024) True behavior trees

  • Decorators
  • BT Timer service
  • Meta nodes
  • Colections
  • Combat Melee ai using BT framework Server block nullchecks Melee AI tweaks Walk tree Slow down strafe movement somehow Better creature damage sfx Audio debugging Play animations offset by network delay
  • Attack animation Fix viewmodel animation framerate

(08/16/2024) Fix server not starting Fix client disconnection causing wrong socket to be closed from server Fix build tooling, scripts, etc Launcher fixes Fix inventory control state suggestions not working correctly Fix unequipping item hard crashing engine Fix terrain editing hard crashing engine Fix attack animation mayyybe caching on non-local clients ?? Fix sword double-swing Fix physics freakout for vertically aligned entities Fix AI components not resetting on turning off ai manager Fix broken rendering pipeline when creating new level Fix ui alignment for item panels in inventory menus (ie dont have to place in corner) Netconfig file support Fix rotation not sending correctly on initialization of creatures on client Fix F2 menu not regaining controls when Xing menu instead of hitting F2 to close Logger toggle debug window

(08/17/2024) Foliage serialization/deserialization

(08/18/2024) Cursor transparency, cloud transparency Small oit shader work

(08/19/2024) Disable cloud ring Undo oit shader work to fix build pipeline Testing rearchitecting

(08/20/2024) Update image assert method Jenkins save and display captured images when failing a rendering test Setup MantisBT

(08/22/2024) Fix rendering testing on jenkins Fix entity scene test spinup by preventing networking sockets from closing Thread manager/tracker + properly closing threads on engine close

(08/24/2024) Resetting globals for multiple test runs from coding environment Return to main menu from ingame Tagging threads in manager Quitting to main menu

(08/25/2024) Server utilities provided to scripting engine Spawn player character with weapon when testing levels

(08/26/2024) Automated testing fixes

(08/28/2024) Fix scene state not resetting on engine shutdown Fix threads not closing on engine shutdown Update jenkins config to rerun tests with all logging turned on if maven hard crashes while testing More logging More OpenGL error reporting Fix shader uniforms caching due to same pointer, different value Fix Yoga double free bug Explicit error on setting uniform to unsupported type Methods for getting buffers from mesh

(08/29/2024) use STBImage instead of ImageIO Signal passing architecture Services architecture

(09/01/2024) Lots of jenkins pipeline work (finally got it mostly consistent!)

(09/02/2024) Engine mostly building reproducibly/consistently/testably Framebuffer fixes Attack tree integration test Shadowmap fixes Shadowmap pipeline debug menu Shader storage refactor Unit definition/spawning Hitbox updates for katana 2H Fix bug with geometry references not properly flipping in server hitbox collision callback Fix level editor entity tree not re-rendering when an entity is deleted Fix server entity not rotation when first person camera rotates Entity details debug menu Data View

(09/03/2024) Documentation reorganization Better jenkins documentation Include jenkins dockerfile in repo Better model for gameobjects Server synchronization of sprint tree Fix potential bad path for item state lookup Fix multiple ItemUtils NPE bugs Fix AttachUtils NPE bug Work on testing stability Viewport loading

(09/04/2024) Fix viewport realm server data cell not being flagged as ready Fix NPEs on property lookups on entities Unit tests for above Fix physics debug rendering pipeline Update human collidable data

(09/05/2024) Fix AI tracking deleted entity

(09/06/2024) work on debugging framebuffer bug

(09/07/2024) par_shapes integration

(09/08/2024) Directed graph datastructure Framebuffer + RenderingEngine tests

(09/09/2024) Fix obnoxious opengl state caching bug w/ framebuffers in junit context Recoil on attack block Movement speed penalty on swinging sword Fix fall tree blocking attack starting on server/Fix falling tree not always deactivating on server ParShapes integration fix Fix server ground movement tree playing animation over falling animation Fix cursor visuals 3D spline implementation

(09/10/2024) Fix jump/fall/land animations being buggy and inconsistent between client/server Remove extraneous println's Fix empty item slot not showing underneath dragged item Fix voxel selection popout rendering, nav logic

(09/11/2024) Voxel updates (+new type!) Fix return-to-title button from ingame main menu Fix F2 controls bug with title menu ChunkOctree implementation Octree approach for rendering foliage on client Foliage scaled cell generation DBody key refactor Audio for grass/leaves Re-enable UI test Fix foliage chunk-level radius being too low (causing grass cutoff) Turn on anti-aliasing for font generation

(09/12/2024) Alias fonts Fix audio handling bug SSBO implementation Rearch instanced actor ParticleService implementation Fix SSBO implementation misusing BufferUtils Massive entity spawning refactor to collapse entity type permutations Move AttachUtils package Move Scene package Crate object Data cleanup Delete Structure entity type Physics work

(09/13/2024) Physics debugging Fix terrain physics updating on server Lots of animations Organization and documentation around creatures

(09/14/2024) More animations Skeleton 3rd person model NPE fixes in hitbox collection state + commonentityutils Debug menu ability to play animation locally or on server Documentation updates

(09/15/2024) Fix movement packet timing bug Fix all items spawning above player head Fix items falling below terrain Fix gridded data cell manager saving attached items on realm save Fix render signals caching between frames (not reseting global flags per usual) Capture image from opengl to pixel-check Add ui tests Fix image panel displaying texture flipped Fix drag event relative positions Fix slider behavior New character customizer component

(09/16/2024) Fix Scrollable position miscalculation Fix equipped item packet not being sent to creature's player Component-ify natural and equip inventory menus Post Processing Pipeline w/ blur Blur on open inventory/main menu in game Remove legacy UI handling of positioning -- entirely reliant on yoga now

(09/17/2024) Framebuffer position drilling Redesign inventory menu Remove deprecated ui constructors Refactor menus to package under client Fix buffered scrollable regression in above work Memory fix Start proliferating audio through ui Item-based ui audio Better sfx for opening/closing inventory menu Different title menu audio New katana icon UI fix Initial hitstun implementation

(09/18/2024) Migrate documentation Netcode generator qol fixes Combat Stances Component Remove geometry shader support Work on clustered lighting

(09/19/2024) Cluster lighting completed ClientPointLightComponent Small rendering info display Fix terrain editing across chunk borders on server

  • This is because the ray on the client doesn't intersect at the border (because the physics generation isn't working on chunk-end)
  • Also because the client doesn't scan border chunks to see if they should update Fix shader program bug with no-bone variants Particle Emitter work (it renders! it has management!) Texture atlasing for particle system Texture atlas caching Point light offsets

(09/20/2024) Light manager buffer overflow bugfix Particle Emitter data definitions Torch w/ particle + lighting Fix text input collapsing while typing Voxel selection item Fix ui elements not storing default discrete world size on level editor menu Fix skeleton right strafe Fix ui audio playing at world origin

(09/21/2024) Snow voxel type Move animation work

(09/22/2024) Hide viewmodel hands when idle Autodisabling implementation Fix static friction coeff causing player to slide on shallow slopes

  • Turns out it needed auto disabling logic Change timescale for test Refactor graphics entity definitions to be under dedicated object Tree model debug menu

(09/24/2024) Make voxel selection panel have better spacing Partially fix idle animations for human + skeleton Directional lighting color control Skysphere affected by directional lighting

(09/25/2024) (09/26/2024) Work on toolbar refactor

(09/27/2024) Toolbar state mostly working Filter toolbar slots out of equip menu

(09/30/2024) Fix attack tree checks Disable client equip tests until can review Toolbar scrolling Items executing script engine hooks on usage Fix server attack tree regressions Editing voxels hook and extensions for voxel palette item Entity spawning palette item actually working via hooks Model fix for shovel, shuffling item models Work on separating procedural tree generation steps

(10/16/2024) Camera offset definitions in entity files Non-Lsystem pine tree Potential fix for ground audio bug

(10/20/2024) Fix SP debug launcher actually entering world Fix virtual scrollable clipping logic Fix ui scaling on abnormal monitors

  • This is literally just a function of the settings file not being updated for different resolutions Fix inventory null pointer check on virtualaudiomanager

(10/21/2024) Fix inventory message for undefined id on client Fix movement audio service when audio engine disabled Fix idle animations (for katana) Fix equipping sword on toolbar Add punching/unarmed combat Fix script spawning NPE

(10/22/2024) Editor movement system + editor entity Ability to disable physics Inspector item Fix alignment on spawn palette menu Add padding setters to ui kit Refactor ui components to be under client folder Scaffold out recipes data Initial implementation of tooltips

(10/23/2024) Tooltip improvements Terrain generation testing realm Biome data definition Notes on biomes OpenSimplex util class Chemistry system collision engine instance on server and client

(10/24/2024) CraftingPanel implementation

(10/27/2024) World gen docs + ideas Update default resolution in config

(10/28/2024) Fix main menu ui test Refactor math utils to spatial math utils to make room for more fundamental utils

(10/29/2024) Begin drawcellmanager rewrite

(10/30/2024) Integrate transvoxel algorithm Document NetArranger Break out datastructures library

(10/31/2024) Fix some transvoxel bugs Optimizations Refactoring generator code

(11/01/2024) Optimizations Fix transvoxel xnzn edge generation

(11/04/2024) Major draw cell optimizations Fix normals calculation in transvoxel rasterizer Fix draw cell LOD joining bug Fix draw cell bounding sphere calculation Hill Gen tweaks

(11/05/2024) More normals fixes for terrain

(11/06/2024) Fix server caching of terrain Implement server side striding of chunk data

(11/07/2024) Add quarter, eighth, and sixteenth scale chunk gen Add network pressure capping Add stratified updates that prioritize game chunks Add message deduplication Fix LOD bounding sphere calculation Hook up content generation to test generation realm Reorganize biome data

(11/08/2024) Player and entity tracking overhaul in grid data cell manager Add more profiling points Height manual adjustment for content placement Fast track client draw cell manager cell evaluation Fix foliage rendering Fix async physics gen on client Convert volumetric + shadow pass to entity tags

(11/09/2024) Fix eighth res chunk radius Fix chunk gen debug ui regenerate button Script-defined chunk generators Script engine synchronization utility Convert ScriptEngine to service ScriptEngine full re-initialization signal Add surface width to test generator User setting to toggle foliage manager Fix client terrain cache lookup bug Memory debugging work + update memory flags in launch file

(11/10/2024) Attempts at optimizing ClientDrawCellManager Server-driven homogenous tracking to accelerate client draw cell manager Face data fill bounds check optimization Data fill skipping optimization Homogenous node skipping optimization Remove evaluation by distance Squared distance optimization Distance calculation caching optimization Two layer destruction optimization Non-reallocating list iteration for children in draw cell manager optimization Split leaf/nonleaf tracks for node evaluation optimization

(11/11/2024) Chunk data now stored/transmitted in 17 dim instead of 16 dim (Thereby cutting down on network/storage cost) Unique actor concept Asset manager pipeline to destroy models/meshes/textures Terrain model freeing on destruction Potential physics destruction fix Join propagation further up tree Lower client cache size (to fight memory stalling) Manual free button on memory debug window Passing chunk data between nodes Fix homogenous value propagating from chunk gen to client cache Fix homogenous value joining on client

(11/12/2024) Work to optimize javascript chunk generators Solve curve SDF

(11/13/2024) Fix shadows on terrain Work on an anime-style mountain generator Work on making chunk reloading less obvious Fix default chunk generator Fix unit test Fix missing data on katana item Ability to replacing a player's entity Fix shadows on main shader Button to swap between player entity and editor entity Fix physics being disabled on editing a level Fix entity repositioning bugs + Enable recursive logic Fix hitbox manager handling of destruction Fix gridded data cell manager player + entity position handling and refactor to simplify logic Add debug options for entities to reposition on server Item data refactor to make it recursive Loot pool data definition Implement items dropping from entities on death Officially mark transvoxel algo as solved Fix shovel not having texture Re-enable foliage manager Fix chunk value lookup

(11/14/2024) Workbench model Item usage definitions Way to define auto generated spawner items (ie item form of a furniture item) Define interaction distance explicitly Fix client side store-in-inventory transform failing to destroy world-side item Fix gravity trees failing to handle missing collidables Fix token NPE Physics editing debug tab ControlHandler refactor to break out callbacks into dedicated files Add concept of interaction definition in common entity type Fix bug with entity ray casting selecting player entity Fix crafting menu yoga appliation logic Workbench can open crafting menu Fix character customization panel layout

(11/15/2024) Script engine preloading Fix YogaUtils.refreshComponent breaking when passed null window Remove FontUtils .testcache creation File watching scripts source dir Fix STBImage flipping bug (set flag statically) Update visuals on pine tree

(11/16/2024) Mountain generation work Implement crafting Fix image panel test Add explicit kinematic flag in data Fix hitbox destruction logic to not double-delete

(11/17/2024) Mountain generation work Fix flickering chunks on unload Fix draw cell distance cache busting on far distances Fix skybox not updating position with player entity Add Scene shorthand for registering runnables as behavior trees Re-integrate frame time tracking Solve y last in chunkgen to optimize height calc

(11/18/2024) Defining noise functions in config files Invoking noise functions from noise functions Voxel and Heightmap generators based on noise functions in files Set all client terrain rigid bodies are kinematic Add caves Tweaking test2 noise definition Add sleep to server socket thread

(11/19/2024) Fix draw cells not deleting once all children have reported generation Fix server data cells unloading before ready state Fix terrain chunk generation trying to generate rigid body for no-vertex cell Fix server homogenous chunk check on generation with variadic weights Optimize data passing from voxel rasterizer to model generation Vector pooling in transvoxel rasterizer Fix invalid normals from transvoxel rasterizer

(11/20/2024) Design storm engine icon Fix edge-polygon generation for invalid cases Add engine logo to title menu Use STBttf for font loading/remove dependency on java.awt.fonts Fix font height lookups in string carousel, text input, and word Fix invalid audio source ID bug Up threshold on tests for approximate color matching Refactor signal service subscription mechanism Add main thread signal service Fix backing out to main menu Refactor ShaderProgram -> VisualShader Break out shader uniform setting into shared file Fix being able to walk off far side of the world (ie in level editor) Fix chunks saving to disk in wrong stride Fix server terrain generation lock spinning on loading terrain from disk Fix crosshair NPE when camera undefined Fix ray casting entity filtering bug Fix ClientTerrainManager concurrent editing bug Fix point lights not being cleared from buffer after deletion Remove point lights from skeleton + human

(11/21/2024) Change grass texture Fix allocations on FoliageChunk child iterations Reduce near clip to remove flickering on far chunks Complete overhaul of foliage management Fix foliage inconsistently placing on varied terrain Fix foliage texture wrapping when drawing too many foliage items Fix memory management in asset loader for queued assets Add functionality for texture freeing from asset manager Increase foliage chunk range Swtich collision engine to use reentrant lock

(11/22/2024) Foliage manager non-collision engine height lookups Fix foliage manager not respecting graphics settings Small noise sampling refactor Fix test data for main menu render test Change voxel weight reporting from server to align with foliage Use jenkins data for unit test temporarily Disable tunnel noise to align foliage better + adjust manual value for foliage placement

(11/23/2024) Clean up top level folder Break out dependency documentation into a dedicated file

TODO

Implement gadgets

  • Chemistry System
    • Emitters
    • Subscribers
    • Dedicated collision engine on server
  • Trap
    • Bear
    • Freeze
    • Flame
  • Bomb (to be thrown)
    • Regular (Deals damage, ignites)
    • Air (high push coeff)
    • Flash (dazes)
    • Sleep (puts enemies to sleep)
    • Smoke (creates LOS blockers)
    • Decoy (creates a decoy)
  • Torch
  • Throwable potions

Bug Fixes

  • Fix hitbox placement does not scale with entity scale on server
  • Fix not all grass tiles update when updating a nearby voxel (ie it doesn't go into negative coordinates to scan for foliage updates)
  • Calculate bounding sphere for meshes by deforming vertices with bone default pose instead of no bone deform
  • Fix light cluster mapping for foliage shader
  • Fix foliage placement
  • Fix block tree preventing initiating an attack
  • Fix particles not spawning in correct positions
  • Fix flickering when applying yoga signal (may need to rethink arch here)
  • Fix virtual scrollables not working

Startup Performance

  • Allow texture map to bind multiple model paths to a single set of mesh->textures
  • Cache texture atlas for terrain
  • Separate thread loads non-critical assets async while on title menu, but blocks main game display until completed

Scripting enhancements

  • setTimeout
  • Get marker by entity name/id
  • Play/Stop animations on actors
  • Apply cameras
  • Show/Hide UI
  • Enable/disable controls states
  • Spawn/Destroy entities
  • Ability to define regions in space (ie with entities)

Code Generation

  • Generate static "hasXComponent", "getXComponent" functions on sync'd components

Rearchitecting

  • Main render is a ui element (that we can have multiple of)
  • Shader handling updates to allow for library based shader compilation
  • Also allow injecting consts from the engine itself (ie max lights is dynamically injected, that way never have to worry about .glsl and .java not aligning)
  • Cache busting for particle atlas cache

Code cleanup

  • Rename "BehaviorTree" to be "Component" (what it actually is)
  • Refactor ground movement components

Build system to allow specifying certain audio files to load as stereo

Rework how chunks are written to disk to make them more cache friendly

  • IE, write consecutively higher LOD levels the further into the file, so that you can read just the first few bytes if its a far away chunk

Debug

  • Draw all bones with orientations

Biome description enhancements

  • Weather description

Would be nice to be able to cut clients that stream their logs to my server

Refactor render flags

Data Cleanup

  • Clean up creatures
  • Remove unused ones
  • Clean up unused models
  • Clean up textures
  • Move model textures into models
  • Recursive model transform data

Clean up Material class

  • fix storing textures in the mat class ( pain :c )

Overhaul of 'attach' semantics

  • Having different types of attach tree propagation
  • Ability to turn on/off combinations of models at will (already exists, but needs review)

More Debug menus

  • Screen that shows the overall status of draw cell manager
  • Screen that shows the overall status of fluid cell manager
  • Screen that shows the overall status of realm 0
  • Screen that shows the overall status of realm manager
  • Particularly, want a view of all entities in the scene, and the ability to click on a single entity to get an overview of everything on the entity
  • For each behavior tree, ability to click into the tree and view fine details about its state (both pure state variable as well as other relevant variables)

Revisit first attempt at instancing (its really laggy lol)

  • Maybe have draw call happen on top level entity and immediately queue all children recursively

Shader library system

  • Abiltiy to include the shader library in individual files (ie implement #include)

Another pass at grass

  • Multiple foliage models in same cell

Build a lod system

  • Could potentially be held at actor level
  • Link different models based on LOD level
  • LOD trees aggressively
  • LOD foliage cells aggressively

Refactor attach logic to better encapsulate semantic attachment

Light Manager

  • Support "flickering" somehow
  • Eventually support spot lights?
  • Point shadows ???

gltf Support

  • Texture loading from gltf file

Security

  • FileUtils sanitation function check if requested file is in game root dir

Cellular Automata Fluid Dynamics System

  • Advect force
  • Advect density
  • Diffuse density
  • Do not bound to single chunks
  • Only add compression when it starts to become an issue

skybox work

  • make it prettier
  • be able to manage its colors through a clean interface

Ray Traced Audio Engine

Documentation Pass on as many files as you can stomache

Generate Tree Entities

  • Generate stem
  • Ability to specify central stem
  • Cubic function for limb dispersion over length
  • Generate branch starters from trunk that are not full length
  • Have leaves point out of branches at specific angles

Foliage Manager upgrades

  • Wind system (environment ubi that defines wind that is lookup'd by individual blades)

Server Micro/Macro transitioning (turning entity into character in macro simulation and vice-versa) Macro level content tracker

  • Keep track of chunks that would have trees and include this in the data passed to client

Season tracking

  • Have a concept of seasons as loaded from assets/data
    • Have a season manager that keeps track of seasons at the macro scale
    • Maybe make it per biome or something in data?
  • Create interface for querying and updating season in a given chunk
  • Update foliage system to transition models and colors based on the current season (update maybe every minute in game or something?)

Weather tracking

  • Keeps track at macro level of wind direction and level
  • Keeps track at macro level of cloud coverage and structure (ie transmits same cloud to client as server)
  • Keeps track at macro level of temperature
  • Keeps track at macro level of precipitation

Environmental Audio Service

  • Tracks characteristics about surroundings to determine looping audio to play
  • Voxels nearby
  • Major entity types nearby
  • Biomes

Color Palette Generator

Foliage Manager upgrades

  • Add wind simulation if relevant

Server Content Engine

  • On reloading a chunk with macro objects like structures, apply appropriate modifiers to align micro object with macro object
    • EG if a building is damaged in macro simulation, regenerate the micro one to be damaged before marking chunk as valid

Upgrade terrain editing user experience further

  • Leveling tools
  • Lock to axis tools
  • Server validation for client request to change terrain

Ongoing

Upgrade terrain generation algorithms

  • This one should be an ongoing process in general as it is a matter of taste
  • Make a route hard coded that throws you straight into a generated world
  • This makes it easier to tweak algo and immediately get results

Documentation

Test Creation

Eventually

Procedural Cliff Texture

  • Uses noise or fractals or something to generate infinite textures in shader Loot Generator
  • System that can generate items that would be appropriate reward given some variables
  • ie you tell it 'this is this character's stats, this is the relative level of loot I want to provide'
  • it then searches through the lore to generate appropriate weapons, armor, materials, consumables, etc Computational Fluid Dynamics System
  • Basic transparent voxels for fluid
  • Fluid simulation algorithm
  • Vectorize/JNI fluid simulation
  • Separate fluid chunks
  • Networked fluid chunk transportation (including force vectors for generating particles on client)
  • Save fluid chunks

Gameplay:

  • Swordsman with movement abilities
  • Archer with movement abilities
  • Mage with elemental physics based abilities

Fun pie in the sky stuff

Ability to cast spell to extinguish sun, making world permanently dark/night time dynamic camp/house system - npcs will gradually join your camp the longer you stay there

  • They also leave to go on quests and missions
  • You see the composition of the camp change over time dynamic warfare system
  • Guard towers that need to be captured by factions before enabling assault on real settlements
  • Raids against villages

Known bugs

  • Draw cell manager iso values dont make sense and should scale empty cells based on neighbor cells
  • Draw cell manager logic doesn't fill in border cells properly (the logic to check if a border cell exists always succeeds as long as the potential location is within world bounds, not if it actually exists in cache)
  • Control handler re-polls for mouse coordiantes for each control handler group it processes, so only the first group gets the mouse movement event properly