跳转至内容

1

在线

694

用户

212

主题

542

帖子

中文社区

有关WebGPU引擎的技术分析与探讨,包括引擎设计,编辑器,GFX,Shader语言编译器,3D文件转换器等。

166 主题 415 帖子
  • WebGPU: compute shader的使用场景有哪些

    2
    0 赞同
    2 帖子
    579 浏览
    shuangliuS

    Compute Shader是允许我们,把本来在CPU端要做很大计算的一些事情放到GPU来做,而并不是在某些特定的场景才会使用。

    利用GPU计算一直都有,在WebGL的中,我们也经常用vertex/ fragment shader 进行复杂计算,主要用于粒子特效的模拟或仿真,但确实使用不方便。一些纯计算 / AI引擎,比如TensorFlow,也会利用WebGL 模拟进行 GPU 并行计算

    WebGPU 开放 Compute shader 后,可以更方便的进行 GPU 计算开发,粒子系统,AI训练,或者物理系统模拟,可以更高效的开发。

    当然,有了compute管线后,一些经典的渲染场景,例如延迟渲染,光线追踪,主动剔除等复杂的渲染计算成为可能,要比WebGL的开发灵活性和能力强很多。

    除此之外,最简单的使用场景,例如把 mvp transform的矩阵计算放在compute shader中进行,要比写在vertex shader中更灵活,gpu性能利用率更高。

  • 各着色器语言有什么区别?

    2
    0 赞同
    2 帖子
    1k 浏览
    adminA

    并没有绝对的优势,劣势,最后都会编译成assembly。Cg 和 HLSL 几乎相同(相同的内置函数名称)。 GLSL 的语法有点不同(比如用 mix 代替 lerp,使用类似 main 的函数),但整体过渡仍然很容易。 唯一的区别在于细节和各自的 API(比如矩阵存储顺序之类的)。

  • WebGPU中Indirect Draw的实现

    2
    0 赞同
    2 帖子
    2k 浏览
    shuangliuS

    WebGPU有indirectDraw API
    spec: https://www.orillusion.com/zh/webgpu.html#dom-gpurenderencoderbase-drawindirect

    但是目前的WebGPU indirectDraw 只能encode draw command,因为WebGPU buffer中的每一个trunk都只是包含了draw command,而在Vulkan 和 Dx12,在draw command 之后还可以添加bind group等等,这样不仅仅是对draw command进行indirect操作,还可以操控bind group等等。

    就目前的WebGPU标准实现而言,indirectdraw 的意义不是很大,对性能提升不明显,仅仅只是加速draw的缓存而已,不如用 RenderBundle 提前对所有 command list 进行 record 从而提高性能。

    另外目前webgpu还不支持多线程操作,标准计划会支持,但目前的版本还没有实现,所以multi draw/writebuffer/submit encoder/... 都还不支持

  • Request device报错

    2
    0 赞同
    2 帖子
    501 浏览
    adminA

    @曙光磁铁 WebGPU标准仍处于draft阶段,浏览器默认不支持,需要 chrome 94+ 的浏览器配合origin-trail token才可以运行。如果需要自己本地开发测试,可以使用chrome canary,在地址栏访问chrome://flags ,将Unsafe WebGPU 设置为 enable 进行开启!

    screenshot-20211226-104823.png

  • 如何在webgpu中做纹理纵向反转

    2
    0 赞同
    2 帖子
    2k 浏览
    adminA

    @浮光_ 考虑你为什么需要做flip,可能是OpenGL或者WebGL的坐标系与WebGPU的不同,WebGL的原点是左下角,而DX12和Vulkan,也就是WebGPU的坐标原点都是左上角,如果你把webgl的代码放到webgpu的话,就需要转换坐标,可以在shader把UV的值改一下,比如uv.y = 1 - uv.y

    另外,gl.pixelStore只是改变了你上传texture的顺序,但是整个屏幕空间的坐标是不对应的,后面如果还需要处理比如render target,那么问题还会存在

  • WGSL做矩阵转换,矩阵运算

    2
    0 赞同
    2 帖子
    1k 浏览
    adminA

    @zmr wgsl里可以直接进行matrix矩阵相乘运算
    https://www.orillusion.com/zh/wgsl.html#arithmetic-expr

    多说一点,任何代码其实只是一行行的string character,最后都会通过编译器编译成对应的assembly,然后再去执行。矩阵乘法运算就是对应到wgsl里面build-in的function

    另外,js不支持符号重载,就是不可以对已有的运算符重新进行定义。所以做运算最好通过function来实现