Files
Fishing2/Packages/com.jbooth.microverse/Scripts/Editor/Resources/MicroVerseRasterToTerrain.compute
2025-06-09 23:23:13 +08:00

103 lines
2.5 KiB
Plaintext

#pragma kernel CSMain
#pragma multi_compile_local __ _COUNT_2 _COUNT_3 _COUNT_4 _COUNT_5 _COUNT_6 _COUNT_7 _COUNT_8
Texture2D<float4> _IndexMap;
Texture2D<float4> _WeightMap;
RWTexture2D<float4> _Result0;
#if _COUNT_2
#define TEXCOUNT 2
#elif _COUNT_3
#define TEXCOUNT 3
#elif _COUNT_4
#define TEXCOUNT 4
#elif _COUNT_5
#define TEXCOUNT 5
#elif _COUNT_6
#define TEXCOUNT 6
#elif _COUNT_7
#define TEXCOUNT 7
#elif _COUNT_8
#define TEXCOUNT 8
#else
#define TEXCOUNT 1
#endif
#if _COUNT_2 || _COUNT_3 || _COUNT_4 || _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
RWTexture2D<float4> _Result1;
#endif
#if _COUNT_3 || _COUNT_4 || _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
RWTexture2D<float4> _Result2;
#endif
#if _COUNT_4 || _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
RWTexture2D<float4> _Result3;
#endif
#if _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
RWTexture2D<float4> _Result4;
#endif
#if _COUNT_6 || _COUNT_7 || _COUNT_8
RWTexture2D<float4> _Result5;
#endif
#if _COUNT_7 || _COUNT_8
RWTexture2D<float4> _Result6;
#endif
#if _COUNT_8
RWTexture2D<float4> _Result7;
#endif
[numthreads(8,8,1)]
void CSMain (uint3 id : SV_DispatchThreadID)
{
int4 indexes = round(_IndexMap[id.xy] * 32);
float4 weights = _WeightMap[id.xy];
// normalize weights
float total = weights.x + weights.y + weights.z + weights.w;
if (total <= 0)
{
weights = float4(0.25,0,0,0);
}
else
{
weights /= total;
}
float o[TEXCOUNT*4];
for (int i = 0; i < TEXCOUNT*4; ++i)
{
o[i] = 0;
}
o[indexes.x] += weights.x;
o[indexes.y] += weights.y;
o[indexes.z] += weights.z;
o[indexes.w] += weights.w;
_Result0[id.xy] = float4(o[0], o[1], o[2], o[3]);
#if _COUNT_2 || _COUNT_3 || _COUNT_4 || _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
_Result1[id.xy] = float4(o[4], o[5], o[6], o[7]);
#endif
#if _COUNT_3 || _COUNT_4 || _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
_Result2[id.xy] = float4(o[8], o[9], o[10], o[11]);
#endif
#if _COUNT_4 || _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
_Result3[id.xy] = float4(o[12], o[13], o[14], o[15]);
#endif
#if _COUNT_5 || _COUNT_6 || _COUNT_7 || _COUNT_8
_Result4[id.xy] = float4(o[16], o[17], o[18], o[19]);
#endif
#if _COUNT_6 || _COUNT_7 || _COUNT_8
_Result5[id.xy] = float4(o[20], o[21], o[22], o[23]);
#endif
#if _COUNT_7 || _COUNT_8
_Result6[id.xy] = float4(o[24], o[25], o[26], o[27]);
#endif
#if _COUNT_8
_Result7[id.xy] = float4(o[28], o[29], o[30], o[31]);
#endif
}