Hi Nick, I think this is really the point where it is leaving meshlet specific support. This is the standard developers work. Werner
On 1. Juni 2022 09:39:41 MESZ, Trajce Nikolov NICK <[email protected]> wrote: >Yea, but I have a handle on that part. Can ve done via read callback in >the >registry, or saved as well, I saw there is serialization support. > >I wrote a simple visitor that should convert a loaded model into >meshlets. >I had it working nicely until I started to experiment with threaded >access. > >Attached is the source. Not elegant at all but I would be happy if you >can >have a look and maybe spot the problem > >Thanks a bunch! > >On Wed, Jun 1, 2022, 09:25 Werner Modenbach < >[email protected]> wrote: > >> Hi Nick, >> good to hear you are getting closer. >> Due to the fact that standard classes of paged data handle vertex >arrays >> etc. autonomously and mesh shaders work different I think you have to >look >> up where this handling is done and write your own derived class. >> Werner >> >> >> On 31. Mai 2022 21:28:08 MESZ, Trajce Nikolov NICK < >> [email protected]> wrote: >>> >>> Hi again Werner, >>> >>> I think I got it after reading few articles, actually the main one >from >>> NVIDIA. Do you have experience in using this with paged data? >>> >>> On Sat, May 28, 2022 at 8:35 PM Trajce Nikolov NICK < >>> [email protected]> wrote: >>> >>>> Hi Werner! >>>> >>>> Thanks soo much for the shared code and the hints!!! I have a >better >>>> understanding now how all works together wrt. buffers. Just this >snippet, >>>> if you are willing to provide more hints. >>>> >>>> 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; >>>> >>>> } >>>> >>>> >>>> The ideal is to have a working code, a bit more robust then the one >I found in the repo in the meshshaders branches. But I am getting there >slowly :-) >>>> >>>> >>>> This is indeed a big thing! >>>> >>>> >>>> Big thanks! >>>> >>>> Nick >>>> >>>> >>>> >>>> ><https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> >Virus-free. >>>> www.avast.com >>>> ><https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> >>>> ><#m_-7378692753233440497_m_-4127028168198206277_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>>> >>>> On Sat, May 28, 2022 at 3:09 PM Trajce Nikolov NICK < >>>> [email protected]> wrote: >>>> >>>>> Okay. Thanks a buch for these hints! I am starting next week with >>>>> this. Will post findings >>>>> >>>>> On Sat, May 28, 2022, 14:44 Werner Modenbach < >>>>> [email protected]> wrote: >>>>> >>>>>> 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/3fd7dcac-1cec-43d9-ac91-04e22f331bd9%40email.android.com >>>>>> ><https://groups.google.com/d/msgid/osg-users/3fd7dcac-1cec-43d9-ac91-04e22f331bd9%40email.android.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> >>>>> >>>> >>>> -- >>>> trajce nikolov nick >>>> >>>> >>>> ><https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> >Virus-free. >>>> www.avast.com >>>> ><https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail> >>>> ><#m_-7378692753233440497_m_-4127028168198206277_DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >>>> >>> >>> >>> -- >>> 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/0ab4c82f-1f17-47e9-aa1d-9c02b5a3f7fb%40email.android.com >> ><https://groups.google.com/d/msgid/osg-users/0ab4c82f-1f17-47e9-aa1d-9c02b5a3f7fb%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-%2Bzi%3DoBzkPA8dKafgKp-ua2yeqijsvyyg-G14e%3DvTU%2BzF1yQ%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/8dcaed4f-0992-482a-abdb-7d30e7f83b5b%40email.android.com.
