• Advertisement
Sign in to follow this  

Vulkan render huge amount of objects

This topic is 521 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

 

Lower end gpus should be 500-1000 no problems, mid range 1500-3000, high end can hit 8,000+

My computer runs you demo at 30fps  with 1000+ total render objects.  can you show your code how to update transform ?  1000+ times?

What is your hardware? I got above 60k+ objects before the fps dropped to 30 :o
 

old device:

4 core AMD 4500M APU with HD graphic card.

double graphic card  AMD HD 7640G + 7470M

Share this post


Link to post
Share on other sites
Advertisement

 

 

Using Modern API you can implement whole graphics engine in one draw call, e.g.:

Prebuild command buffer to do following steps:

Compute shader to multiply worldspace matrices with projection.

Compute shader to do frustum culling, writing remaining draw count and indices to a buffer

Single Indirect draw call consuming data from that buffer.

 

Per frame, you just need to upload a single buffer containing the (changed) worldspace matrices and call the command buffer.

In real life it won't be that simple (streaming etc.), but i think that's the way to go.

If the GPU is clever an can process the command buffer on its own there is almost no need for slow CPU/GPU interaction,

and 'multithreaded command buffer creation' - the hyped killer feature of new APs is not even necessary at all.

 

 

dx11 can use over 2 shader hs, gs,cs..... nowadays engine only has 2 shader even if the engine use dx11 to render.

Edited by poigwym

Share this post


Link to post
Share on other sites

I run other's hellow world 100 boxes demo( setmaterial once, setShader once, setXXX once)   and get 150 fps, while 300 boxes will drop to 60fps .

It look like that my computer is not modern.

I go back to run ogre's demo,  25 animated models with instancing technique runs 30+fps.

Edited by poigwym

Share this post


Link to post
Share on other sites
Count milliseconds per frame, not frames per second. A halving of a frame rate might look like a massive drop but it sometimes only indicates a small increase in rendering time. And if there's any sort of vsync then it makes frames appear to take longer anyway (but you spot this quickly if you're measuring frame duration).

I would argue that you still have problems with your code, not your computer. A PC from 15 years ago could render more than 300 boxes at 60gps.

Share this post


Link to post
Share on other sites

Count milliseconds per frame, not frames per second. A halving of a frame rate might look like a massive drop but it sometimes only indicates a small increase in rendering time. And if there's any sort of vsync then it makes frames appear to take longer anyway (but you spot this quickly if you're measuring frame duration).

I would argue that you still have problems with your code, not your computer. A PC from 15 years ago could render more than 300 boxes at 60gps.

Yes, I write a instancing demo, and draw 10K boxes at 60fps, but I still can't find error in my engine which doesn't use instancing.

100 boxes no light, 80+fps, 12ms frame time.   400 boxes demo without instancing runs 60fps.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
  • Advertisement
  • Popular Now

  • Advertisement
  • Similar Content

    • By AxeGuywithanAxe
      I wanted to see how others are currently handling descriptor heap updates and management.
      I've read a few articles and there tends to be three major strategies :
      1 ) You split up descriptor heaps per shader stage ( i.e one for vertex shader , pixel , hull, etc)
      2) You have one descriptor heap for an entire pipeline
      3) You split up descriptor heaps for update each update frequency (i.e EResourceSet_PerInstance , EResourceSet_PerPass , EResourceSet_PerMaterial, etc)
      The benefits of the first two approaches is that it makes it easier to port current code, and descriptor / resource descriptor management and updating tends to be easier to manage, but it seems to be not as efficient.
      The benefits of the third approach seems to be that it's the most efficient because you only manage and update objects when they change.
    • By khawk
      CRYENGINE has released their latest version with support for Vulkan, Substance integration, and more. Learn more from their announcement and check out the highlights below.
      Substance Integration
      CRYENGINE uses Substance internally in their workflow and have released a direct integration.
       
      Vulkan API
      A beta version of the Vulkan renderer to accompany the DX12 implementation. Vulkan is a cross-platform 3D graphics and compute API that enables developers to have high-performance real-time 3D graphics applications with balanced CPU/GPU usage. 

       
      Entity Components
      CRYENGINE has addressed a longstanding issue with game code managing entities within the level. The Entity Component System adds a modular and intuitive method to construct games.
      And More
      View the full release details at the CRYENGINE announcement here.

      View full story
    • By khawk
      The AMD GPU Open website has posted a brief tutorial providing an overview of objects in the Vulkan API. From the article:
      Read more at http://gpuopen.com/understanding-vulkan-objects/.


      View full story
    • By HateWork
      Hello guys,
      My math is failing and can't get my orthographic projection matrix to work in Vulkan 1.0 (my implementation works great in D3D11 and D3D12). Specifically, there's nothing being drawn on the screen when using an ortho matrix but my perspective projection matrix work fantastic!
      I use glm with defines GLM_FORCE_LEFT_HANDED and GLM_FORCE_DEPTH_ZERO_TO_ONE (to handle 0 to 1 depth).
      This is how i define my matrices:
      m_projection_matrix = glm::perspective(glm::radians(fov), aspect_ratio, 0.1f, 100.0f); m_ortho_matrix = glm::ortho(0.0f, (float)width, (float)height, 0.0f, 0.1f, 100.0f); // I also tried 0.0f and 1.0f for depth near and far, the same I set and work for D3D but in Vulkan it doesn't work either. Then I premultiply both matrices with a "fix matrix" to invert the Y axis:
      glm::mat4 matrix_fix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f}; m_projection_matrix = m_projection_matrix * matrix_fix; m_ortho_matrix = m_ortho_matrix * matrix_fix; This fix matrix works good in tandem with GLM_FORCE_DEPTH_ZERO_TO_ONE.
      Model/World matrix is the identity matrix:
      glm::mat4 m_world_matrix(1.0f); Then finally this is how i set my view matrix:
      // Yes, I use Euler angles (don't bring the gimbal lock topic here, lol). They work great with my cameras in D3D too! m_view_matrix = glm::yawPitchRoll(glm::radians(m_rotation.y), glm::radians(m_rotation.x), glm::radians(m_rotation.z)); m_view_matrix = glm::translate(m_view_matrix, -m_position); That's all guys, in my shaders I correctly multiply all 3 matrices with the position vector and as I said, the perspective matrix works really good but my ortho matrix displays no geometry.
      EDIT: My vertex data is also on the right track, I use the same geometry in D3D and it works great: 256.0f units means 256 points/dots/pixels wide.
      What could I possibly be doing wrong or missing?
      Big thanks guys any help would be greatly appreciated. Keep on coding, cheers.
       
    • By TheSargKyle
      My team and I are developing a game engine! We would like as much help as possible. The project is currently hobby only, but pay will be appropriately rolled out to those who work on the engine. people we are looking for are:
      Network Programmer Artist For User Interface Physics Programmer Graphics Programmer Prerequisites wanted, but not needed, are: 
      Intermediate C++ knowledge 1 Yr in Game development Industry Thank you for your intrest in the project. You can contact me at my email: thesargkyle@gmail.com or my discord: TheSargKyle#8978
  • Advertisement