- add the use of DRWShaderLibrary to EEVEE's glsl codebase to reduce code complexity and duplication. - split bsdf_common_lib.glsl into multiple sub library which are now shared with other engines. - the surface shader code is now more organised and have its own files. - change default world to use a material nodetree and make lookdev shader more clear. Reviewed By: jbakker Differential Revision: https://developer.blender.org/D8306
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			GLSL
		
	
	
	
	
	
 | 
						|
vec3 calc_barycentric_distances(vec3 pos0, vec3 pos1, vec3 pos2)
 | 
						|
{
 | 
						|
  vec3 edge21 = pos2 - pos1;
 | 
						|
  vec3 edge10 = pos1 - pos0;
 | 
						|
  vec3 edge02 = pos0 - pos2;
 | 
						|
  vec3 d21 = normalize(edge21);
 | 
						|
  vec3 d10 = normalize(edge10);
 | 
						|
  vec3 d02 = normalize(edge02);
 | 
						|
 | 
						|
  vec3 dists;
 | 
						|
  float d = dot(d21, edge02);
 | 
						|
  dists.x = sqrt(dot(edge02, edge02) - d * d);
 | 
						|
  d = dot(d02, edge10);
 | 
						|
  dists.y = sqrt(dot(edge10, edge10) - d * d);
 | 
						|
  d = dot(d10, edge21);
 | 
						|
  dists.z = sqrt(dot(edge21, edge21) - d * d);
 | 
						|
  return dists;
 | 
						|
}
 | 
						|
 | 
						|
vec2 calc_barycentric_co(int vertid)
 | 
						|
{
 | 
						|
  vec2 bary;
 | 
						|
  bary.x = float((vertid % 3) == 0);
 | 
						|
  bary.y = float((vertid % 3) == 1);
 | 
						|
  return bary;
 | 
						|
}
 | 
						|
 | 
						|
#ifdef HAIR_SHADER
 | 
						|
 | 
						|
/* Hairs uv and col attributes are passed by bufferTextures. */
 | 
						|
#  define DEFINE_ATTR(type, attr) uniform samplerBuffer attr
 | 
						|
#  define GET_ATTR(type, attr) hair_get_customdata_##type(attr)
 | 
						|
 | 
						|
#  define barycentric_get() hair_get_barycentric()
 | 
						|
#  define barycentric_resolve(bary) hair_resolve_barycentric(bary)
 | 
						|
 | 
						|
vec3 orco_get(vec3 local_pos, mat4 modelmatinv, vec4 orco_madd[2], const samplerBuffer orco_samp)
 | 
						|
{
 | 
						|
  /* TODO: fix ORCO with modifiers. */
 | 
						|
  vec3 orco = (modelmatinv * vec4(local_pos, 1.0)).xyz;
 | 
						|
  return orco_madd[0].xyz + orco * orco_madd[1].xyz;
 | 
						|
}
 | 
						|
 | 
						|
vec4 tangent_get(const samplerBuffer attr, mat3 normalmat)
 | 
						|
{
 | 
						|
  /* Unsupported */
 | 
						|
  return vec4(0.0);
 | 
						|
}
 | 
						|
 | 
						|
#else /* MESH_SHADER */
 | 
						|
 | 
						|
#  define DEFINE_ATTR(type, attr) in type attr
 | 
						|
#  define GET_ATTR(type, attr) attr
 | 
						|
 | 
						|
/* Calculated in geom shader later with calc_barycentric_co. */
 | 
						|
#  define barycentric_get() vec2(0)
 | 
						|
#  define barycentric_resolve(bary) bary
 | 
						|
 | 
						|
vec3 orco_get(vec3 local_pos, mat4 modelmatinv, vec4 orco_madd[2], vec4 orco)
 | 
						|
{
 | 
						|
  /* If the object does not have any deformation, the orco layer calculation is done on the fly
 | 
						|
   * using the orco_madd factors.
 | 
						|
   * We know when there is no orco layer when orco.w is 1.0 because it uses the generic vertex
 | 
						|
   * attrib (which is [0,0,0,1]). */
 | 
						|
  if (orco.w == 0.0) {
 | 
						|
    return orco.xyz * 0.5 + 0.5;
 | 
						|
  }
 | 
						|
  else {
 | 
						|
    return orco_madd[0].xyz + local_pos * orco_madd[1].xyz;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
vec4 tangent_get(vec4 attr, mat3 normalmat)
 | 
						|
{
 | 
						|
  vec4 tangent;
 | 
						|
  tangent.xyz = normalmat * attr.xyz;
 | 
						|
  tangent.w = attr.w;
 | 
						|
  float len_sqr = dot(tangent.xyz, tangent.xyz);
 | 
						|
  /* Normalize only if vector is not null. */
 | 
						|
  if (len_sqr > 0.0) {
 | 
						|
    tangent.xyz *= inversesqrt(len_sqr);
 | 
						|
  }
 | 
						|
  return tangent;
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |