Proposed Shader Improvements
From KitwarePublicJump to navigationJump to search
This document is a place to collect all proposals for shader changes/improvements/issues.
- When material is unloaded, the state of the Property may not get restored --- vtkProperty should keep an internal state of the property before the material was loaded and restore to that state when the material is unloaded.
- The XML attribute names could be a little clearer, some suggestions:
-'ivar' refers to instance variables on vtk objects -'value' refers to numeric values or defined constants in the case of Cg transformation matrix settings. -'shader_var' refers to the name of particular hardware shader variables
For the tags PropertyUniform, CameraUniform, LightUniform the current construction: <PropertyUniform value="Ambient" name="property.Ambient"> </PropertyUniform> would become: <PropertyUniform ivar="Ambient" shader_var="property.Ambient"> </PropertyUniform>
For tages that describe values for ivars for vtkProperty: <Member name="DiffuseColor" value="0.85 0.05 0.15"> </Member> would become <Member ivar="DiffuseColor" value="0.85 0.05 0.15"> </Member>
- When a shader is applied to an object/actor in ParaView that object's actor controls no longer affect the object's position, opacity, etc.
- ParaView Bug: 2838The XML settings for a vtkProperty specified in a material file should be reflected in the ParaView gui elements. For example, if the material file defines a color for the object, that color should be the color seen in the ParaView 'display' tab.
- To facilitate code re-use it would be great if a subroutine could be stored as XML and added to a pre-compiled shader's text definition. A particular subroutine could be specified in shader's XML definition in the material file. The subroutine would be appended/prepended to the shader's source before it's compiled. The subroutines could be added to the library or repository similarly to the way shaders and materials re handled. This would facilitate shader development and reduce code bloat. GLSL does a similar thing by linking multiple programs, but this solution is extensible to Cg and other languages.
- Before loading a shader there should be a check to see if all it's uniform variables have been set. If not, don't load the shader, but report an error.
- Adding surface roughness to renderings requires a measure of the scale of the object. Simply having units specified in the vtkPointArrays that describe geometry should be enough for the purposes of shading, but a more general approach would be useful in other filters/algorithms in VTK and ParaView. Clearly units are important in analysis and should be carried through the post-processing and visualization:
- ParaView should apply texture coordinates as easily as it applies normals to surfaces. A texture coordinates filter based on vtkImplicitTextureCoords.h might work.
- Here's some intial results of using materials in ParaView with the light kit: pvShaders3.jpg