从0开发WebGPU渲染引擎:开篇
大家好,本系列会从0开始,开发一个基于WebGPU的路径追踪渲染器,使用深度学习降噪、DLSS等AI技术实现实时渲染;并且基于自研的低代码开发平台,让用户可以通过可视化拖拽的方式快速搭建自定义的Web3D引擎
回顾目前的技术积累
我已经在Web3D引擎领域有1万小时开发经验,主要完成了下面的事情:
1.用了4年,全职开发了Wonder:类似于Unity的WebGL引擎和编辑器,发布了v1.1正式版,完成了MVP功能
详细介绍可看:
Wonder 1.0正式版发布-----WebGL 3D引擎和编辑器

2.学习了WebGPU,写了WebGPU的新手教程,熟悉了计算着色器的使用,实现了LBVH算法
详情请见:
WebGPU学习系列目录
后面还作为技术合伙人,拿到了“WebGPU引擎项目”的天使轮千万投资
3.用了大概1年的时间,全职开发了基础的离线路径追踪渲染器,开设了相关的课程(课时长达49小时)
详情请见:
WebGPU+光线追踪Ray Tracing 开发三个月总结
发布了几个版本的代码
离线渲染零基础实战开发培训班
渲染图:

4.用了大概1年的时间,全职开发了Meta3D:Web3D低代码开发平台
Meta3D是开源的Web3D低代码平台,致力于建设共享互助开放的Web3D生态,让Web3D引擎和编辑器开发轻而易举

