support FXAA, close #71
This commit is contained in:
parent
d293b5dc6a
commit
b13aa89be4
18
README.md
18
README.md
|
@ -16,7 +16,7 @@ Three.js powered Minecraft skin viewer.
|
||||||
* Automatic model detection (Slim / Default)
|
* Automatic model detection (Slim / Default)
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
[Examples of using the viewer](https://bs-community.github.io/skinview3d/)
|
[Example of using skinview3d](https://bs-community.github.io/skinview3d/)
|
||||||
```html
|
```html
|
||||||
<div id="skin_container"></div>
|
<div id="skin_container"></div>
|
||||||
<script>
|
<script>
|
||||||
|
@ -65,5 +65,21 @@ Three.js powered Minecraft skin viewer.
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Anti-aliasing
|
||||||
|
skinview3d supports FXAA (fast approximate anti-aliasing).
|
||||||
|
To enable it, you need to replace `SkinViewer` with `FXAASkinViewer`.
|
||||||
|
|
||||||
|
It's recommended to use an opaque background when FXAA is enabled,
|
||||||
|
as transparent background may look buggy.
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
let skinViewer = new skinview3d.FXAASkinViewer(document.getElementById("skin_container"), {
|
||||||
|
// we do not use transparent background, so disable alpha to improve performance
|
||||||
|
alpha: false
|
||||||
|
});
|
||||||
|
// set the background color
|
||||||
|
skinViewer.renderer.setClearColor(0x5a76f3);
|
||||||
|
```
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
`npm run build`
|
`npm run build`
|
||||||
|
|
|
@ -375,7 +375,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function initializeViewer() {
|
function initializeViewer() {
|
||||||
skinViewer = new skinview3d.SkinViewer(document.getElementById("skin_container"), {
|
skinViewer = new skinview3d.FXAASkinViewer(document.getElementById("skin_container"), {
|
||||||
alpha: false
|
alpha: false
|
||||||
});
|
});
|
||||||
skinViewer.renderer.setClearColor(0x5a76f3);
|
skinViewer.renderer.setClearColor(0x5a76f3);
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
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 { FXAAShader } from "three/examples/jsm/shaders/FXAAShader.js";
|
||||||
|
import { SkinViewer, SkinViewerOptions } from "./viewer.js";
|
||||||
|
|
||||||
|
export class FXAASkinViewer extends SkinViewer {
|
||||||
|
|
||||||
|
readonly composer: EffectComposer;
|
||||||
|
readonly renderPass: RenderPass;
|
||||||
|
readonly fxaaPass: ShaderPass;
|
||||||
|
|
||||||
|
constructor(domElement: Node, options: SkinViewerOptions = {}) {
|
||||||
|
super(domElement, options);
|
||||||
|
this.composer = new EffectComposer(this.renderer);
|
||||||
|
this.renderPass = new RenderPass(this.scene, this.camera);
|
||||||
|
this.fxaaPass = new ShaderPass(FXAAShader);
|
||||||
|
this.composer.addPass(this.renderPass);
|
||||||
|
this.composer.addPass(this.fxaaPass);
|
||||||
|
this.updateComposerSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
setSize(width: number, height: number): void {
|
||||||
|
super.setSize(width, height);
|
||||||
|
if (this.composer !== undefined) {
|
||||||
|
this.updateComposerSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private updateComposerSize(): void {
|
||||||
|
this.composer.setSize(this.width, this.height);
|
||||||
|
const pixelRatio = this.renderer.getPixelRatio();
|
||||||
|
this.composer.setPixelRatio(pixelRatio);
|
||||||
|
this.fxaaPass.material.uniforms["resolution"].value.x = 1 / (this.width * pixelRatio);
|
||||||
|
this.fxaaPass.material.uniforms["resolution"].value.y = 1 / (this.height * pixelRatio);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected doRender(): void {
|
||||||
|
this.composer.render();
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,3 +2,4 @@ export * from "./model.js";
|
||||||
export * from "./viewer.js";
|
export * from "./viewer.js";
|
||||||
export * from "./orbit_controls.js";
|
export * from "./orbit_controls.js";
|
||||||
export * from "./animation.js";
|
export * from "./animation.js";
|
||||||
|
export * from "./fxaa.js";
|
||||||
|
|
Loading…
Reference in New Issue