Я работаю над проектом Unity3D, который на мгновение опирается на 3D-текстуру.
Проблема в том, что Unity позволяет использовать Texture3D только пользователям Pro. Поэтому я ищу альтернативу Texture3D, возможно, одномерную текстуру (хотя изначально недоступную в Unity), которая интерпретируется как трехмерная в шейдере (который использует трехмерную текстуру).
Есть ли способ сделать это, сохраняя (предпочтительно) информацию о субпикселях?
(Теги GLSL и Cg добавлены, т.к. здесь кроется суть проблемы)
Изменить: проблема также решена здесь: webgl glsl emulate texture3d Однако это еще не закончено и работает исправно.
Редактировать: в настоящее время я игнорирую правильную информацию о субпикселях. Поэтому любая помощь в преобразовании 2D-текстуры в 3D-информацию приветствуется!
Изменить: Я отозвал свой ответ, так как его пока недостаточно:
float2 uvFromUvw( float3 uvw ) {
float2 uv = float2(uvw.x, uvw.y / _VolumeTextureSize.z);
uv.y += float(round(uvw.z * (_VolumeTextureSize.z - 1))) / _VolumeTextureSize.z;
return uv;
}
С инициализацией как Texture2D(volumeWidth, volumeHeight * volumeDepth).
В большинстве случаев он работает, но иногда показывает неправильные пиксели, вероятно, из-за информации о субпикселях, которую он собирает. Как я могу это исправить? Зажатие входа не работает.