я делаю код, который относится к вычислительным шейдерам. сначала прочитайте данные из Excel и сравните положение игрового объекта в единстве и данных Excel (около 700 000), а когда значение совпадает (сравните значения в вычислительном шейдере), значение записывается в ЦП, но выполнение в порядке, но скоростьвыполнения довольно мало .. поэтому мне нужна помощь .. спасибо ..
мне нужно сделать около 1000 частиц, но сравнение только 1 частицы делает низкую скорость.
[shader code]
#pragma kernel PositionCS
struct Data{
float x;
float y;
float z;
float vx;
float vy;
float vz;
};
#define SIMULATION_BLOCK_SIZE 1024
StructuredBuffer<Data> _datacompare;
RWStructedBuffer<Data> _dataparsing;
int _MaxDataMun; // about 760000;
float _PositionX;
float _PositionY;
float _PositionZ;
groupshared Data group[SIMULATION_BLOCK_SIZE];
[numthreads(SIMULATION_BLOCK_SIZE,1,1)]
void PositionCS
(
uint3 DTid : SV_DispatchThreadID,
uint3 Gid : SV_GroupID,
uint3 GTid : SV_GroupThreadID,
uint GI : SV_GroupIndex
)
{
Data c = _datacompare[P_ID];
Data d = _dataparsing[P_ID];
[loop]
for (uint N_block_ID = 0; N_block_ID < (uint)_MaxDataMun; N_block_ID +=
SIMUALTION_BLOCK_SIZE)
{
group[GI] = _datacompare[N_block_ID+GI];
GroupMemoryBarrierWithGroupSync();
for (int N_tile_ID = 0; N_tile_ID < SIMULATION_BLOCK_SIZE; N_tile_ID++)
{
if (group[N_tile_ID].x == _PositionX && group[N_tile_ID].y == _PositionY
&& group[N_tile_ID].z == _PositionZ)
{
c.x = group[N_tile_ID].x;
c.y = group[N_tile_ID].y;
c.z = group[N_tile_ID].z;
c.vx = group[N_tile_ID].vx;
c.vy = group[N_tile_ID].vy;
c.vz = group[N_tile_ID].vz;
}
}
GroupMemoryBarrierWithGroupSync();
}
_dataparsing[P_ID] = c;
}
Мне действительно нужна помощь. Пожалуйста, ответьте много. я не очень хорош в английском. Итак, спасибо, что прочитали мой код.