Yes, that is the only (?) way.

On 28. Mai 2022 12:23:48 MESZ, Trajce Nikolov NICK 
<[email protected]> wrote:
>Hi!
>
>I haven't looked at the code yet, just want to clarify one thing: you
>are
>providing the meshlets verts uvs normals through 1d texture?
>
>On Wed, May 25, 2022, 12:17 Trajce Nikolov NICK <
>[email protected]> wrote:
>
>> Hi!
>>
>> Thanks a bunch! Is your code in the repo so I can have a look?
>>
>> On Wed, May 25, 2022, 09:17 Werner Modenbach <
>> [email protected]> wrote:
>>
>>> Hi Nick,
>>> There is nothing special in the contents of the buffers. They are
>just
>>> arrays like vertex array. Special is the definition as buffer
>objects and
>>> "overlaying" them with a texture like shown in my code. In the
>shader you
>>> have the instance ID and from that you access the meshlet info via
>the 1D
>>> texture. Get your operation parameters from there and fetch
>vertices,
>>> normals, colors etc. also via the textures.
>>> The only difficulty is the size limit of the textures. So you
>eventually
>>> have to split the arrays.
>>> That's it.
>>> Werner
>>>
>>>
>>> On 24. Mai 2022 22:59:52 MESZ, Trajce Nikolov NICK <
>>> [email protected]> wrote:
>>>>
>>>> Hi,
>>>>
>>>> I am also researching this subject. Have you succeeded? Any hints
>about
>>>> the meshelts buffer objects? Any other hints?
>>>>
>>>> Thank you a bunch for any shared info!
>>>>
>>>> Nick
>>>>
>>>> On Wed, May 11, 2022 at 5:35 PM DC <[email protected]>
>>>> wrote:
>>>>
>>>>> Thanks Werner!
>>>>> This will certainly help me get started.
>>>>>
>>>>> Much appreciated,
>>>>> DC
>>>>>
>>>>> On Wednesday, May 11, 2022 at 4:13:08 AM UTC-5 Werner Modenbach
>wrote:
>>>>>
>>>>>> Hi DC,
>>>>>>
>>>>>> here is the link:
>>>>>> https://github.com/nvpro-samples/gl_vk_meshlet_cadscene
>>>>>> This should help you with items 1) and 2)
>>>>>>
>>>>>> For item 3) see my code below.
>>>>>> The way I assign the data structures in OSG is like that:
>>>>>>
>>>>>>     // ----------------------
>>>>>>     // Create Meshlet primitive    // ----------------------
>>>>>>    
>_geode->getOrCreateStateSet()->getOrCreateUniform(TASK_INVOCATIONS_PER_MESHLET,
>osg::Uniform::INT)->set(taskInvocationsPerMeshlet);
>>>>>>
>>>>>>     osg::ref_ptr<osg::Geometry> geometry = new osg::Geometry;
>>>>>>
>>>>>>     osg::ref_ptr<osg::ProxyPrimitive> proxyPrimitive = new
>osg::ProxyPrimitive;
>>>>>>
>>>>>>     proxyPrimitive->drawMeshTasks = new osg::DrawMeshTasks(0,
>workgroupsInGeometry * taskInvocationsPerMeshlet);
>>>>>>
>>>>>>     geometry->setUseDisplayList(false);
>>>>>>
>>>>>>     geometry->addPrimitiveSet(proxyPrimitive.get());
>>>>>>
>>>>>>     _geode->addChild(geometry);
>>>>>>
>>>>>>     // ----------------------
>>>>>>     // Vertices
>>>>>>
>>>>>>     // ----------------------
>>>>>>
>>>>>>     osg::ref_ptr<osg::Vec4Array> osgVertices = new
>osg::Vec4Array(toCopy);
>>>>>>
>>>>>>     for (auto i=0; i<toCopy; ++i) {    // fill array        //
>Fill buffer
>>>>>>     }
>>>>>>
>>>>>>     // Create Buffer and Texture
>>>>>>
>>>>>>     osg::ref_ptr<osg::VertexBufferObject> verticesBufferObject =
>new osg::VertexBufferObject();
>>>>>>
>>>>>>     verticesBufferObject->setUsage(GL_DYNAMIC_READ_ARB);
>>>>>>
>>>>>>     osgVertices->setBufferObject(verticesBufferObject.get());
>>>>>>
>>>>>>     osg::ref_ptr<osg::TextureBuffer> vertexTexture = new
>osg::TextureBuffer(osgVertices.get());
>>>>>>
>>>>>>     vertexTexture->setInternalFormat(GL_RGBA32F_ARB);
>>>>>>
>>>>>>    
>vertexTexture->setInternalFormatMode(Texture::USE_USER_DEFINED_FORMAT);
>>>>>>
>>>>>>    
>stateSet->setTextureAttributeAndModes(MESH_VERTEX_ARRAY_TEXTURE_UNIT,
>vertexTexture.get());
>>>>>>
>>>>>>     // ----------------------
>>>>>>     // MeshletInfos
>>>>>>
>>>>>>     // ----------------------
>>>>>>
>>>>>>     osg::ref_ptr<Vec4uiArray> MeshletInfosArray = new
>Vec4uiArray(workgroupsInGeometry);
>>>>>>
>>>>>>     int startVertex = 1;
>>>>>>
>>>>>>     int anzahl = _anzahlVertices;
>>>>>>
>>>>>>     for (auto i=0; i<workgroupsInGeometry; ++i) {
>>>>>>
>>>>>>         (*MeshletInfosArray)[i][0] = startVertex;
>>>>>>
>>>>>>         (*MeshletInfosArray)[i][1] = min(TS_WORKGROUP_SIZE,
>anzahl);
>>>>>>
>>>>>>         startVertex += TS_WORKGROUP_STEP;
>>>>>>
>>>>>>         anzahl -= TS_WORKGROUP_STEP;
>>>>>>
>>>>>>     }
>>>>>>
>>>>>>     // Create Buffer and Texture
>>>>>>
>>>>>>     osg::ref_ptr<osg::VertexBufferObject> meshInfosBufferObject =
>new osg::VertexBufferObject();
>>>>>>
>>>>>>     meshInfosBufferObject->setUsage(GL_DYNAMIC_READ_ARB);
>>>>>>
>>>>>>    
>MeshletInfosArray->setBufferObject(meshInfosBufferObject.get());
>>>>>>
>>>>>>     osg::ref_ptr<osg::TextureBuffer> meshInfosTexture = new
>osg::TextureBuffer(MeshletInfosArray.get());
>>>>>>
>>>>>>     meshInfosTexture->setInternalFormat(GL_RGBA32UI_EXT);
>>>>>>
>>>>>>    
>meshInfosTexture->setInternalFormatMode(Texture::USE_USER_DEFINED_FORMAT);
>>>>>>
>>>>>>    
>stateSet->setTextureAttributeAndModes(MESH_INFOS_ARRAY_TEXTURE_UNIT,
>meshInfosTexture.get());
>>>>>>
>>>>>>
>>>>>>     // ----------------------
>>>>>>     // Create and assign the Task- and Mesh shader as usual by
>using the corresponding shader type    // ----------------------
>>>>>>
>>>>>>
>>>>>> Am 10.05.2022 um 21:20 schrieb DC:
>>>>>>
>>>>>> OK.  Thank you.
>>>>>>
>>>>>> On Tuesday, May 10, 2022 at 12:59:37 PM UTC-5 Werner Modenbach
>wrote:
>>>>>>
>>>>>>> Hi DC,
>>>>>>> I think we should clarify some aspects before going into the
>details.
>>>>>>> If I understand well, your problem can be split into 3 parts
>>>>>>> 1) You want to convert an existing model into meshlets. This is
>not
>>>>>>> related to OSG. But I found a git repository from NVIDIA doing
>this job. I
>>>>>>> will lookup the link and send it to you tomorrow.
>>>>>>> 2) For this to work you need task/mesh shaders doing their job
>on the
>>>>>>> GPU. This is also not related to OSG. Maybe you find some
>starting point in
>>>>>>> the repository as well.
>>>>>>> 3) You need to know how to load your shader and how to setup the
>data
>>>>>>> structures in OSG. I hope I can help you with that by providing
>some code
>>>>>>> snippets.
>>>>>>> Just let me know when you are ready for that step. But the code
>I
>>>>>>> provided already should help you.
>>>>>>> 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/7680959c-297e-41ff-9159-464b38c8df73n%40googlegroups.com
>>>>>
><https://groups.google.com/d/msgid/osg-users/7680959c-297e-41ff-9159-464b38c8df73n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>
>>>>
>>>> --
>>>> trajce nikolov nick
>>>>
>>>> --
>>> 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/eb4531f5-3420-4c75-be46-539490c5c659%40email.android.com
>>>
><https://groups.google.com/d/msgid/osg-users/eb4531f5-3420-4c75-be46-539490c5c659%40email.android.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>
>-- 
>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/CAO-%2BzimidCZvXH6xXp84_4e51vyjfPx-9YxEnJsSGMTme4CNWg%40mail.gmail.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/3fd7dcac-1cec-43d9-ac91-04e22f331bd9%40email.android.com.

Reply via email to