关于java:我只用了3步实现了一个逼真的3D场景渲染

35次阅读

共计 7122 个字符,预计需要花费 18 分钟才能阅读完成。

给 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 的优先级较高。
  2. (举荐)通过 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();
  2. 新建侦听器回调,用于解决材质生成上传后果。

    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) {// 预留接口。} 
    };
  3. 上传采集图片至云侧。

    // 获取材质生成工作 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); 
    }
  4. 查问云侧材质生成进度。

    // 新建材质生成工作解决实例,传入以后 context。Modeling3dTextureTaskUtils taskUtils = Modeling3dTextureTaskUtils.getInstance(context); 
    // 查问材质生成进度。Modeling3dTextureQueryResult queryResult = taskUtils.queryTask(taskId);
  5. 新建侦听器回调,用于解决材质生成下载后果。

    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) {// 预留接口。} 
    };
  6. 下载材质生成贴图。

    // 设置下载监听器。engine.setTextureDownloadListener(downloadListener); 
    // 下载材质贴图,传入工作 id 和保留门路。engine.asyncDownloadTexture(taskId, savePath);
  7. 调用材质生成同步接口,能够实时获取生成贴图。

    // 同步接口,传入图片文件门路、保留贴图门路、配置器。int result = engine.syncGenerateTexture(filePath, downloadPath, setting);
  8. 删除材质生成工作。

    int ret = taskUtils.deleteTask(taskId);

理解更多内容 >>

拜访华为 3D 建模服务官网

获取华为 3D 建模开发领导文档

华为 HMS Core 官方论坛

华为 3D 建模开源仓库地址:GitHub、Gitee

解决集成问题请到 Stack Overflow

关注咱们,第一工夫理解 HMS Core 最新技术资讯~

正文完
 0