Meta3D的用户是Web3D引擎或编辑器的开发者,您使用Meta3D来快速搭建Web3D引擎或编辑器
Meta3D已经发布了内测版本
详情请见:
Meta3D官网
5.用了大概1年半的时间,学习了深度学习,开发了一个深度学习框架、开办了深度学习基础班培训课程,并且已经实现了深度学习降噪、DLSS等Demo
详情请见:
我开发的深度学习框架
深度学习基础课系列目录
深度学习降噪专题课
实时渲染前沿研究:在浏览器上实现了Facebook提出的DLSS算法
6.用了3个月,全职完成了《3D编程模式》这本开源书
本书提出了3D引擎和编辑器相关的7个编程模式,详情请见:
我写了本开源书:《3D编程模式》
为什么要从0开发WebGPU渲染引擎?
开发Wonder v1.2版本时暂停了开发,原因是发现有两个问题难以解决:
(1)没有实现全局光照,只有局部光照
因为使用的是WebGL,性能不行,没有计算着色器,所以难以实现高性能的全局光照算法
(2)用户不能扩展编辑器
因为编辑器的UI是React写的,所以不方便由用户扩展
因此,本系列开发的引擎将作为Wonder的v3.0版本,彻底解决这个两个问题。
解决方案如下:
(1)对于第一个问题,我们从WebGL改为WebGPU,从光栅化渲染改为路径追踪渲染,从而实现全局光照。
这里不使用光栅化+光追的混合渲染的好处是可以只用一套算法而实现所有的渲染效果,方便实现和管理。
另外,因为使用深度学习辐射亮度缓存、深度学习降噪、DLSS作为后处理,所以只需要1spp和低分辨率的采样,从而实现实时渲染
更多思考请详见:
实时渲染路径追踪概述
(2)对于第二个问题,因为现在我们基于Meta3D来开发引擎和编辑器,用户可以通过组装不同的组件来实现自定义的引擎和编辑器,并且UI改为用IMGUI实现,从而能容易地实现引擎和编辑器的扩展
下一步
实现下面的功能:
- 基于WebGPU的计算着色器,实现基础的路径追踪器
- 使用LBVH作为加速结构
从0开发WebGPU渲染引擎:开篇的更多相关文章
- 移动端H5开发 之 渲染引擎
渲染引擎 浏览器渲染引擎,负责解析 HTML, CSS,javascript的DOM部分,如桌面浏览器一般手机端也有4个比较重要的渲染引擎 Gecko,Trident,WebKit,Blink . 黑 ...
- 从0开发3D引擎(一):开篇
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.最小功能集合(MVP)" 的3D引擎. 本系列的素材来自我们的产品 ...
- 从0开发3D引擎(二):准备预备知识
大家好,本文介绍了开发3D引擎需要的预备知识,给出了相关的资源. 上一篇博文 从0开发3D引擎(一):开篇 了解Web 3D Web 3D的历史 目前Web 3D是基于WebGL这个Web端3D AP ...
- 用函数式编程,从0开发3D引擎和编辑器(一)
介绍 大家好,欢迎你踏上3D编程之旅- 本系列的素材来自我们的产品:Wonder-WebGL 3D引擎和编辑器 的整个开发过程,探讨了在从0开始构建3D引擎和编辑器的过程中,每一个重要的功能点.设计方 ...
- 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
大家好,本文介绍了Wonder的高层需求和本系列对应的具体功能点. 确定Wonder高层需求 业务目标 Wonder是web端3D开发的解决方案,包括引擎.编辑器,致力于打造开放.分享.互助的生态. ...
- 从0开发3D引擎(四):搭建测试环境
目录 上一篇博文 了解自动化测试 单元测试 集成测试 端对端测试 通过打印日志来调试 了解运行测试 断点调试 通过Spector.js测试WebGL 通过log调试Shader 移动端测试 了解性能测 ...
- 从0开发3D引擎:目录
介绍 大家好,本系列带你踏上Web 3D编程之旅- 本系列是实战类型,从0开始带领读者写出"良好架构.良好扩展性.优秀的性能.最小功能集合(MVP)" 的3D引擎. 本系列的素材来 ...
- 从0开发3D引擎(八):准备“搭建引擎雏形”
大家好,现在开始本系列的第三部分,按照以下几个步骤来搭建引擎雏形: 1.分析引擎的需求 2.实现最小的3D程序 3.从中提炼引擎原型 4.一步一步地对引擎进行改进,使其具备良好的架构 5.实现与架构相 ...
- 从0开发3D引擎(九):实现最小的3D程序-“绘制三角形”
目录 上一篇博文 运行测试截图 需求分析 目标 特性 头脑风暴 确定需求 总体设计 具体实现 新建Engine3D项目 实现上下文 实现_init 实现"获得WebGL上下文" 实 ...
- 从0开发3D引擎(十):使用领域驱动设计,从最小3D程序中提炼引擎(上)
目录 上一篇博文 下一篇博文 前置知识 回顾上文 最小3D程序完整代码地址 通用语言 将会在本文解决的不足之处 本文流程 解释本文使用的领域驱动设计的一些概念 本文的领域驱动设计选型 设计 引擎名 识 ...
随机推荐
- sms-activate操作简便易上手且好用的接码工具【保姆级教程】
前言 有些国外应用在使用应用上的功能时需要注册账号,由于某种不可抗因素,我们的手机号一般不支持注册,接收不到信息验证码,于是我们可以使用SmS-Activate提供的服务,使用$实现我们的需求(大概一 ...
- Midjourney 提示词工具(10 个国内外最好最推荐的)
Midjourney,是一个革命性的基于人工智能的艺术生成器,可以从被称为提示的简单文本描述中生成令人惊叹的图像.Midjourney已经迅速成为艺术家.设计师和营销人员的首选工具(包括像我这样根本不 ...
- 【机器学习与深度学习理论要点】20. 什么是激活函数,为什么要用激活函数,常见的激活函数和特点,softmax函数
1)什么是激活函数,为什么要用激活函数? 激活函数,指神经网络中将输入信号的总和转换为输出信号的函数,激活函数将多层感知机输出转换为非线性,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应 ...
- 如何在SpringBoot项目中兼容Jersey和SpringMVC框架?
文章目录 Jersey框架介绍 常用的注解: SpringBoot中SpringMVC兼容Jersey 整合Jersey REST(Representational State Transfer)表象 ...
- GaussDB(DWS)网络流控与管控效果
摘要:本文主要介绍GaussDB(DWS)网络流控能力,并对其管控效果进行验证. 本文分享自华为云社区<GaussDB(DWS)网络流控与管控效果>,作者:门前一棵葡萄树. 上一篇博文Ga ...
- 音视频八股文(5)--SDL音视频渲染实战。会使用就行,不需要深究。
01-SDL子系统 SDL将功能分成下列数个子系统(subsystem): SDL_INIT_TIMER:定时器 SDL_INIT_AUDIO:音频 SDL_INIT_VIDEO:视频 SDL_INI ...
- 2022-11-21:第N高的薪水。表结构和数据的sql语句如下。请问sql语句如何写? DROP TABLE IF EXISTS employee; CREATE TABLE employee (
2022-11-21:第N高的薪水.表结构和数据的sql语句如下.请问sql语句如何写? DROP TABLE IF EXISTS employee; CREATE TABLE employee ( ...
- 2022-09-17:一个字符串s,表示仓库的墙 与 货物,其中‘|‘表示墙,‘*‘表示货物。 给定一个起始下标start和一个终止下标end, 找出子串中 被墙包裹的货物 数量。 比如: s = “
2022-09-17:一个字符串s,表示仓库的墙 与 货物,其中'|'表示墙,''表示货物. 给定一个起始下标start和一个终止下标end, 找出子串中 被墙包裹的货物 数量. 比如: s = &q ...
- 2022-04-16:在一个10^6 * 10^6的网格中, source = [sx, sy]是出发位置,target = [tx, ty]是目标位置, 数组blocked是封锁的方格列表,被禁止的
2022-04-16:在一个10^6 * 10^6的网格中, source = [sx, sy]是出发位置,target = [tx, ty]是目标位置, 数组blocked是封锁的方格列表,被禁止的 ...
- 2021-10-30:有效的字母异位词。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位
2021-10-30:有效的字母异位词.给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词.注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位 ...