Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ public final class SinglePassAndImageBasedLightingLogic extends DefaultTechnique
private static final String DEFINE_SINGLE_PASS_LIGHTING = "SINGLE_PASS_LIGHTING";
private static final String DEFINE_NB_LIGHTS = "NB_LIGHTS";
private static final String DEFINE_NB_PROBES = "NB_PROBES";
private static final String DEFINE_USE_AMBIENT_LIGHT = "USE_AMBIENT_LIGHT";
private static final RenderState ADDITIVE_LIGHT = new RenderState();

private boolean useAmbientLight;
private final ColorRGBA ambientLightColor = new ColorRGBA(0, 0, 0, 1);
private List<LightProbe> lightProbes = new ArrayList<>(3);

Expand All @@ -61,12 +63,14 @@ public final class SinglePassAndImageBasedLightingLogic extends DefaultTechnique
private final int singlePassLightingDefineId;
private final int nbLightsDefineId;
private final int nbProbesDefineId;
private final int useAmbientLightDefineId;

public SinglePassAndImageBasedLightingLogic(TechniqueDef techniqueDef) {
super(techniqueDef);
singlePassLightingDefineId = techniqueDef.addShaderUnmappedDefine(DEFINE_SINGLE_PASS_LIGHTING, VarType.Boolean);
nbLightsDefineId = techniqueDef.addShaderUnmappedDefine(DEFINE_NB_LIGHTS, VarType.Int);
nbProbesDefineId = techniqueDef.addShaderUnmappedDefine(DEFINE_NB_PROBES, VarType.Int);
useAmbientLightDefineId = techniqueDef.addShaderUnmappedDefine(DEFINE_USE_AMBIENT_LIGHT, VarType.Boolean);
}

@Override
Expand All @@ -83,6 +87,7 @@ public Shader makeCurrent(AssetManager assetManager, RenderManager renderManager
lightProbes.clear();
extractIndirectLights(lights, false);
defines.set(nbProbesDefineId, lightProbes.size());
defines.set(useAmbientLightDefineId, useAmbientLight);
}

return super.makeCurrent(assetManager, renderManager, rendererCaps, lights, defines);
Expand Down Expand Up @@ -127,7 +132,7 @@ protected int updateLightListUniforms(Shader shader, Geometry g, LightList light
// apply additive blending for 2nd and future passes
rm.getRenderer().applyRenderState(ADDITIVE_LIGHT);
ambientColor.setValue(VarType.Vector4, ColorRGBA.Black);
}else{
} else{
extractIndirectLights(lightList,true);
ambientColor.setValue(VarType.Vector4, ambientLightColor);
}
Expand Down Expand Up @@ -260,9 +265,11 @@ public void render(RenderManager renderManager, Shader shader, Geometry geometry

protected void extractIndirectLights(LightList lightList, boolean removeLights) {
ambientLightColor.set(0, 0, 0, 1);
useAmbientLight = false;
for (int j = 0; j < lightList.size(); j++) {
Light l = lightList.get(j);
if (l instanceof AmbientLight) {
useAmbientLight = true;
ambientLightColor.addLocal(l.getColor());
if(removeLights){
lightList.remove(l);
Expand Down
17 changes: 12 additions & 5 deletions jme3-core/src/main/resources/Common/MatDefs/Light/PBRLighting.frag
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ varying vec4 Color;

uniform vec4 g_LightData[NB_LIGHTS];
uniform vec3 g_CameraPosition;
uniform vec4 g_AmbientLightColor;

uniform float m_Roughness;
uniform float m_Metallic;
Expand Down Expand Up @@ -40,7 +41,7 @@ varying vec3 wPosition;
#endif

#ifdef USE_PACKED_MR
uniform sampler2D m_MetallicRoughnessMap;
uniform sampler2D m_MetallicRoughnessMap;
#else
#ifdef METALLICMAP
uniform sampler2D m_MetallicMap;
Expand All @@ -51,10 +52,10 @@ varying vec3 wPosition;
#endif

#ifdef EMISSIVE
uniform vec4 m_Emissive;
uniform vec4 m_Emissive;
#endif
#ifdef EMISSIVEMAP
uniform sampler2D m_EmissiveMap;
uniform sampler2D m_EmissiveMap;
#endif
#if defined(EMISSIVE) || defined(EMISSIVEMAP)
uniform float m_EmissivePower;
Expand Down Expand Up @@ -91,7 +92,7 @@ varying vec3 wPosition;
varying vec3 wNormal;

#ifdef DISCARD_ALPHA
uniform float m_AlphaDiscardThreshold;
uniform float m_AlphaDiscardThreshold;
#endif

void main(){
Expand Down Expand Up @@ -273,7 +274,7 @@ void main(){
float ndf3 = renderProbe(viewDir, wPosition, normal, norm, Roughness, diffuseColor, specularColor, ndotv, ao, g_LightProbeData3, g_ShCoeffs3, g_PrefEnvMap3, color3);
#endif

#if NB_PROBES >= 2
#if NB_PROBES >= 2
float invNdf = max(1.0 - ndf,0.0);
float invNdf2 = max(1.0 - ndf2,0.0);
float sumNdf = ndf + ndf2;
Expand All @@ -294,6 +295,12 @@ void main(){
weight2 /= weightSum;
weight3 /= weightSum;
#endif

#if USE_AMBIENT_LIGHT
color1.rgb *= g_AmbientLightColor.rgb;
color2.rgb *= g_AmbientLightColor.rgb;
color3.rgb *= g_AmbientLightColor.rgb;
#endif
gl_FragColor.rgb += color1 * clamp(weight1,0.0,1.0) + color2 * clamp(weight2,0.0,1.0) + color3 * clamp(weight3,0.0,1.0);

#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ MaterialDef PBR Lighting {
// Parallax/height map
Texture2D ParallaxMap -LINEAR

//Set to true is parallax map is stored in the alpha channel of the normal map
//Set to true if parallax map is stored in the alpha channel of the normal map
Boolean PackedNormalParallax

//Sets the relief height for parallax mapping
Expand Down Expand Up @@ -111,10 +111,10 @@ MaterialDef PBR Lighting {
Int NumberOfMorphTargets
Int NumberOfTargetsBuffers

//For instancing
// For instancing
Boolean UseInstancing

//For Vertex Color
// For Vertex Color
Boolean UseVertexColor

Boolean BackfaceShadows : false
Expand Down