首页
学习
活动
专区
圈层
工具
发布

基础渲染系列(十九)——GPU实例(Instancing)

该教程使用Unity 2017.1.0f3制作。 ? (数千个球体,只用了极少的批次) 1、合并实例 指示GPU绘制图像需要花费时间。为其提供数据(包括网格和材质属性)也需要时间。...我将使用它在半径为50的球形范围内创建5000个球实例。 ? (测试对象) 将测试对象放置在原点处,将相机放置在(0,0,-100)处,可以确保看到整个球体。...那是因为球体网格太大。如果我们改用立方体的话,它们将会被批处理。 ? (球形范围的大量立方体实例) 对于立方体,我们只用了8个批次,因此所有的立方体渲染实际上只占用了6个批次。...fps是对渲染帧时间的度量,而不是实际帧率,但这仍然是性能差异的良好指标。立方体的绘制速度更快,因为它们是批处理的,而且还因为立方体比球体所需的网格数据少得多。因此,这不是一个公平的比较。...多个实例化选项组合在同一指令中。但是,这可能会导致在部署到移动设备上时发生问题,因此需要小心使用。 那assumeuniformscaling选项呢?

13.7K30

走进动力学的柔体世界

数值高于0时,物体会根据数值的大小进行膨胀。 3、柔体布线 在C4D中,模型的布线是非常关键的一部分。而对于柔体来说,除开柔体本身参数的影响,不同的模型布线也会给柔体带来不同的特性。...如下图所示,中间的线比较密集导致线x轴方向的长度比两侧的短,所以中间的线段的力气会较小,在受到两边引力的作用下,两侧的部分基本上没有变形,中间的部分则被轻易的拉伸了。...在平时我们进行柔体制作时,可以根据此原理,依据实际的情况,去进行布线的不同疏密排布,来得到想要的效果。...首先我们先制作一个布线规整的模型,再给他加上我们的柔体标签(同时也不要忘了添加一个地面给地面加上碰撞体标签哦): 之后我们就可以通过给柔体的静止长度和压力打动画帧,来得到一个充气膨胀的效果 在打动画帧的时候我们需要注意几个点...: 第一是我们要考虑到重力的影响(重力可在工程设置的动力学tab中调整,可以适当调低),不要在一开始就给物体打上动画帧,让他先下坠到地面压扁后再给他打上动画,这样能保证整体动画的节奏感; 第二是我们需要在基础的柔体数值上稍微调低弹簧的数值

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

    基础渲染系列(六)——凹凸

    实际上,一旦有了更多的顶点,我们就可以移动它们。然后,我们不需要粗糙感,也可以制作出实际的粗糙表面!但是子四边形仍然有同样的问题。我们要更加细分它们吗?这将导致带有大量三角形的巨大网格。...(在立方体和球体上错误的凹凸映射) 可以先对齐立方体的一个面,以使其符合我们的假设。通过交换和翻转尺寸来支持其他面。但这是建立在假定一个轴对齐的立方体上。当立方体具有任意旋转时,它会变得更加复杂。...在立方体的情况下,每个面的切线空间是均匀的。对于球体,切线空间环绕其表面。 为了构造该空间,网格必须包含切向量。幸运的是,Unity的默认网格包含此数据。...在默认球体的情况下,每个顶点的切线空间不同。结果,切线空间将跨三角形插值,从而形成弯曲的空间。 ? (围绕球体的切线空间) 在球体周围包裹切线空间是有问题的。Unity的默认球体使用经纬度纹理布局。...这些贴图不粘在表面上。因此它们无法平铺,不能应用于不同的形状,也不会随网格变形。此外,它们在纹理压缩方面也不起作用。 因此,我们有足够需要的理由去使用切线空间。

    4.9K40

    Unity计算模型的体积和表面积

    体积公式 体积公式是用于计算体积的公式,即计算各种几何体(比如:圆柱、棱柱、锥体、台体、球体、椭球体等)体积的数学算式。体积公式也是不同体积单位之间进行换算所用的公式。...公式: 是三角形的两个边向量。 体积计算 原理:将模型视为由四面体(原点与每个三角形组成的四面体)组成,累加所有四面体的有符号体积。...公式: 注意事项 模型闭合性 体积准确性依赖闭合网格:开放网格(如缺少面的盒子)会导致体积计算错误。...坐标系与变换 应用缩放和旋转:在计算前需应用Transform的缩放、旋转,或使用transform.TransformPoint()转换顶点。...异步计算:避免在主线程计算大型模型,使用async/await或协程。 子网格处理 多材质模型的子网格:若模型包含多个submesh,需遍历所有子网格的三角形。

    14610

    关于计算机图形学的一些介绍(01)基本要素与空间变换

    顶点 vertex 什么是顶点?读者初识“顶点”这个词的时候,可能会觉得“顶点”就是上面三维物体在构建过程的第一步中,我们进行定义的各个“点”。...图形学中的空间变换 模型空间与世界空间 假设我们制作了一个边长为2的立方体,如下图所示: 此时,这个立方体我们是在当前坐标系中创建出来的。...随后,我们将这个立方体放置到一个“世界”场景中,在此之前,“世界”场景中已经有了一个球体: 为了不让他们重叠,我们将这个立方体先将边长从原来的2缩小到1个单位,然后放置到如下位置: 注意看,此时我们的立方体的坐标在此刻与球体共存的世界中的...经过一系列的操作,我们已经将一个2x2x2的立方体,从模型空间变换到了观察空间: 注意看上图立方体A点的左边经过一系列变换的结果 在观察空间的基础上(此时摄像机就在观察空间的原点),我们就会开始进行投影处理...对于上面我们创建的球体和立方体,摄像机放在原点,分别使用正摄像投影和透视投影的效果大致如下: 容易理解的是,经过投影以后,我们将三维立体的物体转变为了二维图像。

    1.1K10

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

    (纹理化一个球体) 1 默认场景 在Unity中创建新场景时,会带有一个默认的相机和一个定向光。...通过GameObject/ 3D Object/ Sphere创建一个简单的球体,将其放在原点,然后将摄影机放置在它的前面。 ?...4×4 MVP矩阵在UnityShaderVariables中定义为UNITY_MATRIX_MVP。我们可以使用mul函数将其与顶点位置相乘。这将正确地将我们的球体投影到显示器上。...正如预期的那样,它包裹着它,但是在两极附近它会显得非常不稳定。为什么会这样呢? 发生纹理变形是因为插值在三角形之间是线性的。Unity球体在极点附近只有几个三角形,其中UV坐标变形最大。...(跨三角形的线性插值) 不同的网格具有不同的UV坐标,从而产生不同的贴图。Unity的默认球体使用经度-纬度纹理映射,而网格是低分辨率的立方体球体。

    5.2K20

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

    本教程是CatLikeCoding系列的一部分,原文地址见文章底部。“原创”标识意为原创翻译而非原创教程。 这篇教程是基于上一篇 立方体球 的。它复用了同一个网格,并在此基础上做增加更多的测试模型。...(施加了一些按压操作) 1 场景搭建 我们会从一个以单个立方体球体为中心的场景开始。你既可以从头开始,也可以复用上一章 立方体球 的场景,然后删除所有多余的东西。...为了获得平滑的变形效果,球体应该包含相当数量的顶点。我把球体的网格大小设为20,半径设为1。 ? ?...除此之外,还必须跟踪变形过程中的位移点。 ? 在Start方法中对网格及其顶点进行赋值,并将原始顶点复制到移位点。 ?...把这个组件附加到相机上,因为它代表了用户的视角关注点。绑在其他物体上也行,但不应该绑定到需要变形的网格对象上,因为场景中可能有很多网格对象。 ?

    4.5K30

    浅谈 GPU图形固定渲染管线

    对于第一种情况,物体会被排除在渲染表之外。给定一个网格模型,我们可以通过一些简单的判别测试来判断网格模型是否位于*截头体内,这些测试会用到物体的包围体积(包围物体的一个球体)及*截头体的六个*面。...1.2 场景图 现在的游戏世界能够达到很大的规模,在多数场景中,大部分的几何物体处于上文所说的*截头体之外,如果这些物体的剔除皆使用*截头体,会造成难以想象的时间资源消耗。...顶点的变换涉及一系列的坐标系统,顶点变换过程,就是通过各个变化矩阵,把一个坐标系统下的顶点信息,变化到另外一个坐标系统上,从而实现3D的顶点数据最终可以在2D屏幕上进行显示。...实际上所谓的观察坐标系,也就是我们在上文中提到的摄像机的视锥体,它以摄像机为原点,由摄像机观察方向、视角、远*裁剪*面,共同构成一个梯形体的三维空间: *裁剪*面也即是梯形体较小的矩形面,在Directx...网格由顶点和索引组成,在之前的流水线中是对顶点的处理,而在这阶段是根据索引将顶点连接中一起,组成线、面单元。

    3K20

    浅谈 GPU图形固定渲染管线

    对于第一种情况,物体会被排除在渲染表之外。给定一个网格模型,我们可以通过一些简单的判别测试来判断网格模型是否位于平截头体内,这些测试会用到物体的包围体积(包围物体的一个球体)及平截头体的六个平面。...1.2 场景图 现在的游戏世界能够达到很大的规模,在多数场景中,大部分的几何物体处于上文所说的平截头体之外,如果这些物体的剔除皆使用平截头体,会造成难以想象的时间资源消耗。...顶点的变换涉及一系列的坐标系统,顶点变换过程,就是通过各个变化矩阵,把一个坐标系统下的顶点信息,变化到另外一个坐标系统上,从而实现3D的顶点数据最终可以在2D屏幕上进行显示。...实际上所谓的观察坐标系,也就是我们在上文中提到的摄像机的视锥体,它以摄像机为原点,由摄像机观察方向、视角、远近裁剪平面,共同构成一个梯形体的三维空间: 近裁剪平面也即是梯形体较小的矩形面,在Directx...网格由顶点和索引组成,在之前的流水线中是对顶点的处理,而在这阶段是根据索引将顶点连接中一起,组成线、面单元。

    3.2K80

    单图像三维重建、2D到3D风格迁移和3D DeepDream

    人类在大脑中使用视网膜上的图像来模拟3D世界,机器也可以通过在2D图像背后显式地建模3D世界来更智能地工作。从3D世界生成图像的过程叫做渲染,这在计算机视觉里面非常重要。...对象的旋转、平移和缩放由顶点上的简单操作表示。 这篇文章提出了两个应用,如下图所示。第一个是单图像三维网格重建,第二个是基于梯度的3D网格编辑,包括风格迁移和DeepDream。 ?...具体地说,使用一个有642个顶点的各向同性球体,并使用局部偏置向量Bi和全局偏置向量C将每个顶点Vi变成Vi+Bi+C的形式。 分别定义轮廓损失Lsl和平滑度损失Lsm如下所示: ?...2D到3D的风格迁移:在本节中,作者提出了一种将图像Xs的样式传输到网格Mc上的方法。对于二维图像,风格迁移是通过同时最小化内容损失和风格损失来实现的。在这里,作者把内容指定为三维网格Mc。...第一列:输入图像;第二至第四列:网格重建;第五至第七列:体素重建。 ? 通过体素IoU测量重建精度,越高越好。可以看到基于网格的方法在13个类别中有10个类别的性能优于基于体素的方法。 ?

    2.2K31

    Three.js - 走进3D的奇妙世界

    */ // 这是自定义的创建几何体方法,如果创建几何体后续会介绍 var kleinGeom = createKleinGeom(); scene.add(kleinGeom); // 场景中添加几何体...以创建一个简单的立方体为例,创建简单的立方体需要添加8个顶点和12个三角形的面,创建顶点时需要指定顶点在坐标系中的位置,添加面的时候需要指定构成面的三个顶点的序号,第一个添加的顶点序号为0,第二个添加的顶点序号为...6.3 聚光灯 类似舞台上的聚光灯效果,光源的光线从一个锥体中射出,在被照射的物体上产生聚光的效果。聚光灯在传播过程也是有衰弱的。...7.1 普通纹理贴图 在这个示例中使用上图左侧的地球纹理,在球形几何体上进行贴图就能制作出一个地球。...,如:球体、立方体、圆柱体等等,但是在实际使用中往往需要用到一些特殊形状的几何体,这时可以使用3D建模软件制作出3D模型,导出obj、json、gltf等格式的文件,然后再加载到Three.JS渲染出效果

    9.6K20

    《深度拆解3D开放世界游戏中角色攀爬系统与地形碰撞网格动态适配的穿透卡顿复合故障》

    例如当藤蔓被风吹动时,模型顶点会沿风向产生0.1-0.3米的偏移,动态烘焙系统会同步计算偏移后的顶点位置,更新碰撞网格的三角面结构,确保物理碰撞检测与视觉模型的变化保持一致。...在故障触发的空间特征拆解中,团队对故障触发的空间位置进行精准统计—在8000x8000米的地形中,标记出所有触发故障的区域,发现这些区域有一个共性:均位于“地形区块烘焙原点”(初始加载区域的中心点,坐标设为...,当坐标值超过2000米后,浮点数的小数位精度会逐渐损失(如2000米处,小数位精度约为0.001米;4000米处,精度降至0.004米),而攀爬系统的碰撞检测需要毫米级精度(如手部碰撞体半径0.05米...测试发现:在初始区域(2000米以内),动态藤蔓偏移时,两个版本号实时同步(延迟小于10毫秒),碰撞判定正常;在2000米以外区域,当藤蔓偏移速度超过0.5米/秒(如强风天气)时,物理内存池的版本号会滞后视觉模型版本号...进一步分析发现,这种滞后源于“动态碰撞网格的烘焙计算”与“数据传输”的双重延迟:一是烘焙计算延迟,地形区块距离烘焙原点越远,碰撞网格的顶点坐标值越大,PhysX在计算网格拓扑结构(如三角面法线、边缘平滑度

    36900

    Three.js - 走进3D的奇妙世界

    */ // 这是自定义的创建几何体方法,如果创建几何体后续会介绍 var kleinGeom = createKleinGeom();  scene.add(kleinGeom); // 场景中添加几何体...以创建一个简单的立方体为例,创建简单的立方体需要添加8个顶点和12个三角形的面,创建顶点时需要指定顶点在坐标系中的位置,添加面的时候需要指定构成面的三个顶点的序号,第一个添加的顶点序号为0,第二个添加的顶点序号为...在这个示例中使用上图左侧的地球纹理,在球形几何体上进行贴图就能制作出一个地球。...这个例子是通过在球形几何体的反面进行纹理贴图实现的全景视图,实现原理是这样的:创建一个球体构成一个球形的空间,把相机放在球体的中心,相机就像在一个球形的房间中,在球体的里面(也就是反面)贴上图片,通过改变相机拍摄的方向...,如:球体、立方体、圆柱体等等,但是在实际使用中往往需要用到一些特殊形状的几何体,这时可以使用3D建模软件制作出3D模型,导出obj、json、gltf等格式的文件,然后再加载到Three.JS渲染出效果

    15.9K51

    WebGL开发3D模型的流程

    模型制作: 在建模软件中进行模型的创建,包括:几何体创建: 使用基本几何体(例如立方体、球体、圆柱体等)进行组合和修改,创建复杂的模型。多边形建模: 通过编辑多边形的顶点、边和面来创建模型。...雕刻建模: 使用类似雕刻工具的方式对模型进行细节刻画。UV 展开: 将 3D 模型的表面展开成 2D 平面,用于贴图的制作。贴图制作: 为模型添加纹理和材质,使其更加逼真。...模型加载和渲染 (以 Three.js 为例):引入 Three.js: 在 HTML 文件中引入 Three.js 库。...调整相机位置: 将相机移动到合适的位置,以便观察模型。4. 模型交互:鼠标控制: 使用 OrbitControls 或 TrackballControls 等控制器实现鼠标旋转、缩放和平移模型。...减少绘制调用: 使用合并网格等技术减少绘制调用次数。总结:以上是一个使用 WebGL 开发 3D 模型的基本流程。实际开发中,可能需要根据具体需求进行调整和扩展。

    1.1K11

    2.1 几何阶段第 2 章 GPU 图形绘制管线

    :其一,object space coordinate 就是模型文件中的顶点值,这些值是在模型建模时得到的,例如,用 3DMAX 建立一个球体模型并导出为.max 文件,这个文件中包含的数据就是 object...需要高度注意的是:顶点法向量在模型文件中属于 object space,在 GPU 的 顶点程序中必须将法向量转换到 world space 中才能使用,如同必须将顶点坐标 从 object space...因为在不规则的体(viewing frustum)中进行裁剪并非易事,所以经过图形学前辈们的精心分析,裁剪被安排到一个单位立方体中进行,该立方体的对角顶点分别是 (-1,-1,-1)和(1,1,1),通常称这个单位立方体为规范立方体...所以,从视点坐标空间到屏幕坐标空间 (screen coordinate space)事实上是由三步组成: 用透视变换矩阵把顶点从视锥体中变换到裁剪空间的 CVV 中; 在 CVV 进行图元裁剪;...使用高级语言实现时,如果一个场景实体完全不在视锥中,则该实体的网格数据不必传入 GPU,如果一个场景实体部分或完全在视锥中,则该实体网格数据传入 GPU 中。

    1.7K30

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

    在本教程中,我们将创建一个由顶点和三角形组成的简单网格。...所以你看到的3D物体表面总是会出现一定程度的锯齿状。 ? ? (Unity的默认的 胶囊,立方体,球体的阴影与线框展示) 怎么显示 线框模式?...而方法就是通过添加一个OnDrawGizmos方法,并在场景视图中为每个顶点绘制一个小的黑色球体。 ? ? (gizmo) 在游戏模式下,我们只看到了一个黑点的球体。...为了在整个网格中获得零到一之间的正确坐标,我们必须确保我们使用的是浮点数。 ? 纹理现在投射到整个mesh上了。由于我们已经将网格的大小设置为10乘5,纹理会显示为水平拉伸。...理想情况下,这两个矢量之间的夹角为90°。它们的交叉积产生定义三维空间所需的第三个方向。 在现实中,角度往往不是90°,但结果仍然够好。所以切线是一个三维向量,但是Unity实际上使用了一个4D向量。

    12K41

    粗略的物体碰撞预测及检测

    在真实的物理系统中,一般需要在运算速度和精确性上做取舍。...三维场景中物体的AABB包围盒是一个六面体,虽然有8个顶点,但是对于规则的AABB立方体,我们仅需要知道两个顶点(xmin,ymin,zmin)和(xmax,ymax,zmax)就可以得到AABB的中心点...在一维坐标轴中,两线段A和B相交的条件是: 线段A在坐标轴上的最大值Amax不小于线段B在坐标轴上的最小值Bmin; 线段B坐标轴上的最大值Bmax不小于线段A在坐标轴上的最小值Amin; 即 (Amax-Bmin...三维场景中AABB碰撞检测原理:   三维场景中物体的AABB包围盒是一个六面体,其坐标系对于二维坐标系来讲只是多了一个Z轴,所以实际上在三维场景中物体的AABB碰撞检测依然可以采用四个点信息的判定来实现...对一个三维物体网格化处理后,需要对三维物体内的子网格做碰撞监测,子网格是规则的立方体。在单位时长内,连接开始和结束时刻物体的最大包络线得到的就是运动多面体。

    3.3K81

    粗略的物体碰撞预测及检测

    在真实的物理系统中,一般需要在运算速度和精确性上做取舍。...三维场景中物体的AABB包围盒是一个六面体,虽然有8个顶点,但是对于规则的AABB立方体,我们仅需要知道两个顶点(xmin,ymin,zmin在一维坐标轴中,两线段A和B相交的条件是: 线段A在坐标轴上的最大值Amax不小于线段B在坐标轴上的最小值Bmin; 线段B坐标轴上的最大值Bmax...三维场景中AABB碰撞检测原理:   三维场景中物体的AABB包围盒是一个六面体,其坐标系对于二维坐标系来讲只是多了一个Z轴,所以实际上在三维场景中物体的AABB碰撞检测依然可以采用四个点信息的判定来实现...[44640621.jpg]   对一个三维物体网格化处理后,需要对三维物体内的子网格做碰撞监测,子网格是规则的立方体。在单位时长内,连接开始和结束时刻物体的最大包络线得到的就是运动多面体。

    2.4K60

    为第12版 Wolfram 语言建立均匀多面体

    模型展示了柏拉图体镶嵌在球体内,每个多面体都接触两个行星球体。开普勒相信这能解释行星间的距离和为什么存在恰好六颗行星: ?...在第十二版之前,PolyhedronData有其中一部分多面体的信息。在第十二版中,我们现在可以把第一个模型表示为72个面和30个顶点: ?...一旦决定了哪里的面可以被分割,可以从BSP树方法中得到的网格中提取坐标。 切割角? 虽然我们有所有均匀多面体的精确坐标,有些多面体中相交的面使得很难决定在哪里分割多边形,尤其是在非凸多边形中。...这个过程即使在BSP树分析后,如果在存在很难分辨大量重叠面、星形多面体的孔洞等的情况下还是会非常困难。 ? 所以这时候我决定回到基本,手动生成这些多面体。我想要避免打印出之前制作的多面体网。...然后我马上就遇到了之前计算时碰见的问题:相交的多面体。这个问题可以用在多面体中制造割口的方式解决。但是我立刻意识到,八边形面可能会需要多次切割。

    4.9K10

    前端新玩具——webGL简介

    变换是不需要遍历每个顶点就可以移动网格的操作,需要由矩阵(matrix)来操作。 类似介种: ? 相机、透视、视口和投影 我们生活在三维世界中,但是用眼睛只能看到二维的图像。...前方高能(学霸请无视这一行) 《线性代数》乱入: 前面说了,网格由N个多边形构成,实际上就是由多边形的顶点集合构成。顶点是一个向量,而向量可以用一个三维坐标(x, y, z)来表示。...我们先创造一个几何球体(当然同理还有CubeGeometry等等),三个参数,第一个是球体半径,后两个分别是球体在两个方向上的几何精度(其实就是每条线上用多少个顶点描述),这里的横向和纵向都设置为64个顶点...最后用几何体跟材质生成网格,并倾斜一个小角度方便我们瞅着它 ? 把网格添加到场景中 ? 这样“辟地”就弄好了 ? 是不是感觉跟平常看到的不太一样? 对啊卧槽云呢?咱们的星球那么漂亮,要有云哇!...这个性质用来做我们的云层最棒了。然后我们还要把云层网格设为透明,让它“罩”在地球上,转动比地球快一丢丢,更接近真实。 ?

    2.5K10
    领券