RBLB I'm Riccardo Balbo, this is my personal website, mostly related to gamedev.

Feel free to get in touch for anything within the limit of common sense.

OcclusionParallaxMapping for jMonkeyEngine

Usage.


//Fragment shader

// Define which channel of the texture is used to store height data (rgba)
#define HEIGHT_MAP R_COMPONENT 
// #define HEIGHT_MAP G_COMPONENT 
// #define HEIGHT_MAP B_COMPONENT    
// #define HEIGHT_MAP A_COMPONENT 
// If the texture contains DEPTH, define the channel using DEPTH_MAP instead of HEIGHT_MAP

// Override texture sampling function
// #define Texture_sample myTextureSample

// Import OcclusionParallax
#import "Shaders/OcclusionParallax.glsllib"

uniform vec3 g_CameraPosition; // camera position in world space
uniform sampler2D m_ParallaxMap; // gray scale height/depth map

in vec3 WPos; // fragment position in world space
in vec3 WNorm; // fragment normal in world space
in vec3 WTang; // fragment tangent in world space
in vec2 TexCoord;

out vec4 outFragColor;
//....
void main(){
  //...
  
  mat3 tbnMat = mat3(WTang.xyz, WTang.w * cross(wNorm, WTang.xyz), wNorm);        
  vec3 viewDir = normalize(g_CameraPosition - WPos);
  vec3 vViewDir =  viewDir * tbnMat;  

  float m_ParallaxHeight=0.3;
  Parallax_initFor(vViewDir,m_ParallaxHeight);
  
  //...
  
  vec2 newTexCoord=TexCoord; // Coordinates to be displaced by the parallax
  Parallax_displaceCoords(newTexCoord,m_ParallaxMap);

  //...
  
  // Displace other coordinates, no need to call Parallax_initFor again.
  // vec2 newTexCoord2=TexCoord2; // Coordinates to be displaced by the parallax
  // Parallax_displaceCoords(newTexCoord2,m_ParallaxMap);
  
  //...

  outFragColor=texture(m_DiffuseMap,newTexCoord);
}

Example implementation in PBRLighting https://github.com/riccardobl/jme-shader-OcclusionParallaxMapping/tree/master/Materials/OcclusionParallax