-
Notifications
You must be signed in to change notification settings - Fork 505
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FR]: 关于webgpu模拟双精度问题 #141
Comments
这个可以去 webgpu 的 repo 反馈,按照目前 webgpu 的社区反馈可能暂时不会规划支持,主要是一些设备和平台不支持64位双精度浮点数,作为一个统一的web的标准,webgpu 官方尽量想规避因为设备和系统带来的差异,但未来是有可能以extension的形式支持
这个 issues 可以保持 open,看看 webgpu 未来支持情况如何 |
这个问题很多人都有反馈过,而且也应该是有一些解决方案的。目前来看最好的办法是webgpu官方来支持这种特性。不过针对于我们的场景,应该是可以有一些特定的解决方法的。 咱们是否可以更详细的描述一下具体使用场景和需求,哪些功能必须要双精度来支持,如果没有双精度会出现什么样的问题。我们可以针对具体的问题,再做进一步分析和讨论~ 目前单纯从issue中的截图效果来看,世界地图的精度下,可以正常显示地图信息。但是到了街道地图的精度下,所有的道路和建筑边缘会因为精度不够的问题,造成了边缘“弯曲”的效果。不知道是否这样理解呢? |
gis中渲染的都是一个一个瓦片/格子,由于js里是f64双精度数据,直接传入gpu计算会造成精度丢失,造成每个瓦片/格子位置发生轻微错位,大地图上精度不高,丢失了也基本看不出来,但缩放级别高了,一点点精度就比较明显了,会出现渲染抖动和错位 所谓模拟f64,可以牺牲显存,将f64转换成2个f32来存储传入gpu,除此之外还需要配合额外wgsl算法去实现用2个高低位f32计算f64的过程,性能和显存消耗都比较大 比起这种模拟形式,我上面回复也提到了,这个问题可以通过js层面统一先处理成f32后再传入gpu,可以有效避免抖动和错位问题 如果要求精度不丢失,可以通过在js应用层面先将gis坐标处理成一种相对差值坐标系,就是每个瓦片只传递相对位置差值,这样一个f32的精度也足够表达原始f64的位置信息 |
内部讨论的结果是,引擎层次可以针对于类似于GIS的场景或者其他对于数字精度要求比较高,以及大数场景做一些特殊的能力支持。 我们需要更多的时间来评估,用什么方案来处理更加合理,也总结出了以下方法,大家可以多给建议:
|
是否可以提供一个demo类似这种 |
ok,这个例子就是在 shader 里做 |
是的我希望有一个orillusion做的demo |
一些地图使用泰勒展开式 |
精度问题是一个我们一直关注的问题,正在尝试不同方式解决,希望持续讨论! |
WebGIS大地坐标系统
在常规的gis引擎中需要双精度来准确的描述地理信息,在webgpu中没有双精度;
在低级别中对精度要求不高的情况:
在高级别中对精度要求较高的情况:
The text was updated successfully, but these errors were encountered: