Shadows/SSAO and transparency : Removed the AlphaDiscardThreshold attribute from the lighting material. Transparency discarding is now handled by the AlphaFallOff render state (as it should be).
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@9330 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
8de8bf2d3e
commit
22edb7beb0
@ -15,9 +15,6 @@ MaterialDef Phong Lighting {
|
|||||||
// Output alpha from the diffuse map
|
// Output alpha from the diffuse map
|
||||||
Boolean UseAlpha
|
Boolean UseAlpha
|
||||||
|
|
||||||
// Apha threshold for fragment discarding
|
|
||||||
Float AlphaDiscardThreshold
|
|
||||||
|
|
||||||
// Normal map is in BC5/ATI2n/LATC/3Dc compression format
|
// Normal map is in BC5/ATI2n/LATC/3Dc compression format
|
||||||
Boolean LATC
|
Boolean LATC
|
||||||
|
|
||||||
@ -160,7 +157,7 @@ MaterialDef Phong Lighting {
|
|||||||
SEPARATE_TEXCOORD : SeparateTexCoord
|
SEPARATE_TEXCOORD : SeparateTexCoord
|
||||||
|
|
||||||
USE_REFLECTION : EnvMap
|
USE_REFLECTION : EnvMap
|
||||||
SPHERE_MAP : SphereMap
|
SPHERE_MAP : EnvMapAsSphereMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,8 +172,7 @@ MaterialDef Phong Lighting {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Defines {
|
Defines {
|
||||||
COLOR_MAP : ColorMap
|
DIFFUSEMAP : DiffuseMap
|
||||||
DISCARD_ALPHA : AlphaDiscardThreshold
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderState {
|
RenderState {
|
||||||
@ -203,12 +199,11 @@ MaterialDef Phong Lighting {
|
|||||||
HARDWARE_SHADOWS : HardwareShadows
|
HARDWARE_SHADOWS : HardwareShadows
|
||||||
FILTER_MODE : FilterMode
|
FILTER_MODE : FilterMode
|
||||||
PCFEDGE : PCFEdge
|
PCFEDGE : PCFEdge
|
||||||
DISCARD_ALPHA : AlphaDiscardThreshold
|
DIFFUSEMAP : DiffuseMap
|
||||||
COLOR_MAP : ColorMap
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderState {
|
RenderState {
|
||||||
Blend Modulate
|
Blend Alpha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,12 +220,11 @@ MaterialDef Phong Lighting {
|
|||||||
HARDWARE_SHADOWS : HardwareShadows
|
HARDWARE_SHADOWS : HardwareShadows
|
||||||
FILTER_MODE : FilterMode
|
FILTER_MODE : FilterMode
|
||||||
PCFEDGE : PCFEdge
|
PCFEDGE : PCFEdge
|
||||||
DISCARD_ALPHA : AlphaDiscardThreshold
|
DIFFUSEMAP : DiffuseMap
|
||||||
COLOR_MAP : ColorMap
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderState {
|
RenderState {
|
||||||
Blend Modulate
|
Blend Alpha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,28 +114,24 @@ float Shadow_DoPCF(in SHADOWMAP tex, in vec4 projCoord){
|
|||||||
return shadow;
|
return shadow;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DISCARD_ALPHA
|
|
||||||
#ifdef COLOR_MAP
|
#ifdef COLOR_MAP
|
||||||
uniform sampler2D m_ColorMap;
|
uniform sampler2D m_ColorMap;
|
||||||
#else
|
varying vec2 texCoord;
|
||||||
uniform sampler2D m_DiffuseMap;
|
|
||||||
#endif
|
#endif
|
||||||
uniform float m_AlphaDiscardThreshold;
|
#ifdef DIFFUSEMAP
|
||||||
|
uniform sampler2D m_DiffuseMap;
|
||||||
varying vec2 texCoord;
|
varying vec2 texCoord;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
|
|
||||||
#ifdef DISCARD_ALPHA
|
float alpha =1.0;
|
||||||
#ifdef COLOR_MAP
|
|
||||||
float alpha = texture2D(m_ColorMap,texCoord).a;
|
|
||||||
#else
|
|
||||||
float alpha = texture2D(m_DiffuseMap,texCoord).a;
|
|
||||||
#endif
|
|
||||||
if(alpha<=m_AlphaDiscardThreshold){
|
|
||||||
discard;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#ifdef COLOR_MAP
|
||||||
|
alpha = texture2D(m_ColorMap,texCoord).a;
|
||||||
|
#endif
|
||||||
|
#ifdef DIFFUSEMAP
|
||||||
|
alpha = texture2D(m_DiffuseMap,texCoord).a;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -151,9 +147,6 @@ void main(){
|
|||||||
float shadow = dot(shadowPerSplit, less * more );
|
float shadow = dot(shadowPerSplit, less * more );
|
||||||
|
|
||||||
shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
|
shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
|
||||||
|
gl_FragColor = vec4(0.0, 0.0, 0.0, min(1.0 - shadow,alpha));
|
||||||
|
|
||||||
gl_FragColor = vec4(shadow, shadow, shadow, 1.0);
|
|
||||||
//gl_FragColor = vec4(alpha, alpha, alpha, 1.0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ MaterialDef Post Shadow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RenderState {
|
RenderState {
|
||||||
Blend Modulate
|
Blend Alpha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ MaterialDef Post Shadow {
|
|||||||
}
|
}
|
||||||
|
|
||||||
RenderState {
|
RenderState {
|
||||||
Blend Modulate
|
Blend Alpha
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ varying float shadowPosition;
|
|||||||
varying vec2 texCoord;
|
varying vec2 texCoord;
|
||||||
|
|
||||||
attribute vec3 inPosition;
|
attribute vec3 inPosition;
|
||||||
#ifdef DISCARD_ALPHA
|
#ifdef DIFFUSEMAP) || defined(COLOR_MAP)
|
||||||
attribute vec2 inTexCoord;
|
attribute vec2 inTexCoord;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ void main(){
|
|||||||
// get the vertex in world space
|
// get the vertex in world space
|
||||||
vec4 worldPos = g_WorldMatrix * vec4(inPosition, 1.0);
|
vec4 worldPos = g_WorldMatrix * vec4(inPosition, 1.0);
|
||||||
|
|
||||||
#ifdef DISCARD_ALPHA
|
#if defined(DIFFUSEMAP) || defined(COLOR_MAP)
|
||||||
texCoord = inTexCoord;
|
texCoord = inTexCoord;
|
||||||
#endif
|
#endif
|
||||||
// populate the light view matrices array and convert vertex to light viewProj space
|
// populate the light view matrices array and convert vertex to light viewProj space
|
||||||
|
@ -120,31 +120,28 @@ float Shadow_DoPCF(in SHADOWMAP tex, in vec4 projCoord){
|
|||||||
return shadow;
|
return shadow;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DISCARD_ALPHA
|
|
||||||
#ifdef COLOR_MAP
|
#ifdef COLOR_MAP
|
||||||
uniform sampler2D m_ColorMap;
|
uniform sampler2D m_ColorMap;
|
||||||
#else
|
varying vec2 texCoord;
|
||||||
uniform sampler2D m_DiffuseMap;
|
|
||||||
#endif
|
#endif
|
||||||
uniform float m_AlphaDiscardThreshold;
|
#ifdef DIFFUSEMAP
|
||||||
|
uniform sampler2D m_DiffuseMap;
|
||||||
varying vec2 texCoord;
|
varying vec2 texCoord;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
float shadow = 0.0;
|
float shadow = 0.0;
|
||||||
|
|
||||||
|
float alpha = 1.0;
|
||||||
|
|
||||||
#ifdef DISCARD_ALPHA
|
|
||||||
#ifdef COLOR_MAP
|
#ifdef COLOR_MAP
|
||||||
float alpha = texture2D(m_ColorMap,texCoord).a;
|
alpha = texture2D(m_ColorMap,texCoord).a;
|
||||||
#else
|
#endif
|
||||||
float alpha = texture2D(m_DiffuseMap,texCoord).a;
|
#ifdef DIFFUSEMAP
|
||||||
|
alpha = texture2D(m_DiffuseMap,texCoord).a;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(alpha < m_AlphaDiscardThreshold){
|
|
||||||
discard;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if(shadowPosition < m_Splits.x){
|
if(shadowPosition < m_Splits.x){
|
||||||
shadow = GETSHADOW(m_ShadowMap0, projCoord0);
|
shadow = GETSHADOW(m_ShadowMap0, projCoord0);
|
||||||
}else if( shadowPosition < m_Splits.y){
|
}else if( shadowPosition < m_Splits.y){
|
||||||
@ -156,6 +153,6 @@ void main(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
|
shadow = shadow * m_ShadowIntensity + (1.0 - m_ShadowIntensity);
|
||||||
outFragColor = vec4(shadow, shadow, shadow, 1.0);
|
outFragColor = vec4(0.0, 0.0, 0.0, min(1.0 - shadow,alpha));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,27 +1,24 @@
|
|||||||
varying vec2 texCoord;
|
varying vec2 texCoord;
|
||||||
|
|
||||||
#ifdef DISCARD_ALPHA
|
|
||||||
#ifdef COLOR_MAP
|
#ifdef COLOR_MAP
|
||||||
uniform sampler2D m_ColorMap;
|
uniform sampler2D m_ColorMap;
|
||||||
#else
|
#endif
|
||||||
|
#ifdef DIFFUSEMAP
|
||||||
uniform sampler2D m_DiffuseMap;
|
uniform sampler2D m_DiffuseMap;
|
||||||
#endif
|
#endif
|
||||||
uniform float m_AlphaDiscardThreshold;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
#ifdef DISCARD_ALPHA
|
float a = 1.0;
|
||||||
|
|
||||||
#ifdef COLOR_MAP
|
#ifdef COLOR_MAP
|
||||||
if (texture2D(m_ColorMap, texCoord).a <= m_AlphaDiscardThreshold){
|
a = texture2D(m_ColorMap, texCoord).a;
|
||||||
discard;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (texture2D(m_DiffuseMap, texCoord).a <= m_AlphaDiscardThreshold){
|
|
||||||
discard;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DIFFUSEMAP
|
||||||
|
a = texture2D(m_DiffuseMap, texCoord).a;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
gl_FragColor = vec4(1.0);
|
gl_FragColor = vec4(a);
|
||||||
}
|
}
|
@ -11,11 +11,9 @@ void main(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
#ifdef DIFFUSEMAP_ALPHA
|
#ifdef DIFFUSEMAP_ALPHA
|
||||||
if(texture2D(m_DiffuseMap,texCoord).a<m_AlphaDiscardThreshold){
|
float alpha=texture2D(m_DiffuseMap,texCoord).a;
|
||||||
discard;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
gl_FragColor = vec4(normal.xy* 0.5 + 0.5,-normal.z* 0.5 + 0.5, 1.0);
|
gl_FragColor = vec4(normal.xy* 0.5 + 0.5,-normal.z* 0.5 + 0.5, alpha);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,12 +57,10 @@ vec2 reflection(in vec2 v1,in vec2 v2){
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//const vec2 vec[4] = vec2[4](vec2(1.0,0.0), vec2(-1.0,0.0), vec2(0.0,1.0), vec2(0.0,-1.0));
|
|
||||||
void main(){
|
void main(){
|
||||||
|
|
||||||
float result;
|
float result;
|
||||||
|
|
||||||
//vec2 vec[4] = { vec2(1.0, 0.0), vec2(-1.0, 0.0), vec2(0.0, 1.0), vec2(0.0, -1.0) };
|
|
||||||
vec3 position = getPosition(texCoord);
|
vec3 position = getPosition(texCoord);
|
||||||
//optimization, do not calculate AO if depth is 1
|
//optimization, do not calculate AO if depth is 1
|
||||||
if(depthv==1.0){
|
if(depthv==1.0){
|
||||||
@ -91,6 +89,5 @@ void main(){
|
|||||||
result = 1.0-ao;
|
result = 1.0-ao;
|
||||||
|
|
||||||
gl_FragColor=vec4(result,result,result, 1.0);
|
gl_FragColor=vec4(result,result,result, 1.0);
|
||||||
//gl_FragColor=vec4(depthv,depthv,depthv, 1.0);
|
|
||||||
|
|
||||||
}
|
}
|
@ -142,8 +142,6 @@ public class PssmShadowRenderer implements SceneProcessor {
|
|||||||
private Picture[] dispPic;
|
private Picture[] dispPic;
|
||||||
private Vector3f[] points = new Vector3f[8];
|
private Vector3f[] points = new Vector3f[8];
|
||||||
private boolean flushQueues = true;
|
private boolean flushQueues = true;
|
||||||
//render state for post shadow pass
|
|
||||||
private RenderState state = new RenderState();
|
|
||||||
// define if the fallback material should be used.
|
// define if the fallback material should be used.
|
||||||
private boolean needsfallBackMaterial = false;
|
private boolean needsfallBackMaterial = false;
|
||||||
//Name of the post material technique
|
//Name of the post material technique
|
||||||
@ -217,12 +215,6 @@ public class PssmShadowRenderer implements SceneProcessor {
|
|||||||
points[i] = new Vector3f();
|
points[i] = new Vector3f();
|
||||||
}
|
}
|
||||||
|
|
||||||
//initializing render state for post shadow pass (modulade blending and cullmode of for back faces )
|
|
||||||
state.setBlendMode(RenderState.BlendMode.Modulate);
|
|
||||||
state.setFaceCullMode(RenderState.FaceCullMode.Off);
|
|
||||||
state.setDepthWrite(false);
|
|
||||||
state.setPolyOffset(-0.1f, 0);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -458,9 +450,8 @@ public class PssmShadowRenderer implements SceneProcessor {
|
|||||||
renderManager.setForcedMaterial(postshadowMat);
|
renderManager.setForcedMaterial(postshadowMat);
|
||||||
}
|
}
|
||||||
|
|
||||||
//forcing the post shadow technique and render state
|
//forcing the post shadow technique
|
||||||
renderManager.setForcedTechnique(postTechniqueName);
|
renderManager.setForcedTechnique(postTechniqueName);
|
||||||
renderManager.setForcedRenderState(state);
|
|
||||||
|
|
||||||
//rendering the post shadow pass
|
//rendering the post shadow pass
|
||||||
viewPort.getQueue().renderShadowQueue(ShadowMode.Receive, renderManager, cam, flushQueues);
|
viewPort.getQueue().renderShadowQueue(ShadowMode.Receive, renderManager, cam, flushQueues);
|
||||||
@ -468,7 +459,6 @@ public class PssmShadowRenderer implements SceneProcessor {
|
|||||||
//resetting renderManager settings
|
//resetting renderManager settings
|
||||||
renderManager.setForcedTechnique(null);
|
renderManager.setForcedTechnique(null);
|
||||||
renderManager.setForcedMaterial(null);
|
renderManager.setForcedMaterial(null);
|
||||||
renderManager.setForcedRenderState(null);
|
|
||||||
renderManager.setCamera(cam, false);
|
renderManager.setCamera(cam, false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,6 @@ Material Leaves : Common/MatDefs/Light/Lighting.j3md {
|
|||||||
MaterialParameters {
|
MaterialParameters {
|
||||||
DiffuseMap : Models/Tree/Leaves.png
|
DiffuseMap : Models/Tree/Leaves.png
|
||||||
UseAlpha : true
|
UseAlpha : true
|
||||||
AlphaDiscardThreshold : 0.5
|
|
||||||
UseMaterialColors : true
|
UseMaterialColors : true
|
||||||
Ambient : .5 .5 .5 .5
|
Ambient : .5 .5 .5 .5
|
||||||
Diffuse : 0.7 0.7 0.7 1
|
Diffuse : 0.7 0.7 0.7 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user