You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.7 KiB
Plaintext

#pragma kernel CSMain
#include "Thread.hlsl"
struct MeshFullProperties
{
float3 sourceVertex;
float3 sourceNormal;
float4 sourceTangent;
float4 sourceColor;
float2 sourceUV;
};
uniform RWByteAddressBuffer sourceMeshData;
uniform uint vertexBufferStride;
uniform RWStructuredBuffer<MeshFullProperties> bakedMesh;
#define SIZEOF_FLOAT3 12
#define SIZEOF_FLOAT4 16
uniform float4x4 transformMatrix;
uniform float4x4 rotationMatrix;
uniform uint verticesCount;
float3 loadSourceVertex(uint index)
{
return mul(transformMatrix, float4(asfloat(sourceMeshData.Load3(index * vertexBufferStride)), 1)).xyz;
}
float3 loadSourceNormal(uint index)
{
return mul(rotationMatrix, float4(asfloat(sourceMeshData.Load3(index * vertexBufferStride + SIZEOF_FLOAT3)), 1)).xyz;
}
float4 loadSourceTangent(uint index)
{
return mul(rotationMatrix, asfloat(sourceMeshData.Load4(index * vertexBufferStride + SIZEOF_FLOAT3 * 2)));
}
float4 loadSourceColor(uint index)
{
return mul(rotationMatrix, asfloat(sourceMeshData.Load4(index * vertexBufferStride + SIZEOF_FLOAT3 * 2 + SIZEOF_FLOAT4)));
}
float2 loadSourceUV(uint index)
{
return mul(rotationMatrix, float4(asfloat(sourceMeshData.Load2(index * vertexBufferStride + SIZEOF_FLOAT3 * 2 + SIZEOF_FLOAT4 * 2)), 1, 1)).xy;
}
THREAD_SIZE
void CSMain(uint3 id : SV_DispatchThreadID)
{
uint index = id.x;
if (index < verticesCount)
{
MeshFullProperties baked;
baked.sourceVertex = loadSourceVertex(index);
baked.sourceNormal = loadSourceNormal(index);
baked.sourceTangent = loadSourceTangent(index);
baked.sourceColor = loadSourceColor(index);
baked.sourceUV = loadSourceUV(index);
bakedMesh[index] = baked;
}
}