Orillusion 引擎是一款完全支持WebGPU 標準的輕量級渲染引擎。基於最新的Web 圖形API標準,做了大量的探索和嘗試,實現了很多曾經在Web 中很難實現或者根本實現不了的技術和功能。
WebGPU 支持
引擎底層沒有考慮到兼容現有的 WebGL 標準,而是完全向最新的 WebGPU
標準看齊。隨著WebGPU API
和 WGSL
的持續發展,開發團隊也將快速更新迭代引擎底層 WebGPU
的計算和渲染能力,提升引擎性能優勢。
ECS 組件式系統
引擎框架發展至今,業內普遍開始採用 组合优于继承
的開發設計原則。因此,開發團隊放棄繼承式架構,而選擇了最新的 ECS 組件式架構做為引擎的成體設計思路。消除了繼承模式中的繼承鏈複雜,功能交織的問題,通過解耦,封裝和模塊化重新的設計,開發者可以更靈活的進行功能組合及擴展。
面向數據(DO)設計
嚴格的 ECS
架構要求,要求 Entity
, Component
和 System
要完全獨立分隔。這種設計範式下對於數據優化和性能是可以得到更大的提升。但是同時也會帶來很大的負面問題就是開發成本和難度非常大。因此考慮到開發者的使用難度,以及Web開發者的開發習慣。採用了 ECS
中核心 Data Oritented (面向数据开发)
理念,實現按需 DO
的結構。目前的使用方式為,在 GPU
中創建連續內存,同時在 CPU
和 GPU
之間通過內存映射的方式,實現數據的連續高效傳遞,減少 CPU
和 GPU
之間數據交換的等待時間和次數。既能提高緩存命中率,實現性能的提升,也同時可以保證整體引擎開發和使用的易用性。
集群光照剔除
這裡也就是 Clustered Forward Rendering
中的光照剔除方案。在二維 (Tile)
和三維 (Cluster)
同時對於空間進行塊狀分割,最後只計算對這個塊狀空間有光照貢獻的光源,完成無效光源的剔除過程,提高計算效率。基於 WebGL
的 Uniform Buffer
有很多限制,光源數量支持比較少,一般在10個以內。WebGPU
有了具備了 Storage Buffer
,基本上就是直接對標 GPU
顯存的限制。只要做好自身的內存管理和優化,就可以充分利用GPU的能力,實現多光源渲染的場景。
物理仿真係統
首先接入了 ammo.js
,做為CPU端的基本物理仿真功能實現。同時正在搭建基於Compute Shader
的 GPU
端物理仿真引擎,包括粒子,流體,軟體,剛體,布料等。在WebGL
時期,只能依靠頂點和紋理的數據結構進行相應的計算過程,實現複雜,效率不高。通過WebGPU
的 Compute Shader
,內存和數據結構更加靈活,給了很大的想像空間。目前已經實現了很多優秀的物理仿真案例,更多更強的物理仿真的功能正在快速迭代過程中。
基於物理的材質渲染
實現了最基本的 Blinn-phong
模型材質渲染。為了增加更好的真實感渲染效果,依靠 HDR Light
,也實現了基於 PBR (Physically-based rendering)
的材質渲染。也是目前主流引擎的標配了,是一項比較普及的基本引擎要求。
豐富的後處理特效
后处理特效
是使得渲染內容氛圍感提升的重要處理方式。基於 WebGPU
的 compute shader
,目前實現了 HDR 泛光
,屏幕空间反射
, 环境光屏蔽
等常用的後處理效果。依靠 WebGPU
的通用計算能力可以更高效的利用 GPU
計算優勢,實現非常好的效果。
例如,屏幕空間反射(SSR) 是基於屏幕空間大小來實現反射效果。相比平面反射,可以實現場景任意表面反射,而且不需要額外的 DrawCall
,是非常流行的實時反射技術。首先,屏幕空間物體的每個像素需要計算其反射向量。然後,需要判斷屏幕空間的 Ray Marching
坐標的深度和深度緩存中存儲的物體深度是否相交。最後,適當的調節粗糙度,把交點的顏色做為反射顏色完成著色。這個過程中的計算過程,都通過 WebGPU
的 Compute Shader
來實現,避免了 CPU
的消耗。最終在瀏覽器中可以呈現出非常良好的反射效果。
更多擴展後處理特效參考 PostEffects。
#Orillusion首頁文檔和下載 #WebGPU #輕量級3D #渲染引擎 #程式开发