xash3d-fwgs/ref_vk/TODO.md
2021-07-17 12:37:12 -07:00

10 KiB

2021-07-17, E110..120

  • rtx: ray tracing pipeline
  • rtx: fix rendering on AMD
  • rtx: split models into a separate module
  • rtx: alpha test

Next

- [ ] rtx: split ray tracing into modules: pipeline mgmt, buffer mgmt
  • rtx: better light culling: normal, bsp visibility, light volumes and intensity, sort by intensity, etc
  • rtx: cluster dlights
  • rtx: dynamically sized light clusters Split into 2 buffers: struct LightCluster { uint16 offset, length; } uint8_t data[];
  • studio models: fix lighting: should have white texture instead of lightmap OR we could write nearest surface lightmap coords to fake light

Planned

  • rtx: sky light/emissive skybox:
    • consider baking it into a single (or a few localized) kusok that has one entry in light cluster
    • just ignore sky surfaces and treat not hitting anything as hitting sky. importance-sample by sun direction
    • pre-compute importance sampling direction by searching for ray-miss directions
  • rtx: better memory handling
    • robust tracking of memory hierarchies: global/static, map, frame
    • or just do a generic allocator with compaction?
  • rtx: alpha blending
  • rtx: coalesce all these buffers
  • crash in PM_RecursiveHullCheck
  • rtx: entity lights
  • rtx: light styles
  • run under asan
  • rtx: simple convolution denoise (bilateral?)
  • rtx: emissive beams
  • rtx: emissive particles
  • rtx: better random
  • rtx: map name to rad files mapping
  • rtx: live rad file reloading (or other solution for tuning lights)
  • rtx: do not rebuild static studio models (most of them). BLAS building takes most of the frame time (~12ms where ray tracing itself is just 3ms)
  • rtx: importance-sample sky light; there are sky surfaces that we can consider light sources
  • cull water surfaces (see c3a2a)
  • create water surfaces once in vk_brush
  • consider doing per-geometry rendermode: brushes can be built only once; late transparency depth sorting for vk render;
  • rtx: too many emissive lights in c3a1b
  • studio models: pre-compute buffer sizes and allocate them at once
  • rtx: denoise
    • non local means ?
    • reprojection
    • SVG+
    • ...
  • rtx: add fps: rasterize into G-buffer, and only then compute lighting with rtx
  • rtx: bake light visibility in compute shader
  • rtx: cull light sources (dlights and light textures) using bsp
  • enable entity-parsed lights by lightstyles
  • dlight for flashlight seems to be broken
  • restore render debug labels
  • make 2nd commad buffer for resource upload
  • fix sprite blending; there are commented out functions that we really need (see tunnel before the helicopter in the very beginning)
  • fix projection matrix differences w/ gl render
  • bad condition for temp vs map-permanent buffer error message
  • draw more types of beams
  • fix brush blending
  • sprite depth offset
  • fix incorrect viewport sprite culling
  • improve g_camera handling; trace SetViewPass vs RenderScene ...
  • studio model lighting
  • move all consts to vk_const
  • what is GL_Backend*/GL_RenderFrame ???
  • particles
  • decals
  • issue: transparent brushes are too transparent (train ride)
  • render skybox
  • mipmaps
  • lightmap dynamic styles
  • better flashlight: spotlight instead of dlight point
  • screenshot
  • fog
  • studio models survive NewMap; need to compactify buffers after removing all brushes
  • sometimes it gets very slow (1fps) when ran under lldb (only on stream?)
  • optimize perf: cmdbuf managements and semaphores, upload to gpu, ...
  • rtx: studio models should not pre-transform vertices with modelView matrix

Someday

  • more than one lightmap texture. E.g. sponza ends up having 3 lightmaps
  • nvnsight into buffer memory and stuff
  • start building command buffers in beginframe
  • multiple frames in flight (#nd cmdbuf, ...)
  • cleanup unused stuff in vk_studio.c
  • embed shaders into binary
  • verify resources lifetime: make sure we don't leak and delete all textures, brushes, models, etc between maps
  • custom allocator for vulkan
  • stats
  • better 2d renderer: fill DRAWQUAD(texture, color, ...) command into storage buffer instead of 4 vertices
  • auto-atlas lots of smol textures: most of model texture are tiny (64x64 or less), can we not rebind them all the time? alt: bindless texture array
  • can we also try to coalesce sprite draw calls?
  • brush geometry is not watertight
  • collect render_draw_t w/o submitting them to cmdbuf, then sort by render_mode, trans depth, and other parameters, trying to batch as much stuff as possible; only then submit

Previously

  • loading to the same map breaks geometry
  • (helps with RTX?) unified rendering (brush/studio models/...), each model is instance, instance data is read from storage buffers, gives info about vertex format, texture bindings, etc; which are read from another set of storage buffers, ..
  • waf shader build step -- get from upstream

2021-02-06

  • alpha test
  • compare w/ gl R_SetRendeMode
    • raster state
    • color constants
  • culling
  • shaders s/map/brush/
  • pipeline cache
  • swapchain getting stale
  • HUD sprites
  • issue: lightmap sometimes gets corrupted on map load

2021-02-08

  • move entity rendering-enumeration into vk_scene

2021-02-10

  • refactor brush into brushes and separate rendering/buffer management
  • animated textures (accept PR)

2021-02-13

  • move pipelines from brush to render
  • render temp buffer api
  • draw studio models somehow
  • studio models vk debug markers
  • studio models white texture as lightmap
  • studio models fixes

2021-02-15

  • weapon models -- viewmodel
  • coalesce studio model draw calls
  • initual sprite support

2021-02-17

  • draw some beams

2021-02-20

  • refactor vk_render interface:
    • move uniform_data_t to global render state ~inside render_draw_t, remove any mentions of uniform/slots from api; alt: global render state?~
    • rename RenderDraw to SubmitDraw
    • ~add debug label to render_draw_t?;~ alt: VK_RenderDebugNameBegin/End
    • perform 3d rendering on corresponding refapi calls, not endframe
  • fix sprite blending

2021-02-22

  • RTX: load extensions with -rtx arg
  • vk_render: buffer-alloc-centric upload and draw api

2021-03-06

  • (RTX; common) Staging vs on-GPU buffers
  • rtx: BLAS construction on buffer unlock
  • rtx: ray trace compute shader
  • dlight test

2021-03-08

  • studio models normals
  • rtx: geometry indexing

2021-03-10

  • rtx: dlights
  • rtx: dlight shadows
  • rtx: dlight soft shadows

2021-03-13

  • rtx: blend normals according to barycentrics
  • rtx: (debug/dev) shader reload
  • rtx: make projection matrix independent render global/current/static state
  • rtx: model matrices
  • rtx: light entities -- still not enough to enlight maps :(
  • rtx: path tracing

2021-03-15

  • rtx: control bounces with cvars
  • rtx: device-local buffers -- doesn't affect perf noticeably :(
  • rtx: emissive materials
    • rtx: emissive textures
    • rtx: emissive beams

2021-03-17..20

  • rtx: lower resolution framebuffer + upscale
  • rtx: importance sample emissive surface
  • rtx: remove entnity-parsed lights
  • rtx: naive temporal denoise: mix with previous frame

2021-03-22

  • rtx: traverse bsp for science!

2021-03-28

  • bake s/d-lights visibility data into bsp leaves

2021-04-06..08

  • persistent models
    • load brushes into render model
    • destroy brushes when time comes (when?)
    • rasterize models in renderer

2021-04-09

  • rtx: build AS for model
  • rtx: include pre-built models in TLAS

2021-04-10

  • rtx: fix tlas rebuild
  • rtx: upload kusochki metadata w/ leaves
  • rtx: add fps
    • rtx: don't group brush draws by texture
    • better AS structure (fewer blases, etc)

2021-04-11

  • vscode build and debug

2021-04-12

  • rtx: fix surface-kusok index mismatch
  • rtx: try to use light visibility data -> too few slots for light sources -> some areas have too many naively visible lights
  • rtx: fix light shadow artefacts

2021-04-13

  • rtx: "toilet error": attempting to get AS device address crashes the driver
  • rtx: fix blas destruction on exit
  • rtx: sometimes we get uninitialized models

2021-04-14..16

  • rtx: grid-based light clusters

2021-04-17

  • rtx: read rad file data

2021-04-19

  • rtx: light intensity-based light clusters visibility
  • rtx: check multiple variants of texture name (wad and non-wad)
  • rtx: rad liquids/xeno/... textures

2021-04-22

  • rtx: fix backlight glitch
  • rtx: textures

2021-04-24, E86

  • rtx: restore studio models

2021-05-01, E89

  • make a wrapper for descriptor sets/layouts

2021-05-03, E90

  • make map/frame lifetime aware allocator and use it everywhere: render, rtx buffers, etc

2021-05-08, E92

  • rtx: weird purple bbox-like glitches on dynamic geometry (tlas vs blas memory corruption/aliasing)
  • rtx: some studio models have glitchy geometry

2021-05-10, E93

  • rtx: don't recreate tlas each frame
  • rtx: dynamic models AS caching

2021-05-..-17, E93, E94

  • rtx: improve AS lifetime/management; i.e. pre-cache them, etc
  • add debug names to all of the buffers

2021-05-22, E97

  • add nvidia aftermath sdk

2021-05-24, E98

  • rtx: simplify AS tracking

2021-05-26, E99

  • rtx: fix device lost after map load

2021-05-28, E100

  • rtx: build acceleration structures in a single queue/cmdbuf

2021-06-05, E103

  • rtx: dynamic surface lights / dynamic light clusters
  • rtx: animated textures
  • rtx: attenuate surface lights by normal

2021-06-07, E104..

  • fix CI for vulkan branch

2021-06-09..12, E105..106

  • c3a2a: no water surfaces in vk (transparent in gl: *45,*24,*19-21)
  • water surfaces

2021-06-14, E107

  • rtx: optimize water normals. now they're very slow because we R/W gpu mem? yes
  • cull bottom water surfaces (they're PLANE_Z looking down)
  • fix water normals

2021-06-23, E109

  • rtx: ray tracing shaders specialization, e.g. for light clusters constants
  • rtx: restore dynamic stuff like particles, beams, etc
  • rtx: c3a1b: assert model->size >= build_size.accelerationStructureSize failed at vk_rtx.c:347