Rem
This commit is contained in:
@@ -1,32 +0,0 @@
|
|||||||
#version 460
|
|
||||||
|
|
||||||
layout(local_size_x=8)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//NEW IDEAm use the depth buffer directly to compute the lod level needed to cover it
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Location in world space up to 2x2x2 block size resolution
|
|
||||||
#define OctNodeTask uint64_t
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//First 32 bits are the start of child
|
|
||||||
// next 16 bits are split into 8 pairs, each pair specifies the type of the subnode (air/empty, partial, full)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Tasks are of size uint64_t
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
while (true) {
|
|
||||||
barrier();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#version 460
|
|
||||||
|
|
||||||
#define WAVE_SIZE 64
|
|
||||||
layout(local_size_x=WAVE_SIZE)
|
|
||||||
|
|
||||||
#define WorkTask
|
|
||||||
|
|
||||||
|
|
||||||
//or make the shape 4x2x4 which has a local size of 32
|
|
||||||
|
|
||||||
|
|
||||||
//The work queue is a circular queue with collision detection and abortion
|
|
||||||
struct WorkQueueHeader {
|
|
||||||
uint queueSizeBits;
|
|
||||||
uint start;
|
|
||||||
uint end;
|
|
||||||
uint _padd;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
//Task is a uint32,
|
|
||||||
|
|
||||||
//The idea is to use persistent threads + octree culling to recursivly find bottom level sections that satisfy a pixel density requirement
|
|
||||||
// given a matrix
|
|
||||||
void main() {
|
|
||||||
while (true) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Idea cull/recuse in a manor of 4x4x4 cube (64 bits), have an existance mask per section so that unnessasery computation isnt done on air subsections
|
|
||||||
// if a section is fully or partially visible and its aabb does not occupy 1 pixel (or a subset of some specified area/density)
|
|
||||||
// then enqueue that section as a job
|
|
||||||
// once a node has reached its tail ending, check if its loaded or not, if not, request it to be loaded
|
|
||||||
// note that the cpu side can discard sections if they are superceeded by a higher level lod load request etc
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#version 460
|
|
||||||
|
|
||||||
layout(local_size_x=32)
|
|
||||||
|
|
||||||
//Works in multiple parts
|
|
||||||
// first is a downwards traversal from a base level that finds all the bottom level pixel detail AABBs
|
|
||||||
// task queue is firstly filled with large visible AABB's from rastered occlusion
|
|
||||||
//
|
|
||||||
// each node metadata contains the position in 3d space relative to the toplevel node
|
|
||||||
// an offset into the datapool for the child nodes, and union between (a bitmsk of if a child node is full, empty, or mixed (or unloaded))
|
|
||||||
// and a pointer to render metadata for meshlets
|
|
||||||
|
|
||||||
|
|
||||||
//The overarching idea is to have meshlets be automatatically selected based on the resulting pixel size/density
|
|
||||||
// after 3d projection, we dont want subpixel triangles and we want to be able to automatically account for the
|
|
||||||
// perspective warp on the edges of the screen (e.g. high fov == higher density at the center of the screen)
|
|
||||||
// from this, the gpu can then (if they are not present) request meshlets be added and thereby automatic lod selection
|
|
||||||
// and dynamic building resulting in possibly O(fast) rendering
|
|
||||||
void main() {
|
|
||||||
while (true) {
|
|
||||||
barrier();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user