private static Vector4 GetChannels(Texture2D tex, float u, float v, int miplevel, int w, int h, float rangeX, float rangeY) {
if (tex == null)
return Vector4.zero;
if (miplevel == 0) {
return tex.GetPixelBilinear(u, v);
}
// Averages the result over the area within the 'pixel' for this mip level
// this is similar, but not quite exactly the same as trilinear filtering.
Vector4 value = Vector4.zero;
for (int x = -miplevel; x < miplevel; x++) {
for (int y = -miplevel; y < miplevel; y++) {
float um = u + (x * rangeX);
float vm = v - (y * rangeY);
value += (Vector4) tex.GetPixelBilinear(um, vm);
}
}
int t = miplevel * 2;
value /= t * t;
return value;
}