protected void DepthKernel(float dt) { var kernel = new Kernel(voxelControl, "Depth"); SetupControlKernel(kernel, dt); voxelControl.SetVector("_TileOffset", tileOffset); var instance = CityGlobal.Instance; if (instance.Tiles.ContainsKey(tileTag)) { var u = instance.Tiles[tileTag]; var tb = BoundsWorldToLocal(u.WBounds, transform); voxelControl.SetVector("_TileBoundsMin", tb.min); voxelControl.SetVector("_TileBoundsMax", tb.max); var wb = BoundsWorldToLocal(instance.WholeBounds, transform); voxelControl.SetVector("_WholeBoundsMin", wb.min); voxelControl.SetVector("_WholeBoundsMax", wb.max); // uv (xy : scale, wz : offset) voxelControl.SetVector( "_Tile", new Vector4( tb.size.x / wb.size.x, tb.size.y / wb.size.y, (tb.min.x - wb.min.x) / wb.size.x, (tb.min.y - wb.min.y) / wb.size.y ) ); } GPUHelper.Dispatch3D(voxelControl, kernel, data.Width, data.Height, data.Depth); }
public void Clear() { var kernel = compute.FindKernel("Clear"); compute.SetTexture(kernel, "_Volume", buffer); GPUHelper.Dispatch3D(compute, kernel, size, size, size); }
protected void CalculateNormal() { var kernel = compute.FindKernel("CalculateNormal"); compute.SetInt("_Width", N); compute.SetInt("_Height", N); compute.SetInt("_Depth", N); compute.SetFloat("_Inv", 1f / N); compute.SetTexture(kernel, "_Volume", volume.Tex); compute.SetTexture(kernel, "_Result", normalBuffer); GPUHelper.Dispatch3D(compute, kernel, N, N, N); }
protected void Build() { var kernel = compute.FindKernel("Build"); compute.SetInt("_Width", N); compute.SetInt("_Height", N); compute.SetInt("_Depth", N); compute.SetInt("_Border", 1); compute.SetFloat("_Inv", 1f / N); compute.SetFloat("_Threshold", threshold); compute.SetTexture(kernel, "_Volume", volume.Tex); compute.SetBuffer(kernel, "_Buffer", vertexBuffer); compute.SetTexture(kernel, "_Normals", normalBuffer); compute.SetBuffer(kernel, "_CubeEdgeFlags", cubeEdgeFlags); compute.SetBuffer(kernel, "_TriangleConnectionTable", triangleConnectionTable); GPUHelper.Dispatch3D(compute, kernel, N, N, N); }