從0開發3D引擎(八):準備「搭建引擎雛形」

你們好,如今開始本系列的第三部分,按照如下幾個步驟來搭建引擎雛形:
一、分析引擎的需求
二、實現最小的3D程序
三、從中提煉引擎原型
四、一步一步地對引擎進行改進,使其具有良好的架構
五、實現與架構相關的功能,如「多線程渲染」、「延遲渲染」等功能html

本文進行第一步,分析引擎的需求。程序員

上一篇博文

從0開發3D引擎(七):學習Reason語言編程

下一篇博文

從0開發3D引擎(九):實現最小的3D程序-「繪製三角形」瀏覽器

業務目標

1.手把手教讀者如何從0開發3D引擎
2.學習函數式編程及其在3D領域的應用
3.學習3D編程中基礎的功能實現,如紋理、光照、模型等
4.學習引擎的設計和架構,如Data Oriented、多線程等多線程

本系列開發的引擎屬於最簡化的引擎,讀者能夠根據本身的須要在此基礎上對引擎進行擴充,知足本身的應用場景。架構

範圍

  • 簡單渲染
    引擎只有最基礎的光照和紋理功能。
  • 簡單交互
    引擎只能經過「操做相機」來交互。
  • 適當的擴展
    引擎支持主要的擴展方式,如使用腳本組件來插入用戶邏輯,實現動態場景。

Feature

  • 最小功能
  • 徹底函數式的架構
  • 支持良好的擴展性
  • 優秀的性能

上下文

引擎上下文.png-12.1kB

  • 開發者
    開發者是直接使用引擎來開發Web 3D應用的程序員。
  • 編輯器
    編輯器屬於對引擎的二次開發。它對引擎進行封裝,以「所見即所得」的方式向用戶提供對Web 3D場景編輯的界面,從而使用戶能夠很方便地開發Web 3D應用。

功能性需求

引擎功能點 (1).png-30.2kB

  • GameObject和Component
    引擎是ECS架構,場景是由多個GameObject組成,而每一個GameObject又由多個組件(Component)組成。
    其中,組件包括Transform、Geometry等。
  • 多線程渲染
    若是瀏覽器支持Shared ArrayBuffer和OffscreenCanvas,那麼引擎能夠打開多線程渲染,使用兩個線程:主線程和渲染線程。
  • 前向渲染和延遲渲染
    引擎支持前向渲染和延遲渲染,用戶能夠選擇其中一種進行渲染。
  • 光照
    引擎只支持方向光。
  • 紋理
    引擎只支持最基本的紋理。
  • Scene Graph
    引擎使用自定義的wdb格式保存場景數據,並支持它的導入和導出。
  • 相機
    引擎支持用相機與場景交互,包含幾個子功能點:
    • 支持透視投影相機
    • 事件
      引擎綁定和封裝了事件,統一了pc端和移動端的事件。
    • 支持相機控制,如漫遊相機
  • 擴展
    引擎支持用擴展來實現自定義功能,包含幾個子功能點:
    • 自定義渲染管道
    • 腳本組件
    • 自定義材質

非功能性需求

引擎對於「質量」要求高,由於它是須要長期開發和維護的項目,並且具備很高的技術複雜度。編輯器

開發期質量函數式編程

  • 高可擴展性
    由於本系列開發的引擎屬於通用引擎,須要支持各類應用場景,因此要求引擎便於擴展。
    本系列主要經過腳本組件等功能來支持擴展。
  • 高可維護性
    引擎須要長期維護,因此須要引擎代碼健壯,易於維護。
    本系列主要經過契約檢查、強類型語言Reason自帶的編譯檢查、代碼重構來確保可維護。
  • 低可測試性
    照理說,引擎須要很高的可測試性,這樣在長期的開發中能顯著下降錯誤率,提升效率。可是本系列爲了節省篇幅,沒有寫自動化測試用例,而是經過「運行測試」來驗證正確性。
    建議讀者在實際開發中,保證較高的自動化測試覆蓋率。

運行期質量函數

  • 高性能 由於使用引擎渲染的3D應用,特別是3D遊戲,至少須要每秒30幀才能流暢運行,因此引擎對於性能要求很高。 本系列在搭建引擎雛形時,會進行屢次性能測試,從而保證使用最佳性能的方案來構建引擎底層。
相關文章
相關標籤/搜索