当前位置: 首页 > news >正文

Edify 3D: Scalable High-Quality 3D Asset Generation

Deep Imagination Research | NVIDIA

目录

一、Abstract

二、核心内容

1、多视图扩散模型

3、重建模型:

4、数据处理模块:

三、结果

        1、文本到 3D 生成结果

2、图像到 3D 生成结果

3、四边形网格拓扑结构


一、Abstract

        NVIDIA 开发的用于高质量 3D 资产生成的 Edify 3D 模型。该模型通过多视图扩散模型合成物体的 RGB 外观和表面法线图像,再用重建模型预测 3D 形状的几何、纹理和基于物理的渲染(PBR)材质,Edify 3D能够在 2 分钟内生成具有详细几何结构、清晰形状拓扑、高分辨率纹理和材质的 高质量3D 资产。

1、能在短短两分钟内,生成包含完整 UV 贴图、4K 纹理和 PBR 材质的高品质 3D 模型

2、采用独特的技术架构,将多视角扩散模型与基于 Transformer 的重建技术相结合

3、支持文本到 3D 生成和图像到 3D 生成

4、能生成具有精确网格结构的 3D 模型,保证纹理的高分辨率和材质贴图的完整性,可生成多样化的 3D 资产

5、具有出色的技术扩展性,随着训练视角数量的增加,模型生成的图像质量和一致性不断提升

6、可用于生成复杂的 3D 场景,通过与大语言模型(LLM)结合,根据文本提示定义场景布局、物体位置和尺寸,创建连贯且真实的 3D 场景组合。

PS:UV贴图:用于将 2D 纹理映射到 3D 模型表面,从而使模型具有真实的外观细节

二、核心内容

Edify 3D 模型

  • 核心能力:文本到 3D 生成和图像到 3D 生成。
  • 模型设计:基于扩散模型和 Transformer,训练多视图扩散模型和重建模型。

       Edify 3D的最终输出是一个3D资产,其中包括网格几何、纹理贴图和材质贴图

Edify 3D 的工作流程:

1、文本提示(Text prompt)

        图的左上角有一个文本提示:“A steampunk robot turtle with rusty mechanical parts.”(一只带有生锈机械部件的蒸汽朋克机器龟)。

2、多视图扩散模型(Multi - view diffusion model)

        文本提示作为输入进入多视图扩散模型。该模型生成多个视角的 RGB 图像(RGB images),这些图像展示了机器龟从不同角度的外观。

3、多视图 ControlNet(Multi - view ControlNet)

        多视图扩散模型生成的 RGB 图像作为输入进入多视图 ControlNet。该模型生成多个视角的法线图像(Normal images),这些图像展示了机器龟表面的法线方向。

4、重建模型(Reconstruction model)

        多视图 RGB 图像和法线图像作为输入进入重建模型。重建模型生成潜在 3D 标记(Latent 3D tokens)。

5、等值面提取和网格处理(Isosurface extraction & mesh processing)

        潜在 3D 标记经过等值面提取和网格处理,生成网格几何(Mesh geometry)。

6、光栅化低分辨率纹理和表面法线(Rasterize low - resolution texture and surface normal)

        网格几何用于光栅化低分辨率纹理和表面法线。

7、放大 ControlNet(Upscaling ControlNet)

        低分辨率纹理和表面法线作为输入进入放大 ControlNet。该模型生成高分辨率 RGB 图像。

8、更新(Update)

        高分辨率 RGB 图像被用于更新纹理贴图(Texture map)和材质贴图(Material map)。

9、最终 3D 资产(3D asset)

        最终生成的 3D 资产包括网格几何、纹理贴图和材质贴图。图的右下角展示了最终生成的 3D 机器龟模型。

