首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《Honey Select》捏人剖析

针对鼻子上的骨骼, 进行平移/旋转/缩放, 嗯, 看起来捏脸就是这么回事了. ? 比如鼻翼骨骼影响这点顶点, 那我们对其调节就可以产生这样的效果: ? 再比如下巴 ? ?...也就是说, HS中的的头部骨骼, 全部是用于捏脸的, 表情动画使用MorphTargets驱动. 那身体总不能也用MorphTargets做动作吧? ?...对其模型资源进行析, 发现MorphTargets个数为0, 而骨骼数超越以往的经验值. ?...查看其蒙皮信息可以发现, 所有影响顶点的骨骼名字全部带有"_s_"字样, 其父骨骼都是不带"_s_"的同名骨骼. 也就是说, HS的身体骨架中, 父骨骼负责动画, 子骨骼负责蒙皮....原来是硬编码的, 真让人崩溃...好了, 那整个捏人的核心逻辑就搞清楚了: 根据骨骼分类表生成所有的调节滑杆, 并从预置的文件加载滑杆的默认值集合 如果滑杆值变了, 查分类表得到骨骼名(可能多个), 再根据骨骼名查关键帧表得到关键帧集合

5.9K70

基于图像的单目三维网格重建

论文题目:Soft Rasterizer: A Differentiable Renderer for Image-based 3DReasoning(CVPR2019) 概述 渲染通过模拟图像形成的物理过程来缩小二维视觉和三维场景之间的差距...与目前最先进的可微渲染器不同,作者提出了一种真正可微的渲染框架,它可以直接使用可微函数渲染着色网格,并将有效的监督信号从不同的图像表示形式(包括轮廓、阴影和彩色图像)反向传播到网格顶点及其属性。...基于图像的三维推理关键在于找到从像素到三维属性的足够监督。为了获得图像到三维的相关性,先验方法主要依赖于基于二维关键点/轮廓或形状/外观的匹配损失。...尤其是标准的网格渲染器中包含一个叫做光栅化的离散采样操作,该操作阻止了梯度流入网格顶点。...但是,这些渲染器通常都是为特殊目的而设计的,因此不能推广到其他应用中。 在这篇文章中,作者主要研究一个通用的可微绘制框架,它能够直接使用可微函数来绘制给定的网格,而不仅仅是逼近后向梯度。

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Golang语言情怀--第128期 全栈小游戏开发:第19节:glTF 模型

    旋转、缩放 网格引用 网格渲染器组件 蒙皮引用 蒙皮网格渲染器组件 初始权重 (蒙皮)网格渲染器组件权重 网格渲染器 若 glTF 节点引用了网格,那么导入后相对应的预制体节点也会添加网格渲染组件(MeshRenderer...顶点属性,属性名称的转换如下表所示: gfx.AttributeName.ATTR_POSITION 注意:若 glTF 基元体中存在其他 JOINTS、WEIGHTS 顶点属性,例如 JOINTS_1...、WEIGHTS_1,则意味着此 glTF 网格的顶点可能受到多于 4 根骨骼的影响。...glTF 贴图属性将按照下表中的映射关系转换为 Cocos Creator 贴图属性: glTF 贴图属性 Cocos Creator 贴图属性 放大筛选器 放大筛选器 缩小筛选器 缩小筛选器、Mip...glTF 贴图缩小筛选器将按照下表中的映射关系转换为 Cocos Creator 贴图缩小筛选器和 Cocos Creator 贴图 Mip Map 筛选器: glTF 贴图缩小筛选器 Cocos Creator

    28510

    【带着canvas去流浪(11)】Three.js入门学习笔记

    生成网格实例时传入wireframe:true即可以网格形式展示几何体。...,需要正确调整其参数才能够显示阴影,参数配置错误时可能会显示一半阴影或者马赛克黑区: //初始化灯光 function initLight(color) { //添加环境光 ambientLight...morphTargets: true,目标几何体的点集vertices相当于上面的list1,存放在目标集合体geometry实例morphTargets数组中的向量相当于上面的list2(它可以存放多个...),而每一个morphTargets中的变形向量对原物体的影响系数存放在morphTargetInfluences数组中,取值为-1~1,相当于上面的scalar,通过连续改变morphTargetInfluences...的值就可以实现变形动画,morphTargetInfluences是mesh实例的属性而不是 geometry的属性。

    3.9K11

    基础渲染系列(二)——着色器

    (默认的球体) 变换(transform )组件用于更改网格和包围盒的位置,方向和大小。实际上,如第1部分“矩阵”中所述,使用了整个转换层次结构。如果对象最终出现在相机的视图中,则安排进行渲染。...这些是二维坐标对,它们以一个单位的正方形区域覆盖整个图像,而不管纹理的实际纵横比如何。水平坐标称为U坐标,垂直坐标称为V。因此,它们通常称为UV坐标。 ? (一张图片的UV坐标) U坐标从左到右增加。...(跨三角形的线性插值) 不同的网格具有不同的UV坐标,从而产生不同的贴图。Unity的默认球体使用经度-纬度纹理映射,而网格是低分辨率的立方体球体。...在两个纹理像素之间的某个位置对纹理进行采样时,将对这两个纹理像素进行插值。由于纹理是2D的,因此沿U轴和V轴都会发生。因此,它是双线性过滤,而不仅仅是线性过滤。...当纹理像素密度小于显示像素密度时,此方法有效,因此当你放大纹理时,结果看起来会很模糊。当你缩小纹理时,它在相反的情况下不起作用。相邻的显示像素最终将获得相距一个以上纹理像素的样本。

    4K20

    用 Mathematica 生成迷宫

    在这篇文章里,我将介绍如何利用 Mathematica 自身提供的和网格区域、图论、哈希表(关联)相关的各种函数,来创建形形色色的迷宫。...除了 MeshRegion 之外,Mathematica 还提供了许多配套的函数用于查询网格区域相关的几何与组合信息。我们这里就用 MeshRegion 来表示网格。...,而支撑树可以由函数 FindSpanningTree 直接生成。...它们都是图形单元,可以单独画出也可以组合在一起,这里为了方便再写一个把迷宫和解答画在一起,其中解答用粗红线表示的函数: 例如: 生成不同样式的迷宫 之前定义的迷宫生成函数不仅仅是针对矩形网格的,从支撑树到求解...仍然是利用 Mathematica 的网格区域相关的函数,很简短的代码就能实现,以矩形迷宫为例: 总结 这篇文章里,我们从"拆墙式"的迷宫构造原理出发,利用 Mathematica 丰富的内建函数,实现了基于图论的迷宫构造程序并用它为工具

    2.1K40

    【笔记】《Laplacian Surface Editing》的思路

    近来在做三维网格编辑相关的工作,于是看了04年的这篇高引用的经典论文,这篇文章在三维中使用拉普拉斯坐标配合多个限制方法实现了效果不错的网格编辑。...而之所以要将这样的坐标应用到三维中就是为了找到一种能够在相对坐标中表达出绝对坐标的方法, 这样的表示能够让我们在对网格进行处理时一定程度上忽略掉网格本身的绝对关系, 忽略掉网格在编辑时发生的平移, 旋转...这样表示的好处就是能够让绝对坐标以一种平移不变性的相对坐标表示出来 指导了一个顶点如何生成拉普拉斯坐标后, 假如我们现在有一整个网格面那么多的顶点, 最好的处理方法就是采用矩阵....而bi自然是原顶点的展开形式排列得到的向量: ?...对于三维网格编辑, 我们所需的操作就是先选择感兴趣的变形区域ROI, 得到ROI边界的顶点, 这一方面是为了保证变形不要影响到整个网格区域造成不良的效果, 另一方面是为了减少需要计算的点从而加快计算的速度

    4.3K91

    (实时)渲染管线(pipeline)

    几何阶段处理所有与几何相关的事情,例如决定需要绘制的图元是什么,怎么绘制它们,在哪里绘制它们。几何阶段的一个重要任务是把顶点坐标变换到屏幕空间中,再交给光栅器处理。...光栅化阶段光栅化阶段会利用上一阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像。它需要对上一个阶段得到的逐顶点的数据(例如纹理坐标、顶点颜色)进行插值,然后进行逐像素处理。...而z坐标不会做任何处理,但z坐标与屏幕坐标系构成了窗口坐标系。这些值会被传递到光栅化阶段。屏幕映射得到的屏幕坐标决定了这个顶点对应屏幕上的哪个像素以及距离这个像素有多远(z轴)。...三角形遍历该阶段会根据每个三角形的边界框,检查每个像素是否被一个三角网格所覆盖,如果覆盖的话就生成一个片元(fragment)。...深度测试与透明效果密切相关。当一个片元通过了两个测试后,它就可以进行合并。

    26720

    ECCV | Pixel2Mesh:单目彩色相机重建三维模型

    我们采用由粗到精的策略使整个变形过程稳定,并定义各种网格相关的损耗来捕获不同层次的属性,以保证视觉上的吸引力和物理上准确的3D几何。...接下来,我们一起去看看这篇论文主要是怎么实现的这个变换的过程的,而各部分又是如何进行表示的。go~! 模型方法介绍 首先是框架结构图: ?...f(p,l), f(p,l+1)分别表示顶点p在卷积操作前后的特征向量; N(p)指顶点p的邻居节点; W1,W2表示待学习的参数; 整个公式就是表达了图卷积神经网络的节点是根据其自身的特征和邻居节点的特征来进行更新的...从本质上说,这种损失需要一个顶点与其相邻顶点之间的边垂直于从网格真实区域观测到的。可能会发现,这种损失不等于零,除非在平面上。...更具体地说,网络可能会产生一些超大的变形,从而有利于局部的一致性,这在一开始的时候尤其有害,因为估计距离真实区域很远,会导致顶点飞起。

    2.1K10

    如何在页面极速渲染3D模型

    本文将从模型网格和贴图文件两方面分析,介绍几种通过技术角度优化加载速度和提高渲染性能的途径,在保证 3D 模型不减面,贴图不缩小的情况下,将模型精致地还原在 H5 或其他应用程序中。...模型网格压缩 首先是分析模型网格,对于大型 3D 资源,我们一般会通过在模型设计时进行“减面”来减少模型几何体的大小,但也会带来模型精致度的缺失。如下图所示: ?...而通过 glTF 配合 Draco 压缩的方式,可以在视觉效果近乎一致的情况下,让3D模型文件成倍缩小。下面具体介绍 glTF 格式及 Draco 压缩工具。 1....有两点表现: - Draco 通过 Edge breaker 3D 压缩算法改变了模型的网格数据的索引方法,缺少了原来的网格顺序; - Draco 通过减少顶点坐标、顶点纹理坐标等信息的位数,以减少数据的存储量...由于一个三角形网格对应多个顶点坐标、顶点法线坐标、颜色坐标等数据,一般来说 --draco.quantizeXXXBits对文件的大小影响会更大。

    8.6K32

    基于深度学习的视觉三维重建研究总结

    而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与世界坐标系的关系.然后利用多个二维图象中的信息重建出三维信息。...; (3)为了让整个形变的过程更加稳定,文章还采用coarse-to-fine从粗粒度到细粒度的方式; (4)文章为生成的mesh设计了几种不同的损失函数来让整个模型生成的效果更加好; 文章的核心思路就是给用一个椭球作为任意物体的初始形状...接下来介绍2019年的相关研究 由于相关内容涉及到mask-rcnn,先回顾一下: mask-rcnn是对 faster rcnn 的扩展或者说是改进,其增加了一个用于分割的分支,并且将RoIpooling...每个精化阶段都是输入一个三角形网格),然后经过三个步骤获得更精细的网格结构:顶点对齐(获得顶点位置对应的图像特征);图卷积(沿着网格边缘传播信息);顶点细化(更新顶点位置)。...尽管不使用边长正则化器的训练结果在标准度量中有更好的表现,但是会产生退化的预测网格,会导致输出的网格出现许多重叠的面。 ?

    4.1K41

    Unity Mesh基础系列(四)mesh变形(制作一个弹力球)

    而现在正在使用我们的程序生成的 立方体球,但其实它可以是任何网格。 2.1 准备 要进行任何的变形,我们都需要访问Mesh。一旦我们有了Mesh,就可以提取到原始的顶点位置。...这将会导致平面上的顶点被向周围推开,而不是向内推。 通过将力点从表面拉出,我们可以增加一个方向。一个轻微的偏移就可以保证顶点总是被推入表面。而接触点处的法线正好可以作为偏移方向。 ?...如果所有顶点都经历完全相同的力的话,整个物体就会移动而不改变其形状了。 想象一个爆炸。如果你在边上,就必死无疑。但如果你离的远些,可能会被气浪撞倒。而当你在很远的地方的时候就几乎受到影响。...也就是说,力是会随着距离的推移而减弱的。结合方位的差异,就会产生方向上的衰减,这也是造成物体变形的原理。 所以我们需要知道每个顶点变形力的方向和距离,而两者都可以从力点指向顶点位置的矢量导出。 ?...因为网格的形状不再是恒定的,我们也必须重新计算它的法线。 ? 更新顶点是调整其位置可以通过: ? ? 这些顶点会一直更新下去吗?

    3.9K30

    【笔记】《Phong Deformation: ...》的思路

    如果我们直接对复杂的网格曲面全局运用变形算法(例如之前提到的拉普拉斯变形)或者对每个顶点进行物理模拟, 由于需要计算的点特别多所以变形可能会非常耗时....Phong着色通过在粗糙网格上计算光照时对顶点的法线进行重心插值从而模拟出了平滑的光照....拉格朗日描述是力学里的一个概念, 关注对质点状态的描述因此正好适合网格图形中对顶点的描述. 在这种描述中顶点的变换可以用一个映射f来表示....首先我们需要得到四面体上各个顶点的梯度, 然后一样利用线性插值的思路我们可以得到以四个顶点为中心的四个线性插值变形fi, 再利用重心坐标系将这个变形fi插值到整个四面体上....至此回顾下整个框架, 其实就是找到基于单元中心的传统插值变形, 然后将这个变形另外插值到顶点上再应用到整个四面体, 将这两个插值加权下来.

    99220

    OpenGL 图形渲染流程入门

    图元装配 图元装配,即将从顶点着色器中输出的顶点根据 primitive (原始的连接关系)还原成网格结构。网格由顶点和索引组成,在这个阶段是根据索引将顶点连接在一起,组成线、面单元。...裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。光栅化分为三角形设置与三角形遍历两个阶段: 三角形设置: 光栅化的第一个流水线阶段是三角形设置,这个阶段会计算光栅化一个三角网格所需的信息。...具体来说,上一个阶段输出的都是三角网格的顶点,即我们得到的是三角网格每条边的两个端点。但如果要得到整个三角网格对像素的覆盖情况,我们就必须计算每条边上的像素坐标。...三角形遍历阶段会根据上一个阶段的计算结果来判断一个三角网格覆盖了哪些像素,并使用三角网格 3 个顶点的顶点信息对整个覆盖区域的像素进行插值。下图展示了三角形遍历阶段的简化计算过程。...当前片元的透明度是其中一个重要的指标,通常我们设定一个阈值,如果透明度小于这个阈值,那么就会被直接舍弃,相当于这个片元透明到 "看不到"、"消失" 了一般;而高于这个阈值的面片则会被当作不透明的物体来进行处理

    2.2K10

    【笔记】《计算机图形学》(12)——图形学的数据结构

    而且引申出一个属性:所有非流形的网格都不是一致朝向的。而之所以我们要定义一致朝向,是因为在计算或渲染的时候我们需要按照整个表面的一致朝向属性来进行着色,渲染之类,包括计算法线方向,进行背面剔除等等。...但是很显然这种方法空间代价很大,而且由于我们不能提前知道某顶点所对应的面和边的数量,所以如果我们想要由顶点在与顶点相关的边和面中进行搜索或处理的话,我们会发现这个过程的时间复杂度是不确定的。...场景排序的方法能够让BVH树尽量平衡,但是排序过程消耗的代价比较大不太适合实时计算;而直接按照距离划分不能保证子树的平衡加大搜索深度,但是相对的建树速度会快很多尤其对于复杂的场景更是如此。...而且前面说到表面可能同时被多个小块包括,这使得我们在判断射线求交时还需要判断当前射线是否会超出小块的范围,例如在下图中如果我们不检查射线范围的话会先命中三角面b而导致错误的结果。 ?...尽管树的平衡性也是一个影响效率的部分,但是树最关键的效率影响因素还是结点的个数,而BSP树的切分算法导致如下图中不同的切分顺序会影响是否需要进行三角切分进而影响得到的结点数量,书中没有给出具体的优化方案

    6.1K83

    R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化

    5.2 投影矩阵(Projector matrix) 现在我们已经构建了我们的网格,我们需要将数据点与网格顶点相关联。投影矩阵使用网格顶点作为明确的邻居,为模型提供数据集的邻域结构。...投影矩阵会自动计算每个点的邻域的权重向量,并通过将网格和数据点的位置提供给函数来计算。...5.3 SPDE SPDE(随机偏微分方程)是Matérn协方差函数的数学解,它实际上允许INLA有效地计算网格顶点处数据集的空间自相关结构。...它计算网格顶点之间的相关结构(然后将通过使用投影矩阵计算的向量进行加权,以计算适用于实际数据集的相关矩阵)。...),其中n.dat是数据集中的数据点数量(而不是网格顶点的数量)。

    10810

    Unity Mesh基础系列(一)生成网格(程序生成)

    目录 1 渲染事物2 创建顶点网格3 创建Mesh4 生成附加顶点数据 本文主要内容: 1、创建一个点阵网格 2、用协程分析点阵网格的位置 3、用三角形定义表面 4、自动生成法线 5、增加纹理坐标和切线...(第一个三角形) 现在有了一个三角形了,位置我们网格的第一块瓷砖的一半位置。为了能覆盖整个瓷砖,我们所需要的第二个三角形。 ? ?...(第一个正方形) 这样每个三角形的顶点都用一行代码,效率太低了,我们可以通过将整个第一行瓷砖转换成一个循环来创建整个第一行。...这是有原因的,因为如果我们自己不提供UV坐标,那么它们都是默认的零。 要使纹理适合我们的整个网格,只需将顶点的位置除以网格尺寸即可。 ? ? ?...为了在整个网格中获得零到一之间的正确坐标,我们必须确保我们使用的是浮点数。 ? 纹理现在投射到整个mesh上了。由于我们已经将网格的大小设置为10乘5,纹理会显示为水平拉伸。

    10.5K41

    Unity通用渲染管线(URP)系列(二)——Draw Calls(Shaders and Batches)

    Unity也支持编写CG而不仅仅是HLSL程序,但是我们将只使用HLSL,就像Unity推荐使用的现代RPs一样。 要绘制网格,GPU需要对所有三角形进行栅格化,将其转换为像素数据。...我们需要给一个名称来标识这两个程序,这是通过pragma 指令完成的。这些指令是以#pragma 开头的单行语句,后面跟着顶点或片段加上相关的名称。...1.5 转换空间 当所有顶点都设置为零时,网格会折叠到一个点,并且不会渲染任何内容。顶点功能的主要工作是将原始顶点位置转换到正确的空间。调用时,如果需要,可以向该函数将提供可用的顶点数据。...请注意,各个网格的绘制顺序与我们提供数据的顺序相同。除此之外,没有任何排序或剔除的方法,所以一旦某个批处理在视锥范围内消失,整个批处理都将消失。 2.5 动态合批 减少DC的第三种方法称为动态批处理。...这是一种古老的技术,它将共享相同材质的多个小网格合并为一个较大的网格,而该网格被绘制。但如果使用逐对象材质属性(per-object material properties)时,会失效。

    6.5K51

    重新网格化(Remesh)

    根据网格改动大小,可以分为这么几类: 保持顶点拓扑和几何信息,优化网格连接关系 保持顶点拓扑信息,同时优化顶点几何和网格连接关系 顶点重采样,优化网格连接关系 Remesh对原网格的改动比较大,实际应用中要谨慎使用...由于顶点保持不变,它可以极大可能的保持住原始网格的几何信息。缺点是,在顶点分布很差的情况下,优化的效果有限。...它和Delaunay优化的区别是,它不仅优化网格顶点的连接关系,还要优化顶点的位置。...常见的一些性质有: 新网格是原网格的一个好的逼近 新网格复杂度(网格顶点或面片数量) 网格面片质量满足一定的要求:避免狭长和退化面片;顶点度数为6;顶点分布满足均匀分布或几何相关的各项异性分布;网格边长要求...: 局部方法:经过一系列的局部拓扑和几何操作的迭代,来Remesh整个网格。

    3.4K30

    【100个 Unity实用技能】☀️ | OnPopulateMesh()和ModifyMesh() 方法的区别

    的ModifyMesh()方法都是用于绘制网格的函数,但它们在使用时机、功能定位以及使用范围上存在一些区别。...而ModifyMesh()则主要用于修改Mesh的结构或外观,比如改变顶点位置、颜色或者三角形结构等。...使用范围:OnPopulateMesh()通常用于处理单个UI元素的绘制,而ModifyMesh()则可以应用于多个UI元素,甚至是整个Canvas的所有元素。...总的来说,虽然OnPopulateMesh()和ModifyMesh()都与UI元素的绘制有关,但OnPopulateMesh()更多地涉及到顶点数据的生成,而ModifyMesh()则涉及到对已有Mesh...在这个方法中,你可以对Mesh的结构或属性进行修改,比如改变顶点位置、颜色或者三角形结构等。 注意事项:在使用ModifyMesh()时,需要注意性能影响,因为对Mesh的修改可能会增加渲染负担。

    67700
    领券