From 314b34423070cf127464da79a53cddf6b1c38587 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sat, 06 May 2017 20:33:17 -0400
Subject: [PATCH] Skin shader

---
 BiparamEditor.java |    4 +-
 BoundaryRep.java   |    2 
 CameraPane.java    |   60 +++++++++++++++++++++++++-----
 GroupEditor.java   |    7 +++
 Object3D.java      |    4 +
 5 files changed, 63 insertions(+), 14 deletions(-)

diff --git a/BiparamEditor.java b/BiparamEditor.java
index 1525688..9598f9c 100644
--- a/BiparamEditor.java
+++ b/BiparamEditor.java
@@ -66,9 +66,9 @@
              */
             super.SetupUI2(oe);
                 
-            uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 1024+biparam.minUDivs, biparam.uDivs);
+            uDivsField = AddSlider(oe.ctrlPanel, "U #", biparam.minUDivs, 250+biparam.minUDivs, biparam.uDivs);
             Return();
-            vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, 1024+biparam.minVDivs, biparam.vDivs);
+            vDivsField = AddSlider(oe.ctrlPanel, "V #", biparam.minVDivs, (int)(250/6.28)+biparam.minVDivs, biparam.vDivs);
             Return();
 //		oe.aConstraints.gridwidth = 1;
 //		oe.aConstraints.fill = GridBagConstraints.VERTICAL;
diff --git a/BoundaryRep.java b/BoundaryRep.java
index 4b1c03c..7fc9789 100644
--- a/BoundaryRep.java
+++ b/BoundaryRep.java
@@ -2163,7 +2163,7 @@
              //   if (slow)
     // aout 2013
                 // sept 2013 merde...
-                W = 13;
+                W = 3; // 13;
 
            // POSERATE
                     if (CameraPane.tickcount > 0 || CameraPane.SLOWPOSE)
diff --git a/CameraPane.java b/CameraPane.java
index 073c943..8fe82ec 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -2000,10 +2000,12 @@
          */
     TextureData ReduceTexture(TextureData texturedata, int resolution) // String name)
     {
+        int pixelformat = texturedata.getPixelFormat();
+        
         int stride = 1;
-        if (texturedata.getPixelFormat() == GetGL().GL_RGB || texturedata.getPixelFormat() == GetGL().GL_BGR) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE)
+        if (pixelformat == GetGL().GL_RGB || pixelformat == GetGL().GL_BGR) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE)
             stride = 3;
-        if (texturedata.getPixelFormat() == GetGL().GL_RGBA || texturedata.getPixelFormat() == GetGL().GL_BGRA) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE_ALPHA)
+        if (pixelformat == GetGL().GL_RGBA || pixelformat == GetGL().GL_BGRA) // || texturedata.getPixelFormat() == GL.GL_LUMINANCE_ALPHA)
             stride = 4;
 
         int width = texturedata.getWidth();
@@ -7590,7 +7592,8 @@
     
     float[] options1 = new float[]{1000, 0.00001f, 20, 0, 0}; // focus, aperture, Shadow blur, aniso, anisoV
     float[] options2 = new float[]{0, 1, 0, 0}; // fog density, intensity, elevation
-    float[] options3 = new float[]{1, 1, 1, 1}; // fog color. image intensity
+    float[] options3 = new float[]{1, 1, 1, 0}; // fog color
+    float[] options4 = new float[]{1, 0, 1, 0}; // image intensity, subsurface, lightsheen
 
     static int imagecount = 0; // movie generation
     
@@ -8784,7 +8787,7 @@
             if (!IsFrozen())
             {
                 // dec 2012
-                if (!(!flash && !lightMode && drawMode == DEFAULT && ANTIALIAS > 0))
+                if (!ambientOcclusion && !(!flash && !lightMode && drawMode == DEFAULT && ANTIALIAS > 0))
                 {
             framecount++;
                     shadowbuffer.display();
@@ -9379,6 +9382,7 @@
 
         gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 63, options2, 0);
         gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 62, options3, 0);
+        gl.glProgramEnvParameter4fvARB(gl.GL_FRAGMENT_PROGRAM_ARB, 61, options4, 0);
 
         options2[0] *= renderCamera.Distance();
 
@@ -10357,11 +10361,13 @@
                 "PARAM params6   = program.env[6];" + // bump, noise, borderfade, fog punchthrough
                 "PARAM params7   = program.env[7];" + // noise power, opacity power
                 "PARAM options0   = program.env[63];" + // fog density, intensity, elevation
-                "PARAM options1   = program.env[62];" + // fog rgb color, image intensity
+                "PARAM options1   = program.env[62];" + // fog rgb color
+                "PARAM options2   = program.env[61];" + // image intensity, subsurface, lightsheen
                 "PARAM pointlight   = program.env[127];" + // ...
                 "PARAM zero     = { 0.0, 0.0, 0.0, 0.0 };" +
                 "PARAM halfhalf = { 0.25, 0.25, 0.25, 1.0 };" +
                 "PARAM half     = { 0.5, 0.5, 0.5, 1.0 };" +
+                "PARAM threequarter = { 0.75, 0.75, 0.75, 1.0 };" +
                 "PARAM two      = { 2.0, 2.0, 2.0, 1.0 };" +
                 "PARAM ten      = { 10, 10, 10, 1.0 };" +
                 "PARAM one3rd  = { 0.5, 0.33333333333, 0.333333333, 1.0 };" +
