我完成了10000小時開發3D引擎

YYC發表於2022-03-10

為什麼要開始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,我的學習之路

相關文章