【共创稿事节】HarmonyOS ArkGraphics 3D实操——给智能音箱做一间材质实验室

同一只音箱,换成暖白塑料,表面呈现柔和、均匀的哑光;换成银色金属,机壳上出现集中的高光和细密横纹;换成灰棕织物,光线落在交错的经纬纱线上。模型轮廓没变,表面却有了三种不同的观感。

这一篇把音箱放进一间可以动手调整的材质实验室:切换三套外观、拖动材质参数、改变光照方向,再把机壳、顶盖和网罩单独拿出来观察。还可以打开网罩剖面,从开口看到内侧和边缘厚度。

先看材质变化

下面从左到右是暖白哑光塑料、银色拉丝金属、灰棕编织。三张真机画面使用同一视角和灯光:先比较高光是铺开还是集中,再看表面有没有方向纹和经纬起伏。

相同视角和光照下的塑料金属织物真机对照

真机切换金属、塑料和织物材质

三套预设使用相同的几何结构和节点名称,每套都在 GLB 内嵌基础色、金属粗糙度和法线贴图。点击预设会加载对应的本地场景,因此无需运行时下载模型或图片。

一、从模型准备开始

模型来自项目中的参数化生成脚本,没有使用设计图自动生成模型。设计图用于确定界面和质感方向,真正加载到 ArkGraphics 3D 的资源是由顶点、法线、UV、三角形和材质组成的 GLB。

基础模型沿用结构探索台的音箱:机壳是有内外壁的圆筒,顶盖带浅槽,灯环由圆环构成,底座用旋转曲面生成。网罩孔壁和暗色衬层分别保留,亮面与孔内暗部共同表达孔洞深度。

资源制作按三个步骤执行:

node tools/prepare-material-lab.js
node tools/finish-material-models.js
node tools/validate-material-models.js

第一步从 orbitdesk_structure.glb 读取几何、生成 UV 与九张 PNG,输出塑料、金属、织物三套模型。第二步补切线并加入网罩截段。第三步检查数据范围、属性数量、切线正交性和内嵌图片。

输出文件位于 entry/src/main/resources/rawfile/material_lab/。每套模型有十个节点、九个网格:八个原有零件和一个额外的 GrilleSection 网罩截段,整机状态隐藏截段。

这是一套教学示意模型,不对应某款商品的真实电子或声学结构。

二、让贴图找到表面:UV 与切线

贴图是一张平面图片,需要 UV 坐标告诉渲染器:模型上的每个顶点对应图片的哪个位置。

圆筒侧壁适合圆柱映射。以模型局部坐标为输入,用绕轴角度计算 U,用高度计算 V:

const u = Math.atan2(z, x) / (2 * Math.PI) + 0.5;
const v = y;

U 绕一圈回到起点,V 随高度变化。采样器设置重复寻址,使图片能沿表面重复铺排。跨越 U 接缝的三角形需要单独展开:如果同一三角形的 U 最大值与最小值相差超过 0.5,就把接近 0 的坐标加 1,避免纹理在接缝处被拉过整张图片。

顶盖端面不能继续按圆柱方式铺图,否则中心附近会挤成一束。生成器对法线接近竖直的表面改用 X/Z 平面映射:

if (Math.abs(normalY) > 0.9) {
  uv.push(x * 0.5 + 0.5, z * 0.5 + 0.5);
} else {
  uv.push(u, y);
}

法线贴图还需要切线空间。处理脚本根据每个三角形的位置差和 UV 差计算切线,将它与法线正交化、归一化,并保存副切线方向的符号。退化 UV 使用与法线垂直的备用方向,避免出现无穷大或无效数值。

这里为接缝和切线展开了三角形顶点,换来直接、容易检查的数据布局;单个文件约 13 MB。用于更大产品库时,可以进一步合并具有相同位置、法线和 UV 的顶点,减少内存和包体。

三、九张贴图如何制作

每种材料有三张 512 × 512 PNG,全部由本地脚本生成。没有外部照片、下载素材或运行时图像服务。

贴图用途数据约定
baseColor表面颜色和细微明暗纹路sRGB 颜色
metallicRoughness控制反光形态与金属属性G 通道为粗糙度,B 通道为金属度,线性数据
normal改变微小表面朝向切线空间法线,线性数据

