解决办法
https://github.com/mrdoob/three.js/issues/20241
关键是这个 GammaCorrectionShader
import {EffectComposer} from 'three/examples/jsm/postprocessing/EffectComposer.js';
import {RenderPass} from 'three/examples/jsm/postprocessing/RenderPass.js';
import {ShaderPass} from 'three/examples/jsm/postprocessing/ShaderPass.js';
import {OutlinePass} from 'three/examples/jsm/postprocessing/OutlinePass.js';
import {FXAAShader} from 'three/examples/jsm/shaders/FXAAShader.js';
import { GammaCorrectionShader } from 'three/examples/jsm/shaders/GammaCorrectionShader.js';
composer = new EffectComposer(renderer);
const renderPass = new RenderPass(scene, camera);
composer.addPass(renderPass);
outlinePass = new OutlinePass(new THREE.Vector2(width, height), scene, camera);
outlinePass.renderToScreen = true
outlinePass.visibleEdgeColor.set('green');//模型描边颜色,默认白色
outlinePass.edgeThickness = 4.0;//轮廓边缘描边厚度
outlinePass.edgeStrength = 6.0;//边缘发光强度,数值大,更亮一些
composer.addPass(outlinePass);
effectFXAA = new ShaderPass(FXAAShader);
effectFXAA.uniforms['resolution'].value.set(1 / width, 1 / height);
composer.addPass(effectFXAA);
const effectColorSpaceConversion = new ShaderPass( GammaCorrectionShader );
composer.addPass( effectColorSpaceConversion );
参考代码
https://jsfiddle.net/42juk3rq/
另外假如加了FXAAShader 锯齿还是比较严重 可以更新renderer的logarithmicDepthBuffer参数值,效果比较好。
renderer = new THREE.WebGLRenderer({
antialias: true, //开启锯齿,
logarithmicDepthBuffer: true,
})