Home

Awesome

OpenGL_NeuralTexture

This repository generates training data for NeuralTexture(https://github.com/SSRSGJYD/NeuralTexture) using OpenGL. The scene is rendered with Blinn-Phong Light Model, Gamma Correction and shadows.

Requirements

OpenGL >= 3.0

CMake

How to Use

Compile the program

cd OpenGL_NeuralTexture
mkdir build
cd build
cmake ..
make

Run the program

cp lyr_opengl_task1 ..
cd ..
./lyr_opengl_task1

Some problems that may occur

You may need to modify the codes to have different effects.

Get the training data

In main.cpp: line 37, set enable_output = true; line 41-43, set the output directories.

Recompile and run the program. The uv, camera extrinsic, and pixel data(the rendered scene / each frame) will be outputed to the directories. The runnning program will display a black screen.

The pixel data (frame) is stored in .png format. Uv shaped (height, width,2) is stored in .npy format. Camera extrinsics shaped (3) is stored in .npy format.

Object models

The repository includes two models - basketball and vase as shown in the folder. To change the model, in main.cpp line 40, set object_id = 0 for basketball or object_id = 1 for vase. Then recompile and run the program.

If you want to load your own model, the library included in the repository supports .obj format. You may need to understand how OpenGL works and modify some codes.

Change resolution

The default resolution of the output training data is 512x384 to achieve a balance between performance and image quality. You may change the resolution in main.cpp line 33-36.

Black screen

If you want to see the realtime rendered scene, in main.cpp line 37, set enable_output = false;.Recompile and run the program. The rendered scene shall be outputed to the screen.

You may wonder why outputing the data will lead to the black screen (the only difference is to set enable_output = true/false). When not outputing data, the pixel data is directly written into screen. When outputing the data, the pixel data, uv, normals etc. are written into video memories and the screen itself displays nothing.

Additional Information

This repository only serves to offer training data with OpenGL. It is not intended to be any OpenGL tutorial. Hence, the way to control this program is quite primitive ( nobody likes to go into C code and modify it). Sorry for any related trouble.

If you are not satisfied with the scenes the program produce (such as the motion of the camera), you may need to modify more than one line in the program. I recommend that you first understand OpenGL. A good tutorial is https://learnopengl.com/ . Feel free to put up issues and discuss any problems you meet.

Rendered scene example

basketball

vase