У меня есть 3D-приложение WPF (С# .NET 4.0), в котором много 3D-геометрий. Теперь мне нужно раскрасить эти геометрические фигуры, применив текстуру. Источником текстуры является один большой файл .PNG, подобный следующему:

Файл .PNG содержит повторяющиеся разделы. Один раздел для каждой комбинации регистра, отклонения и гармоники. Варианты имеют одно или несколько отклонений (nDev). Кейсы также имеют одну или несколько гармоник (nHarm). Таким образом, количество разделов равно сумме nDev * nHarm каждого случая.
Каждая строка пикселей в разделе соответствует ровно одной геометрии.

Конечный пользователь должен иметь возможность выбрать Case (поле со списком), Deviation (ползунок) и Harmonic (ползунок). Эта комбинация приводит к смещению сечения. Основная идея заключается в том, что это смещение раздела можно использовать для изменения положения «области сопоставления» поверх исходного .png с помощью TranslateTransform.
Теперь вызов(ы), с которыми я сталкиваюсь. Обычный файл результатов содержит: от 200 до 400 строк на секцию от 32 до 64 гармоник до 250 отклонений от 20 до 30 случаев
Чтобы получить максимальную производительность, я должен использовать текстуры, которые остаются в пределах RenderCapability.MaxHardwareTextureSize. Поэтому я хочу разделить .png на случай (и, если необходимо, на отклонение и/или гармонику).
Вопрос: Как разделить исходный файл .png на несколько кистей? И какую кисть использовать для максимальной производительности? Должен ли я придерживаться ImageBrush (поскольку он статичен после первоначального разделения) или использовать BitmapCacheBrush, т.е.?