Soft particles now has only one shader and one technique to work with any glsl version
This commit is contained in:
parent
4fbe5ec84d
commit
390d35180b
@ -59,10 +59,7 @@ MaterialDef Point Sprite {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Defines {
|
Defines {
|
||||||
COLOR_MAP : ColorMap
|
COLOR_MAP : Texture
|
||||||
DISCARD_ALPHA : AlphaDiscardThreshold
|
|
||||||
NUM_BONES : NumberOfBones
|
|
||||||
INSTANCING : UseInstancing
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ForcedRenderState {
|
ForcedRenderState {
|
||||||
@ -77,30 +74,8 @@ MaterialDef Point Sprite {
|
|||||||
|
|
||||||
Technique SoftParticles{
|
Technique SoftParticles{
|
||||||
|
|
||||||
VertexShader GLSL100 : Common/MatDefs/Misc/SoftParticle.vert
|
VertexShader GLSL100 GLSL150 : Common/MatDefs/Misc/SoftParticle.vert
|
||||||
FragmentShader GLSL100 : Common/MatDefs/Misc/SoftParticle.frag
|
FragmentShader GLSL120 GLSL150 : Common/MatDefs/Misc/SoftParticle.frag
|
||||||
|
|
||||||
WorldParameters {
|
|
||||||
WorldViewProjectionMatrix
|
|
||||||
WorldViewMatrix
|
|
||||||
WorldMatrix
|
|
||||||
CameraPosition
|
|
||||||
}
|
|
||||||
|
|
||||||
RenderState {
|
|
||||||
Blend AlphaAdditive
|
|
||||||
DepthWrite Off
|
|
||||||
}
|
|
||||||
|
|
||||||
Defines {
|
|
||||||
USE_TEXTURE : Texture
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Technique SoftParticles15{
|
|
||||||
|
|
||||||
VertexShader GLSL150 : Common/MatDefs/Misc/SoftParticle.vert
|
|
||||||
FragmentShader GLSL150 : Common/MatDefs/Misc/SoftParticle15.frag
|
|
||||||
|
|
||||||
WorldParameters {
|
WorldParameters {
|
||||||
WorldViewProjectionMatrix
|
WorldViewProjectionMatrix
|
||||||
@ -122,14 +97,6 @@ MaterialDef Point Sprite {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Technique {
|
|
||||||
RenderState {
|
|
||||||
Blend AlphaAdditive
|
|
||||||
// DepthWrite Off
|
|
||||||
// AlphaTestFalloff 0.01
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Technique Glow {
|
Technique Glow {
|
||||||
|
|
||||||
VertexShader GLSL100 GLSL150: Common/MatDefs/Misc/Unshaded.vert
|
VertexShader GLSL100 GLSL150: Common/MatDefs/Misc/Unshaded.vert
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
uniform sampler2D m_DepthTexture;
|
#import "Common/ShaderLib/GLSLCompat.glsllib"
|
||||||
|
#import "Common/ShaderLib/MultiSample.glsllib"
|
||||||
|
|
||||||
|
uniform DEPTHTEXTURE m_DepthTexture;
|
||||||
uniform float m_Softness; // Power used in the contrast function
|
uniform float m_Softness; // Power used in the contrast function
|
||||||
varying vec2 vPos; // Position of the pixel
|
varying vec2 vPos; // Position of the pixel
|
||||||
varying vec2 projPos;// z and w valus in projection space
|
varying vec2 projPos;// z and w valus in projection space
|
||||||
@ -36,15 +39,15 @@ void main(){
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
float depthv = texture2D(m_DepthTexture, vPos).x*2.0-1.0; // Scene depth
|
float depthv = fetchTextureSample(m_DepthTexture, vPos, 0).x * 2.0 - 1.0; // Scene depth
|
||||||
depthv*=projPos.y;
|
depthv *= projPos.y;
|
||||||
float particleDepth = projPos.x;
|
float particleDepth = projPos.x;
|
||||||
|
|
||||||
float zdiff =depthv-particleDepth;
|
float zdiff = depthv - particleDepth;
|
||||||
if(zdiff<=0.0){
|
if(zdiff <= 0.0){
|
||||||
discard;
|
discard;
|
||||||
}
|
}
|
||||||
// Computes alpha based on the particles distance to the rest of the scene
|
// Computes alpha based on the particles distance to the rest of the scene
|
||||||
c.a = c.a * stdDiff(zdiff);// Contrast(zdiff);
|
c.a = c.a * stdDiff(zdiff);// Contrast(zdiff);
|
||||||
gl_FragColor =c;
|
gl_FragColor = c;
|
||||||
}
|
}
|
@ -1,51 +0,0 @@
|
|||||||
#import "Common/ShaderLib/MultiSample.glsllib"
|
|
||||||
|
|
||||||
uniform DEPTHTEXTURE m_DepthTexture;
|
|
||||||
uniform float m_Softness; // Power used in the contrast function
|
|
||||||
in vec2 vPos; // Position of the pixel
|
|
||||||
in vec2 projPos;// z and w valus in projection space
|
|
||||||
|
|
||||||
#ifdef USE_TEXTURE
|
|
||||||
uniform sampler2D m_Texture;
|
|
||||||
in vec4 texCoord;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
in vec4 color;
|
|
||||||
out vec4 outColor;
|
|
||||||
|
|
||||||
float Contrast(in float d){
|
|
||||||
float val = clamp( 2.0*( (d > 0.5) ? 1.0-d : d ), 0.0, 1.0);
|
|
||||||
float a = 0.5 * pow(val, m_Softness);
|
|
||||||
return (d > 0.5) ? 1.0 - a : a;
|
|
||||||
}
|
|
||||||
|
|
||||||
float stdDiff(in float d){
|
|
||||||
return clamp((d)*m_Softness,0.0,1.0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void main(){
|
|
||||||
if (color.a <= 0.01)
|
|
||||||
discard;
|
|
||||||
|
|
||||||
outColor = vec4(1.0,1.0,1.0,1.0);//color;
|
|
||||||
#ifdef USE_TEXTURE
|
|
||||||
#ifdef POINT_SPRITE
|
|
||||||
vec2 uv = mix(texCoord.xy, texCoord.zw, gl_PointCoord.xy);
|
|
||||||
#else
|
|
||||||
vec2 uv = texCoord.xy;
|
|
||||||
#endif
|
|
||||||
outColor = getColor(m_Texture, uv) * color;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
float depthv = getDepth(m_DepthTexture, vPos).x*2.0-1.0; // Scene depth
|
|
||||||
depthv*=projPos.y;
|
|
||||||
float particleDepth = projPos.x;
|
|
||||||
|
|
||||||
float zdiff =depthv-particleDepth;
|
|
||||||
if(zdiff<=0.0){
|
|
||||||
discard;
|
|
||||||
}
|
|
||||||
// Computes alpha based on the particles distance to the rest of the scene
|
|
||||||
outColor.a = outColor.a * stdDiff(zdiff);// Contrast(zdiff);
|
|
||||||
}
|
|
@ -165,11 +165,9 @@ public final class TranslucentBucketFilter extends Filter {
|
|||||||
if (enabled) {
|
if (enabled) {
|
||||||
enabledSoftParticles = enabled;
|
enabledSoftParticles = enabled;
|
||||||
|
|
||||||
|
emitter.getMaterial().selectTechnique("SoftParticles", renderManager);
|
||||||
if( processor.getNumSamples()>1){
|
if( processor.getNumSamples()>1){
|
||||||
emitter.getMaterial().selectTechnique("SoftParticles15", renderManager);
|
|
||||||
emitter.getMaterial().setInt("NumSamplesDepth", processor.getNumSamples());
|
emitter.getMaterial().setInt("NumSamplesDepth", processor.getNumSamples());
|
||||||
}else{
|
|
||||||
emitter.getMaterial().selectTechnique("SoftParticles", renderManager);
|
|
||||||
}
|
}
|
||||||
emitter.getMaterial().setTexture("DepthTexture", processor.getDepthTexture());
|
emitter.getMaterial().setTexture("DepthTexture", processor.getDepthTexture());
|
||||||
emitter.setQueueBucket(RenderQueue.Bucket.Translucent);
|
emitter.setQueueBucket(RenderQueue.Bucket.Translucent);
|
||||||
|
@ -95,6 +95,10 @@ public class TestSoftParticles extends SimpleApplication {
|
|||||||
fpp = new FilterPostProcessor(assetManager);
|
fpp = new FilterPostProcessor(assetManager);
|
||||||
tbf = new TranslucentBucketFilter(true);
|
tbf = new TranslucentBucketFilter(true);
|
||||||
fpp.addFilter(tbf);
|
fpp.addFilter(tbf);
|
||||||
|
int samples = context.getSettings().getSamples();
|
||||||
|
if (samples > 0) {
|
||||||
|
fpp.setNumSamples(samples);
|
||||||
|
}
|
||||||
viewPort.addProcessor(fpp);
|
viewPort.addProcessor(fpp);
|
||||||
|
|
||||||
particleNode = new Node("particleNode");
|
particleNode = new Node("particleNode");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user