金属高度函数沿纵向变化,铺到圆柱上形成浅细横纹;塑料只保留很弱的微小变化。织物则以8像素为一格,根据格子奇偶交替选择经线和纬线,用纱线截面起伏、交织处压低的高度和细纤维纹理表达编织结构:

const weave = (x, y) => {
  const period = 8;
  const cx = Math.floor(x / period), cy = Math.floor(y / period);
  const fx = ((x % period) + period) % period / period;
  const fy = ((y % period) + period) % period / period;
  const vertical = ((cx + cy) % 2 + 2) % 2 === 0;
  const across = vertical ? fx : fy, along = vertical ? fy : fx;
  const crown = Math.pow(Math.max(0, Math.sin(Math.PI * across)), 0.55);
  return crown * (0.72 + 0.28 * Math.sin(Math.PI * along))
    + 0.035 * Math.sin(across * Math.PI * 12);
};
const fabricHeight = (x, y) => weave(x, y) * 0.65;

对高度函数取水平、竖直差分,可以得到局部坡度。把坡度转换为单位法线,再从 −1~1 编码到 0~255,就得到蓝紫色的法线图片。

基础粗糙度分别约为塑料 0.85、金属 0.18、织物 0.89~0.94。金属的金属度通道为 1,另外两种为 0。三套材料同时改变基础色、反光宽度和微表面纹理:暖白塑料几乎没有可见纹路,银色金属保留浅拉丝,灰棕织物有清晰的经纬交错。比较时相机、灯光方向和几何保持一致,颜色用于辅助辨认,表面质感仍由PBR参数与贴图共同决定。

拉丝纹路采用常规金属粗糙度材质,不是各向异性反射模型。织物是表面凹凸示意,没有模拟独立纤维。

PNG 写入 GLB 的二进制区后,通过 images[].bufferViewmimeType: image/png 引用,再由材质关联纹理索引。这样每个 GLB 都能独立携带本身所需的贴图。

四、在 ArkGraphics 3D 中加载并调整材质

页面先检测 Graphics3D 系统能力,再通过资源对象加载本地文件:

if (!canIUse('SystemCapability.ArkUi.Graphics3D')) {
  throw new Error('设备不支持 Graphics3D');
}
const scene = await Scene.load($rawfile('material_lab/speaker-metal.glb'));

沿节点树找到 SpeakerBodyTopInsetGrilleDotsGrilleSection,读取几何节点子网格上的 MetallicRoughnessMaterial。直接修改导入材质的参数,基础色和法线图片会继续保留:

material.material.factor = {
  x: 1,
  y: this.roughness,
  z: this.metallic,
  w: 0.5
};

在本机 SDK 中,factor.y 对应粗糙度、factor.z 对应金属度,factor.w 对应反射率。不要把 GLB 纹理通道编号和这个向量的位置混淆。

真机拖动粗糙度倍率观察反光变化

金属预设下调整金属度倍率

页面显示的是“倍率”。例如金属粗糙度贴图约为 0.18,倍率调到 0.5 后,粗糙度约为 0.09。塑料和织物的金属度贴图本来就是 0,乘以任何倍率仍是 0;要观察金属度滑杆的明显变化,请选择金属预设。

五、用灯光揭示纹理

正面光侧面光背面光对照

正面光便于看整体颜色,侧光有助于观察表面起伏,背面光用来检查边缘轮廓。三个按钮改变同一个方向光的旋转,另一个补光保持不变,因此对照时仍能看到暗部。

环境背景显式设为 BACKGROUND_NONE,相机使用不透明清屏色,使三维区域与页面的深色背景一致。光照对比采用按钮切换,同一时刻只有一个场景视图。

六、把零件单独拿出来看

机壳独立近景双轴观察

顶盖近景旋转查看表面纹理

完整网罩近景旋转

近景只显示当前零件,其他产品节点暂时隐藏,灯光和相机继续工作。选择“整机”后恢复原有零件,剖面截段保持隐藏。相机围绕所选节点的中心转动,纵向角度限制在 −65°~65°。

this.productNodes.forEach((node: Node) => {
  node.visible = selected ? node === selected : node.name !== 'GrilleSection';
});

240度网罩剖面查看开口内壁与厚度

剖面不是把截图裁掉一块,而是另一个真实网格。生成器从孔壁模型保留约 240° 的曲面,并在两个开口端加入径向封边。筛选单位是三角形,孔边界沿网格离散轮廓保留,因此它适合讲解剖面观察,不作为精密加工截面。

七、切换与退出的资源管理

每次切换预设先卸载旧场景,清空相机和材质引用,再异步加载新场景。加载操作保存代次编号;如果等待期间用户退出或重新加载,旧请求完成后立即销毁自身结果,避免把过期场景放回页面。

加载失败时显示真实错误并提供“重新加载”,不以其他模型冒充当前预设。资源加载时禁用下方参数和选择控件,返回按钮始终可用。页面退出与组件销毁共用释放方法,允许重复调用。

八、材料实验室的复现入口

在项目中构建签名 HAP、安装到设备后,从“3D 实验空间”进入“材质实验室”。本例在 HUAWEI Mate 60 Pro、API 26 环境验证,运行无需相机或网络权限。

完整页面为 entry/src/main/ets/features/graphics3d/MaterialLabPage.ets,模型制作脚本与资源目录见前文。按照“生成 → 补切线和剖面 → 校验 → 构建”的顺序,可重做同一套材料并继续调整纹理密度、凹凸幅度和粗糙度分布。

下载代码方式:https://pan.quark.cn/s/ebe6626778c6 笔记本独显利用不足的应对策略 笔记本电脑独立显卡(GPU)利用不足的情况是一种普遍存在的现象,对笔记本的整体表现及用户作感受造成影响。在本文中,我们将阐述两种策略来提升笔记本独显的利用效率。 独立显卡使用效率的定义 独立显卡在笔记本电脑中承担图形处理任务,其使用效率指的是该硬件组件在作中的活跃程度。当独立显卡的活跃度较低时,笔记本的表现力会受到影响,进而对用户的使用体验产生负面影响。 提升策略一:调整系统设置以优化浏览器对 GPU 的调用 为了增强笔记本独显的使用效率,我们可以通过调整系统设置来优化浏览器对 GPU 的调用。具体作步骤如下: 1. 评估性能:首先需要评估笔记本的性能状态,以便掌握独立显卡当前的利用情况。 2. 进入搜索功能:通过按住 Win+S 键激活搜索界面,并输入“图形设置”进行查询。 3. 启用硬件加速:在搜索结果中定位并启用硬件加速 GPU 的选项。 4. 添加指定应用:将需要借助独立显卡运行的应用程序,如浏览器等,添加到列表中。 5. 调整图形性能:在相关浏览器中输入网址 https://cznull.github.io/vsbm,以监测 GPU 的使用状态。 提升策略二:通过独立显卡管理界面进行配置 另一种策略是通过独立显卡的管理界面进行配置。具体步骤如下: 1. 桌面作:在桌面上进行右键点击,选择“NVIDIA 控制面板”选项。 2. 管理三维设置:在 NVIDIA 控制面板中,点击左侧菜单的“管理 3D 设置”。 3. 选择高性能模式:在全局设置部分,将首选图形处理器调整为“高性能 NVIDIA 处理”。 4. 应用特定设置:选择“...
代码转载自:https://pan.quark.cn/s/b92216efb941 在Windows 11的作系统环境中,Microsoft Terminal Services Client (MSTSC) 被视作执行远程桌面连接的核心工具,其功能在于使得用户能够访问并控远端的计算机设备。文档所提及的更新是专针对Win11版本的MSTSC,其具体版本标识为10.0.22621,这表明其属于一个较新阶的补丁或升级,其中或许囊括了效能的增强、安全性的修补以及其他功能的优化。在描述中列出的17个文件,或包含有MSTSC组件的整体或部分更新资料,这些文件能够直接用以替换现有的系统文件,从而达成升级的目标。 1. **远程桌面协议 (RDP)**: RDP是由Microsoft设计的一种协议,其目的是让用户可以通过网络对远程的计算机施图形化的作。RDP 10.11版本提供了更迅捷的连接速度、更优越的用户体验以及更为坚的安保保障。这一版本或许集成了图像编码的优化,旨在提升对延迟敏感型应用的效能表现,以及对高分辨率显示设备的支持。 2. **MSTSC更新**: 对MSTSC进行更新意在修正已知的技术缺陷,强化功能表现,并提升安全性。例如,可能对多显示器环境的配置进行了改善,优化了网络带宽的利用效率,加强了身份验证的机制,或引入了新的配置选项。 3. **文件替换**: 用户在施文件替换时需持谨慎态度,务必备份原有的文件以防止意外情况发生。通常,这些文件存放在系统目录,例如`C:\Windows\System32`。在替换之前,应关闭所有相关的系统服务,以避免因文件正在被使用而导致替换作无法进行。 4. **安全性与稳定性**: 新版...
基于混沌系统和DNA编码的彩色数字图像加密、解密、抗噪声性能分析以及抗裁剪性能分析(Matlab代码现)内容概要:本文提出了一种基于六维超混沌系统和DNA编码的彩色数字图像加密算法,并利用Matlab现了完整的加密、解密过程,同时对算法的抗噪声和抗裁剪性能进行了详细分析。该方法通过超混沌系统的复杂动态特性生成高度随机的置乱序列,结合DNA编码的生物特性进行数据混淆与扩散,有效提升了加密图像的安全性与抗攻击能力。文章不仅展示了加密前后图像的视觉效果,还通过多种性能指标(如信息熵、相关性、NPCR、UACI等)验证了算法的有效性,并测试了在不同噪声强度和裁剪比例下的恢复能力,证明了该算法具备良好的鲁棒性和际应用潜力。; 适合人群:具备一定图像处理、密码学基础知识和Matlab编程能力的科研人员、研究生及信息安全领域技术人员。; 使用场景及目标:①用于数字图像的安全传输与存储,防止信息泄露;②适用于对安全性要求较高的军、医疗、金融等领域图像保护;③为混沌加密与DNA编码技术的研究提供Matlab现参考与性能分析方法。; 阅读建议:学习者应重点理解混沌系统初值敏感性、DNA编码规则的设计逻辑及其在加密中的作用,结合Matlab代码调试运行,观察不同参数对加密效果的影响,并动手复现抗噪声与抗裁剪验以深入掌握算法鲁棒性评估方法。
源码直接下载地址: https://pan.quark.cn/s/59be28c31ee9 海天地B500B壁挂式视频展台软件V3.4.2是一款针对海天地B500B型号精心设计的专业演示工具,它融合了众多用功能,致力于改善用户在教育、商务会议、培训等环境中的多媒体展示效果。该软件与硬件设备高度融合,提供了卓越、细腻的图像展示和录制性能,是教学、演讲和会议中必不可少的辅助设备。 海天地展台软件的核心特性在于时呈现高清晰度图像。它能够捕捉高分辨率的静态影像和流畅的动态视频,确保观众可以明确观察到展示的内容,无论是文字信息、图表数据还是物模型。软件内置的图像优化技术能够自动修正光线条件和色彩平衡,使得展示素材显得更加鲜明和生动。 该软件提供了多样化的作模式,例如镜像模式、颠倒模式,以及水平与垂直方向的翻转,能够满足不同视角和位置的拍摄要求。不仅如此,它还支持图像的缩放功能,使用户能够对细区域进行重点阐释,无需调整展台位置即可完成远近焦距的转换。 在文档管理层面,海天地B500B软件支持迅速扫描和归档资料,可以将纸质文件转换为数字格式,便于保存和传播。同时,它还配备了OCR(光学字符识别)技术,可以将扫描的文本图像转换为可编辑的文本形式,显著提升了工作效率。 针对教学和培训用途,软件预置了多种标注工具,用户可以在屏幕上自由进行线条绘制、内容标注、文字输入,甚至可以插入图片和图形元素,使说明更加形象和直观。另外,它还支持视频教程的录制功能,能够将整个演示流程完整记录下来,便于后续回放或分享给无法到场的人员。 在驱动程序方面,海天地B500B驱动软件保障了硬件设备与计算机系统的兼容性和运行稳定性,有效排除了潜在的连接障碍,确保软件能够无阻碍运行,从而充分发挥硬件的潜能...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雷神

一块两块不嫌多,一毛两毛不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值