私は、1を使って3D配列の形でHLSLに一連の整数を送る必要があります。私は数日の間これをやろうとしましたが、何の利益もありません。私はお互いにバッファーをパックしようとしましたが(StructuredBuffer<StructuredBuffer<StructuredBuffer<int>>>
)、それは単に動作しません。そして、私はこの事をサイズ変更可能にする必要があるので、配列をstruct
に使用することはできません。私は何をすべきか?HLSLの3Dバッファー?
編集:私がここでやろうとしていることをもう少し明確にするために、これは医療プログラムです。あなたの体をスキャンすると、いくつかのファイルが生成されます。これらのファイルはDICOMファイル(.dcm)と呼ばれます。これらのファイルは医師に渡されます。医師はプログラムを開き、すべてのDICOMファイルを選択してロードする必要があります。各DICOMファイルにはイメージが含まれています。しかし、それらの画像は、私たちの日常生活で使用される通常の画像とは異なります。これらのイメージはグレースケールであり、各ピクセルは-1000〜数千の範囲の値を持つため、各ピクセルは2バイト(またはInt16)として保存されます。スキャンしたボディの3Dモデルを生成する必要があります。そのため、Marching Cubesアルゴリズムを使用して生成しています(Polygonising a Scalar Fieldをご覧ください)。問題は、約360×512×512サイズの画像で各ピクセルをループすることになりました。私は、CPUを使用したときに必要になった時点で、各ファイルからピクセルデータを読み込みました。今私はこのプロセスを実行時に行わせようとしています。私はそれを処理する前にすべてのピクセルデータをGPUに送る必要があります。それが私の問題です。ディスクからデータを読み込むにはGPUが必要です。それは不可能なので、360 * 512 * 512 * 4バイトのデータを3DのIntsの形式でGPUに送る必要があります。私はまた、その膨大な量のメモリの再転送を避けるためにそこにデータを保存する予定です。私は何をすべきか?我々は現在、これがさえ甘く作るためにSetMatrixArrayとSetVectorArrayを可能にし、MaterialPropertyBlockを持っているユニティでRefer to this link to know more about what I'm doing
アレイを平坦化できますか? 3DArr [HEIGHT、WIDTH、DEPTH] – TheDjentleman
でのFlatArr [x + WIDTH *(y + DEPTH * z)] = 3DArr [x、y、z]のようにHLSLのバッファの最大サイズは2048バイトです私の目的のために小さい@xyLe_ – None