Hi Werner,

Have you been able to implement this in OSG? 

I just started looking at mesh shaders and found your post. I'll need to 
learn how to generically break up a model into meshlets.

Did you find any good tutorials that do more than just draw a triangle?

Thanks,
DC

On Tuesday, May 10, 2022 at 3:09:11 AM UTC-5 Werner Modenbach wrote:

> 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/232b876b-46a2-47f8-98df-49088574c748n%40googlegroups.com.

Reply via email to