美文网首页
mesh-合并网格

mesh-合并网格

作者: skoll | 来源:发表于2021-12-14 22:49 被阅读0次

var newMesh = BABYLON.Mesh.MergeMeshes(arrayOfMeshes, disposeSource, allow32BitsIndices, meshSubclass, subdivideWithSubMeshes, multiMultiMaterials)
1 .网格数组,一些将要合并起来的东西
2 .multiMultiMaterials:细分网格并接受多个材质
3 .disposeSource:源网格在合并之后将被处理
3 .let mesh=BABYLON.Mesh.MergeMeshes([leaves, trunk],true , false , null , false , true); 我们的例子

MultiMaterial 多材质

组合方式1

 var mat1 = new BABYLON.StandardMaterial('mat1', scene);
    mat1.diffuseColor = new BABYLON.Color3(1, 0, 0);
    
    var mat2 = new BABYLON.StandardMaterial('mat2', scene);
    mat2.diffuseColor = new BABYLON.Color3(0, 1, 0);


    var sphere = BABYLON.MeshBuilder.CreateSphere("sphere1", {diameter: 2, segments: 16}, scene);
    sphere.material = mat1;
    sphere.position.y = 1;

    var cube = BABYLON.MeshBuilder.CreateBox("cube", { size: 1, height: 3 }, scene);
    cube.position = new BABYLON.Vector3(1, 1.5, 0);
    cube.material = mat2;
var mesh = BABYLON.Mesh.MergeMeshes([sphere, cube], true, true, undefined, false, true);

1 .当您将网格合并在一起时,将最终参数multiMultiMultiMaterial设置为 true,子网格数组将自动与所有合并网格的子网格一起创建。每个 subMesh 的材质也包含在生成的网格的新 multiMaterial 中。此功能忽略参数 ( subdivideWithSubMeshes)。

结果 两种材质最后在粒子系统里面都显示不到

组合方式2

var leaves = BABYLON.Mesh.CreateTube("tube", curve, 0, 10, radiusFunction, 1, scene);
        var trunk = BABYLON.Mesh.CreateCylinder("trunk", nbS/nbL, nbL*1.5 - nbL/2 - 1, nbL*1.5 - nbL/2 - 1, 12, 1, scene);

        let multiMat=new BABYLON.MultiMaterial('multi',scene)
        multiMat.subMaterials.push(leafMaterial)
        multiMat.subMaterials.push(woodMaterial)

        let mesh=BABYLON.Mesh.MergeMeshes([leaves, trunk],true , true , null , false , true);
        mesh.material=multiMat
        mesh.subMeshes[1].materialIndex=1
        console.log(mesh.material)
        return mesh;

1 .当您将网格合并在一起并将倒数第二个参数 ( subdivideWithSubMeshes) 设置为 true,但最后一个参数 ( multiMultiMaterial) 保留为 false 时,将自动创建 subMeshes 数组,每个合并网格都作为新网格的子网格。您必须将正确的 subMesh 索引分配给正确的材料索引。

结果:材料2可以显示

1 .那结果又感觉是在粒子系统那里.其实就是最根本的就是渲染出来的mesh,和粒子里面的mesh的材质发生的对象有变化.
2 .合并完之后的tree实例,可以正常显示的打印出来的结构如下,关键是这里

1 .一个是subMesh属性,里面有两个合成前的mesh,里面的materialIndex用来读取对应的材质
2 .一个是subMaterial属性,使用的时候直接从这里找,这里感觉怎么有点不太对劲呢

3 .进入到sps里面的tree实例,以为会和外面的一样,但是实际上已经完全不一样了


截屏2021-12-14 上午12.02.22.png

4 .他的材料现在已经挂载到了整体的SPS上面,而不再自己身上了
5 .这里的材质可以用uv来实现,因为每一个是可以设置他自己的uv的

难道不能写在那个里面,需要这样做

var multimat = new BABYLON.MultiMaterial("multi", scene);
multimat.subMaterials.push(material0);
multimat.subMaterials.push(material1);
multimat.subMaterials.push(material2);

sps.mesh.material = multimat;
sps.computeSubMeshes();
//但是这样不就是所有的都用一个了么。。。

 SPS.mesh.material = mat;亲测这个是可以用的,但是还是不行啊

昨天最后发现的问题

1 .sps的materials里面保存的材料,是addShape的时候传入的每一个材料的material,也可以是后面单独加的,多addShape一个,就会多一个,他确实是一个multimal类型,但是他的multial是sps的多个材料,每一个粒子可以使用其中的一个
2 .而这里我想做的是给一个mesh用multial材质,然后让粒子里面使用这个,很明显现在不行
3 .第一个是合并之后的类型,其实并不是真正合并成了一个真正的mesh,材质也没有真的用上,合成的mesh,还是在subMesh里面存储着之前的mesh,使用的时候仅仅从这里拿到,然后渲染,单个是没问题的,不知道到了sps里面为啥不行
4 .而sps里面讲的多材质,从来都是指我们最一开始说的


截屏2021-12-14 下午10.46.39.png

5 .看起来就仅合并mesh来说,最后实现的效果都是一样的,并没有真正的有本质的区别,最后合成的数据结构是一样的,都有subMesh,都有material

相关文章

  • mesh-合并网格

    var newMesh = BABYLON.Mesh.MergeMeshes(arrayOfMeshes, dis...

  • 3DMAX学习-分离网格

    3D图形基本元素是网格,我们可以将两个网格合并成一个,也可以将一个网格分成两个。 之前说说过合并网格,我们这里只说...

  • 插件-资源

    Mesh Baker 工作原理是将网格与材质合并,降低DrawCall Texture:角色网格相似,可以将纹理合...

  • unity中合并网格

    using UnityEngine;using System.Collections;using System.C...

  • 渲染优化-合并网格

    前提:物体使用同一个材质。很大情况下,材质不同是因为贴图的不同,所以通常还需要进行贴图的合并。合并步骤:1、把需要...

  • 网格与材质球合并

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dardgen2...

  • 179 基础原理-网格合并工具

    1、塌陷:将一条连续线段的点,合并成一个点。注意是连续线段 快捷键:M 可以用作简化布线 2、拆分:alt+M 面...

  • 图集合并算法(改进)

    .之前写过一篇合并图集的博文合并图集,最近改进了一个版本,生成的图集可以对齐到指定的网格,这对于那些按图块填充的画...

  • Unity3D-优化设置

    01-网格合并 使用gameobject的static属性设置注意的是,所谓静态就是静止的,你如果要改变它位置,就...

  • 开发笔记:Static batches

    它会把lod系统、遮挡剔除系统一起废掉 由于culling occlusion是根据单个网格来进行剔除的,合并成一...

网友评论

      本文标题:mesh-合并网格

      本文链接:https://www.haomeiwen.com/subject/ahasfrtx.html