static void GenerateDatasetForTrainingCVAE() { const int N = 1 << 22; StreamWriter writer = new StreamWriter("ScattersDataSet.ds"); Console.WriteLine("Generating file..."); GRandom rnd = new GRandom(); for (int i = 0; i < N; i++) { if (i % 1000 == 0) { Console.Write("\r "); Console.Write("\rCompleted... " + (i * 100.0f / N).ToString("F2")); } var settings = GenerateNewSettings(rnd); var r = Scattering.GetVPTSampleInSphere(settings, rnd); // code path variables in a compact way float3 zAxis = float3(0, 0, 1); float3 xAxis = abs(r.x.z) > 0.999 ? float3(1, 0, 0) : normalize(cross(r.x, float3(0, 0, 1))); float3 yAxis = cross(zAxis, xAxis); float3x3 normR = transpose(float3x3(xAxis, yAxis, zAxis)); float3 normx = mul(r.x, normR); float3 normw = mul(r.w, normR); float3 normX = mul(r.X, normR); float3 normW = mul(r.W, normR); float3 B = float3(1, 0, 0); float3 T = cross(normx, B); float costheta = normx.z; float beta = dot(normw, T); float alpha = dot(normw, B); writer.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}", settings.Sigma, settings.G, settings.Phi, r.N, costheta, beta, alpha, normX.x, normX.y, normX.z, normW.x, normW.y, normW.z ); } Console.WriteLine(); writer.Close(); Console.WriteLine("Done."); }
static void GenerateDatasetForTabulationXMethod() { int total = 0; Parallel.For(0, 8, file => { BinaryWriter writer = new BinaryWriter(new FileStream("DataSet" + file + ".bin", FileMode.Create)); GRandom rnd = new GRandom(file); int N = 1 << 24; // 16 million samples per file while (N-- > 0) { var settings = GenerateSettingsForX(rnd); var r = Scattering.GetVPTSampleInSphere(settings, rnd); // code path variables in a compact way float3 zAxis = float3(0, 0, 1); float3 xAxis = abs(r.x.z) > 0.999 ? float3(1, 0, 0) : normalize(cross(r.x, float3(0, 0, 1))); float3 yAxis = cross(zAxis, xAxis); float3x3 normR = transpose(float3x3(xAxis, yAxis, zAxis)); float3 normx = mul(r.x, normR); float3 normw = mul(r.w, normR); float3 normX = mul(r.X, normR); float3 normW = mul(r.W, normR); float3 B = float3(1, 0, 0); float3 T = cross(normx, B); float costheta = normx.z; float beta = dot(normw, T); float alpha = dot(normw, B); writer.Write(settings.Sigma); writer.Write(settings.G); writer.Write(r.N); writer.Write(costheta); writer.Write(beta); writer.Write(alpha); Interlocked.Add(ref total, 1); if (total % 100000 == 0) { Console.WriteLine("Overall progress: {0}%", total * 100.0f / (8 * (1 << 24))); } } writer.Close(); }); }