|
@@ -25,7 +25,7 @@
|
|
import { RGBShiftShader } from '../examples/jsm/shaders/RGBShiftShader.js'
|
|
import { RGBShiftShader } from '../examples/jsm/shaders/RGBShiftShader.js'
|
|
import { VignetteShader } from '../examples/jsm/shaders/VignetteShader.js'
|
|
import { VignetteShader } from '../examples/jsm/shaders/VignetteShader.js'
|
|
import { SharpenShader } from '../examples/jsm/shaders/SharpenShader.js'
|
|
import { SharpenShader } from '../examples/jsm/shaders/SharpenShader.js'
|
|
- import { BokehPass } from '../examples/jsm/postprocessing/BokehPass3.js'
|
|
|
|
|
|
+ import { BokehPass } from '../examples/jsm/postprocessing/BokehPass3.js';
|
|
import { BrightnessContrastSaturationShader } from '../examples/jsm/shaders/BrightnessContrastSaturationShader.js'
|
|
import { BrightnessContrastSaturationShader } from '../examples/jsm/shaders/BrightnessContrastSaturationShader.js'
|
|
import { ColorBalanceShader } from '../examples/jsm/shaders/ColorBalanceShader.js'
|
|
import { ColorBalanceShader } from '../examples/jsm/shaders/ColorBalanceShader.js'
|
|
import { TexturePass } from '../examples/jsm/postprocessing/TexturePass.js';
|
|
import { TexturePass } from '../examples/jsm/postprocessing/TexturePass.js';
|
|
@@ -89,7 +89,6 @@
|
|
let colorPass;
|
|
let colorPass;
|
|
let renderPass;
|
|
let renderPass;
|
|
let ssrPass;
|
|
let ssrPass;
|
|
- let hbaoPass;
|
|
|
|
let BCSPass;
|
|
let BCSPass;
|
|
let colorBalancePass;
|
|
let colorBalancePass;
|
|
let sharpenPass;
|
|
let sharpenPass;
|
|
@@ -393,6 +392,7 @@
|
|
},
|
|
},
|
|
dof: {
|
|
dof: {
|
|
enabled: false,
|
|
enabled: false,
|
|
|
|
+ focus: {x: 0.5, y: 0.5},
|
|
aperture: 2,
|
|
aperture: 2,
|
|
maxblur: 1,
|
|
maxblur: 1,
|
|
dofBlurNearFar: {x: 1, y: 1},
|
|
dofBlurNearFar: {x: 1, y: 1},
|
|
@@ -730,38 +730,32 @@
|
|
});
|
|
});
|
|
folderSSR.add(params.ssr, 'thickness').min(0).max(1.0).step(0.01).onChange(() => {
|
|
folderSSR.add(params.ssr, 'thickness').min(0).max(1.0).step(0.01).onChange(() => {
|
|
ssrPass.thickness = params.ssr.thickness;
|
|
ssrPass.thickness = params.ssr.thickness;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
folderSSR.add(params.ssr, 'maxDistance').min(0).max(100.0).step(.1).onChange(() => {
|
|
folderSSR.add(params.ssr, 'maxDistance').min(0).max(100.0).step(.1).onChange(() => {
|
|
ssrPass.maxDistance = params.ssr.maxDistance;
|
|
ssrPass.maxDistance = params.ssr.maxDistance;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
folderSSR.add(params.ssr, 'maxStep').min(0).max(1000).step(1).onChange(() => {
|
|
folderSSR.add(params.ssr, 'maxStep').min(0).max(1000).step(1).onChange(() => {
|
|
ssrPass.maxStep = params.ssr.maxStep
|
|
ssrPass.maxStep = params.ssr.maxStep
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
folderSSR.add(params.ssr, 'stride').min(0).max(50).step(0.1).onChange(() => {
|
|
folderSSR.add(params.ssr, 'stride').min(0).max(50).step(0.1).onChange(() => {
|
|
ssrPass.stride = params.ssr.stride;
|
|
ssrPass.stride = params.ssr.stride;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
})
|
|
})
|
|
folderSSR.add(params.ssr, 'opacity').min(0).max(1).step(0.01).onChange(() => {
|
|
folderSSR.add(params.ssr, 'opacity').min(0).max(1).step(0.01).onChange(() => {
|
|
ssrPass.opacity = params.ssr.opacity;
|
|
ssrPass.opacity = params.ssr.opacity;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
})
|
|
})
|
|
folderSSR.add(params.ssr, 'useHistoryBuffer').onChange(() => {
|
|
folderSSR.add(params.ssr, 'useHistoryBuffer').onChange(() => {
|
|
ssrPass.useHistoryBuffer = params.ssr.useHistoryBuffer;
|
|
ssrPass.useHistoryBuffer = params.ssr.useHistoryBuffer;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
}).name('useHistoryBuffer(test)')
|
|
}).name('useHistoryBuffer(test)')
|
|
folderSSR.add(ssrPass, 'stopJitter')
|
|
folderSSR.add(ssrPass, 'stopJitter')
|
|
// folderSSR.add(ssrPass, 'tt').min(200).max(210).step(1)
|
|
// folderSSR.add(ssrPass, 'tt').min(200).max(210).step(1)
|
|
// folderSSR.add(ssrPass, 'ttt').min(200).max(210).step(1)
|
|
// folderSSR.add(ssrPass, 'ttt').min(200).max(210).step(1)
|
|
- folderSSR.add(ssrPass,'downSampleFactor').min(0.5).max(1.0).step(0.5).onChange(() => {
|
|
|
|
|
|
+ folderSSR.add(ssrPass,'downSampleFactor').min(0.25).max(1.0).step(0.1).onChange(() => {
|
|
onWindowResize()
|
|
onWindowResize()
|
|
})
|
|
})
|
|
|
|
|
|
@@ -779,66 +773,55 @@
|
|
|
|
|
|
// ao
|
|
// ao
|
|
const folderAO = gui.addFolder('环境光遮蔽');
|
|
const folderAO = gui.addFolder('环境光遮蔽');
|
|
- const folderSSAO = folderAO.addFolder('SSAO');
|
|
|
|
|
|
+ // const folderSSAO = folderAO.addFolder('SSAO');
|
|
const folderHBAO = folderAO.addFolder('HBAO');
|
|
const folderHBAO = folderAO.addFolder('HBAO');
|
|
|
|
|
|
// ssao
|
|
// ssao
|
|
- folderSSAO.add(params.ssao, 'enabled').name('enabled').onChange(() => {
|
|
|
|
- ssrPass.ssao = params.ssao.enabled;
|
|
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- folderSSAO.add(params.ssao, 'kernelRadius').min(0).max(1).onChange(() => {
|
|
|
|
- ssrPass.kernelRadius = params.ssao.kernelRadius;
|
|
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- folderSSAO.add(params.ssao, 'minDistance').min(0.001).max(0.02).onChange(() => {
|
|
|
|
- ssrPass.minDistance = params.ssao.minDistance;
|
|
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- folderSSAO.add(params.ssao, 'power').min(0.0).max(5.0).onChange(() => {
|
|
|
|
- ssrPass.power = params.ssao.power;
|
|
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- folderSSAO.add(params.ssao, 'depthBiasValue').min(-0.01).max(0).onChange(() => {
|
|
|
|
- ssrPass.depthBiasValue = params.ssao.depthBiasValue;
|
|
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
- folderSSAO.add(params.ssao, 'rangeStrength').min(0).max(0.01).onChange(() => {
|
|
|
|
- ssrPass.rangeStrength = params.ssao.rangeStrength;
|
|
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
- });
|
|
|
|
|
|
+ // folderSSAO.add(params.ssao, 'enabled').name('enabled').onChange(() => {
|
|
|
|
+ // ssrPass.ssao = params.ssao.enabled;
|
|
|
|
+ // cameraMove()
|
|
|
|
+ // });
|
|
|
|
+ // folderSSAO.add(params.ssao, 'kernelRadius').min(0).max(1).onChange(() => {
|
|
|
|
+ // ssrPass.kernelRadius = params.ssao.kernelRadius;
|
|
|
|
+ // cameraMove()
|
|
|
|
+ // });
|
|
|
|
+ // folderSSAO.add(params.ssao, 'minDistance').min(0.001).max(0.02).onChange(() => {
|
|
|
|
+ // ssrPass.minDistance = params.ssao.minDistance;
|
|
|
|
+ // cameraMove()
|
|
|
|
+ // });
|
|
|
|
+ // folderSSAO.add(params.ssao, 'power').min(0.0).max(5.0).onChange(() => {
|
|
|
|
+ // ssrPass.power = params.ssao.power;
|
|
|
|
+ // cameraMove()
|
|
|
|
+ // });
|
|
|
|
+ // folderSSAO.add(params.ssao, 'depthBiasValue').min(-0.01).max(0).onChange(() => {
|
|
|
|
+ // ssrPass.depthBiasValue = params.ssao.depthBiasValue;
|
|
|
|
+ // cameraMove()
|
|
|
|
+ // });
|
|
|
|
+ // folderSSAO.add(params.ssao, 'rangeStrength').min(0).max(0.01).onChange(() => {
|
|
|
|
+ // ssrPass.rangeStrength = params.ssao.rangeStrength;
|
|
|
|
+ // cameraMove()
|
|
|
|
+ // });
|
|
|
|
|
|
// hbao
|
|
// hbao
|
|
folderHBAO.add(params.hbao, 'enabled').name('enabled').onChange(() => {
|
|
folderHBAO.add(params.hbao, 'enabled').name('enabled').onChange(() => {
|
|
ssrPass.hbao = params.hbao.enabled;
|
|
ssrPass.hbao = params.hbao.enabled;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
})
|
|
})
|
|
folderHBAO.add(params.hbao, 'power').min(0.0).max(5.0).step(0.01).onChange(() => {
|
|
folderHBAO.add(params.hbao, 'power').min(0.0).max(5.0).step(0.01).onChange(() => {
|
|
ssrPass.hbaoPower = params.hbao.power
|
|
ssrPass.hbaoPower = params.hbao.power
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
folderHBAO.add(params.hbao, 'radius').min(0.01).max(10).step(0.01).onChange(() => {
|
|
folderHBAO.add(params.hbao, 'radius').min(0.01).max(10).step(0.01).onChange(() => {
|
|
ssrPass.hbaoRadius = params.hbao.radius;
|
|
ssrPass.hbaoRadius = params.hbao.radius;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
folderHBAO.add(params.hbao, 'distanceExponent').min(0).max(5).step(0.01).onChange(() => {
|
|
folderHBAO.add(params.hbao, 'distanceExponent').min(0).max(5).step(0.01).onChange(() => {
|
|
ssrPass.distanceExponent = params.hbao.distanceExponent;
|
|
ssrPass.distanceExponent = params.hbao.distanceExponent;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
folderHBAO.add(params.hbao, 'bias').min(0).max(0.1).onChange(() => {
|
|
folderHBAO.add(params.hbao, 'bias').min(0).max(0.1).onChange(() => {
|
|
ssrPass.bias = params.hbao.bias;
|
|
ssrPass.bias = params.hbao.bias;
|
|
- cameraMove()
|
|
|
|
-
|
|
|
|
|
|
+ cameraMove()
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
@@ -882,12 +865,12 @@
|
|
bokehPass.enabled = params.dof.enabled;
|
|
bokehPass.enabled = params.dof.enabled;
|
|
cameraMove()
|
|
cameraMove()
|
|
});
|
|
});
|
|
- folderDOF.add(params.dof, 'aperture').min(0.1).max(10).step(0.01).onChange(() => {
|
|
|
|
|
|
+ folderDOF.add(params.dof, 'aperture').min(0.01).max(10).step(0.01).onChange(() => {
|
|
bokehPass.aperture = params.dof.aperture;
|
|
bokehPass.aperture = params.dof.aperture;
|
|
cameraMove()
|
|
cameraMove()
|
|
|
|
|
|
});
|
|
});
|
|
- folderDOF.add(params.dof, 'maxblur').min(0.1).max(40).step(0.01).onChange(() => {
|
|
|
|
|
|
+ folderDOF.add(params.dof, 'maxblur').min(0.01).max(40).step(0.01).onChange(() => {
|
|
bokehPass.bokehRadius = params.dof.maxblur;
|
|
bokehPass.bokehRadius = params.dof.maxblur;
|
|
cameraMove()
|
|
cameraMove()
|
|
});
|
|
});
|
|
@@ -904,9 +887,9 @@
|
|
bokehPass.bokehPass = params.dof.bokehPass;
|
|
bokehPass.bokehPass = params.dof.bokehPass;
|
|
cameraMove()
|
|
cameraMove()
|
|
})
|
|
})
|
|
- // folderDOF.add(bokehPass, 'downSampleFactor').min(0.5).max(1.0).step(0.5).onChange(() => {
|
|
|
|
- // onWindowResize()
|
|
|
|
- // })
|
|
|
|
|
|
+ folderDOF.add(bokehPass, 'downSampleFactor').min(0.5).max(1.0).step(0.5).onChange(() => {
|
|
|
|
+ onWindowResize()
|
|
|
|
+ })
|
|
|
|
|
|
// folderDOF.add(bokehPass.dofBlurNearFar, 'x').min(0).max(1).step(0.001)
|
|
// folderDOF.add(bokehPass.dofBlurNearFar, 'x').min(0).max(1).step(0.001)
|
|
// folderDOF.add(bokehPass.dofBlurNearFar, 'y').min(0).max(1).step(0.001)
|
|
// folderDOF.add(bokehPass.dofBlurNearFar, 'y').min(0).max(1).step(0.001)
|
|
@@ -1091,7 +1074,7 @@
|
|
backgroundPlane = new THREE.Mesh(new THREE.PlaneGeometry(1000, 1000), new THREE.MeshBasicMaterial({color: params.backColor.color}))
|
|
backgroundPlane = new THREE.Mesh(new THREE.PlaneGeometry(1000, 1000), new THREE.MeshBasicMaterial({color: params.backColor.color}))
|
|
backgroundPlane.position.z = -100;
|
|
backgroundPlane.position.z = -100;
|
|
backgroundPlane.visible = params.backColor.enabled;
|
|
backgroundPlane.visible = params.backColor.enabled;
|
|
- camera = new THREE.PerspectiveCamera(params.camera.fov, window.innerWidth / window.innerHeight, 0.1, 150);
|
|
|
|
|
|
+ camera = new THREE.PerspectiveCamera(params.camera.fov, window.innerWidth / window.innerHeight, 0.1, 10000);
|
|
camera.add(backgroundPlane);
|
|
camera.add(backgroundPlane);
|
|
camera.position.set( 100, 2, 100 );
|
|
camera.position.set( 100, 2, 100 );
|
|
scene.add(camera);
|
|
scene.add(camera);
|
|
@@ -1142,12 +1125,12 @@
|
|
ssrPass.useHistoryBuffer = params.ssr.useHistoryBuffer;
|
|
ssrPass.useHistoryBuffer = params.ssr.useHistoryBuffer;
|
|
// ssrPass.useTexureBackground = !params.backColor.enabled;
|
|
// ssrPass.useTexureBackground = !params.backColor.enabled;
|
|
|
|
|
|
- ssrPass.ssao = params.ssao.enabled;
|
|
|
|
- ssrPass.kernelRadius = params.ssao.kernelRadius;
|
|
|
|
- ssrPass.minDistance = params.ssao.minDistance;
|
|
|
|
- ssrPass.power = params.ssao.power;
|
|
|
|
- ssrPass.depthBiasValue = params.ssao.depthBiasValue;
|
|
|
|
- ssrPass.rangeStrength = params.ssao.rangeStrength;
|
|
|
|
|
|
+ // ssrPass.ssao = params.ssao.enabled;
|
|
|
|
+ // ssrPass.kernelRadius = params.ssao.kernelRadius;
|
|
|
|
+ // ssrPass.minDistance = params.ssao.minDistance;
|
|
|
|
+ // ssrPass.power = params.ssao.power;
|
|
|
|
+ // ssrPass.depthBiasValue = params.ssao.depthBiasValue;
|
|
|
|
+ // ssrPass.rangeStrength = params.ssao.rangeStrength;
|
|
|
|
|
|
ssrPass.hbao = params.hbao.enabled;
|
|
ssrPass.hbao = params.hbao.enabled;
|
|
ssrPass.hbaoPower = params.hbao.power
|
|
ssrPass.hbaoPower = params.hbao.power
|
|
@@ -1163,7 +1146,8 @@
|
|
bokehPass.bokehRadius = params.dof.maxblur;
|
|
bokehPass.bokehRadius = params.dof.maxblur;
|
|
bokehPass.autoBlur = params.dof.autoBlur;
|
|
bokehPass.autoBlur = params.dof.autoBlur;
|
|
bokehPass.dofBlurNearFar = params.dof.dofBlurNearFar;
|
|
bokehPass.dofBlurNearFar = params.dof.dofBlurNearFar;
|
|
- bokehPass.bokehPass = params.dof.bokehPass;
|
|
|
|
|
|
+ bokehPass.bladeCount = params.dof.bladeCount;
|
|
|
|
+ bokehPass.focus.set(params.dof.focus.x, params.dof.focus.y)
|
|
composer.addPass(bokehPass);
|
|
composer.addPass(bokehPass);
|
|
|
|
|
|
taaPass = new TAARenderPass2( scene, camera );
|
|
taaPass = new TAARenderPass2( scene, camera );
|
|
@@ -1618,6 +1602,10 @@
|
|
params.colorBalance.Shadows.x = colorBalancePass.uniforms.low.value.x
|
|
params.colorBalance.Shadows.x = colorBalancePass.uniforms.low.value.x
|
|
params.colorBalance.Shadows.y = colorBalancePass.uniforms.low.value.y
|
|
params.colorBalance.Shadows.y = colorBalancePass.uniforms.low.value.y
|
|
params.colorBalance.Shadows.z = colorBalancePass.uniforms.low.value.z
|
|
params.colorBalance.Shadows.z = colorBalancePass.uniforms.low.value.z
|
|
|
|
+
|
|
|
|
+ params.dof.focus.x = bokehPass.focus.x
|
|
|
|
+ params.dof.focus.y = bokehPass.focus.y
|
|
|
|
+
|
|
}
|
|
}
|
|
async function saveScene() {
|
|
async function saveScene() {
|
|
saveLightData()
|
|
saveLightData()
|
|
@@ -1687,7 +1675,7 @@
|
|
const newfile = new File([modelFile], filename, {
|
|
const newfile = new File([modelFile], filename, {
|
|
type: modelFile.type
|
|
type: modelFile.type
|
|
})
|
|
})
|
|
- // console.log(newfile)
|
|
|
|
|
|
+ console.log(newfile)
|
|
|
|
|
|
let formdata = new FormData();
|
|
let formdata = new FormData();
|
|
formdata.append('num', num)
|
|
formdata.append('num', num)
|
|
@@ -1703,6 +1691,7 @@
|
|
// },
|
|
// },
|
|
data: formdata,
|
|
data: formdata,
|
|
complete: function(data) {
|
|
complete: function(data) {
|
|
|
|
+ console.log(data)
|
|
if(data.responseJSON.success) {
|
|
if(data.responseJSON.success) {
|
|
console.log('模型上传成功')
|
|
console.log('模型上传成功')
|
|
params.scene.modelPath = data.responseJSON.data
|
|
params.scene.modelPath = data.responseJSON.data
|
|
@@ -1768,8 +1757,11 @@
|
|
if(!params.dof.bladeCount) {
|
|
if(!params.dof.bladeCount) {
|
|
params.dof.bladeCount = 6
|
|
params.dof.bladeCount = 6
|
|
}
|
|
}
|
|
|
|
+ if(!params.dof.focus) {
|
|
|
|
+ params.dof.focus = {x: 0.5, y: 0.5}
|
|
|
|
+ }
|
|
// params.camera = oriParams.camera
|
|
// params.camera = oriParams.camera
|
|
- // params.lock = false
|
|
|
|
|
|
+ // params.lock = true
|
|
|
|
|
|
// params.colorBalance = {
|
|
// params.colorBalance = {
|
|
// enabled: true,
|
|
// enabled: true,
|