Hi DC, it took me about one year, fully understanding task and mesh shader. I converted all my software to this technology and I'm fascinated by it's functionality and performance. At what point did you stock? Werner
On 10. Mai 2022 01:07:09 MESZ, DC <[email protected]> wrote: >I'm very curious if you have had any luck getting this to work in OSG. >After watching some of the online demo's regarding mesh shaders >(specifically Unreal), it would be great if there was a way for this to >be >implemented in OSG. > >On Wednesday, May 26, 2021 at 9:15:15 AM UTC-5 Werner Modenbach wrote: > >> Hi users, >> >> I'm currently experimenting with the usage of meshlets in OSG. >> Robert already implemented the corresponding draw methods. Thanks >Robert! >> The main thing necessary to make it work is the indexed access to >almost >> every data given by the CPU, >> which is very limited in the traditional shader pipeline. I.e. a >vertex >> shader can only access 1 Vertex at a time. >> Mesh shaders can fetch any vertex by index and any number of >vertices. >> >> A typical use/definition of the shader structures may be: >> >> //-------------------------------------// transform_ub: Uniform >buffer for transformations// >> layout (std140, binding = 0) uniform uniforms_t { >> mat4 ViewProjectionMatrix; >> mat4 ModelMatrix;} transform_ub; >> //-------------------------------------// vb: storage buffer for >vertices.//struct s_vertex { >> vec4 position; >> vec4 color;}; >> >> layout (std430, binding = 1) buffer _vertices { >> s_vertex vertices[];} vb; >> >> //-------------------------------------// mbuf: storage buffer for >meshlets.//struct s_meshlet { >> uint vertices[64]; >> uint indices[378]; // up to 126 triangles >> uint vertex_count; >> uint index_count;}; >> >> layout (std430, binding = 2) buffer _meshlets { >> s_meshlet meshlets[];} mbuf; >> >> >> So all data is given via BufferObjects. >> >> Meshlet shaders are kind of compute shaders with output to the >rasterizer >> and thus a fragment shader. >> The indexed access is like: >> >> uint mi = gl_WorkGroupID.x; >> uint thread_id = gl_LocalInvocationID.x; >> >> uint vertex_count = mbuf.meshlets[mi].vertex_count; >> for (uint i = 0; i < vertex_count; ++i) { >> uint vi = mbuf.meshlets[mi].vertices[i]; >> >> >> Precondition for the indexed access is having the data given via >> BufferObjects. >> In OSG we have only predefined types (Indices, Vertices and Images) >for >> BufferObjects. >> >> Has anybody any experience deriving a more general class for putting >> arbitrary structs in BufferObjects (i.e. struct s_meshlet)? >> I think that shouldn't be such a big deal or am I overseeing >something. >> >> @Robert: Or can you provide any hints to me for creating such a >derived >> class? >> >> If I manage getting this working I'll provide it to the community >because >> mesh shaders are really great for many applications! >> >> Many thanks in advance >> >> - Werner - >> >> > >-- >You received this message because you are subscribed to the Google >Groups "OpenSceneGraph Users" group. >To unsubscribe from this group and stop receiving emails from it, send >an email to [email protected]. >To view this discussion on the web visit >https://groups.google.com/d/msgid/osg-users/44681b37-aba2-47a1-ab38-5f3685af8b14n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/4ea5b531-c40b-41aa-b81b-ff9988b05f29%40email.android.com.
