Houdini 散点到Unity中使用

简介: houdini 真是越用越好玩,最近在使用其散点功能做成 HDA 在 Unity 进行物体散布的时候遇到了几个卡点,特此记录一下
houdini版本: 2020.5

相关属性

unity_instance: point 属性,这个属性的 string 值填充要散替换的物体的路径
unity_material: point 属性,这个属性的 string 值填充要赋予的材质路径,在 unity 中使用 HDA 生成多边形后就可以赋予这个属性标记的路径的材质
pscale: point 属性,这个属性可以设置缩放数值,用来控制实际撒点的物体的缩放属性
orient: point属性,这个属性代表物体的旋转属性,可以用来控制物体的旋转
collision_geo: point 属性,这个属性的 string 值填充要赋予碰撞体网格的路径
heuassetpath: 这不是一个属性,这个是在给 HDA 创建输入参数时,可以给 string 类型的参数加上这个标签,这样这个 string 参数在 untiy 里面就会以一个 objectfield 的形式出现,这样就免去了手动输入物体路径的麻烦,可以直接拖动引用,他会自己获取路径

实际操作

  1. 根据输入的数据或模型进行散点
  2. 设置需要的 pscal 、orient、 unity_instance 属性值
  3. 移除重复的点(可选,多次散点有可能会有挨得很近的点)
  4. 导出 HDA

细节点

  1. 随机大小,可以通过控制每个点的 pscale 属性的值,来影响散布物体的大小

  2. 随机朝向,可以通过控制每个点的 orient 属性的值,来影响散布物体的旋转

    • 这里注意,vex 的旋转是以弧度为单位的,360度一圈可以表示为 2PI, 如果输入的是角度值,则 输入角度/180PI 即可。

    • 没有设置正确的 orient,可能散布出来的物体都是躺着的。应为坐标系是不一样的。基础代码如下

      //可以将对其方向设置到 Y 方向,这个也是网上找到的,先做这么一次变换,至少可以保证,在Unity 内模型是正常站真的
      @orient=quaternion(maketransform(@N,{0,1,0}));
      
  3. 旋转用到的函数详解

    • maketransform 这个是构建一个变换矩阵,这里要注意他返回的是一个矩阵
    • quaternion 可以根据一个变换矩阵得到计算一个旋转四元数
    • 制作随机朝向的功能,可以使用如下代码
        // 使用角度 和轴向进行来创建一个 四元素的旋转
        vector4 oldAngle=@orient;
        vector4 randomAngle=quaternion(angels,axis);
        @orient=qmultiply(oldAngle,randomAngle);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容