1、多视图扩散模型

        根据输入的文本提示和相机姿态来合成 RGB 外观,从不同的角度合成物体的外观。训练出以下模型:

  • 基本的多视图扩散模型:基于输入文本提示和相机姿态合成RGB外观。
  • 多视图 ControlNet:它以多视图 RGB 合成和文本提示为条件,合成物体的表面法线。这意味着它可以根据输入的多个视角的图像信息以及文本描述,来推断出物体表面的法线方向,从而为后续的 3D 重建提供更准确的几何信息。
  • 多视图放大 ControlNet:以给定 3D 网格的光栅化纹理和表面法线为条件,将多视图 RGB 图像超分辨率到更高分辨率。它利用已有的纹理和表面法线信息,对图像进行放大处理,提高图像的清晰度和细节

        使用 Edify Image模型(NVIDIA 2024) 作为基础扩散模型架构(具有27亿个参数的U-Net),在像素空间中操作扩散。ControlNet 编码器使用来自U-Net的权重进行初始化,并扩展了原始文本到图像的扩散模型中的自注意层, 用一种新的机制来关注不同的视图 ,作为一个具有相同权重的视频扩散模型。摄像机的pose(旋转和平移)通过一个轻量级的MLP进行编码,该MLP随后被作为时间嵌入添加到视频扩散模型架构中。

多视图 ControlNet

        ControlNet 的神经网络架构,用于为大型预训练文本到图像扩散模型添加空间条件控制。ControlNet 通过锁定预训练模型的参数并利用其强大的编码层作为骨干,学习各种条件控制,从而实现更精细的图像生成控制。

3、重建模型

       重建模型以多视图 RGB 和表面法线图像为输入,利用基于 Transformer 的模型预测 3D 形状的几何、纹理和材料。通过一系列处理步骤,最终得到 3D 资产的网格几何、纹理图和材质图。基于Transformer 的模型对看不见的物体图像具有很强的泛化能力 包括从二维多视图扩散模型的合成输出。

模型选择与 3D 表示

  • Decoder-Only Transformer 模型:我们采用了一种仅含解码器的 Transformer 模型。Transformer 架构在自然语言处理等领域有广泛应用,其特点是基于注意力机制来处理序列数据,能够很好地捕捉长距离依赖关系。这里使用的仅含解码器的版本,重点在于根据输入生成相应的输出,在这个情境下是用于后续的 3D 重建相关任务。
  • 潜在 3D 表示为三平面(Triplanes):模型的潜在 3D 表示采用了三平面的形式。三平面是一种对 3D 信息进行编码和表示的方式,它可以将 3D 空间的信息以一种特定的结构进行组织,以便于模型后续对 3D 数据的处理和分析。

输入条件与注意力机制

  • 输入作为重建模型的条件:输入的 RGB 图像和法线图像在这里充当重建模型的条件。RGB 图像提供了物体的颜色等外观信息,法线图像则给出了物体表面的法线方向等几何信息。
  • 交叉注意力层应用:在三平面标记和输入条件之间应用了交叉注意力层。交叉注意力机制可以让模型在处理过程中更好地关注到输入条件中的不同部分与三平面标记之间的关联,从而更有效地利用输入信息来生成准确的 3D 重建结果。

三平面标记处理与预测

  • 通过 MLPs 处理三平面标记:三平面标记会通过多层感知机(MLPs)进行处理。MLPs 是一种常见的神经网络结构,能够对输入数据进行非线性变换,在这里用于进一步处理三平面标记,挖掘其中蕴含的信息。
  • 预测神经场:经过 MLPs 处理后,三平面标记用于预测有符号距离函数(SDF)和基于物理的渲染(PBR)属性的神经场。神经场是一种对空间中各点属性进行描述的数学表示,通过预测这些神经场,可以得到关于物体在 3D 空间中的几何形状(通过 SDF)以及材质等外观属性(通过 PBR 属性)的相关信息。

基于 SDF 的渲染与 3D 网格生成

  • 基于 SDF 的体渲染:预测得到的神经场用于基于 SDF 的体渲染。体渲染是一种将 3D 数据渲染成 2D 图像的技术,通过基于 SDF 的方式,可以根据物体的几何形状准确地渲染出其在不同视角下的外观。
  • 3D 网格生成:神经有符号距离函数(Neural SDF)通过等值面提取被转换为 3D 网格。3D 网格是 3D 模型的一种常见表示形式,它由一系列的顶点、边和面组成,通过等值面提取从神经 SDF 中获取到合适的表面信息,从而构建出 3D 网格,这是得到最终 3D 模型几何形状的重要步骤。
