You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
879 B
42 lines
879 B
#pragma kernel CSMain
|
|
|
|
#include "UnityCG.cginc"
|
|
|
|
#define WORK_GROUP_SIZE 1024
|
|
|
|
struct Vertex
|
|
{
|
|
float3 position;
|
|
float3 normal;
|
|
//float4 color;
|
|
//float2 uv;
|
|
//float2 uv2;
|
|
float4 tangent;
|
|
};
|
|
|
|
CBUFFER_START(Variables)
|
|
int index;
|
|
int count;
|
|
float4x4 model_matrix;
|
|
CBUFFER_END
|
|
|
|
RWStructuredBuffer<float4> home_buffer;
|
|
RWStructuredBuffer<float4> home_velocity_buffer;
|
|
RWStructuredBuffer<Vertex> vertex_buffer;
|
|
|
|
[numthreads(WORK_GROUP_SIZE, 1, 1)]
|
|
void CSMain(uint3 id : SV_DispatchThreadID)
|
|
{
|
|
uint offset = (uint)index;
|
|
if (id.x < offset || id.x >= offset + count)
|
|
return;
|
|
|
|
float4 pos = float4(vertex_buffer[id.x - offset].position, 1);
|
|
pos = mul(model_matrix, pos);
|
|
|
|
float3 last_pos = home_buffer[id.x].xyz;
|
|
float3 vel = length(last_pos) == 0.0f ? float3(0, 0, 0) : pos.xyz - last_pos;
|
|
home_velocity_buffer[id.x] = float4(vel, 1.0f);
|
|
|
|
home_buffer[id.x] = pos;
|
|
}
|
|
|