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.