4、数据处理模块

        对 3D 形状数据进行预处理,包括格式转换、质量过滤、姿态对齐、PBR 渲染和 AI 字幕等操作,以提高数据质量和适用性,为模型训练做好准备

  • 格式转换:将所有 3D 形状转换为统一格式,包括三角化网格、打包纹理文件和将材料转换为金属 - 粗糙度格式,丢弃损坏的纹理或材料的形状3。
  • 质量过滤:从大规模 3D 数据集中过滤出非对象中心的数据,通过多轮主动学习使用 AI 分类器去除部分 3D 扫描、大型场景、形状拼贴以及包含辅助结构的形状,还应用基于规则的过滤去除有明显问题的形状4。
  • 姿态对齐:通过主动学习将训练形状对齐到其规范姿态,对于缺乏明确正面的形状,定义功能部分为正面并优先保持左右对称5。
  • PBR 渲染:使用内部路径追踪器对 3D 数据进行逼真渲染,采用多样化的相机参数采样技术,以适应不同的使用场景6。
  • AI 字幕:为每个 3D 形状渲染一张图像,使用视觉语言模型(VLM)生成长短字幕,并提供形状的元数据以增强字幕的全面性

PBR 属性处理

        烘焙到纹理和材质贴图:基于物理的渲染(PBR)属性通过 UV 映射被烘焙到纹理贴图和材质贴图中。UV 映射是一种将 3D 模型表面映射到 2D 平面的技术,通过这种方式可以将 PBR 属性准确地赋予到相应的纹理和材质贴图上。

        包含的属性内容:这些 PBR 属性包括反照率颜色以及诸如粗糙度和金属度通道等材质属性。反照率颜色决定了物体表面反射光线的能力,粗糙度和金属度等属性则进一步描述了物体表面的材质特性,通过将这些属性烘焙到纹理和材质贴图中,可以使最终生成的 3D 模型具有更加真实的外观和材质表现。

三、结果

        1、文本到 3D 生成结果

        展示了输入的文本提示,以及所生成资源的渲染图和表面法线。生成的 3D 网格包含精细的几何形状和清晰的纹理,反照率颜色分解良好,使其适用于各种下游编辑和渲染应用。

2、图像到 3D 生成结果

        将输入的参考图像以及所生成资源的渲染图和表面法线进行可视化展示。Edify 3D 能够准确地还原参考对象的潜在 3D 结构,同时还能够在未被观察到的表面区域(例如杯子的背面)生成精细的纹理。

3、四边形网格拓扑结构

        Edify 3D 以具有清晰拓扑结构的四边形网格形式生成资源,使其适用于下游编辑工作流程。我们将所生成资源的四边形网格拓扑结构与其基于物理的渲染(PBR)图并排展示出来以便进行可视化观察。

四、相关工作

1、3D资产生成

        概念:3D 资产生成是指通过一系列技术手段创建三维资产的过程。3D 资产是指存在于三维空间中的数字化对象,包括 3D 模型、纹理、材质、动画等元素。这些资产可用于多种领域,如影视制作、游戏开发、虚拟现实(VR)、增强现实(AR)、建筑设计、工业设计等。生成方法包括手工建模(如多边形建模、NURBS 建模)、扫描技术(如激光扫描、结构光扫描)、基于图像的建模(如摄影测量法、图像深度学习建模)等。此外,还包括材质与纹理生成以及动画生成等方面。

        3D资产生成的挑战通常通过在3D数据集上训练模型来解决,但这些数据集的稀缺性限制了泛化能力。为了克服这一问题,最近的方法转向使用在大规模图像和视频数据集上训练的模型。得分蒸馏采样(SDS)已被早期方法采用,并扩展到图像条件3D生成模型。然而,它们通常处理速度较慢,并且容易出现诸如两面神脸问题等问题。为了提高性能,新技术整合了多视图图像生成模型,专注于生成可重建为3D模型的多个一致视图。然而,在这些视图之间保持一致性仍然是一个挑战,这导致了从有限视图增强重建鲁棒性的方法的发展。

2、从多视图图像进行3D重建

        从有限视图生成3D资产通常涉及3D重建技术,通常使用可微渲染,可利用各种3D表示,如神经辐射场(NeRF)。网格是工业3D引擎中最常用的格式,但从多视图图像重建高质量网格具有挑战性。传统的摄影测量流程,包括运动结构(SfM)、多视图立体(MVS)和表面提取,成本高且耗时,通常产生低质量的结果。虽然基于NeRF的神经渲染方法可以实现高质量的3D重建,但它们需要密集的图像和大量的优化,并且将辐射场转换为网格可能会导致次优结果。为了解决这些限制,基于Transformer的模型通过学习前馈先验进一步改进了从稀疏视图进行的3D NeRF重建。

