Implementing Heatmaps with arrays
One characteristic that makes shaders hard to master is the lack of proper documentation. Most developers learn how to use shaders by messing around with the code, without having a deep knowledge of what's going on. The problem is amplified by the fact that Cg/HLSL makes a lot of assumptions, some of which are not properly advertised. Unity3D allows C# scripts to communicate with shaders using methods such as SetFloat
, SetInt
, and SetVector
. Unfortunately, Unity3D doesn't have a SetArray
method, which leads many developers to believe that Cg/HLSL doesn't support arrays either. This is not true. This recipe will show you how it's possible to pass arrays to shaders. Just remember that GPUs are highly optimized for parallel computations, and using for
loops in a shader will dramatically decrease its performance.
For this recipe, we will implement a heatmap, as shown in the following screenshot: