CGKit是華爲推出的一套高性能渲染框架,提供了渲染所需的原子能力,如材質、模型、燈光以及一些後期特效等。另外提供了高性能渲染組件,如抗鋸齒和基於Vulkan的多線程組件等。除此以外還提供了Smart Cache以及Pre-rotation等擴展能力,並整合了前沿計算機圖形學、計算機視覺和深度學習等最新研究成果。html
華爲開發者的主頁以下:
https://developer.huawei.com/consumer/cn/git
在該頁面有CGKit的連接:github
點擊該連接便可轉到CGKit的主頁,其地址以下:
https://developer.huawei.com/consumer/cn/hms/huawei-computer-graphics/windows
這裏會有CGKit的基本介紹,以下:多線程
這裏主要關注開發,點擊「查看文檔」,便可轉到以下地址:app
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/introduction-0000001050197938框架
該網頁是進行CGKit開發的官方頁面,有關介紹這裏再也不重複。ide
重點關注如下兩點便可:性能
其中示例代碼是一套Android Studio工程,含有開發CGKit的框架以及必要的代碼;SDK則是CGKit的核心,包括so文件以及對應頭文件。學習
須要注意的是,示例代碼須要作必定的修改才能開發出可運行的應用,主要是如下兩個緣由:
使用Android Studio新建工程,這裏爲了方便不直接新建工程,而以官方示例代碼爲例,直接用Android Studio打開便可。
打開示例代碼後,Android Studio會自動根據gradle進行有關內容的下載,好比該工程所指定的gradle-5.6.4。
雖然gradle配置了minSdkVersion爲27,可是因爲CGKit剛剛推出,兼容性問題還有待完善,所以能夠改成29,僅在Android 10以上版本運行。
示例代碼中的gradle文件配置了簽名,這裏能夠刪除,僅做爲本身開發驗證使用。固然,參考官方資料進行簽名生成,以及華爲應用接入等完整步驟也能夠。
在前面章節提到的SDK下載部分,將SDK下載下來,以下:
將include目錄拷貝到:
app\src\main\cpp
以下:
libs目錄拷貝到app目錄,以下:
接着點擊Build下的Refresh Linked C++ Projects:
則能夠打開MainApplication.cpp,查看其中的接口都再也不以紅色顯示,說明已經配置好了:
根據官方文檔,天空盒應該本身製做,沒有隨示例代碼發佈。天空盒有許多參考資料,這裏參考:
https://www.cnblogs.com/alps/p/7112872.html
該網站也提供了天空盒資源下載,能夠做爲學習之用。另外提供一個cubemap天空盒示例網站,可在線查看天空盒效果:
https://doc.babylonjs.com/resources/playground_textures#cubetextures
選擇一個cubemap天空盒下載,而後編輯.cub配置文件內容以下:
width=512
height=512
depth=6
mipmap=1
face=6
channel=4
suffix=.png
這裏width和height要和天空盒第一級mipmap的png圖像大小一致。
並根據指導將圖片命名,以下:
這些文件都放在env目錄,而後複製到示例工程的cubemap目錄便可。
這裏要注意,目前CGKit僅支持四通道png格式的圖片,請勿使用其餘格式。若是png不是四通道,可使用windows畫圖程序打開,另存爲png,則能夠轉換成四通道。
目前CGKit只支持obj格式的模型,且僅從obj中解析點和麪,其中的mtl格式材質則被忽略。另外,解析支持法線、貼圖座標解析及切線計算,可是面僅支持三角形模式,而不會進行多頂點組成的面的自動三角化。
開源免費的3D模型有許多,這裏給一個參考網站:
https://www.turbosquid.com/Search/3D-Models/free/obj
對於本教程,這裏選了以下的模型:
https://www.turbosquid.com/3d-models/medieval-blacksmith-low-poly-3d-model-1591136
效果以下:
示例工程已經含有MainApplication.cpp有關代碼,這裏僅須要稍做修改便可。
首先在InitScene方法中,修改模型路徑:
String modelName = "models/black_smith/black_smith.obj";
接着修改貼圖路徑(將原來的jpg轉爲png格式):
String texAlbedo = "models/black_smith/texture/black_smith.png";
這裏只有一個貼圖,將原來的多餘貼圖註釋掉:
//String texNormal = "models/Avatar/Normal_01.png";
//String texPbr = "models/Avatar/Pbr_01.png";
並將這兩個貼圖對應的SetTexture和SetSamplerParam註釋掉。
修改CreateSkybox方法中的有關配置,將天空盒所用的立方體模型修改成:
String modelName = "models/cube/cube.obj";
這裏cube是最簡單的模型,連接以下:
https://gist.github.com/MaikKlein/0b6d6bb58772c13593d0a0add6004c1c
並注意將MainApplication.h中的環境貼圖設置爲:
String m_envMap = "cubemaps/env/env.cub";
這裏與前面製做天空盒時所用的名稱相同。
效果以下:
若是運行出現問題,可使用adb logcat進行日誌查看以分析問題。CGKit也會在安卓標準日誌中打印有關信息,且只記錄ERROR級別日誌。若是想要對CGKit日誌進行過濾,可使用以下命令:
adb logcat | grep CGKit
目前CGKit僅支持obj格式的模型,可解析頂點、法線、貼圖座標及面信息等;但不支持多餘3頂點的面自動三角化,也不支持從mtl格式材質文件解析有關配置。
目前CGKit僅支持四通道png格式圖片解析。
安卓開發可能須要用到簽名,能夠參考官方資料製做簽名文件。在平時開發調試時,能夠將示例代碼中的簽名配置註釋掉。
日誌打印中可能會發現「Failed to get hire」,這條是打點所用,無需理會。「打點」是指CGKit對本身運行狀況進行記錄和上報,不影響渲染等模塊運行。
已經編譯好的apk,以及編譯的Android Studio工程已經放在百度網盤供下載參考,以下: 連接:https://pan.baidu.com/s/1x8wjYLqZ4CZpVUlo-ZDM1w 提取碼:3j8j 請注意,CGKit自己須要從官方下載SDK,即so和頭文件,因此這裏提供的工程中是不含有該SDK的,請先註冊華爲開發者後下載放入便可。該工程已經含有模型、貼圖以及天空盒等必備資源,僅缺乏CGKit SDK而已。
原文連接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201309841885850221&fid=18
原做者:捉不住的鼬鼠