bytev-charts
Version:
基于echarts和JavaScript及ES6封装的一个可以直接调用的图表组件库,内置主题设计,简单快捷,且支持用户自定义配置; npm 安装方式: npm install bytev-charts 若启动提示还需额外install插件,则运行 npm install @babel/runtime-corejs2 即可;
48 lines (46 loc) • 3.36 kB
JavaScript
import "core-js/modules/es.array.join.js";
import "core-js/modules/es.regexp.exec.js";
import "core-js/modules/es.string.split.js";
import "core-js/modules/es.array.slice.js";
import "core-js/modules/es.array.index-of.js";
import "core-js/modules/es.string.replace.js";
console.warn("THREE.SubsurfaceScatteringShader: As part of the transition to ES6 Modules, the files in 'examples/js' were deprecated in May 2020 (r117) and will be deleted in December 2020 (r124). You can find more information about developing using ES6 Modules in https://threejs.org/docs/#manual/en/introduction/Installation.");
/**
* ------------------------------------------------------------------------------------------
* Subsurface Scattering shader
* Based on GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look
* https://colinbarrebrisebois.com/2011/03/07/gdc-2011-approximating-translucency-for-a-fast-cheap-and-convincing-subsurface-scattering-look/
*------------------------------------------------------------------------------------------
*/
function replaceAll(string, find, replace) {
return string.split(find).join(replace);
}
var meshphong_frag_head = THREE.ShaderChunk["meshphong_frag"].slice(0, THREE.ShaderChunk["meshphong_frag"].indexOf('void main() {'));
var meshphong_frag_body = THREE.ShaderChunk["meshphong_frag"].slice(THREE.ShaderChunk["meshphong_frag"].indexOf('void main() {'));
THREE.SubsurfaceScatteringShader = {
uniforms: THREE.UniformsUtils.merge([THREE.ShaderLib["phong"].uniforms, {
"thicknessMap": {
value: null
},
"thicknessColor": {
value: new THREE.Color(0xffffff)
},
"thicknessDistortion": {
value: 0.1
},
"thicknessAmbient": {
value: 0.0
},
"thicknessAttenuation": {
value: 0.1
},
"thicknessPower": {
value: 2.0
},
"thicknessScale": {
value: 10.0
}
}]),
vertexShader: ["#define USE_UV", THREE.ShaderChunk["meshphong_vert"]].join("\n"),
fragmentShader: ["#define USE_UV", "#define SUBSURFACE", meshphong_frag_head, "uniform sampler2D thicknessMap;", "uniform float thicknessPower;", "uniform float thicknessScale;", "uniform float thicknessDistortion;", "uniform float thicknessAmbient;", "uniform float thicknessAttenuation;", "uniform vec3 thicknessColor;", "void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {", " vec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;", " vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));", " float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;", " vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;", " reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;", "}", meshphong_frag_body.replace("#include <lights_fragment_begin>", replaceAll(THREE.ShaderChunk['lights_fragment_begin'], 'RE_Direct( directLight, geometry, material, reflectedLight );', ["RE_Direct( directLight, geometry, material, reflectedLight );", "#if defined( SUBSURFACE ) && defined( USE_UV )", " RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);", "#endif"].join("\n")))].join("\n")
};