atom feed1 message in org.vtk.vtk-developers[vtk-developers] Time for some more O...
FromSent OnAttachments
Ken MartinSep 3, 2015 7:22 am 
Subject:[vtk-developers] Time for some more OpenGL2 Polygonal Updates
From:Ken Martin (ken.@kitware.com)
Date:Sep 3, 2015 7:22:48 am
List:org.vtk.vtk-developers

Heya folks, giving an update on some recent changes/features in the OpenGL2 backend. Here we go...

1) *SHADOW SUPPORT* - Added support for shadows back into VTK and changed it up a bit. Shadows can provide valuable depth queues and structural queues in many domains such as surgical simulation, CFD analysis, and surgical planning. You can now turn on shadows in VTK by simply doing renderer->UseShadowsOn() (wow dude that’s easy) Having said that, remember that the default light in VTK is a headlight and a headlight doesn’t really produce any shadows (ahh there’s the catch). So if you want shadows make sure to have a light that is a scene light for best performance or a camera light. There is an example/test in Rendering/OpenGL2/Testing/Cxx/TestShadowMapPass.cxx. That example sets up Shadows using render passes which allows for a bit more flexibility but the same approach is implemented under the hood in renderer->UseShadowsOn()

2) *CUSTOM SHADERS* - Added support for customizing the default PolyDataMapper shaders. You can now modify or completely replace the default VTK shaders using methods such as

AddShaderReplacement: replaces a strings in the current shader SetVertexShaderCode: replaces the default shader template with your own

AddObserver(vtkCommand::UpdateShaderEvent,...)

These methods (and similar others) give you a great degree on control of the VTK PolyData shaders. There are examples/tests in Rendering/OpenGL2/Testing/Cxx/TestUserShader.cxx and TestUserShader2.cxx. Through the UpdateShaderEvent you can modify the default VTK uniforms or your own uniforms as desired. There is currently not a general purpose easy API for binding your own data arrays to attributes but we may add one at some point in the future. Currently VTK will send down the default attributes for you to use in your shader (position, normal, tcoords, colors, etc)

3) *IMPROVED POINT SPRITES* - Significantly improved the vtkPointGaussianMapper. With some great help from Scott Wittenburg and Sebastien Jourdain we added the ability to map size and/or opacity arrays through a vtkPiecewiseFunction so that very large or small data can be rendered in a very flexible manner. We also made it so that if you do provide a cell array with an explicit list of points to use, then the mapper will use only those points, and finally you can modify the fragment shader code on the mapper now to draw whatever shapes you want. There is a new example/test in Rendering/OpenGL2/Testing/Cxx/TestPointGaussianMapperOpacity.cxx that shows using the new features and includes sample shader code for drawing squares or black edged circles.

4) *ANDROID and iOS IMPROVEMENTS* - Revisited the android VTK build with some help from Casey Goodlett and finally added two nightly android dashboards for VTK. One for API 18 with OpenGL ES 2.0 and one for API 21 with OpenGL ES 3.0. This should help us maintain working builds for Android going forward. While we were at it we added the vtkFrameBufferObject and ShadowMap functionality into the OpenGL ES builds so that those devices can make use of that functionality. We are still working on the android build process and hope to someday soon put out some binaries to make using VTK on android even easier.

Thanks

Ken

Ken Martin PhD

Chairman & CFO

Kitware Inc.

28 Corporate Drive

Clifton Park NY 12065

ken.@kitware.com

919 869-8871 (w)

This communication, including all attachments, contains confidential and legally privileged information, and it is intended only for the use of the addressee. Access to this email by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken in reliance on it is prohibited and may be unlawful. If you received this communication in error please notify us immediately and destroy the original message. Thank you.

*From:* Ken Martin [mailto:ken.@kitware.com] *Sent:* Wednesday, July 15, 2015 3:19 PM *To:* 'vtkdev' *Subject:* RE: Some OpenGL2 Polygonal Updates etc

It has been a while and I am overdue for updates on the new OpenGL rendering engine. We are in pretty good shape in terms of the new rendering engine with VTK. Tests are passing and we are generally ready to make it the default for the upcoming VTK release. The old engine will also be available as a CMake option. Here are some specific changes since the last update.

1) Added support in the PointGaussianMapper for rendering points as points ( /golfclap ). Sometimes in cosmology distant regions will be rendered as points while closer regions are rendered as splats. Now this mapper can handle both cases. This also makes this mapper an efficient mapper in VTK for rendering point clouds. It will render vtkPoints with colors quickly and with minimal memory.

2) Moved the new backend to OpenGL 3.2. While it still should mostly work with OpenGL 2.1 our target version is 3.2 which adds some nice features and yet is still fairly old. One of the big additions is support for geometry shaders. VTK now supports the use of geometry shaders and vtkOpenGLPolyDataMapper has some features to help make writing a geometry shader easier for all the numerous rendering cases VTK supports.

3) One of the features OpenGL 3.2 does not always support is rendering thick lines. The spec only requires support for thicknesses up to 1.0. So we have implemented support in VTK using a geometry shader for thick lines on systems that do not support them.

4) Had a chance to work with the Mesa folks to fix an issue in Mesa that was causing problems with cell coloring and picking. They were great to work with and as of Mesa version 10.5.5 this is fixed.

5) Made a large change to how cell coloring and picking was handled. In the old OpenGL2 code we would duplicate vertices to handle cell coloring so that each vertex was only used by one cell. This caused a huge explosion in memory required for those cases. The new approach makes use of gl_PrimitiveID to lookup cell colors (or cell normals or pick ids) in a texture map which saves us from having to duplicate vertices. Unfortunately gl_PrimitiveID is buggy on current Apple systems with AMD hardware so we had to implement a workaround for those systems which does impact performance on those systems. Apple is aware of the issue and will hopefully have a fix in the future.

6) Many fixes to vtkCompositePolyDataMapper2 to handle complex cases that ParaView testing exposed.

Thanks

Ken

Ken Martin PhD

Chairman & CFO

Kitware Inc.

28 Corporate Drive

Clifton Park NY 12065

ken.@kitware.com

919 869-8871 (w)

This communication, including all attachments, contains confidential and legally privileged information, and it is intended only for the use of the addressee. Access to this email by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken in reliance on it is prohibited and may be unlawful. If you received this communication in error please notify us immediately and destroy the original message. Thank you.

*From:* Ken Martin [mailto:ken.@kitware.com <ken.@kitware.com>] *Sent:* Monday, February 2, 2015 11:26 AM *To:* 'vtkdev' *Subject:* Some OpenGL2 Polygonal Updates etc

Here are a few updates to the polygonal work we’ve been doing on the new OpenGL2 backend in VTK.

1) Created a vtkPointGaussianMapper [3] class for cosmology for quickly rendering lots of translucent Gaussian splats. This class will get refined a bit as it starts getting used more. Similar in concept to the PointSprite extensions that were added into Paraview by John Biddiscombe, Ugo Varetto and Stephane Ploix from CSCS and EDF.

2) Changed how the transformation matrices were handled in the vertex shader [7]. It was doing V’ = VCDC * MCVC * V and a couple tests were failing. Instead we now compute MCDC on the CPU in double precision and instead do V’ = MCDC * V in the shader which fixed the test and is generally a better way to do it. We often need the other two matrices as well which is why the original code just used those.

3) Added a rendering timing framework/executable [5] to make it easier to run test sequences across machines and see the results. Marcus and Rob have expanded on it and Aashish has added a volume rendering test.

4) Rewrote the vtkParametricFunctionSource [6] to be significantly faster (4x) and more memory efficient. We use this source to generate surfaces for rendering timings and it was a bit slow.

5) A bunch of fixes related to getting IceT to work with OpenGL2 [1] which led to some release graphics resource issues being fixed [2].

6) “Fixed” a longstanding failing test, TestChartXYZ [4] which was intermittently failing on some systems.

7) Marcus and Rob ran some rendering benchmarks showing upwards of 3 billion triangles per second on a 300 million triangle model. That is a big model and some solid performance.

Currently I am wrapping up a change to the vtkCompositePolyDataMapper2 so that in some common circumstances it will render significantly faster (maybe 10x). This is targeted at helping apps that have lots of small polygonal parts that are not glyphed. Also adding in support for texture coordinate transformation matrices which are used by the GeoView classes in VTK. Tim Thirion is fixing up some iOS build issues and David Lonnie is working on removing an old text mapper that was causing some issues. JC has been working on updating Slicer to build against the current VTK with OpenGL2.

Thanks

Ken

[1] http://review.source.kitware.com/#/t/5130/

[2] http://review.source.kitware.com/#/t/5171/

[3] http://review.source.kitware.com/#/t/5198/

[4] http://review.source.kitware.com/#/t/5248/

[5] http://review.source.kitware.com/#/t/5276/

[6] http://review.source.kitware.com/#/t/5302/

[7] http://review.source.kitware.com/#/t/5327/

Ken Martin PhD

Chairman & CFO

Kitware Inc.

28 Corporate Drive

Clifton Park NY 12065

ken.@kitware.com

518 881-4901 (w)

518 371-4573 (f)

This communication, including all attachments, contains confidential and legally privileged information, and it is intended only for the use of the addressee. Access to this email by anyone else is unauthorized. If you are not the intended recipient, any disclosure, copying, distribution or any action taken in reliance on it is prohibited and may be unlawful. If you received this communication in error please notify us immediately and destroy the original message. Thank you.

_______________________________________________ Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Search the list archives at: http://markmail.org/search/?q=vtk-developers

Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/vtk-developers