Какой самый эффективный способ передачи данных для отрисовки в шейдер?
Это более не конкретная проблема, а интересующий меня вопрос. Я не особо много работал с шейдерами (почти 0 познаний в них). Сейчас мой код примерно делает следующее:
- Создаёт "сырые" данные текстуры:
NativeArray<Color32> textureData = new(..., Allocator.TempJob);
GenerateTextureJob textureJob = new() {
...
};
JobHandle textureHandle = textureJob.Schedule(..., ...);
textureHandle.Complete();
- Создаёт новую текстуру и загружает в неё созданные данные:
Texture2D texture = new(chunkSize, chunkSize, TextureFormat.RGBA32, false) {
filterMode = FilterMode.Point
};
texture.LoadRawTextureData(textureData);
texture.Apply(false);
- Загружает эту текстуру в материал, который потом отобразится через
Graphics.RenderMesh
Больше половины всего времени в примере выше занимает загрузка и создание текстуры. Какие я вижу решения этого:
- Передавать через буфер в шейдер сразу "сырые" данные без создания текстуры.
- Второе решение не сильно отличается от первого, я могу видоизменить джобу и вместо создания
textureData, просто оставить массив высот по которому я буду определять нужный цвет прямо в шейдере.
Не отрицаю что это может не то что помочь, а лишь сделать хуже. Всем заранее спасибо!