[
    {
        "Variant name": "main",
        "Reviewer name": "Nicolas Bonneel <nicolas.bonneel@liris.cnrs.fr>",
        "Is master variant (boolean)": true,
        "Is variant deprecated (boolean)": false,
        "Title": "Fitting Procedural Yarn Models for Realistic Cloth Rendering",
        "DOI": "10.1145/2897824.2925932",
        "Year": 2016,
        "ACM Keywords": [
            "Rendering"
        ],
        "Topic {Rendering, Animation and Simulation, Geometry, Images, Virtual Reality, Fabrication}": "Rendering",
        "Co-authors from academia (boolean)": true,
        "Co-authors from industry (boolean)": false,
        "ACM Open Access (boolean)": false,
        "PDF on the authors' webpage / institution (boolean)": true,
        "PDF URL": "https://www.cs.cornell.edu/~kb/publications/SIG16ProceduralYarn.pdf",
        "PDF on Arxiv or any openarchive initiatives (boolean)": true,
        "Arxiv/OAI page URL": "",
        "Project URL": "http://www.cs.cornell.edu/projects/ctcloth/",
        "Code available (boolean)": true,
        "If code not available, pseudo-code available (boolean)": false,
        "If pseudo-code, could the paper be trivially implemented? {0..4}": "",
        "Code URL": "http://www.cs.cornell.edu/~kb/projects/ctcloth/code_data_v2.zip",
        "Code URL2": "",
        "MD5 sum (for archives)": "81D9A5B612681C9C41538A3EACC6E46D",
        "git/hg/svn commit hash or revision number": "",
        "MD5 sum (for archives) URL2": "",
        "git/hg/svn commit hash or revision number URL2": "",
        "Software Heritage permalink": "",
        "Software type {Code, Binary, Partial Code}": "Code",
        "Code License (if any)": "custom",
        "Are the code authors explicit? (boolean)": false,
        "Build/Configure mechanism": "IDE Project (VS,..), Not applicable (python, Matlab..)",
        "Dependencies": "matlab / opencv",
        "Does the software require paywall/proprietary software/material (boolean)?": true,
        "Does the code need data (not examples) (boolean)": false,
        "Nature of the data (pretrained model, LUT...)": "",
        "License of the data": "",
        "Able to perform a replicability test (boolean)": true,
        "If not able to perform a test, was it due to missing hardware/software? (boolean)": false,
        "Documentation score {0=NA,1,2,3}": 0,
        "Dependencies score {0=NA, 1,2,3,4,5}": 4,
        "Build/configure score {0=NA, 1,2,3,4,5}": 4,
        "Fixing bugs score (if any) {0=NA, 1,2,3,4,5}": 4,
        "Replicate paper results score {0=NA, 1,2,3,4,5}": 3,
        "Adaptability score to other contexts {0=NA, 1,2,3,4,5}": 5,
        "Time spent for the test (code download to first successful run, [0,10], 10min slots, 100min max)": 10,
        "Operating system for the test": "Windows",
        "Build instructions/comments": "The program comes with microCT scans and a window executable, which also launches matlab code. To be able to recompile the code with Visual Studio 2017, you need a number of steps :\n\n- MicroCT.cpp, line 1270, replace :\n std:vector<float> ellipse_s_vec(loopNum), ellipse_l_vec(loopNum), yarn_radius_vec(loopNum);\nby\nstd::vector<float> ellipse_s_vec(loopNum), ellipse_l_vec(loopNum), yarn_radius_vec(loopNum);\n(note the :: instead of : )\n\n- Util.h, line 99, remove the round function.\n\n- add the preprocessor directive _CRT_SECURE_NO_WARNINGS\n\n* The provided precompiled OpenCV was causing issues ; perhaps it had been compiled in 32 bits (?). I used a fresh OpenCV install instead, which led to a couple of additional edits :\n\n- in MicroCT.h, replace the opencv includes \n#include \"opencv/include/opencv/cv.h\"\n#include \"opencv/include/opencv/highgui.h\"\n#include \"opencv/include/opencv2/opencv.hpp\"\nby\n#include <opencv2/highgui.hpp>\n#include \"opencv2/opencv.hpp\"\n#include <opencv2/core/types_c.h>\n#include <opencv2/highgui/highgui_c.h>\n\n-replace opencv_core249.lib;opencv_highgui249.lib;opencv_features2d249.lib;opencv_imgproc249.lib; by opencv_world420.lib in the project linked libraries.\n\n- in MicroCT.cpp, line 784, replace \n\tellipse(Mat(displayImg), Point(C1.x, C1.y), Size(l, s), (double)rot_angle, 0, 360, Scalar(1.f, 0.f, 0.f));\n\tellipse(Mat(displayImg), Point(C2.x, C2.y), Size(l, s), (double)rot_angle, 0, 360, Scalar(0.f, 1.f, 0.f));\nby\n\tellipse(cv::cvarrToMat(displayImg), Point(C1.x, C1.y), Size(l, s), (double)rot_angle, 0, 360, Scalar(1.f, 0.f, 0.f));\n\tellipse(cv::cvarrToMat(displayImg), Point(C2.x, C2.y), Size(l, s), (double)rot_angle, 0, 360, Scalar(0.f, 1.f, 0.f));\n\n- in MicroCT.cpp, line 818, replace cv::Mat mat = cv::Mat(img, true); by cv::Mat mat = cv::cvarrToMat(img, true);\n\n- in MicroCT.cpp, line 1422, replace:\n\tellipse(Mat(displayImg), Point(C1.x, C1.y), Size(cvEL, cvES), (double)rot_angle, 0, 360, Scalar(1.f, 1.f, 1.f));\n\tellipse(Mat(displayImg), Point(C2.x, C2.y), Size(cvEL, cvES), (double)rot_angle, 0, 360, Scalar(1.f, 1.f, 1.f));\nby\n\tellipse(cv::cvarrToMat(displayImg), Point(C1.x, C1.y), Size(cvEL, cvES), (double)rot_angle, 0, 360, Scalar(1.f, 1.f, 1.f));\n\tellipse(cv::cvarrToMat(displayImg), Point(C2.x, C2.y), Size(cvEL, cvES), (double)rot_angle, 0, 360, Scalar(1.f, 1.f, 1.f));\n\n- in MicroCT.cpp, line 1610, replace\n\tellipse(Mat(displayImg), Point(C1.x, C1.y), Size(e_l, e_s), (double)rot1, 0, 360, Scalar(1.f, 1.f, 1.f));\n\tellipse(Mat(displayImg), Point(C2.x, C2.y), Size(e_l, e_s), (double)rot2, 0, 360, Scalar(1.f, 1.f, 1.f));\n\tellipse(Mat(displayImg), Point(C3.x, C3.y), Size(e_l, e_s), (double)rot3, 0, 360, Scalar(1.f, 1.f, 1.f));\nto\n\tellipse(cv::cvarrToMat(displayImg), Point(C1.x, C1.y), Size(e_l, e_s), (double)rot1, 0, 360, Scalar(1.f, 1.f, 1.f));\n\tellipse(cv::cvarrToMat(displayImg), Point(C2.x, C2.y), Size(e_l, e_s), (double)rot2, 0, 360, Scalar(1.f, 1.f, 1.f));\n\tellipse(cv::cvarrToMat(displayImg), Point(C3.x, C3.y), Size(e_l, e_s), (double)rot3, 0, 360, Scalar(1.f, 1.f, 1.f));\n\n* Ultimately, the code runs. I didn't have to change my matlab settings as proposed (in fact, I do not have the option 'Location based on Matlab startup rules' but only 'Last working folder from previous Matlab session').\nHowever, the code only produces text files that contain strands. I do not know how to render this .txt in Mitsuba, but it was easy to grasp the file structure and code a loader in my own path tracer (though with circular cross section for simplicity instead of elliptical as suggested in Algorithm 1). The file merely contains the number of fibers, and then, for each fiber, the number of segments, for each segment the X, Y, Z coordinates.\n\nNevertheless, the paper mentions a modified Mitsuba to be able to make the renderings, and the paper shows (impressive) renderings of fabrics, not just strands... Also, which reflectance model was used to render the fibers ?",
        "Misc. comments": "Most of the time was spent in trying to visualize the results ; here, coding my own loader and renderer.",
        "Software language": "C/C++, Matlab / Mathematica / .."
    }
]