3、纹理和材质生成

        早期针对给定3D形状的3D纹理生成方法包括用于文本对齐的CLIP和SDS损失优化。为了提高3D感知能力,一些文本到3D方法将纹理修复与深度条件扩散相结合,尽管速度较慢且更容易产生伪影。为了增强一致性,其他技术将扩散与重投影交替进行或同时生成多个带纹理的视图,但计算成本较高。为了进一步增强真实感,一些方法启用了多视图PBR建模,以扩展对生成材质属性的支持。 

相关文章:

Edify 3D: Scalable High-Quality 3D Asset Generation

Deep Imagination Research | NVIDIA 目录 一、Abstract 二、核心内容 1、多视图扩散模型 3、重建模型: 4、数据处理模块: 三、结果 1、文本到 3D 生成结果 2、图像到 3D 生成结果 3、四边形网格拓扑结构 一、Abstract NVIDIA 开发的用于高质量…...

鸿蒙HarmonyOS学习笔记(6)

定义扩展组件样式:Extend装饰器 在前文的示例中,可以使用Styles用于样式的重用,在Styles的基础上,我们提供了Extend,用于扩展原生组件样式。 说明 从API version 9开始,该装饰器支持在ArkTS卡片中使用。 从…...

蓝桥杯备赛笔记(一)

这里的笔记是关于蓝桥杯关键知识点的记录,有别于基础语法,很多内容只要求会用就行,无需深入掌握。 文章目录 前言一、编程基础1.1 C基础格式和版本选择1.2 输入输出cin和cout: 1.3 string以下是字符串的一些简介:字符串…...

在Java中使用Apache POI导入导出Excel(二)

