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.
61 lines
1.4 KiB
61 lines
1.4 KiB
#pragma kernel FgFiltDist
|
|
|
|
float4x4 _Transform;
|
|
|
|
//float Xmin;
|
|
//float Xmax;
|
|
//float Ymin;
|
|
//float Ymax;
|
|
//float Zmin;
|
|
//float Zmax;
|
|
float4 _PosMin;
|
|
float4 _PosMaxX;
|
|
float4 _PosMaxY;
|
|
//float4 _PosMaxZ;
|
|
float4 _PosMaxZLeft;
|
|
float4 _PosMaxZRight;
|
|
float4 _PosDot;
|
|
|
|
RWTexture2D<float4> _VertexTex;
|
|
RWTexture2D<float4> _AlphaTex;
|
|
|
|
|
|
[numthreads(8, 8, 1)]
|
|
void FgFiltDist(uint3 id : SV_DispatchThreadID)
|
|
{
|
|
float4 vertex = _VertexTex[id.xy];
|
|
float3 vpos = mul(_Transform, vertex).xyz; // (float3)vertex; //
|
|
bool mask = (vertex.a > 0.0); // && (vpos.y >= 0);
|
|
|
|
//bool isInside = vpos.x >= Xmin && vpos.x <= Xmax && vpos.y >= Ymin && vpos.y <= Ymax && vpos.z >= Zmin && vpos.z <= Zmax;
|
|
//mask = mask && isInside;
|
|
|
|
float3 pmin = (float3)_PosMin;
|
|
float3 pv = vpos - pmin;
|
|
|
|
float3 px = (float3)_PosMaxX;
|
|
float3 py = (float3)_PosMaxY;
|
|
//float3 pz = (float3)_PosMaxZ;
|
|
|
|
float3 pzl = (float3)_PosMaxZLeft;
|
|
float3 pzr = (float3)_PosMaxZRight;
|
|
|
|
float3 pz = (float3)lerp(pzr, pzl, pv.x / (_PosMaxX.x - pmin.x));
|
|
|
|
float3 pdot = (float3)_PosDot;
|
|
|
|
float dx = dot(pv, px);
|
|
bool bx = dx >= 0.0 && dx <= pdot.x;
|
|
|
|
float dy = dot(pv, py);
|
|
bool by = dy >= 0.0 && dy <= pdot.y;
|
|
|
|
float dz = dot(pv, pz);
|
|
bool bz = dz >= 0.0 && dz <= pdot.z;
|
|
|
|
mask = mask && bx && by && bz;
|
|
//_VertexTex[id.xy] = float4(mask, mask, mask, mask);
|
|
|
|
mask = mask * mask; // make it positive
|
|
_AlphaTex[id.xy] = float4(mask, mask, mask, mask);
|
|
}
|
|
|