mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-08-04 04:26:15 -04:00
2.6 KiB
2.6 KiB
Entity rendering
Entity rendering is a quite hard topic.
Classes
- Player renderer
- player model
- feature renderer:
- armor
- stuck arrows
Skeletal models
- SkeletalModel (raw data)
- BakedSkeletalModel (baked mesh)
- SkeletalInstance (renders baked mesh, contains transform values)
- Wrapper (indirectly accesses skeletal instance transforms)
Model designing
Entities
Entities are always designed without any rotation (i.e. yaw
=0
)
Things to consider
- name rendering (without culling and visible through walls) (and scoreboard objective)
- hitbox rendering
- entity model itself
- player with arms, legs, ...
- has animations, ...
- different poses (sneaking, etc)
- yaw vs head yaw
- "features"
- armor (and armor trims)
- elytra
- stuck arrows (and bee stingers)
- cape
- shoulder entities (parrots)
- held item
- light (shade and lightmap)
General
- render layers (opaque -> transparent -> translucent -> ...) (but face culling enabled)
- sort in layers after distance (or -distance)
- there are also invisible renderers (like AreaEffectCloud is just emitting particles)
- update all models async (with their visibility, etc)
- queue for unloading and loading meshes before draw (better while async preparing to save time. Maybe port that system to block entities)
- Loop over all visible entity renderers and work on the entity layer as needed
- update visible and not visible
- entity name is also visible through walls, rest not
- also with frustum (no need to update renderers that are out of the frustum)
- -> handle occlusion differently from visibility
- option to turn on/off "features"
- how to register entity models?
- loop over all entity (and block entity) types and register?
- store entities in octree like structure
- ways faster collisions with them -> physics
- way faster getInRadius -> particles, maybe entities in the future
Hitboxes
- Create line mesh with default aabb
- interpolate
- aabb (not at all, taken from renderInfo)
- color: 0.5s
- velocity (ticks)
- direction (taken from renderInfo)
- eye height (taken from renderInfo)
- they must alight with the matrix handler -> mustn't be a frame too late/early
- interpolate
- Store offset and rotation as uniform
- Make hitbox a default feature of entity renderer
- highest priority (enables cheap gpu clipping)
- dynamic enabling and disabling (hitbox manager, keybinding)
Tests
- hitbox (data, loading, unloading)
- collect visible meshes (with sorting, priority type and distance)