User Guide Cancel

Lib SSS - Shader API | Substance 3D Painter

Lib SSS - Shader API

lib-sss.glsl

Public Functions: getSSSCoefficients

Import from library

import lib-sampler.glsl
import lib-sampler.glsl
import lib-sampler.glsl

The scalar SSS coefficient texture

//: param auto channel_scattering
uniform SamplerSparse sss_tex;
//: param auto scene_original_radius
uniform float sssSceneScale;
//: param custom {
//: "label": "Enable",
//: "default": true,
//: "group": "Subsurface Scattering Parameters",
//: "description": "<html><head/><body><p>Enable the Subsurface Scattering. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>"
//: }
uniform bool sssEnabled;
//: param auto channel_scattering uniform SamplerSparse sss_tex; //: param auto scene_original_radius uniform float sssSceneScale; //: param custom { //: "label": "Enable", //: "default": true, //: "group": "Subsurface Scattering Parameters", //: "description": "<html><head/><body><p>Enable the Subsurface Scattering. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" //: } uniform bool sssEnabled;
//: param auto channel_scattering 
uniform SamplerSparse sss_tex; 
 
//: param auto scene_original_radius 
uniform float sssSceneScale; 
 
//: param custom { 
//:   "label": "Enable", 
//:   "default": true, 
//:   "group": "Subsurface Scattering Parameters", 
//:   "description": "<html><head/><body><p>Enable the Subsurface Scattering. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" 
//: } 
uniform bool sssEnabled;

Select whether the light penetrates straight through the material (translucent) or is diffused before starting to scatter (skin).

//: param custom {
//: "default": 1,
//: "label": "Scattering Type",
//: "widget": "combobox",
//: "values": {
//: "Translucent": 0,
//: "Skin": 1
//: },
//: "group": "Subsurface Scattering Parameters",
//: "description": "<html><head/><body><p>Skin or Translucent/Generic. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>"
//: }
uniform int sssType;
//: param custom { //: "default": 1, //: "label": "Scattering Type", //: "widget": "combobox", //: "values": { //: "Translucent": 0, //: "Skin": 1 //: }, //: "group": "Subsurface Scattering Parameters", //: "description": "<html><head/><body><p>Skin or Translucent/Generic. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" //: } uniform int sssType;
//: param custom { 
//:   "default": 1, 
//:   "label": "Scattering Type", 
//:   "widget": "combobox", 
//:   "values": { 
//:     "Translucent": 0, 
//:     "Skin": 1 
//:   }, 
//:   "group": "Subsurface Scattering Parameters", 
//:   "description": "<html><head/><body><p>Skin or Translucent/Generic. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" 
//: } 
uniform int sssType;

Global scale to the subsurface scattering effect

//: param custom {
//: "default": 0.5,
//: "label": "Scale",
//: "min": 0.01,
//: "max": 1.0,
//: "group": "Subsurface Scattering Parameters",
//: "description": "<html><head/><body><p>Controls the radius/depth of the light absorption in the material. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>"
//: }
uniform float sssScale;
//: param custom { //: "default": 0.5, //: "label": "Scale", //: "min": 0.01, //: "max": 1.0, //: "group": "Subsurface Scattering Parameters", //: "description": "<html><head/><body><p>Controls the radius/depth of the light absorption in the material. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" //: } uniform float sssScale;
//: param custom { 
//:   "default": 0.5, 
//:   "label": "Scale", 
//:   "min": 0.01, 
//:   "max": 1.0, 
//:   "group": "Subsurface Scattering Parameters", 
//:   "description": "<html><head/><body><p>Controls the radius/depth of the light absorption in the material. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" 
//: } 
uniform float sssScale;

Wavelength dependency of the SSS of the material

//: param custom {
//: "default": [0.701, 0.301, 0.305],
//: "label": "Color",
//: "widget": "color",
//: "group": "Subsurface Scattering Parameters",
//: "description": "<html><head/><body><p>The color of light when absorbed by the material. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>"
//: }
uniform vec3 sssColor;
//: param custom { //: "default": [0.701, 0.301, 0.305], //: "label": "Color", //: "widget": "color", //: "group": "Subsurface Scattering Parameters", //: "description": "<html><head/><body><p>The color of light when absorbed by the material. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" //: } uniform vec3 sssColor;
//: param custom { 
//:   "default": [0.701, 0.301, 0.305], 
//:   "label": "Color", 
//:   "widget": "color", 
//:   "group": "Subsurface Scattering Parameters", 
//:   "description": "<html><head/><body><p>The color of light when absorbed by the material. It needs to be activated in the Display Settings and a Scattering channel needs to be present for these parameters to have an effect.</p></body></html>" 
//: } 
uniform vec3 sssColor;

Return the material SSS coefficients

vec4 getSSSCoefficients(float scattering) {
if (sssEnabled) {
vec3 sss = sssScale / sssSceneScale * scattering * sssColor;
return vec4(sss, sss == vec3(0.0) ? 0.0 : 1.0);
}
return vec4(0.0);
}
vec4 getSSSCoefficients(SparseCoord coord) {
if (sssEnabled) {
return getSSSCoefficients(getScattering(sss_tex, coord));
}
return vec4(0.0);
}
vec4 getSSSCoefficients(float scattering) { if (sssEnabled) { vec3 sss = sssScale / sssSceneScale * scattering * sssColor; return vec4(sss, sss == vec3(0.0) ? 0.0 : 1.0); } return vec4(0.0); } vec4 getSSSCoefficients(SparseCoord coord) { if (sssEnabled) { return getSSSCoefficients(getScattering(sss_tex, coord)); } return vec4(0.0); }
vec4 getSSSCoefficients(float scattering) { 
  if (sssEnabled) { 
    vec3 sss = sssScale / sssSceneScale * scattering * sssColor; 
    return vec4(sss, sss == vec3(0.0) ? 0.0 : 1.0); 
  } 
  return vec4(0.0); 
} 
vec4 getSSSCoefficients(SparseCoord coord) { 
  if (sssEnabled) { 
    return getSSSCoefficients(getScattering(sss_tex, coord)); 
  } 
  return vec4(0.0); 
} 
 

Get help faster and easier

New user?