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
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);
|
|
}
|
|
}
|
|
|
|
|