Created
July 17, 2017 14:02
-
-
Save floz/f733da54bb4b4907acb34aa8e5c9af65 to your computer and use it in GitHub Desktop.
MeshPhysicalMaterial custom
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import vs from "shaders/physicalcustom.vs" | |
import fs from "shaders/physicalcustom.fs" | |
export default class MeshCustomMaterial extends THREE.MeshPhysicalMaterial { | |
constructor(parameters, uniforms={}){ | |
super(parameters) | |
this.defines = { 'PHYSICAL': '' }; | |
this.uniforms = THREE.UniformsUtils.merge([ | |
THREE.ShaderLib.physical.uniforms, | |
THREE.ShaderLib.standard.uniforms, | |
uniforms | |
] ) | |
this.setFlags(this) | |
this.setValues(parameters) | |
this.isMeshStandardMaterial = true | |
this.lights = true | |
} | |
setFlags(material) { | |
material.vertexShader = vs; | |
material.fragmentShader = fs; | |
material.type = 'MeshCustomMaterial'; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define PHYSICAL | |
uniform vec3 diffuse; | |
uniform vec3 emissive; | |
uniform float roughness; | |
uniform float metalness; | |
uniform float opacity; | |
#ifndef STANDARD | |
uniform float clearCoat; | |
uniform float clearCoatRoughness; | |
#endif | |
varying vec3 vViewPosition; | |
#ifndef FLAT_SHADED | |
varying vec3 vNormal; | |
#endif | |
#include <common> | |
#include <packing> | |
#include <dithering_pars_fragment> | |
#include <color_pars_fragment> | |
#include <uv_pars_fragment> | |
#include <uv2_pars_fragment> | |
#include <map_pars_fragment> | |
#include <alphamap_pars_fragment> | |
#include <aomap_pars_fragment> | |
#include <lightmap_pars_fragment> | |
#include <emissivemap_pars_fragment> | |
#include <envmap_pars_fragment> | |
#include <fog_pars_fragment> | |
#include <bsdfs> | |
#include <cube_uv_reflection_fragment> | |
#include <lights_pars> | |
#include <lights_physical_pars_fragment> | |
#include <shadowmap_pars_fragment> | |
#include <bumpmap_pars_fragment> | |
#include <normalmap_pars_fragment> | |
#include <roughnessmap_pars_fragment> | |
#include <metalnessmap_pars_fragment> | |
#include <logdepthbuf_pars_fragment> | |
#include <clipping_planes_pars_fragment> | |
void main() { | |
float flipNormal = 0.; | |
#include <clipping_planes_fragment> | |
vec4 diffuseColor = vec4( diffuse, opacity ); | |
ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); | |
vec3 totalEmissiveRadiance = emissive; | |
#include <logdepthbuf_fragment> | |
#include <map_fragment> | |
#include <color_fragment> | |
#include <alphamap_fragment> | |
#include <alphatest_fragment> | |
#include <roughnessmap_fragment> | |
#include <metalnessmap_fragment> | |
#include <normal_fragment> | |
#include <emissivemap_fragment> | |
// accumulation | |
#include <lights_physical_fragment> | |
#include <lights_template> | |
// modulation | |
#include <aomap_fragment> | |
vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; | |
gl_FragColor = vec4( outgoingLight, diffuseColor.a ); | |
#include <tonemapping_fragment> | |
#include <encodings_fragment> | |
#include <fog_fragment> | |
#include <premultiplied_alpha_fragment> | |
#include <dithering_fragment> | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define PHYSICAL | |
varying vec3 vViewPosition; | |
#ifndef FLAT_SHADED | |
varying vec3 vNormal; | |
#endif | |
#include <common> | |
#include <uv_pars_vertex> | |
#include <uv2_pars_vertex> | |
#include <displacementmap_pars_vertex> | |
#include <color_pars_vertex> | |
#include <fog_pars_vertex> | |
#include <morphtarget_pars_vertex> | |
#include <skinning_pars_vertex> | |
#include <shadowmap_pars_vertex> | |
#include <logdepthbuf_pars_vertex> | |
#include <clipping_planes_pars_vertex> | |
void main() { | |
#include <uv_vertex> | |
#include <uv2_vertex> | |
#include <color_vertex> | |
#include <beginnormal_vertex> | |
#include <morphnormal_vertex> | |
#include <skinbase_vertex> | |
#include <skinnormal_vertex> | |
#include <defaultnormal_vertex> | |
#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED | |
vNormal = normalize( transformedNormal ); | |
#endif | |
#include <begin_vertex> | |
// MODIFY HERE | |
// transformed = transformed + normal * sin(uv.x+uv.y) * 100.; | |
#include <morphtarget_vertex> | |
#include <skinning_vertex> | |
#include <displacementmap_vertex> | |
#include <project_vertex> | |
#include <logdepthbuf_vertex> | |
#include <clipping_planes_vertex> | |
vViewPosition = - mvPosition.xyz; | |
#include <worldpos_vertex> | |
#include <shadowmap_vertex> | |
#include <fog_vertex> | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Just a little fix on the line 49 of the
standardcustom.fs
: the value forflipNormal
should be set to 1. in order to retrieve the normals and have the material reacts to the light.