Here is a list of a humble reqeuest to implement in next SDK release. I'm posting it here, so other users could share their opinion.
- Add blocking rendering sequence methods:
Rationale:
Code: Select all
IndResult Renderer::Render(); bool ToneMapper::Tone();
MAX is a multithreaded application and it seems IndigoSDK sometimes might be using a wrong thread to work on. Also, there's a number of tasks that don't need (or even won't allow) interactive feedback, like generating material thumbnails. In such tasks speed is most important and putting host application to sleep is just stealing some time.
Note:
Filling message buffer might be redundant in such case. - Implement matrix 4x4 (or Matrix3 + Position) Keyframe definition such as:
Rationale:
Code: Select all
MatrixKeyframe( double time_, const Matrix4 &matrix_ );
Right now keyframes don't hold scaling term, which is stored in frame constant rotation matrix. This leads to naming confusion and rotation data duplication. Also internal matrix composition (testing) might be avoided with MatrixKeyframe (not to mention matrix decomposition in host application just to comply). From my experience linear interpolation of matrix values gives proper results on subframe basis (since most slerp functions use linear interpolation for such values anyway) and on rapid motion subsampling will suffice (also a problem of rotation greater than Pi is avoided) - Add additional rendering layers (in order of importance):
Alpha - it's already implemented though as a seperate mode. Also it would be required so refractive materials could return alpha of background (might be an option).
Object/Material Mask - it is a layer that holds nonzero values only for points of light path that belong to specific object/material set (unique ID set in general). There might be an option just to consider first camera hits. For file storage optimization it's common to output such pass as RGB image where each color channel is one pass (it's implied all three sets are mutually exclusive)
ZDepth - it's (normalized using parameter or not) length of first camera ray hit.
Reflection/Refraction - these are seperate and are values that come from reflection, refraction terms accordingly.
Direct/Indirect Light - should be self-explanatory
Diffuse/Specular - should be self-explanatory - Allow scene manipulation, without regenerating the whole scene tree after it was finalized. Rendering buffers should be affected as well.
Rationale:
For animation and realtime purposes it's important to allow such scenario:Code: Select all
init_renderer(); build_scene(); render(); update_node( some_node ); remove_node( some_node ); add_node( some_node ); update_scene(); render(); {...} render() free_renderer();
- used_materials property in mesh seems redundant and is kind of a performance burden. Could it be removed?
Thanks,
Jake