我只用了3步,實現了一個逼真的3D場景渲染


給3D模型及環境場景渲染出兼具質感和真實感的材質效果,需要經歷幾步?

顯然,目前的3D模型材質渲染技術,還無法實現簡單幾步就能搞定的標准化作業來量化,完成一個質量過關的3D模型渲染,一般需要:

1、准備一個內容豐富的貼圖、材質庫:渲染想要的材質效果,需要根據具體模型場景的形狀細節及復雜程度,針對性收集對應的素材外觀和紋理素材,耗時與模型的復雜程度呈正比,並且市面上大部材質付費使用,造價成本高。

2、從零開始調參:現有的3D建模工具都要以豐富的參數來實現建模渲染操作,通過調整參數來設置和控制模型。

3、渲染效果依賴美術經驗:3D建模師逐漸成為緊俏的行業人才,也說明了3D模型制作需要技術和經驗老道的從業者,伴隨着模型及場景的多樣化以及制作的精細化,美術經驗直接關系成品質量水准。

傳統作業方式確實細活慢工,但逆襲繁瑣步驟的材質生成能力已經出現啦!今天給大家帶來的材質生成能力,簡單易用,渲染高質量材質效果,只需3步!

以較為常見的3D游戲所需的復雜場景舉例,給一個多物體組合的復雜場景渲染材質,只需如下的簡單操作:

1、使用RGB相機拍攝所需材質實物照片。

2、將RGB照片自動生成材質素材。

3、材質貼圖,完成渲染。

華為3D建模服務提供的材質生成能力,將操作繁瑣的材質生成及渲染過程簡化提速,基於AI輔助材質生成,提升三維模型外觀創作效率,將技術美術的經驗和制作規范,固化為材質預設實例,復用有價值的經驗與規范,提升內容制作效率,降低材質制作成本。

材質生成能力

提供將RGB圖像轉換為PBR材質的能力,用戶通過集成SDK,僅需拍攝一張或多張RGB圖片,便可一鍵生成4種材質貼圖,包括diffuse map /normal map/specular map/roughness map。AI輔助PBR素材生成,從照片生成材質,解放人力操作成本,滿足消費級3D材質應用。

輸入圖片文件規格

  • 軟硬件要求: 普通RGB手機,不要求RGB-D\LiDAR, 全Android機型
  • 支持類型:混凝土、大理石、岩石、碎石、磚、石膏、黏土、金屬、木材、樹皮、皮革、織物、漆面、塑料、合成材料、碎石、大地(草地、沙灘等)
  • 輸入圖像的要求:輸入圖像分辨率達到1~4K,輸入圖像中無接縫、無亮斑、陰影、倒影
  • 輸出貼圖分辨率:1k(10241024px) 2k(20482048px)
  • SDK包大小:88KB
  • 准確率:渲染后SSIM>0.9

應用場景

3D建模的材質生成能力一鍵實現現實中各色紋理的木材轉化為PBR材質,具有高還原度,極大提高場景的構建效率。簡單易用,效果佳,廣泛應用於3D內容制作領域。

  • 電商行業:使用3D模型展示商品,為用戶提供逼近真實的線上購物體驗。
  • 展覽行業:高價值的展品及文物,以3D模型形式展示,方便用戶細致觀覽展品細節。
  • 游戲行業:如室內場景里地板、桌子、牆面等所需的木材,打造身臨其境的游戲體驗。

開發准備

1、集成HMS Core SDK

1.1、添加當前應用的AppGallery Connect配置文件

如果在AppGallery Connect中開通了相關服務則需要將“agconnect-services.json”文件添加到您的App中。

步驟 1:登錄AppGallery Connect網站,點擊“我的項目”。

步驟 2:在項目列表中找到您的項目,在項目中點擊需要集成HMS Core SDK的應用。

步驟 3:在“項目設置 > 常規”頁面的“應用”區域,點擊“agconnect-services.json”下載配置文件。

步驟 4:將“agconnect-services.json”文件拷貝到應用級根目錄下。

1.2、配置HMS Core SDK的Maven倉地址

步驟 1:打開Android Studio項目級“build.gradle”文件。

步驟 2:添加HUAWEI agcp插件以及Maven代碼庫。

  • 在“buildscript > repositories”中配置HMS Core SDK的Maven倉地址。
  • 在“allprojects > repositories”中配置HMS Core SDK的Maven倉地址。
  • 如果App中添加了“agconnect-services.json”文件則需要在“buildscript > dependencies”中增加agcp插件配置。
buildscript { 
    repositories { 
        google() 
        jcenter() 
        // 配置HMS Core SDK的Maven倉地址。 
        maven {url 'https://developer.huawei.com/repo/'} 
    } 
    dependencies { 
        ... 
        // 增加agcp插件配置。 
        classpath 'com.huawei.agconnect:agcp:1.4.2.300' 
    } 
} 
 
allprojects { 
    repositories { 
        google() 
        jcenter() 
        // 配置HMS Core SDK的Maven倉地址。 
        maven {url 'https://developer.huawei.com/repo/'} 
    } 
} 

注:Maven倉地址無法直接在瀏覽器中打開訪問,只能在IDE中配置。如需添加多個Maven代碼庫,請將華為公司的Maven倉地址配置在最后。

1.3、添加編譯依賴

步驟 1:打開應用級的“build.gradle”文件。

步驟 2:在“dependencies”中添加如下編譯依賴。

  • 材質生成
dependencies { 
    implementation 'com.huawei.hms:modeling3d-material-generate:{version}' 
}
  • 3D物體建模
dependencies { 
    implementation 'com.huawei.hms:modeling3d-object-reconstruct:{version}' 
}

注:{version}替換為實際的Kit依賴版本,版本號索引請參見2 版本更新說明。例如:implementation 'com.huawei.hms:modeling3d-material-generate:1.0.0.300'和implementation 'com.huawei.hms:modeling3d-object-reconstruct:1.0.0.300'。

步驟 3:添加agcp插件配置。請根據實際情況選擇:

  • 方式一:在文件頭部聲明下一行添加如下配置。
apply plugin: 'com.huawei.agconnect'
  • 方式二:在plugins中添加如下配置。
plugins { 
    id 'com.android.application' 
    // 添加如下配置 
    id 'com.huawei.agconnect' 
}

2、多語言設置

  • 如果您的應用不需要設置只支持某些特定語言,則請忽略本步驟。應用將默認支持所有HMS Core SDK支持的語言。
  • 如果您的應用需要設置只支持某些特定語言,則可通過本步驟配置。

a. 打開應用級的“build.gradle”文件。

b.在“android > defaultConfig”中新增“resConfigs”,配置需要支持的語種,配置格式如下:

android { 
    defaultConfig { 
        ... 
        resConfigs "en", "zh-rCN", "需要支持的其他語言" 
    } 
}  

HMS Core SDK支持的語言列表請參見HMS Core SDK支持的語言。

3、同步工程

在完成以上的配置后,點擊工具欄中的gradle同步圖標,完成“build.gradle”文件的同步,將相關依賴下載到本地。

注:如果出現錯誤,請檢查網絡連接是否正常,以及檢查“build.gradle”文件是否正確。

4、配置混淆腳本

您編譯APK前需要配置混淆配置文件,避免混淆HMS Core SDK導致功能異常。

步驟 1:在應用級根目錄下打開混淆配置文件“proguard-rules.pro”,加入排除HMS Core SDK的混淆配置腳本。

-ignorewarnings 
-keepattributes *Annotation* 
-keepattributes Exceptions 
-keepattributes InnerClasses 
-keepattributes Signature 
-keepattributes SourceFile,LineNumberTable 
-keep class com.huawei.hianalytics.**{*;} 
-keep class com.huawei.updatesdk.**{*;} 
-keep class com.huawei.hms.**{*;}

步驟 2:如果您使用了AndResGuard,需要在應用級的“build.gradle”文件中加入AndResGuard允許清單。

"R.string.hms*", 
"R.string.connect_server_fail_prompt_toast", 
"R.string.getting_message_fail_prompt_toast", 
"R.string.no_available_network_prompt_toast", 
"R.string.third_app_*", 
"R.string.upsdk_*", 
"R.layout.hms*", 
"R.layout.upsdk_*", 
"R.drawable.upsdk*", 
"R.color.upsdk*", 
"R.dimen.upsdk*", 
"R.style.upsdk*",  
"R.string.agc*"

5、添加權限

在調用材質生成能力時,開發者需要在AndroidManifest.xml文件中申請如下權限:

<!--  允許程序寫入材質貼圖文件和讀取需要處理的數據 --> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<!--  網絡權限 數據上傳和材質貼圖下載使用 --> 
<uses-permission android:name="android.permission.INTERNET" />

在調用3D物體建模能力時,開發者需要在AndroidManifest.xml文件中申請如下權限:

<!--  允許程序寫入模型文件和讀取需要處理的數據 -->  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
<!--  網絡權限 數據上傳和模型下載使用 --> 
<uses-permission android:name="android.permission.INTERNET" /> 

開發步驟

