From 49569f7f9b831366c322d285d0580f54dcdfb6c9 Mon Sep 17 00:00:00 2001 From: Felix Brendel Date: Sat, 5 Jun 2021 01:22:06 +0200 Subject: [PATCH] Render Scene and Rays to Obj --- .gitignore | 1 + dist/scene1.txt | 14 +++ dist/viewer.blend | Bin 0 -> 822752 bytes src/dt_pathtrace.cpp | 3 +- src/main.cpp | 210 +++++++++++++++++++++++++++++++--------- src/ray_pack.hpp | 5 + src/scene.cpp | 225 +++++++++++++++++++++++++++++++++++++++++++ src/scene.hpp | 2 + 8 files changed, 412 insertions(+), 48 deletions(-) create mode 100644 dist/scene1.txt create mode 100644 dist/viewer.blend create mode 100644 src/scene.cpp diff --git a/.gitignore b/.gitignore index 346eb4e..2178ad7 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /dist/* !/dist/*.xyz !/dist/*.txt +!/dist/*.blend diff --git a/dist/scene1.txt b/dist/scene1.txt new file mode 100644 index 0000000..ce8593a --- /dev/null +++ b/dist/scene1.txt @@ -0,0 +1,14 @@ +GridFile = cloud-049.xyz +Extinction = 0.8, 0.9, 0.8 +ScatteringAlbedo = 0.9, 0.9, 0.9 +G = 0.3, 0.3, 0.3 + +CameraPos = -2, -2, -2 +CameraLookAt = 0, 0, 0 +CameraFOV = 10 + +ResX = 10 +ResY = 10 +SamplesPerPixel = 100 + +Seed = 123 diff --git a/dist/viewer.blend b/dist/viewer.blend new file mode 100644 index 0000000000000000000000000000000000000000..d9f5c44dd0dedb8bfe90f1d7d29f19f4b3213810 GIT binary patch literal 822752 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

gcGwt`k$Bmv4F!QLdNWSC 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 VFWZ3n*3gTiO3liZ5PH|&{{g)9 #include -#define INFO(...) printf("INFO: " __VA_ARGS__); +// #define INFO(...) printf("INFO: " __VA_ARGS__); +#define INFO(...) #ifndef pi # define pi 3.1415926535897932384626433832795 diff --git a/src/main.cpp b/src/main.cpp index f520a84..c47ec98 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "vector.hpp" #include "texture3d.hpp" @@ -7,28 +8,24 @@ #include "defer.hpp" #include "dt_pathtrace.hpp" #include "ray_pack.hpp" +#include "scene.hpp" - -void WriteDomainAndRayPackToOBJFile(texture3D Grid, ray_pack* RayPack, - const char* OBJFileName) -{ - FILE* out = fopen(OBJFileName, "w"); +void WriteDomainToOBJFile(texture3D Grid) { + FILE* out = fopen("output/Domain.obj", "w"); if (!out) { - fprintf(stderr, "ERROR: file %s could not be opened\n", OBJFileName); + fprintf(stderr, "ERROR: file %s could not be opened\n", "output/Domain.obj"); return; } defer { fclose(out); }; - for (float3 v : RayPack->vertices) { - fprintf(out, "v %f %f %f\n", v.x, v.y, v.z); - } - // Domain Box float3 maxim; float3 minim; GetGridBox(Grid, minim, maxim); + fprintf(out, "o Domain\n"); + fprintf(out, "v %f %f %f\n", maxim.x, maxim.y, maxim.z); fprintf(out, "v %f %f %f\n", maxim.x, maxim.y, -maxim.z); fprintf(out, "v %f %f %f\n", maxim.x, -maxim.y, maxim.z); @@ -38,16 +35,55 @@ void WriteDomainAndRayPackToOBJFile(texture3D Grid, ray_pack* RayPack, fprintf(out, "v %f %f %f\n", -maxim.x, -maxim.y, maxim.z); fprintf(out, "v %f %f %f\n", -maxim.x, -maxim.y, -maxim.z); + + fprintf(out, "l %u %u\n", 1, 2); + fprintf(out, "l %u %u\n", 3, 4); + fprintf(out, "l %u %u\n", 5, 6); + fprintf(out, "l %u %u\n", 7, 8); + + fprintf(out, "l %u %u\n", 1, 3); + fprintf(out, "l %u %u\n", 2, 4); + fprintf(out, "l %u %u\n", 5, 7); + fprintf(out, "l %u %u\n", 6, 8); + + fprintf(out, "l %u %u\n", 1, 5); + fprintf(out, "l %u %u\n", 2, 6); + fprintf(out, "l %u %u\n", 3, 7); + fprintf(out, "l %u %u\n", 4, 8); +} + +void WriteRayPackToOBJFile(int x, int y, ray_pack* RayPack) { + if (RayPack->ray_starts.count == 0) { + return; + } + + char OBJFileName[1024]; + sprintf(OBJFileName, "output/Ray_Pack_%d_%d.obj", x, y); + + FILE* out = fopen(OBJFileName, "w"); + // FILE* out = stdout; + if (!out) { + fprintf(stderr, "ERROR: file %s could not be opened\n", OBJFileName); + return; + } + defer { + fclose(out); + }; + + for (float3 v : RayPack->vertices) { + fprintf(out, "v %f %f %f\n", v.x, v.y, v.z); + } + fprintf(out, "g Rays\n"); - uint32_t start = 0; - uint32_t end; + int start = 0; + int end; // all but the last sample: - uint32_t i = 0; - for (; i < RayPack->ray_starts.count-1; ++i) { + int i = 0; + for (; i < (int)(RayPack->ray_starts.count)-1; ++i) { end = RayPack->ray_starts[i+1]; fprintf(out, "o Ray_%u\n", i); - for (uint32_t j = start; j < end-1; ++j) { + for (int j = start; j < end-1; ++j) { // NOTE(Felix): +1 because obj vertex ids start counting at 1 fprintf(out, "l %u %u\n", j+1, j+2); } @@ -57,56 +93,136 @@ void WriteDomainAndRayPackToOBJFile(texture3D Grid, ray_pack* RayPack, // NOTE(Felix): the last sample; end = RayPack->vertices.count; fprintf(out, "o Ray_%u\n", i); - printf("start %u end %u\n", start, end); - for (uint32_t j = start; j < end-1; ++j) { + for (int j = start; j < end-1; ++j) { // NOTE(Felix): +1 because obj vertex ids start counting at 1 fprintf(out, "l %u %u\n", j+1, j+2); } +} - end++; - fprintf(out, "g Domain\n"); - fprintf(out, "o Domain\n"); - fprintf(out, "l %u %u\n", end+0, end+1); - fprintf(out, "l %u %u\n", end+2, end+3); - fprintf(out, "l %u %u\n", end+4, end+5); - fprintf(out, "l %u %u\n", end+6, end+7); +void WritePixelGridToOBJFile(float GridWidth, float GridHeight, int ResX, int ResY, + float D, float3 P0, float3 X, float3 Y) +{ + FILE* out = fopen("output/Camera.obj", "w"); + if (!out) { + fprintf(stderr, "ERROR: file %s could not be opened\n", "output/Domain.obj"); + return; + } + defer { + fclose(out); + }; + + float PixelLength = GridWidth / ResX; + + P0 = P0 - + PixelLength / 2 * X - + PixelLength / 2 * Y; + GridWidth += PixelLength; + GridHeight += PixelLength; + + fprintf(out, "o Camera\n"); + + int VertIndex = 1; + + // horizontal lines + for (int i = 0; i <= ResY; ++i) { + float3 left = P0 + (1.0*i/ResY) * Y * GridHeight; + float3 right= left + X * GridWidth; + + fprintf(out, "v %f %f %f\n", left.x, left.y, left.z); + fprintf(out, "v %f %f %f\n", right.x, right.y, right.z); + fprintf(out, "l %d %d\n", VertIndex, VertIndex+1); + + VertIndex += 2; + + } + + // Vertical lines + for (int i = 0; i <= ResX; ++i) { + float3 top = P0 + (1.0*i/ResX) * X * GridWidth; + float3 bottom = top + Y * GridWidth; - fprintf(out, "l %u %u\n", end+0, end+2); - fprintf(out, "l %u %u\n", end+1, end+3); - fprintf(out, "l %u %u\n", end+4, end+6); - fprintf(out, "l %u %u\n", end+5, end+7); + fprintf(out, "v %f %f %f\n", top.x, top.y, top.z); + fprintf(out, "v %f %f %f\n", bottom.x, bottom.y, bottom.z); + fprintf(out, "l %d %d\n", VertIndex, VertIndex+1); - fprintf(out, "l %u %u\n", end+0, end+4); - fprintf(out, "l %u %u\n", end+1, end+5); - fprintf(out, "l %u %u\n", end+2, end+6); - fprintf(out, "l %u %u\n", end+3, end+7); + VertIndex += 2; + + } } -int main() { +void RunSimulationAndOutputScene(scene S) { ray_pack RayPack; RayPack.alloc(); defer { RayPack.dealloc(); }; + Random::InitRNG(S.Seed); + + float3 CameraDirection = Normalize(S.CameraLookAt - S.CameraPos); + + float3 Y = { 0, 0, -1 }; + float3 X = Cross(CameraDirection, Y); + Y = Cross(X, CameraDirection); + + // printf("X: %f %f %f\n", X.x, X.y, X.z); + // printf("Y: %f %f %f\n", Y.x, Y.y, Y.z); + + float D = 0.5f; // how far away from the camera the grid will be + float GridWidth = tan(S.CameraFOV / 2) * 2 * D; + float GridHeight = S.ResY * 1.0 / S.ResX * GridWidth; + + float3 P0 = + S.CameraPos + + CameraDirection * D - + 0.5f * Y * GridHeight - + 0.5f * X * GridWidth; + + // printf("P0: %f %f %f\n", P0.x, P0.y,P0.z); + path_info PI = { }; - PI.x = {-2, -2, -2}; - PI.w = Normalize(float3{0.4,0.4,0} - PI.x); - PI.PassNumber = 0; - - volume_info VI = { }; - VI.Grid = ReadXYZFile("cloud-049.xyz"); - VI.Extinction = {20, 20, 20}; - VI.G = {0.3, 0.3, 0.3}; - VI.ScatteringAlbedo = {0.9, 0.9, 0.9}; - - Random::InitRNG(1); - for (int i = 0; i < 30; ++i) { - DTPathtrace(PI, VI, &RayPack); + PI.x = S.CameraPos; + + // Pixel loop + for (int y = 0; y < S.ResY; ++y) { + for (int x = 0; x < S.ResX; ++x) { + // printf("INFO: %d %d\n", x, y); + float3 P = + P0 + + X * (x*1.0/(S.ResX-1)) * GridWidth + + Y * (y*1.0/(S.ResY-1)) * GridHeight; + // printf("P: %f %f %f\n", P.x, P.y, P.z); + + P = Normalize(P - S.CameraPos); + // printf("dir: %f %f %f\n", P.x, P.y, P.z); + + PI.w = P; + // Sample loop + for (int i = 0; i < S.SamplesPerPixel; ++i) { + PI.PassNumber = i; + DTPathtrace(PI, S.VolInfo, &RayPack); + } + + WriteRayPackToOBJFile(x, y, &RayPack); + RayPack.reset(); + } + } + + WriteDomainToOBJFile(S.VolInfo.Grid); + WritePixelGridToOBJFile(GridWidth, GridHeight, S.ResX, S.ResY, + D, P0, X, Y); +} + +int main(int ArgCount, char** Args) { + if (ArgCount != 2) { + fprintf(stderr, "Usage: cloud_tracer \n"); + return 1; } - WriteDomainAndRayPackToOBJFile(VI.Grid, &RayPack, "RayPack.obj"); + char* SceneFile = Args[1]; + scene Scene = LoadSceneFromFile(SceneFile); + RunSimulationAndOutputScene(Scene); return 0; } diff --git a/src/ray_pack.hpp b/src/ray_pack.hpp index 8d5d934..a7f8082 100644 --- a/src/ray_pack.hpp +++ b/src/ray_pack.hpp @@ -16,6 +16,11 @@ struct ray_pack { ray_starts.dealloc(); } + void reset() { + vertices.clear(); + ray_starts.clear(); + } + void add_vertex(float3 vert) { vertices.append(vert); } diff --git a/src/scene.cpp b/src/scene.cpp new file mode 100644 index 0000000..ce7ea35 --- /dev/null +++ b/src/scene.cpp @@ -0,0 +1,225 @@ +#include +#include +#include +#include "scene.hpp" +#include "defer.hpp" + + +void FillOutDefaultValues(scene* s) { + *s = { 0 }; + + s->CameraFOV = 90; + s->CameraPos = {-2, -2, -2}; + s->ResX = 32; + s->ResY = 32; + s->SamplesPerPixel = 1; +} + +inline bool IsWhitespace(char c) { + return (c == ' ' || c == '\n' || c == '\r' || c == '\t'); +} + +void EatUntilWord(char* Str, uint32_t* ParsePos) { + while (IsWhitespace(Str[*ParsePos])) + ++(*ParsePos); +} + +char* ReadEntireFile(const char* filename) { + char* ret = nullptr; + size_t str_len; + FILE *fp = fopen(filename, "rb"); + if (fp) { + defer { + fclose(fp); + }; + + /* Go to the end of the file. */ + if (fseek(fp, 0L, SEEK_END) == 0) { + /* Get the size of the file. */ + str_len = ftell(fp) + 1; + if (str_len == 0) { + fprintf(stderr, "Empty file"); + ret = (char*)malloc(1); + ret[0] = '\0'; + return ret; + } + + /* Go back to the start of the file. */ + if (fseek(fp, 0L, SEEK_SET) != 0) { + fprintf(stderr, "Error reading file"); + return nullptr; + } + + /* Allocate our buffer to that size. */ + ret = (char*)calloc(str_len, sizeof(char)); + + /* Read the entire file into memory. */ + str_len = fread(ret, sizeof(char), str_len, fp); + + ret[str_len] = '\0'; + if (ferror(fp) != 0) { + fprintf(stderr, "Error reading file"); + return nullptr; + } + } + } else { + fprintf(stderr, "Cannot read file: %s", filename); + return nullptr; + } + + return ret; + /* Don't forget to call free() later! */ +} + +float3 ParseFloat3(char* Str, uint32_t* ParsePos) { + float3 Result = { 0 }; + int CharsRead = 0; + sscanf(Str+(*ParsePos), "%f, %f, %f%n", + &Result.x, &Result.y, &Result.z, &CharsRead); + + *ParsePos += CharsRead; + return Result; +} + +float ParseFloat(char* Str, uint32_t* ParsePos) { + float Result = 0; + int CharsRead = 0; + sscanf(Str+(*ParsePos), "%f%n", &Result, &CharsRead); + *ParsePos += CharsRead; + return Result; +} + +int ParseInt(char* Str, uint32_t* ParsePos) { + int Result = 0; + int CharsRead = 0; + sscanf(Str+(*ParsePos), "%d%n", &Result, &CharsRead); + *ParsePos += CharsRead; + return Result; +} + +char* ParseFileName(char* Str, uint32_t* ParsePos) { + uint32_t EndOfNameIdx = *ParsePos; + while (!IsWhitespace(Str[EndOfNameIdx])) + ++EndOfNameIdx; + + + uint32_t Length = EndOfNameIdx - *ParsePos; + char* Name = Str + *ParsePos; + *ParsePos = EndOfNameIdx; + + char* Result = (char*)malloc(Length+1); + memcpy(Result, Name, Length); + Result[Length] = '\0'; + + return Result; +} + +void ParseSetting(char* Str, uint32_t* ParsePos, scene* Scene) { + uint32_t EndOfNameIdx = *ParsePos; + while ((Str[EndOfNameIdx] >= 'a' && Str[EndOfNameIdx] <= 'z') || + (Str[EndOfNameIdx] >= 'A' && Str[EndOfNameIdx] <= 'Z')) + ++EndOfNameIdx; + + uint32_t Length = EndOfNameIdx - *ParsePos; + char* Name = Str + *ParsePos; + *ParsePos = EndOfNameIdx; + + EatUntilWord(Str, ParsePos); + if (Str[*ParsePos] != '=') { + fprintf(stderr, "ERROR: Syntax error, expected = after setting name (%.*s) Instead: '%s'\n", Length, Name, Str+(*ParsePos)); + return; + } + ++(*ParsePos); + EatUntilWord(Str, ParsePos); + + if (Str[*ParsePos] == '\0') { + fprintf(stderr, "ERROR: EOF while parsing setting %s\n", Name); + return; + } + +#define IsSetting(SettingName) ((sizeof(SettingName)-1 == Length) && \ + (strncmp(SettingName, Name, Length) == 0)) + + if (IsSetting("GridFile")) { + Scene->VolInfo.Grid = ReadXYZFile(ParseFileName(Str, ParsePos)); + } else if (IsSetting("Extinction")) { + Scene->VolInfo.Extinction = ParseFloat3(Str, ParsePos); + } else if (IsSetting("ScatteringAlbedo")) { + Scene->VolInfo.ScatteringAlbedo = ParseFloat3(Str, ParsePos); + } else if (IsSetting("G")) { + Scene->VolInfo.G = ParseFloat3(Str, ParsePos); + } else if (IsSetting("CameraPos")) { + Scene->CameraPos = ParseFloat3(Str, ParsePos); + } else if (IsSetting("CameraLookAt")) { + Scene->CameraLookAt = Normalize(ParseFloat3(Str, ParsePos)); + } else if (IsSetting("SamplesPerPixel")) { + Scene->SamplesPerPixel = ParseInt(Str, ParsePos); + } else if (IsSetting("Seed")) { + Scene->Seed = ParseInt(Str, ParsePos); + } else if (IsSetting("CameraFOV")) { + Scene->CameraFOV = ParseFloat(Str, ParsePos) / 180 * M_PI; + } else if (IsSetting("ResX")) { + Scene->ResX = ParseInt(Str, ParsePos); + } else if (IsSetting("ResY")) { + Scene->ResY = ParseInt(Str, ParsePos); + } else { + fprintf(stderr, "ERROR: Unknown Setting [%.*s] (length %u)", Length, Name, Length); + } + +#undef IsSetting +} + +scene LoadSceneFromFile(const char* FilePath) { + scene Result; + FillOutDefaultValues(&Result); + Result.SceneFile = FilePath; + + char* SceneConfStr = ReadEntireFile(FilePath); + if (!SceneConfStr) { + fprintf(stderr, "ERROR: scene file %s could not be read\n", FilePath); + return {}; + } + + uint32_t ParsePos = 0; + + EatUntilWord(SceneConfStr, &ParsePos); + while (SceneConfStr[ParsePos] != '\0') { + uint32_t OldParsePos = ParsePos; + ParseSetting(SceneConfStr, &ParsePos, &Result); + EatUntilWord(SceneConfStr, &ParsePos); + + if (OldParsePos == ParsePos) { + fprintf(stderr, "ERROR: No parsing progress could be made\n"); + return {}; + } + } + + printf("INFO: SceneFile: %s\n", Result.SceneFile); + + printf("INFO: Extinction: %f %f %f\n", + Result.VolInfo.Extinction.x, + Result.VolInfo.Extinction.y, + Result.VolInfo.Extinction.z); + printf("INFO: ScatteringAlbedo: %f %f %f\n", + Result.VolInfo.ScatteringAlbedo.x, + Result.VolInfo.ScatteringAlbedo.y, + Result.VolInfo.ScatteringAlbedo.z); + printf("INFO: G: %f %f %f\n", + Result.VolInfo.G.x, + Result.VolInfo.G.y, + Result.VolInfo.G.z); + + printf("INFO: CameraPos: %f %f %f\n", + Result.CameraPos.x, + Result.CameraPos.y, + Result.CameraPos.z); + printf("INFO: CameraLookAt: %f %f %f\n", + Result.CameraLookAt.x, + Result.CameraLookAt.y, + Result.CameraLookAt.z); + printf("INFO: CameraFOV: %f\n", Result.CameraFOV); + printf("INFO: ResX: %d\n", Result.ResX); + printf("INFO: ResY: %d\n", Result.ResY); + + return Result; +} diff --git a/src/scene.hpp b/src/scene.hpp index c26df0c..4bf3432 100644 --- a/src/scene.hpp +++ b/src/scene.hpp @@ -6,12 +6,14 @@ struct scene { const char* SceneFile; volume_info VolInfo; + uint32_t Seed; float3 CameraPos; float3 CameraLookAt; float CameraFOV; uint32_t ResX; uint32_t ResY; + uint32_t SamplesPerPixel; }; scene LoadSceneFromFile(const char* FilePath);