新技能Get! 手把手教你接入CG Kit

1 初始準備

1.1 CGKit簡介

  CGKit是華爲推出的一套高性能渲染框架,提供了渲染所需的原子能力,如材質、模型、燈光以及一些後期特效等。另外提供了高性能渲染組件,如抗鋸齒和基於Vulkan的多線程組件等。除此以外還提供了Smart Cache以及Pre-rotation等擴展能力,並整合了前沿計算機圖形學、計算機視覺和深度學習等最新研究成果。html

1.2 官方指導

  華爲開發者的主頁以下:
  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文件以及對應頭文件。學習

  須要注意的是,示例代碼須要作必定的修改才能開發出可運行的應用,主要是如下兩個緣由:

  1. SDK是核心模塊,須要註冊華爲帳號才能下載,故不包含在示例代碼中,須要下載後放入示例代碼工程中;
  2. 模型等文件有必定版權限制,故不包含在示例代碼中,須要自行下載或製做模型後放入示例代碼工程中。

1.3 開發準備

  1. 基於Kirin芯片的華爲手機,目前支持Vulkan1.0版本,系統版本要求Android10以上;
  2. Android Studio,推薦使用最新版本(目前爲4.0);
  3. NDK版本20.1.5948944;
  4. API等級29(Android 10)
  5. Build Tools版本29.0.3

2 開發詳細記錄

2.1 新建工程

  使用Android Studio新建工程,這裏爲了方便不直接新建工程,而以官方示例代碼爲例,直接用Android Studio打開便可。

  打開示例代碼後,Android Studio會自動根據gradle進行有關內容的下載,好比該工程所指定的gradle-5.6.4。

  雖然gradle配置了minSdkVersion爲27,可是因爲CGKit剛剛推出,兼容性問題還有待完善,所以能夠改成29,僅在Android 10以上版本運行。

2.2 簽名

  示例代碼中的gradle文件配置了簽名,這裏能夠刪除,僅做爲本身開發驗證使用。固然,參考官方資料進行簽名生成,以及華爲應用接入等完整步驟也能夠。

2.3 集成SDK

  在前面章節提到的SDK下載部分,將SDK下載下來,以下:

在這裏插入圖片描述

  將include目錄拷貝到:
  app\src\main\cpp

  以下:
在這裏插入圖片描述

  libs目錄拷貝到app目錄,以下:

在這裏插入圖片描述

  接着點擊Build下的Refresh Linked C++ Projects:

在這裏插入圖片描述

  則能夠打開MainApplication.cpp,查看其中的接口都再也不以紅色顯示,說明已經配置好了:

在這裏插入圖片描述

2.4 製做天空盒

  根據官方文檔,天空盒應該本身製做,沒有隨示例代碼發佈。天空盒有許多參考資料,這裏參考:
  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,則能夠轉換成四通道。

2.5 準備模型

  目前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

  效果以下:

在這裏插入圖片描述

2.5 開發應用

  示例工程已經含有MainApplication.cpp有關代碼,這裏僅須要稍做修改便可。

2.5.1 修改模型

  首先在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註釋掉。

2.5.2 修改天空盒

  修改CreateSkybox方法中的有關配置,將天空盒所用的立方體模型修改成:

  String modelName = "models/cube/cube.obj";

  這裏cube是最簡單的模型,連接以下:

  https://gist.github.com/MaikKlein/0b6d6bb58772c13593d0a0add6004c1c

  並注意將MainApplication.h中的環境貼圖設置爲:

  String m_envMap = "cubemaps/env/env.cub";

  這裏與前面製做天空盒時所用的名稱相同。

2.6 運行驗證

  效果以下:

在這裏插入圖片描述

  若是運行出現問題,可使用adb logcat進行日誌查看以分析問題。CGKit也會在安卓標準日誌中打印有關信息,且只記錄ERROR級別日誌。若是想要對CGKit日誌進行過濾,可使用以下命令:

  adb logcat | grep CGKit

3 FAQ

3.1 模型支持什麼格式

  目前CGKit僅支持obj格式的模型,可解析頂點、法線、貼圖座標及面信息等;但不支持多餘3頂點的面自動三角化,也不支持從mtl格式材質文件解析有關配置。

3.2 貼圖支持什麼格式

  目前CGKit僅支持四通道png格式圖片解析。

3.3 簽名是什麼

  安卓開發可能須要用到簽名,能夠參考官方資料製做簽名文件。在平時開發調試時,能夠將示例代碼中的簽名配置註釋掉。

3.4 Failed to get hire

  日誌打印中可能會發現「Failed to get hire」,這條是打點所用,無需理會。「打點」是指CGKit對本身運行狀況進行記錄和上報,不影響渲染等模塊運行。

4 附錄

已經編譯好的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

原做者:捉不住的鼬鼠

相關文章
相關標籤/搜索