]> gitweb.ps.run Git - subsurface_scattering/blobdiff - src/main.cpp
SSSSS comments
[subsurface_scattering] / src / main.cpp
index b836ccbb8abc0b6684ea1c132721ea6c7bac6200..8b48e70a6fddb7c3c9e8abdc3fbbce64ba9d0b9b 100644 (file)
@@ -65,24 +65,6 @@ float sampleWeights[] = {
   0.073580f,  0.023239f, 0.009703f\r
 };\r
 \r
-float translucencySampleVariances[] = {\r
-  0.0064,\r
-  0.0484,\r
-  0.187,\r
-  0.567,\r
-  1.99,\r
-  7.41,\r
-};\r
-\r
-float translucencySampleWeights[] = {\r
-  0.233, 0.455, 0.649,\r
-  0.100, 0.336, 0.344,\r
-  0.118, 0.198, 0,\r
-  0.113, 0.007, 0.007,\r
-  0.358, 0.004, 0,\r
-  0.078, 0,     0,\r
-};\r
-\r
 struct model {\r
   std::vector<float> vertices;\r
   std::vector<GLuint> indices;\r
@@ -252,9 +234,9 @@ model loadModel(const std::string &filename) {
   for (int i = 0; i < scene->mMeshes[0]->mNumVertices; i++) {\r
     aiVector3D v = scene->mMeshes[0]->mVertices[i];\r
     aiVector3D n = scene->mMeshes[0]->mNormals[i];\r
-    result.vertices.push_back(v.x*100);\r
-    result.vertices.push_back(v.y*100);\r
-    result.vertices.push_back(v.z*100);\r
+    result.vertices.push_back(v.x);\r
+    result.vertices.push_back(v.y);\r
+    result.vertices.push_back(v.z);\r
     result.vertices.push_back(n.x);\r
     result.vertices.push_back(n.y);\r
     result.vertices.push_back(n.z);\r
@@ -412,9 +394,8 @@ int main() {
   GLuint shaderProgramShadowmap = compileShaders("shaders/vert_shadowmap.glsl", "shaders/frag_shadowmap.glsl");\r
   GLuint shaderProgramIrradiance = compileShaders("shaders/vert_irradiance.glsl", "shaders/frag_irradiance.glsl");\r
 \r
-  //model m = loadModel("models/Isotrop-upperjaw.ply");\r
-  model m = loadModel("models/african_head/african_head.obj");\r
-\r
+  model m = loadModel("models/Isotrop-upperjaw.ply");\r
+  \r
   arccam arcCam;\r
   freecam freeCam;\r
 \r
@@ -428,6 +409,7 @@ int main() {
   glm::mat4 lightProj = glm::perspective(glm::radians(90.0f), (float)window.getSize().x / window.getSize().y, 0.001f, 1000.0f);\r
 \r
   // Framebuffer\r
+\r
   framebuffer fb_shadowmap("shaders/fbo_vert.glsl", "shaders/fbo_frag.glsl", width, height);\r
   framebuffer fb_irradiance("shaders/fbo_vert.glsl", "shaders/fbo_frag.glsl", width, height);\r
 \r
@@ -439,9 +421,9 @@ int main() {
     int renderState = 2;\r
     float color[3] = { 0.7f, 0.4f, 0.4f };\r
     glm::vec3 lightPos = glm::vec3(0.0f, 0.0f, 0.03f);\r
-    float transmittanceScale = 0.005f;\r
-    float powBase = 2.718;\r
-    float powFactor = 1;\r
+    float transmittanceScale = 0.025f;\r
+    float powBase = 2;\r
+    float powFactor = 1.5;\r
   } DefaultOptions;\r
 \r
   auto options = DefaultOptions;\r
@@ -476,7 +458,7 @@ int main() {
       }\r
     }\r
 \r
-    // Update\r
+    // Update Camera\r
 \r
     if (sf::Mouse::isButtonPressed(sf::Mouse::Right)) {\r
       window.setMouseCursorVisible(false);\r
@@ -499,7 +481,7 @@ int main() {
 \r
     prevMouse = sf::Mouse::isButtonPressed(sf::Mouse::Right);\r
 \r
-    // Render Shadowmap\r
+    // Render Shadowmap to fbo\r
 \r
     glClampColor(GL_CLAMP_READ_COLOR, GL_FALSE);\r
     glClampColor(GL_CLAMP_VERTEX_COLOR, GL_FALSE);\r
@@ -540,7 +522,7 @@ int main() {
 \r
     m.draw();\r
 \r
-    // Render irradiance\r
+    // Render irradiance map to fbo\r
 \r
     glBindFramebuffer(GL_FRAMEBUFFER, fb_irradiance.fbo);\r
     glClearColor(0.0f, 0.0f, 0.0f, 1.0f);\r
@@ -576,8 +558,6 @@ int main() {
     glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "screenHeight"), window.getSize().y);\r
     glUniform1fv(glGetUniformLocation(shaderProgramIrradiance, "samplePositions"), 13, samplePositions);\r
     glUniform3fv(glGetUniformLocation(shaderProgramIrradiance, "sampleWeights"), 13, sampleWeights);\r
-    glUniform2fv(glGetUniformLocation(shaderProgramIrradiance, "translucencySampleVariances"), 6, translucencySampleVariances);\r
-    glUniform3fv(glGetUniformLocation(shaderProgramIrradiance, "translucencySampleWeights"), 6, translucencySampleWeights);\r
 \r
     glUniform1f(\r
       glGetUniformLocation(shaderProgramIrradiance, "transmittanceScale"),\r
@@ -612,7 +592,7 @@ int main() {
 \r
     m.draw();\r
 \r
-    // Render fbo to screen\r
+    // Render fbos to screen and calculate light spread/translucency in shader\r
     \r
     glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\r
 \r
@@ -638,6 +618,8 @@ int main() {
     glDrawArrays(GL_TRIANGLES, 0, 6);\r
     glBindVertexArray(0);\r
 \r
+    // menu\r
+\r
     ImGui::SFML::Update(window, deltaClock.restart());\r
 \r
     ImGui::Begin("Options");\r
@@ -646,8 +628,6 @@ int main() {
     ImGui::InputInt("Render State", &options.renderState);\r
     ImGui::DragFloat3("Color", options.color, 0.01, 0, 1);\r
     ImGui::DragFloat("Transmittance Scale", &options.transmittanceScale, 0.0001f, 0, 0.3);\r
-    ImGui::DragFloat("Pow Base", &options.powBase, 0.01f, 0, 4);\r
-    ImGui::DragFloat("Pow Factor", &options.powFactor, 0.01f, 0, 3);\r
     ImGui::DragFloat3("Light Pos", glm::value_ptr(options.lightPos), 0.01, -5, 5);\r
     if (options.freecam) {\r
       ImGui::LabelText("Position", "%f %f %f", freeCam.pos.x, freeCam.pos.y, freeCam.pos.z);\r