dwelling act 4 (live motion cap w/ kinect azure)
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.
 
 
 
 
 

145 lines
2.3 KiB

#pragma kernel BakeColorBodyIndex
uint2 _ColorRes;
uint2 _DepthRes;
StructuredBuffer<uint> _BodyIndexMap;
StructuredBuffer<float> _Color2DepthMap;
//Texture2D<float4> _ColorTex;
RWStructuredBuffer<uint> _ColorBodyIndexMap;
[numthreads(8, 8, 1)]
void BakeColorBodyIndex(uint3 id : SV_DispatchThreadID)
{
//if (id.x & 1 == 0)
{
uint ci = id.x + id.y * _ColorRes.x;
uint bi = 255;
// bi0
if (!isinf(_Color2DepthMap[ci << 1]))
{
int dx = _Color2DepthMap[ci << 1];
int dy = _Color2DepthMap[(ci << 1) + 1];
uint di = dx + dy * _DepthRes.x;
uint bi4 = _BodyIndexMap[di >> 2];
switch (di & 3)
{
case 0:
bi = bi4 & 255;
break;
case 1:
bi = (bi4 >> 8) & 255;
break;
case 2:
bi = (bi4 >> 16) & 255;
break;
case 3:
bi = (bi4 >> 24) & 255;
break;
}
}
uint bi0 = bi;
// bi1
ci++;
bi = 255;
if (!isinf(_Color2DepthMap[ci << 1]))
{
int dx = _Color2DepthMap[ci << 1];
int dy = _Color2DepthMap[(ci << 1) + 1];
uint di = dx + dy * _DepthRes.x;
uint bi4 = _BodyIndexMap[di >> 2];
switch (di & 3)
{
case 0:
bi = bi4 & 255;
break;
case 1:
bi = (bi4 >> 8) & 255;
break;
case 2:
bi = (bi4 >> 16) & 255;
break;
case 3:
bi = (bi4 >> 24) & 255;
break;
}
}
uint bi1 = bi << 8;
// bi2
ci++;
bi = 255;
if (!isinf(_Color2DepthMap[ci << 1]))
{
int dx = _Color2DepthMap[ci << 1];
int dy = _Color2DepthMap[(ci << 1) + 1];
uint di = dx + dy * _DepthRes.x;
uint bi4 = _BodyIndexMap[di >> 2];
switch (di & 3)
{
case 0:
bi = bi4 & 255;
break;
case 1:
bi = (bi4 >> 8) & 255;
break;
case 2:
bi = (bi4 >> 16) & 255;
break;
case 3:
bi = (bi4 >> 24) & 255;
break;
}
}
uint bi2 = bi << 16;
// bi3
ci++;
bi = 255;
if (!isinf(_Color2DepthMap[ci << 1]))
{
int dx = _Color2DepthMap[ci << 1];
int dy = _Color2DepthMap[(ci << 1) + 1];
uint di = dx + dy * _DepthRes.x;
uint bi4 = _BodyIndexMap[di >> 2];
switch (di & 3)
{
case 0:
bi = bi4 & 255;
break;
case 1:
bi = (bi4 >> 8) & 255;
break;
case 2:
bi = (bi4 >> 16) & 255;
break;
case 3:
bi = (bi4 >> 24) & 255;
break;
}
}
uint bi3 = bi << 24;
_ColorBodyIndexMap[ci >> 2] = (bi0 | bi1 | bi2 | bi3);
}
}