threejs 画面增强(抗锯齿) fxaa ssaa smaa taa

threejs加载完模型后的,通常显示效果达不到自己的预想,以下讨论几种画面增强方式;使用的技术主要是threejs的后处理技术(postprocess)

什么是fxaa ssaa smaa taa?

其实就是抗锯齿 以上四种抗锯齿方式

aa:antialias的缩写 anti-alias 抗锯齿

#1

fxaa:Fast Approximate Anti-Aliasing  快速近似抗锯齿,名字很好理解,周围啥样 我直接近似,其实就是一种算法 ,算法具体实现方式不必深究,最终实现了抗锯齿,优点:效率高 缺点:不尽人意,事实上,threejs打开抗锯齿的话使用的就是这种方式:

var renderer = new THREE.WebGLRenderer({ antialias: true });

ssaa:super-sampling a-a  超级采样抗锯齿,这种抗锯齿方式听名字就比fxaa(快速近似抗锯齿)效果好,快速近似抗锯齿其实也就是周围采样,超级采样了,肯定比周围采样好 优缺点:超级采样渲染 性能爆炸 耗能高

没有对比  就没有伤害

在sketchfub上下载一个模型 (.obj)

sketchfab上的显式效果

两个字 优雅

使用objloader加载到three中 直接使用第一行代码定义renderer渲染(抗锯齿打开) 效果如下

 

 忽略背景 人物是不是变窄了(失真)??

 下面 看看sass渲染实现方式

实现方式:

1.初始化一个effectcomposer ;renderer就是你所使用的renderer


import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';
const effectComposer = new EffectComposer(renderer, renderer.domElement);

来看看composer牛津字典的解释

a person who writes music, especially classical music

一个写音乐,尤其是经典(传统)音乐的人

现在 你创建了一个effect(效果)音乐人,你还需要给他一些你想要的效果,在three中表现为你传给他一段段的pass,他根据这一段段的pass来实现指定的(抗锯齿、特效)效果,需要注意的是你传给他pass的顺序,他会根据你传给他的顺序执行程序

2.增加一个常客 RenderPass

事实上这个renderPass貌似并没有什么用,但是习惯性先把这个renderpass传给effectComposer

通过effectComposer.addPass()添加到composer中

import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass'
const renderPass = new RenderPass(scene, camera);
effectComposer.addPass(renderPass);

3. 增加第二个pass:ssaaPass

import { SSAARenderPass } from 'three/examples/jsm/postprocessing/SSAARenderPass';
const sassRenderPass = new SSAARenderPass(scene, camera)
effectComposer.addPass(sassRenderPass )

4.使用我们的音乐家演奏

给音乐家加了这么多pass,那肯定是使用音乐家来演奏(渲染)

 renderer.setAnimationLoop(()=>{
        effectComposer.render()
    })

let us see the effect:

 是不是很有改善

#2 权衡的艺术: smaa

smaa:子像素增强抗锯齿 这是在ssaa和fxaa下的一种抗锯齿方式;也就是最佳能耗比

话不多说, 上代码

import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass'
smaaPass = new SMAAPass(offsetWidth * renderer.getPixelRatio(), offsetHeight * renderer.getPixelRatio());
effectComposer.addPass(smaaPass)

smaa渲染效果

 至于 taa

time aa 时间抗锯齿

来看看threejs推荐什么时候用:

 * When there is no motion in the scene, the TAA render pass accumulates jittered camera samples across frames to create a high quality anti-aliased result.

当场景no motion(没有运动、静止)的时候 ;TAA渲染过程在帧之间累积抖动的相机样本,以创建高质量的抗锯齿结果

就是2张或者多帧合成一帧呗

在此不多赘述 有兴趣的读者可以去了解一下 在渲染静态three页面时候使用taa pass或许会有意想不到的效果!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值