最近,我一直在与Three.js合作,以便在WebGL中呈现3D场景。作为后盾,我还使用了三个的CanvasRenderer维护版本,虽然它们没有那么多多边形、照明技术或效果,但仍然可以在没有WebGL功能的浏览器中运行(如果用户拒绝启用WebGL本身,也可以在WebGL中运行)。
然而,今天我意识到兼容性不仅仅是用户浏览器是否支持WebGL的问题,而且也是用户的硬件是否严格到足以完美地呈现WebGL (即运行60 fps)的问题。虽然有大量的数据可以说明人口中使用哪个浏览器的比例,但我很难找到运行计算机的用户的发行版,这些用户的运行能力超过了运行WebGL的能力。
假设他们使用的是一个WebGL支持的网络浏览器,那么到底有多少人口能够以60 fps的速度运行您的平均WebGL页面呢?如果有大量的人在WebGL中进行渲染,那么在硬件中发现这些缺点的最好方法是什么呢?javascript解决方案将是理想的,因为我们已经在使用该语言的三种语言。
我很可能误解了这种情况,因为这似乎不是WebGL开发领域中广泛讨论的问题。如果是这样的话,请让我知道,这样我才能更好地了解如何在未来与三人合作。
发布于 2014-07-02 19:19:16
如果您使用three.js,您可以查询扩展:
gl = renderer.getContext();
exts = gl.getSupportedExtensions();所以,如果你没有像浮点纹理这样的东西,你就会知道你在做什么。WebGL是围绕最低公分母建立的。
发布于 2014-07-02 19:13:03
我和Android有过同样的专业工作--在发布硬件加速的Android操作系统之前,我们有了一个3D密集型应用程序,它在一些手机上运行得很顺利,而在其他手机上却运行得很糟糕。这个问题出现在任何开放平台上,比如Android或Windows。iPhones/iPad有一个非常明确的硬件设置,但是在PC上你会得到一系列的视频卡。
如果您使用Cg/HLSL着色器,您将编译成一个特定的硬件配置文件,该配置文件描述顶点、几何图形和像素着色器的下限。不过,我猜您正在使用GLSL着色器并在运行时进行编译?GLSL不针对硬件配置文件,如果硬件无法运行,则只会无法编译着色器。
当然,这只会让您了解程序是否能够执行,而不是它执行得有多好。一个着色器可以编译的很好,运行在5 5fps。
我担心用户会看到糟糕的图形体验,所以在我们的应用程序第一次运行时,我向屏幕外的目标提供了一个模型,并对FPS进行了平均处理,然后在得分太低的情况下禁用了3D部分。你知道吗?用户讨厌它。很多人都有3D功能的手机,他们觉得自己看不见屏幕截图中的3D部分。我推了一个更新删除检查,所以现在如果你有坏的硬件,你会看到3D场景运行缓慢。事实上,我们对那次经历的抱怨较少,尽管我讨厌它看上去有多么不雅致。
积极的一面是,OS和Windows (因为Vista)都支持操作系统中的硬件加速合成(GL/D3D现在将所有窗口呈现到屏幕上)。这促使大多数PC厂商在其电脑中加入3D加速功能。因此,我认为可以肯定的是,假设人们有3D卡--他们是否拥有WebGL将是一个更多的限制因素。硬件和驱动程序的多样性也让您在一台出现在其他机器上的机器上出现了奇怪的呈现错误-- PC游戏开发人员在发布之前对一系列卡进行测试,以试图缓解这个问题。但是,这些奇怪的But最多只占用户的一小部分,而且通常是微不足道的,因此,除非用户抱怨,否则不值得担心。
如果你仍然担心性能,那么PC上的标准解决方案是允许用户调整图形设置,以降低屏幕上像素着色器/三角形的复杂性。确保查看大多数客户拥有的硬件的真实世界数据,并使用该范围进行目标定位和测试。
不管怎么说,有一件真实的轶事,HTH。
https://stackoverflow.com/questions/24538456
复制相似问题