当没有输入值更改时,着色器材质是否继续在Three.js中呈现?

时间:2017-10-14 17:08:55

标签: three.js

我在使用Three.js的智能手机上编写着色器材质,因此保存GPU性能对我来说至关重要。

情况:

许多平面在我的应用程序中被设计为UI界面,并且将在开始时或在许多用户交互活动中播放动画(着色器动画)。在动画之后,那些用户界面处于"静态"状态(a"静态"由着色器组合的图像),无需一次又一次地在着色器中进行组合(是的,它渲染,"渲染"这里意味着"着色器多重纹理,或程序组合")。如果不能停止那些无意义的渲染,它将消耗大部分的GPU性能。

问题:

众所周知,当着色器材质的任何输入值发生变化时,是否需要更新"是"假"或不,webGLRender将更新输出材料。

但是,如果没有更改Uniforms的输入值,webGLRender会再次渲染它,还是只是放弃渲染?这是问题1.

我已经阅读了" webGLRender.js"代码,理解不好,仍然不太确定如何渲染着色器材质。(从代码中,我相信它一直在渲染,但不是很确定。)

问题2: 如果webGLRender继续渲染着色器材质,即使没有更改输入值,是否有办法阻止webGLRender呈现"未更改"着色器材质,以节省GPU性能?

这是我的简单测试:

fragmentShader:

WP_Query

vertexShader:

uniform float col; 
void main() {
   gl_FragColor = vec4(col, 0.58, 0.06, 1.0);
} 

Javascript代码:

void main() {
    gl_Position = projectionMatrix * modelViewMatrix * vec4(position.x+5.0, position.y, position.z+25.0, 1.0); 
}

感谢。

1 个答案:

答案 0 :(得分:0)

  1. 如果您有任何类型的动画,动画,轨道控制等,以及循环,渲染器将每帧渲染一切。即使您的相机更改位置也被视为着色器“输入值”(制服)的更改。
  2. 实现此类目标的唯一方法是不再渲染。