在開始API開發工作之前,完成開發准備工作同時請確保工程中已經配置配置HMS Core SDK的Maven倉地址,並且完成了本服務的SDK集成。

  1. 使用雲側服務的能力,需要使用“agconnect-services.json”里的api_key值,在應用初始化時通過api_key或者AccessToken來設置應用鑒權信息,AccessToken的優先級較高。
  • (推薦)通過setAccessToken方法設置AccessToken,在應用啟動時初始化設置一次即可,無需多次設置。
MaterialGenApplication.getInstance().setAccessToken("your AccessToken");

從“ageonnect-services.json”中的api_key獲取Access Token可參見基於OAuth 2.0開放鑒權客戶端模式。

  • 通過setApiKey方法設置api_key,在應用啟動時初始化設置一次即可,無需多次設置。
MaterialGenApplication.getInstance().setApiKey("your api_key");

在AppGallery Connect上注冊應用時,會給你的應用分配api_key。

  1. 新建材質生成引擎和材質生成配置器並初始化材質生成引擎。
// 新建材質生成引擎,傳入當前context。 
Modeling3dTextureEngine engine = Modeling3dTextureEngine.getInstance(context); 
// 新建材質生成配置器。 
Modeling3dTextureSetting setting = new Modeling3dTextureSetting.Factory() 
// 設置工作模式為AI模式。 
.setTextureMode(Modeling3dTextureConstants.AlgorithmMode.AI) 
.create();
  1. 新建偵聽器回調,用於處理材質生成上傳結果。
Modeling3dTextureUploadListener uploadListener = new Modeling3dTextureUploadListener() { 
    public void onResult(String taskId, Modeling3dTextureUploadResult result, Object ext) { 
        // 獲取材質生成上傳圖片結果。 
        if (result.isComplete()) { 
            // 上傳結果處理。 
        } 
    } 
    @Override 
    public void onError(String taskId, int errorCode, String message) { 
        // 上傳錯誤回調函數。 
    } 
    @Override 
    public void onUploadProgress(String taskId, double progress, Object ext) { 
        // 預留接口。 
    } 
};
  1. 上傳采集圖片至雲側。
// 獲取材質生成任務ID,傳入配置器。 
Modeling3dTextureInitResult modeling3dTextureInitResult = engine.initTask(setting); 
String taskId = modeling3dTextureInitResult.getTaskId(); 
if (taskId == null || taskId.equals("")) { 
    Log.e("", "get taskId error " + modeling3dTextureInitResult.getRetMsg()); 
} else { 
    // 設置上傳監聽器。 
    engine.setTextureUploadListener(uploadListener); 
    // 異步上傳,傳入任務id和圖片文件所在文件夾路徑。 
    engine.asyncUploadFile(taskId, filePath); 
}
  1. 查詢雲側材質生成進度。
// 新建材質生成任務處理實例,傳入當前context。 
Modeling3dTextureTaskUtils taskUtils = Modeling3dTextureTaskUtils.getInstance(context); 
// 查詢材質生成進度。 
Modeling3dTextureQueryResult queryResult = taskUtils.queryTask(taskId);
  1. 新建偵聽器回調,用於處理材質生成下載結果。
Modeling3dTextureDownloadListener downloadListener = new Modeling3dTextureDownloadListener() { 
    public void onResult(String taskId, Modeling3dTextureDownloadResult result, Object ext) { 
        // 獲取材質生成下載貼圖結果通知。 
        if (result.isComplete()) { 
            // 下載結果處理。 
        } 
    } 
    @Override 
    public void onError(String taskId, int errorCode, String message) { 
        // 下載錯誤回調函數。 
    } 
    @Override 
    public void onDownloadProgress(String taskId, double progress, Object ext) { 
        // 預留接口。 
    } 
};
  1. 下載材質生成貼圖。
// 設置下載監聽器。 
engine.setTextureDownloadListener(downloadListener); 
// 下載材質貼圖,傳入任務id和保存路徑。 
engine.asyncDownloadTexture(taskId, savePath);
  1. 調用材質生成同步接口,可以實時獲取生成貼圖。
// 同步接口,傳入圖片文件路徑、保存貼圖路徑、配置器。 
int result = engine.syncGenerateTexture(filePath, downloadPath, setting);
  1. 刪除材質生成任務。
int ret = taskUtils.deleteTask(taskId);

了解更多內容>>

訪問華為3D建模服務官網

獲取華為3D建模開發指導文檔

華為HMS Core官方論壇

華為3D建模開源倉庫地址:GitHubGitee

解決集成問題請到Stack Overflow

關注我們,第一時間了解 HMS Core 最新技術資訊~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM