Я хочу отправить целую цепочку в HLSL в виде 3D-массива, используя единство. Я пытался сделать это уже пару дней, но без какой-либо выгоды. Я пытался упаковать буферы друг в друга (StructuredBuffer<StructuredBuffer<StructuredBuffer<int>>>
), но это просто не сработает. И мне нужно сделать эту вещь изменчивой, поэтому я не могу использовать массивы в struct
. Что мне делать?3D-буферы в HLSL?
EDIT: Чтобы уточнить немного больше, что я пытаюсь сделать здесь, это медицинская программа. Когда вы делаете сканирование своего тела, некоторые файлы генерируются. Эти файлы называются DICOM-файлами (.dcm). Эти файлы выдаются доктору. Врач должен открыть программу, выбрать все файлы DICOM и загрузить их. Каждый файл DICOM содержит изображение. Однако эти изображения не являются обычными изображениями, которые используются в нашей повседневной жизни. Эти изображения имеют оттенки серого, и каждый пиксель имеет значение от -1000 до нескольких тысяч, поэтому каждый пиксель сохраняется как 2 байта (или Int16). Мне нужно создать 3D-модель тела, которое было отсканировано, поэтому я использую алгоритм Marching Cubes для его создания (посмотрите на Polygonising a Scalar Field). Проблема в том, что я использовал цикл для каждого пикселя примерно на 360 512 * 512 размерах изображений, что занимало слишком много времени. Раньше я читал пиксельные данные из каждого файла, когда мне это нужно, когда я использовал CPU. Теперь я пытаюсь сделать этот процесс во время выполнения. Мне нужно отправить все пиксельные данные на графический процессор перед его обработкой. Это моя проблема. Мне нужен графический процессор для чтения данных с диска. Поскольку это невозможно, мне нужно отправить 360 * 512 * 512 * 4 байта данных на GPU в виде 3D-массива Ints. Я также планирую хранить данные там, чтобы избежать повторной передачи этого огромного объема памяти. Что мне делать? Refer to this link to know more about what I'm doing
Вы можете сгладить свой массив? как FlatArr [x + WIDTH * (y + DEPTH * z)] = 3DArr [x, y, z] с размерами 3DArr [HEIGHT, WIDTH, DEPTH] – TheDjentleman
Максимальный размер буфера в HLSL равен 2048 байтам, что тоже маленький для моей цели @xyLe_ – None