• 我完成了10000小时开发3D引擎【转】


    为什么要开始10000小时?

    我以前看过一本叫《异类》的书,书的大概意思是:只要学习10000小时,任何人都可以成为一个领域的大师。这里的“学习”是指完全专注地精进学习,不做无用的重复工作,不待在舒适区,一直在学习区学习!

    我看完后就一直想验证一下是否属实。我在网上搜索了一下关于“10000小时实践”的情况,结果发现还没有一个人真正地、有记录地完成了10000小时!只发现了一个国外的同学实践的Dan计划(10000小时打高尔夫球),但是这个同学也只坚持了6000多小时,然后就停止了。所以说,他也没有真正完成10000小时!

    然后我在豆瓣上发现了一万小时梦想实践法 小组,里面都是实践10000小时的同学做的记录。不过也没有一个人真正的完成了10000小时,甚至连完成1千小时的同学都几乎没有!

    正好那段时间,我开始学习Web3D,具体来说就是学习WebGL,并且开发3D引擎。所以某一天我突发奇想:为什么不在豆瓣小组上打卡呢?既然我一向很有毅力,为什么不证明下我真的能完成10000小时的挑战呢?

    哈哈!于是我就从2015年8月11日开始,在豆瓣小组上开始了打卡记录!很高兴的是,我于2022年3月7日,完成了10000小时!!!一共花了2258天(包括周六周日),平均每天4.4小时。

    我的10000小时打卡记录如下:
    打造3D引擎,第11000小时开始(已经完成了10000小时!)

    image

    一切的开始

    我在开始之前,在学校里面全职开发了2年的Html5 2D引擎和游戏,主要成果如下:

    发布HTML5 RTS游戏-古代战争
    炸弹人游戏开发系列
    发布我制作的jQuery贪吃蛇游戏
    连连看游戏
    动作类游戏demo
    发布HTML5 2D游戏引擎YEngine2D
    提炼游戏引擎系列

    通过校招,去阿里巴巴的钉钉部门做前端开发

    后面我看到了Babylonjs的3d演示demo,让我重新燃起了对3D技术探索的热情!因为我已经做过2D了,自然就想做更高端的3D!

    于是就开始了有趣的Web3D之路。。。。。。

    完成第1000小时

    从2015年5月25日 到 2015年12月3日,我完成了1000个小时,平均每天6小时

    我开始从0学习WebGL,下面是我的学习方法:
    1.我找到了《WebGL编程指南》这本书,把大部分demo实现了一遍;
    2.再次第二遍实现demo,提炼3D引擎的雏形;
    3.用提炼的引擎实现了一个“自由浏览场景”的demo。

    image

    完成第1000小时后,我发布了开源的3D引擎的第一版(v0.1.0),共22k行有效代码(没有算测试代码),实现了模型、morph动画、arcball相机、光照、normal map、反射和折射、脚本、阴影、自定义shader、skybox、md2/obj格式转换等功能。

    引擎渲染展示如下:
    image

    image

    完成第2000小时

    从2015年12月4日 到 2016年5月31日,我完成了1000个小时,平均每天5.9小时

    这段时间的主要工作如下:

    • 引擎发布到v0.5.7版本,新增了lod、水、地形、过程纹理、八叉树、UI、picking、碰撞和物理、gltf等功能
    • 经典书看了共8本书
      《Design by Contract 原则与实践》
      《Game Programming Patterns》
      《编程珠玑》
      《OpenGL Insights》
      《WebGL Insights》
      《游戏引擎架构》
      《失控》
      《富爸爸》系列

    引擎渲染展示如下:

    image

    image

    完成第2000小时后,通过朋友主动推荐,我得到了再次去阿里巴巴的天猫部门开发3D引擎的工作机会!

    完成第3000小时

    从2016年6月1日 到 2017年3月20日,我完成了1000个小时,平均每天3.3小时

    这段时间的主要工作如下:

    • 引擎发布到v0.9.0版本,新增了室外场景增强、Billboard、骨骼动画、性能优化等功能
    • leetcode算法题刷了90道题
    • 在天猫工作了一段时间,应用我开发的引擎做了一个pc端多人联网的小的项目和一个移动端ar的项目
    • 后面离职回家,开始重写引擎,完成了v1.0.0-alpha1版本

    v0.9.0引擎渲染展示如下:

    image

    完成第4000小时

    从2017年3月21日 到 2017年9月25日,我完成了1000个小时,平均每天5.4小时

    这段时间开始和小浩一起,开始Wonder项目(相当于Web版的Unity)的开发!

    这段时间主要工作如下:

    • 引擎发布到v1.0.0-alpha5,由面向对象范式彻底地转换为函数式编程范式,实现了多线程渲染、支持webgl2、面向数据data oriented、defer shading等特性
    • 开始开发编辑器,发布到v0.2.0

    编辑器界面展示如下:

    image

    完成第5000小时

    从2017年9月26日 到 2018年3月21日,我完成了1000个小时,平均每天6小时

    这段时间主要工作如下:

    • 引擎发布到v1.0.0-alpha17,再一次彻底重写,使用reason语言替换typescript语言!性能大幅提升,增加了e2e测试,使用job架构和微服务架构
    • 编辑器发布到v0.8.0

    完成第6000小时

    从2018年3月22日 到 2018年9月8日,我完成了1000个小时,平均每天6小时

    这段时间主要工作如下:

    • 引擎发布到v1.0.0-alpha23,新增了多线程渲染、纹理、scene graph、事件、arcball相机、imgui等功能
    • 编辑器发布到v0.12.0,正在实现导入导出功能

    完成第7000小时

    从2018年9月9日 到 2019年3月24日,我完成了1000个小时,平均每天5.1小时

    我们在2019年3月11日发布了Wonder 1.0版本,主要打通了编辑器的核心流程,包括:

    • 组件化的gameObject
    • 编辑和运行场景
    • 资产管理
    • 导入导出和发布

    相关链接为:
    Wonder 1.0正式版发布-----WebGL 3D引擎和编辑器

    这段时间主要工作如下:

    • 引擎发布到v1.0.0,主要特性为:

      • 多线程渲染
      • ECS架构
      • Job管道
      • 纹理
      • 方向光和点光源
      • 加载模型和场景
      • 流加载
      • imgui
      • 事件
      • instance
    • 编辑器发布到v1.0.0,主要特性为:

      • pwa
      • 场景管理
      • 编辑和运行场景
      • transform gizmo
      • 快捷键
      • Redo/Undo
      • 输出消息
      • 资产管理
      • 导入导出
      • 发布本地包
    • 上线了Wonder的官网、论坛、文档视频教程

    Wonder v1.0展示如下:

    image

    完成第8000小时

    从2019年3月25日 到 2019年10月3日,以及从2020年3月13日 到 2020年6月25日,我完成了1000个小时,平均每天3.7小时

    我从2019年10月3日开始,暂停了Wonder的开发,开始学习WebGPU并写了相关的系列文章,还写了3D引擎开发的系列文章

    文章的相关链接为:
    WebGPU学习系列
    从0开发3D引擎

    后面于2020年3月13日停止写文章,开始学习光线追踪

    这段时间主要工作如下:

    Wonder v1.1展示如下:

    image

    WebGPU+Ray Tracing Demo展示如下:

    image

    完成第9000小时

    从2020年6月26日 到 2021年3月15日,我完成了1000个小时,平均每天3.8小时

    这段时间中,我参加了一个创业团队,负责乐高模型的3D渲染;
    然后,我重写了引擎,开发离线渲染器;
    最后,我开设了光线追踪/离线渲染相关的课程

    这段时间主要工作如下:

    • 协助前端工程师,开发3D网站
    • 实现乐高模型的ldr数据的3D渲染
    • 重写Wonder引擎,开发离线渲染器,发布到了v2.0.0-alpha.6版本,实现了基于RTX显卡的光追管线的基础路径追踪渲染,支持了gltf模型
    • 接了个做聊天IM富应用的活,开发了一些模块
    • 直播了光线追踪相关的免费的10节课程,课程链接为:
      光线追踪图形学课程
    • 开设“ 路径追踪渲染器零基础实战开发基础班”,开始付费的直播课程,已直播到第二十二节课(上)。现在课程已经免费发布在b站上了:
      路径追踪渲染器零基础实战开发基础班

    离线渲染的效果如下:

    image

    课程:

    image

    完成第10000小时

    从2021年3月16日 到 2022年3月7日,我完成了1000个小时,平均每天2.8小时

    这段时间中,我开始了技术顾问的兼职工作;
    并且作为技术合伙人创业:开发WebGPU引擎,并拿到了1000万的天使轮融资(不过后面我因为期望不符而退出了);
    我也给两家公司做了技术培训

    我开始开发新的开源项目:Meta3D
    Meta3D是一个开放的、完全可扩展的框架,用来开发Web3D引擎和编辑器!

    这段时间主要工作如下:

    • 完成了 “ 路径追踪渲染器零基础实战开发基础班” 课程的所有直播
    • 完成了1个技术咨询 :提供“Web3D编辑器架构”的设计方案
    • 完成了1个技术顾问的第一阶段的任务:指导Web3D引擎开发
    • 完成了为两家公司提供技术培训
    • 完成了1个Web3D应用的Demo开发 :流畅且无缝地切换和展示3D场景
    • 作为技术合伙人创业:开发WebGPU引擎,并拿到了1000万的天使轮融资
    • 开始了1个新的技术顾问:指导Web3D编辑器开发
    • 开始了从Wonder中发展而来的新的开源项目:Meta3D
    • 开始了直播编程:直播开发Meta3D的过程,直播录像在b站上:
      直播写3D引擎和编辑

    我收获了什么?

    在这段时间中,我达成了下面的成就:

    • 在引擎和编辑器项目中,提交了7000多次commit,测试覆盖率95%
    • 完全重写了引擎4次以上,完全重写编辑器1次
    • 发布了Wonder:WebGL 3D引擎和编辑器,相当于Web版的Unity
    • 真正地和他人一起从0开发一个项目,遵循敏捷开发,负责严格的代码审核
    • 去过公司上班,开发3D引擎
    • 经历了作为技术合伙人的创业:开发3D引擎
    • 开始了在网上进行3D相关的课程培训、直播编程
    • 开始了3D相关的技术咨询、技术顾问、接活、技术培训
    • 从0开始,打造了700多人的QQ群
    • 发布了48篇文章(包括光线追踪、WebGPU、开发引擎等系列文章),80小时+的课程

    总结

    感谢大家的阅读~

    综上所述,我用我的亲身实践,证明了每个人都可以完成10000小时!我就是一个例子

    根据我的经验,我在一天中能够学习的最长时间为11个小时;我最高效率的时间是在我与小浩闭关封闭式开发的时候:连续一个月,每天平均9小时开发

    目前,我正在开发Meta3D,并且在网上直播开发的过程,希望让“Web3D编辑器或引擎”开发变得轻而易举!

    大家可以扫码加QQ群,关注Meta3D的直播编程,交流Web3D、引擎开发、编辑器开发、WebGPU、光线追踪相关技术:
    image

    关于作者

    杨元超,专注于Web3D、引擎、WebGPU、光线追踪,欢迎与我交流~

    我的知乎
    我的b站
    我的免费知识星球
    我的博客
    我的邮箱:395976266@qq.com

    附上之前我总结过的学习经历,大家可以看下:
    8年,从2D到3D,我的学习之路

  • 相关阅读:
    codeforces 368(div 2)前三题
    codeforces 368(div 2)前三题
    hihocoder编程练习赛6+多重背包的各种姿势
    hihocoder编程练习赛6+多重背包的各种姿势
    hihocoder1077,线段树单点修改的一点小技巧
    hihocoder1077,线段树单点修改的一点小技巧
    [NOIP2013]货车运输,最大生成树+LCA
    [NOIP2013]货车运输,最大生成树+LCA
    hihocoder 1080 线段树:区间加法&赋值
    hihocoder 1080 线段树:区间加法&赋值
  • 原文地址:https://www.cnblogs.com/ExMan/p/15999072.html
Copyright © 2020-2023  润新知