private static void GetDetailClipmapOrigins(DelegateParameterArrayBinding<Vector2> binding, RenderContext context, Vector2[] values)
 {
     var origins = GetTerrainNode(context).DetailClipmap.Origins;
       for (int i = 0; i < Math.Min(origins.Length, values.Length); i++)
     values[i] = (Vector2)origins[i];
 }
 private static void GetTerrainClearValues(DelegateParameterArrayBinding<Vector4> binding, RenderContext context, Vector4[] values)
 {
     var terrain = GetTerrainNode(context).Terrain;
       var clearValues = (context.RenderPass == "Base") ? terrain.BaseClearValues : terrain.DetailClearValues;
       for (int i = 0; i < Math.Min(clearValues.Length, values.Length); i++)
     values[i] = (Vector4)clearValues[i];
 }
        private static void GetDetailClipmapCellSizes(DelegateParameterArrayBinding<float> binding, RenderContext context, float[] values)
        {
            var cellSizes = GetTerrainNode(context).DetailClipmap.CellSizes;
              for (int i = 0; i < Math.Min(cellSizes.Length, values.Length); i++)
            values[i] = cellSizes[i];

              for (int i = 1; i < values.Length; i++)
            if (Numeric.IsNaN(values[i]))
              values[i] = values[i - 1] * 2;
        }