本文将继续介绍POI的使用,上接在Java中使用Apache POI导入导出Excel(一) 使用Apache POI组件操作Excel(二) 14、读取和重写工作簿 try (InputStream inp new FileInputStream("workbook.xls")) { //Inpu…...

linux 中后端jar包启动不起来怎么回事 -bash: java: 未找到命令

一、用以下命令检查jdk版本 输入:java -version,如果JDK 环境变量没有配置,你会看到如下提示 二、配置jdk环境 1.先找到/etc/profile文件,然后在该文件最后面加上以下配置 export JAVA_HOME/usr/local/jdk-21.0.1 export PATH$…...

六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

本章讲述数据结构中的六大排序算法 欢迎大佬们踊跃讨论,感谢大家支持! 我的博客主页链接 六大排序算法 一.插入排序1.1 直接插入排序1.2 希尔排序 二.选择排序2.1 单向选择排序2.2双向选择排序2.3 堆排序 三.交换排序3.1 冒泡排序3.2 快速排序3.2.1 Hoa…...

快速排序(C++实现)

基本思想 任取一个元素为中心,所有比它小的元素一律前放,比他大的元素一律后放,形成左右两个子表;对各子表重新选择中心元素并依此规则调整,直到每个子表的元素只剩一个。 通过一趟排序,将待排序记录分割成…...

【数据库知识】数据库关系代数表达式

文章目录 概述一、关系代数表达式的基本组成部分二、关系代数运算符及其使用样例三、关系代数表达式的优化四、总结 概述 数据库关系代数表达式是关系数据库系统查询语言的理论基础,它使用一系列符号和运算符来描述从一个或多个关系(即表)中…...

linux系统清理全部python环境并重装

提问 centos系统清理全部python环境并重装,并且使用宝塔。 解答 要在CentOS系统中彻底清理Python3环境,可以遵循以下步骤: 卸载Python3 使用rpm命令卸载所有与Python3相关的包。这个命令会查询所有已安装的与python3相关的rpm包&#xf…...

Servlet的介绍

Servlet是Java Web的核心组件,它是一个运行在服务器端的Java程序,用于接收客户端的请求、处理请求并返回响应。Servlet遵循特定的生命周期,包括初始化、服务、销毁等阶段。 生命周期: init():初始化Servlet实例&#x…...

DICOM医学影像应用篇——伪彩色映射 在DICOM医学影像中的应用详解

目录 引言 伪彩色映射的概念 基本原理 查找表(Look-Up Table, LUT) 步骤 示例映射方案 实现伪彩色映射的C代码 代码详解 伪彩色处理效果展示 总结 扩展知识 LUT 的基本概念 LUT 在伪彩色映射中的应用 示例 引言 在医学影像处理中&#xff0c…...

(超详细图文详情)Navicat 配置连接 Oracle

1、下载依赖文件 Oracle官网下载直链:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 夸克网盘下载(oracle19c版本):https://pan.quark.cn/s/5061e690debc 官网下载选择对应 Oracle 版…...

PyTorch:神经网络的基本骨架 nn.Module的使用

神经网络的基本骨架 nn.Module的使用 为了更全面地展示如何使用 nn.Module 构建一个适用于现代图像处理任务的卷积神经网络(CNN),我们将设计一个针对手写数字识别(如MNIST数据集)的简单CNN模型。CNN非常适合处理图像数…...

学习threejs,使用CubeCamera相机创建反光效果

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️CubeCamera 立方体相机 二、…...

Linux网络——IO模型和多路转接

通常所谓的IO,其本质就是等待通信和进行通信,即IO 等 拷贝。 那么想要做到高效的IO,就要在单位时间内,减少“等”的比重。 一.五种IO模型 阻塞 IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方…...

【计网】自定义序列化反序列化(二) —— 实现网络版计算器【上】

🌎 实现网络版计算器【上】 文章目录: 实现网络版计算器【上】 自定义协议       制定自定义协议 Jsoncpp序列化反序列化       Json::Value类       Jsoncpp序列化       Jsoncpp反序列化 自定义协议序列化反序列化      …...

数据结构2:顺序表

目录 1.线性表 2.顺序表 2.1概念及结构 2.2接口实现 1.线性表 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 线性表在逻辑上是线性结构,也就说…...

python学习——元组

在 Python 中,元组(tuple)是一种内置的数据类型,用于存储不可变的有序元素集合。以下是关于 Python 元组的一些关键点: 文章目录 定义元组1. 使用圆括号 ()2. 使用 tuple() 函数3. 使用单个元素的元组4. 不使用圆括号…...

apache实现绑定多个虚拟主机访问服务

1个网卡绑定多个ip的命令 ip address add 192.168.45.140/24 dev ens33 ip address add 192.168.45.141/24 dev ens33 在linux服务器上,添加多个站点资料,递归创建三个文件目录 分别在三个文件夹下,建立测试页面 修改apache的配置文件http.…...

无需插件,如何以二维码网址直抵3D互动新世界?

随着Web技术的飞速发展,一个无需额外插件,仅凭二维码或网址即可直接访问的三维互动时代已经悄然来临。这一变革,得益于WebGL技术与先进web3D引擎的完美融合,它们共同构建了51建模网这样一个既便捷又高效的在线三维互动平台&#x…...

系统思考—感恩自己

生命中,真正值得我们铭记与感恩的,不是路途上的苦楚与风雨,而是那个在风雨中依然清醒、勇敢前行的自己,和那些一路同行、相互扶持的伙伴们。 感恩自己,感恩每一个与我们携手并进的人,也期待更多志同道合的…...

Java多线程详解①①(全程干货!!!) 实现简单的线程池 || 定时器 || 简单实现定时器 || 时间轮实现定时器

这里是Themberfue 上一节讲了 线程池 线程池中的拒绝策略 等相关内容 实现简单的线程池 一个线程池最核心的方法就是 submit,通过 submit 提交 Runnable 任务来通知线程池来执行 Runnable 任务 我们简单实现一个特定线程数量的线程池,这些线程应该在…...

DAMODEL丹摩|部署FLUX.1+ComfyUI实战教程

本文仅做测评体验,非广告。 文章目录 1. FLUX.1简介2. 实战2. 1 创建资源2. 1 ComfyUI的部署操作2. 3 部署FLUX.1 3. 测试5. 释放资源4. 结语 1. FLUX.1简介 FLUX.1是由黑森林实验室(Black Forest Labs)开发的开源AI图像生成模型。它拥有12…...

请求(request)

目录 前言 request概述 request的使用 获取前端传递的数据 实例 请求转发 特点 语法 实例 实例1 实例2 【关联实例1】 域对象 组成 作用范围: 生命周期: 使用场景: 使用步骤 存储数据对象 获得数据对象 移除域中的键值…...

关于VNC连接时自动断联的问题

在服务器端打开VNC Server的选项设置对话框,点左边的“Expert”(专家),然后找到“IdleTimeout”,将数值设置为0,点OK关闭对话框。搞定。 注意,服务端有两个vnc服务,这俩都要设置ide timeout为0才行 附件是v…...

C语言strtok()函数用法详解!

strtok 是 C 标准库中的字符串分割函数,用于将一个字符串拆分成多个部分(token),以某些字符(称为分隔符)为界限。 函数原型 char *strtok(char *str, const char *delim);参数: str&#xff1a…...

【docker 拉取镜像超时问题】

问题描述 在centosStream8上安装docker,使用命令sudo docker run hello-world 后出现以下错误: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Ti…...

模拟手机办卡项目(移动大厅)--结合面向对象、JDBC、MYSQL、dao层模式,使用JAVA控制台实现

目录 1. 项目需求 2. 项目使用的技术 3.项目需求分析 3.1 实体类和接口 4.项目结构 5.业务实现 5.1 登录 5.1.1 实现步骤 5.1.2 原生代码问题 ​编辑 5.1.3 解决方法 1.说明: 2. ResultSetHandler结果集处理 5.1.4 代码 5.1.5 实现后的效果图 登录成功​…...

机器学习—大语言模型:推动AI新时代的引擎

云边有个稻草人-CSDN博客 目录 引言 一、大语言模型的基本原理 1. 什么是大语言模型? 2. Transformer 架构 3. 模型训练 二、大语言模型的应用场景 1. 文本生成 2. 问答系统 3. 编码助手 4. 多语言翻译 三、大语言模型的最新进展 1. GPT-4 2. 开源模型 …...

C++:探索哈希表秘密之哈希桶实现哈希

文章目录 前言一、链地址法概念二、哈希表扩容三、哈希桶插入逻辑四、析构函数五、删除逻辑六、查找七、链地址法代码实现总结 前言 前面我们用开放定址法代码实现了哈希表: C:揭秘哈希:提升查找效率的终极技巧_1 对于开放定址法来说&#…...

高端网站建设创新/关键词挖掘站长工具

配置机器 hostname vi /etc/hostname 增加S1PA11 再执行 # hostname S1PA11 ---修改成功 打开hosts文件 并修改关联关系: 127.0.0.1 localhost.localdomain localhost ::1 localhost6.localdomain6 localhost6 增加下面两行 (本地…...

广告制作公司怎么拉业务/百度seo 优化

原文地址为: 看了保证你笑到抽筋 2010最新语录1、种草不让人去躺,不如改种仙人掌! 2、我心眼儿有些小,但是不缺;我脾气很好,但不是没有! 3、人和猪的区别就是:猪一直是猪&#xff0c…...

在线手机网站制作/沧州网站推广优化

一个bug解决: 有时在Vue工程中写es6语法代码会报regeneratorRuntime is not defined的错误,此时可通过下面方式解决: 下载npm install --save-dev babel-polyfill在webpack.config.js中写var babelpolyfill require("babel-polyfill&qu…...

做书的网站有哪些内容/seo整站优化方案案例

MVC模式下那些友好&#xff0c;屏蔽具体物理文件的URL让我眼馋&#xff0c;咱也想在WEB FORM项目用上一用。按照指引&#xff0c;添加global.asax&#xff0c;写上路由代码什么的&#xff1a;<% Application Language"C#" %> <% Import Namespace"Syst…...

360免费建站可靠吗/一站式网络营销

我们在做应用程序的时候有时候想知道页面上的按钮对于某一事件委托链上有多少方法&#xff0c;下面是一个例子。1、先添加3个按钮&#xff0c;分别添加0个&#xff0c;1个&#xff0c;2个click事件的方法&#xff0c;按钮名字分别为button1&#xff0c;button2&#xff0c;butt…...

克隆网站首页做单页站几个文件/seo关键词怎么选

export PS1[\u\h:$PWD] 再分享一下我老师大神的人工智能教程吧。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow...