вычислить шейдер (если оператор сделает скорость моделирования ниже?) - PullRequest
0 голосов
/ 12 октября 2019

я делаю код, который относится к вычислительным шейдерам. сначала прочитайте данные из 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;
}

Мне действительно нужна помощь. Пожалуйста, ответьте много. я не очень хорош в английском. Итак, спасибо, что прочитали мой код.

...