@@ -10422,6 +10428,10 @@
                 "TEMP R1;" +
                 "TEMP R2;" +
                 "TEMP R3;" +
+                "TEMP min;" +
+                "TEMP max;" +
+                "TEMP average;" +
+                "TEMP saturation;" +
                 "TEMP keep1;" +
                 "TEMP keep2;" +
                 "TEMP keep3;" +
@@ -10952,10 +10962,40 @@
 
                 // skin?
                 // Saturation for skin
-                /**/ // c'est ici
-    (Skinshader?                "DP3 temp.x, final,one;" +
+                /**/
+   (Skinshader?
+                "DP3 average.x, final,one;" +
+                "MUL average, one3rd.xxxx,average.xxxx;" +
+
+                "MIN min.x, final.x,final.y;" +
+                "MIN min.x, min.x,final.z;" +
+
+                "MAX max.x, final.x,final.y;" +
+                "MAX max.x, max.x,final.z;" +
+                "MOV max, max.xxxx;" +
+                
+                "SUB saturation, max, final;" +
+                
+                "ADD temp.x, max.x, one10th.x;" +
+                "RCP temp.x, temp.x;" +
+                "MUL temp.x, temp.x, half.x;" +
+                "MUL saturation, saturation, temp.xxxx;" +
+                
+            "DP3 ndotl.x, normald, light;" +
+            "MAX ndotl.x, ndotl.x, -ndotl.x;" +
+                
+                "SUB temp.x, one.x, ndotl.x;" +
+                "ADD temp.x, temp.x, options2.z;" + // lightsheen
+                "ADD temp.y, one.y, options2.y;" + // sursurface
+                "MUL temp.x, temp.x, temp.y;" +
+                                
+                "MUL saturation, saturation, temp.xxxx;" +
+                "SUB_SAT temp, max, saturation;" +
+/**
+                "DP3 temp.x, final,one;" +
                 "MUL R2, one3rd.xxxx,temp.xxxx;" +
-                "SUB temp, final,R2;" +
+                "SUB temp, final, R2;" +
+                  
             // using light angle
             "DP3 ndotl.x, normald,light;" +
             //"SLT ndotl.y, ndotl.x, zero.x;" +
@@ -10968,7 +11008,6 @@
             // using light intensity
             "MOV ndotl.z, R2.x;" +
             "MUL ndotl.z, ndotl.z, ndotl.z;" + // tuning...
-                
 // june 2014
                 "MAD R1.x, ndotl.z,slope.y,one.x;" +
 //                "SUB ndotl.x, one.x, ndotl.x;" +
@@ -10980,6 +11019,7 @@
 //"MUL R2.y, shadow.x,R2.y;" + // avril 2014
                 
         "MAD temp.x, R2.y, ndotl.y, temp.x;" + // red shift (skin)
+/**/
                 
              //   "ADD final, R2,temp;" +
                 "MOV final, temp;"
@@ -11069,7 +11109,7 @@
                 /**/
                 // HDR
                 "MOV temp.z, final.a;" +
-                "MUL final, final,options1.w;" +
+                "MUL final, final,options2.x;" +
                 "MOV final.a, temp.z;" +
                 /**/
                 
diff --git a/GroupEditor.java b/GroupEditor.java
index e40eb06..4fa02b1 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -285,6 +285,8 @@
 		genNormalsORGANItem.addActionListener(this);
 		genNormalsCADItem = menu.add(new MenuItem("CAD Normals"));
 		genNormalsCADItem.addActionListener(this);
+		genNormalsMESHItem = menu.add(new MenuItem("Mesh Normals"));
+		genNormalsMESHItem.addActionListener(this);
 		stripifyItem = menu.add(new MenuItem("Stripify"));
 		stripifyItem.addActionListener(this);
 		unstripifyItem = menu.add(new MenuItem("Unstripify"));
@@ -2308,6 +2310,10 @@
 		if (event.getSource() == genNormalsCADItem)
                 {
 			GenNormals(true);
+		} else
+		if (event.getSource() == genNormalsMESHItem)
+                {
+			GenNormals(true); // TODO
 		} else
 		if (event.getSource() == genNormalsORGANItem)
                 {
@@ -4845,6 +4851,7 @@
 	private MenuItem clearItem;
 	private MenuItem clearAllItem;
 	private MenuItem genUVItem;
+	private MenuItem genNormalsMESHItem;
 	private MenuItem genNormalsCADItem;
 	private MenuItem genNormalsORGANItem;
 	private MenuItem stripifyItem;
diff --git a/Object3D.java b/Object3D.java
index 2a7a2a3..ebab7df 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -5519,7 +5519,9 @@
                     display.options2[2] = material.factor;
 
                     cColor.HSBtoRGB(material.color, material.modulation, 1, display.options3);
-                    display.options3[3] = material.cameralight/0.2f;
+                    display.options4[0] = material.cameralight/0.2f;
+                    display.options4[1] = material.subsurface;
+                    display.options4[2] = material.sheen;
                     
                  //   if (display.CURRENTANTIALIAS > 0)
                  //       display.options3[3] /= 4;

--
Gitblit v1.6.2