默认使用FXAA提高亮显性能

pull/348/MERGE
ChenX 5 years ago
parent c32bec8d61
commit 8fcf3776d7

@ -0,0 +1,17 @@
import { FXAAShader, ShaderPass } from "three";
require("three-EffectComposer");
require("three-ShaderPass");
require("three-FXAAShader");
export class FXAAPass extends ShaderPass
{
constructor()
{
super(FXAAShader);
}
setSize(width: number, height: number)
{
this.uniforms['resolution'].value.set(1 / width, 1 / height);
}
}

@ -1,14 +1,16 @@
import { EffectComposer, Matrix4, Object3D, OutlinePass, RenderPass, Scene, SMAAPass, Vector2, Vector3, WebGLRenderer } from 'three'; import { EffectComposer, Matrix4, Object3D, OutlinePass, RenderPass, Scene, SMAAPass, Vector2, Vector3, WebGLRenderer } from 'three';
import { begin, end } from 'xaop'; import { begin, end } from 'xaop';
import { app } from '../ApplicationServices/Application'; import { app } from '../ApplicationServices/Application';
import { arrayRemoveOnce } from '../Common/ArrayExt';
import { GetEntity } from '../Common/Utils'; import { GetEntity } from '../Common/Utils';
import { Database } from '../DatabaseServices/Database'; import { Database } from '../DatabaseServices/Database';
import { Entity } from '../DatabaseServices/Entity/Entity'; import { Entity } from '../DatabaseServices/Entity/Entity';
import { GenerateRaycaster } from '../Editor/PointPick'; import { GenerateRaycaster } from '../Editor/PointPick';
import { userConfig } from '../Editor/UserConfig'; import { userConfig } from '../Editor/UserConfig';
import { ZeroVec, GetBox, GetBoxArr, isPerpendicularityTo } from '../Geometry/GeUtils'; import { GetBox, GetBoxArr, isPerpendicularityTo, ZeroVec } from '../Geometry/GeUtils';
import { PlaneExt } from '../Geometry/Plane'; import { PlaneExt } from '../Geometry/Plane';
import { CameraUpdate } from './CameraUpdate'; import { CameraUpdate } from './CameraUpdate';
import { FXAAPass } from './FXAAPass';
import { GripScene } from './GripScene'; import { GripScene } from './GripScene';
import { PreViewer } from './PreViewer'; import { PreViewer } from './PreViewer';
@ -19,12 +21,17 @@ require("three-SMAAShader");
require("three-EffectComposer"); require("three-EffectComposer");
require("three-RenderPass"); require("three-RenderPass");
require("three-ShaderPass");
require("three-SMAAPass"); require("three-SMAAPass");
require("three-OutlinePass"); require("three-OutlinePass");
enum AAType
{
FXAA = 0,//快速近似抗锯齿(性能更好)
SMAA = 1,//多重采样抗锯齿(质量更好)
}
export class Viewer export class Viewer
{ {
protected NeedUpdate: boolean = true; protected NeedUpdate: boolean = true;
@ -39,9 +46,12 @@ export class Viewer
PreViewer: PreViewer; PreViewer: PreViewer;
UsePass = false; UsePass = false;
private _AAType: AAType = AAType.FXAA;
RenderPass: RenderPass; RenderPass: RenderPass;
OutlinePass: OutlinePass; OutlinePass: OutlinePass;
Composer: EffectComposer; Composer: EffectComposer;
private _EffectFXAAPass: FXAAPass;
private _SMAAPass: SMAAPass;
private _Scene: Scene = new Scene; private _Scene: Scene = new Scene;
@ -102,6 +112,26 @@ export class Viewer
{ {
return this._Height; return this._Height;
} }
set AAType(type: AAType)
{
if (type !== this._AAType)
{
if (this._AAType === AAType.FXAA)
{
arrayRemoveOnce(this.Composer.passes, this._EffectFXAAPass);
this.Composer.passes.push(this._SMAAPass);
}
else
{
arrayRemoveOnce(this.Composer.passes, this._SMAAPass);
this.Composer.passes.push(this._EffectFXAAPass);
}
this._AAType = type;
this.UpdateRender();
}
}
//初始化render //初始化render
InitRender(canvasContainer: HTMLElement) InitRender(canvasContainer: HTMLElement)
{ {
@ -144,9 +174,11 @@ export class Viewer
this.Composer.addPass(this.OutlinePass); this.Composer.addPass(this.OutlinePass);
let smaa = new SMAAPass(this.Width, this.Height); this._SMAAPass = new SMAAPass(this.Width, this.Height);
smaa.renderToScreen = true; this._SMAAPass.renderToScreen = true;
this.Composer.addPass(smaa); this._EffectFXAAPass = new FXAAPass();
this.Composer.addPass(this._EffectFXAAPass);
this.OnSize(); this.OnSize();
} }

Loading…
Cancel
Save