為什麼要開始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小時!)
一切的開始
我在開始之前,在學校裡面全職開發了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。
完成第1000小時後,我釋出了開源的3D引擎的第一版(v0.1.0),共22k行有效程式碼(沒有算測試程式碼),實現了模型、morph動畫、arcball相機、光照、normal map、反射和折射、指令碼、陰影、自定義shader、skybox、md2/obj格式轉換等功能。
引擎渲染展示如下:
完成第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》
《遊戲引擎架構》
《失控》
《富爸爸》系列
引擎渲染展示如下:
完成第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引擎渲染展示如下:
完成第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
編輯器介面展示如下:
完成第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 v1.0展示如下:
完成第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日停止寫文章,開始學習光線追蹤
這段時間主要工作如下:
- 引擎釋出了1.1版本,新增了指令碼、AssetBundle等功能
- 引擎完成了1.2版本的開發,新增了skybox、imgui擴充套件等功能
- 編輯器釋出了1.1版本
- 開始了學習光線追蹤,實現了WebGPU+Ray Tracing Demo,相關介紹為:
WebGPU+光線追蹤Ray Tracing 開發三個月總結
Wonder v1.1展示如下:
WebGPU+Ray Tracing Demo展示如下:
完成第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站上了:
路徑追蹤渲染器零基礎實戰開發基礎班
離線渲染的效果如下:
課程:
完成第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、光線追蹤相關技術:
關於作者
楊元超,專注於Web3D、引擎、編輯器、WebGPU、WebGL、光線追蹤,歡迎與我交流~
我的知乎
我的b站
我的免費知識星球
我的部落格
我的郵箱:395976266@qq.com
附上之前我總結過的學習經歷,大家可以看下:
8年,從2D到3D,我的學習之路