c# 线向量生成多边形_UE4与Houdini程序化楼房生成器(上篇)

本文为教程记录笔记,内容比较多,分为上下篇。(对原著精简了一部分)

上篇主要介绍楼房主体,房顶以及墙线(不清楚这个结构具体怎么叫)的制作;

下篇主要介绍,窗户,门,楼顶围栏以装饰物的介绍;

本人Houdini萌新,如有书写和理解错误还请大佬扶正;

教程地址 :

https://www.bilibili.com/video/av40071816?from=search&seid=14043722538578756986​www.bilibili.com

一,制作楼体

制作思路(如图):

1746b96f65ce6b5bfa4f83588e5aa9d3.png
制作思路

具体实现:

  • 新建一个测试曲线,并封闭; (节点Curve)
  • 对曲线点坐标取整; (节点pointwrangle)
  • 制作楼层数,并设置高度也就是楼层高度; (节点CopyandTransform)

9926583bf7116bb61e16bb16a7af8816.png
楼层制作
  • 重新分布曲线上的点数,使其均匀分布; (节点Resample)
  • 打断曲线的连接性,使其每个线段为一个基元; (节点Carve)
  • 开始循环 对每个线段基元编辑UV属性; (节点foreach)
  • 向上移动线段位置(高度为楼层高度); (节点transform)
  • 合并两个线段基元(移动前与移动后); (节点megre)
  • 连接两跟线段成面; (节点Skin)
  • 结束循环查看效果;
  • 赋予UE4材质 ; (节点unreal_material)
  • 对节点进行封装处理,为后续制作主要的HDA文件;(右上角黄色小盒子)

4f251067c39060ce26e523643a187cb9.png
墙体效果预览

其中,对曲线点坐标取整功能与实现:

确保我们曲线上的点坐标为整数,防止在拉拽曲线时的产生的微弱偏差 ;

571f5588131194b2f0b7e8bd663dd60e.png
坐标点取整

其中,墙体的UV展开目的与实现:

目的:我们想达到单个墙体的UV铺满整个第一象限 ;

制作思路:现在有两个线段基元,向上移动前与向上移动后,总共四个点(0,1,2,3),我们让0号点的UV坐标为(0,0),1号点的UV坐标为(1,0),2号点的坐标为(1,0),3号点的坐标为(1,1)这样就满足刚好整个墙体铺满第一象限。

具体实现:

  • 给向上移动前的点(点序号0,1)UV属性为@uv.x = @ptnum(第一个节点pointwrangle)(其中在houdin中@ptnum为点的序号也就是0与1);
  • 向上移动后的线段UV属性(点序号2,3)@uv.y= 1(第二个节点pointwrangle);

72759421922e2c5f61110d40ef21ce9d.png
UV属性
  • 可以测试UV展开效果; (节点uvquickshade)
  • 切换材质,用来测试 ; (节点switch)

d5b8d7db7708de5d6d0957b3b0290418.png
  • 创建HDA文件,并保存自定义的相关参数;
  • 建议楼层数与楼层高度作为参数;
  • 其中楼层高度要和向上移动线段距离进行绑定;
  • 建议节点Resample中段数作为参数,可以调节墙体UV的大小;

a19b2066fa324fdbf6098e465d71ae08.png
HDA文件

二,制作楼顶

制作思路:拿到楼层中最顶层的模型,删除其他模型;并向上移动模型作为楼顶;

b47e7ac6c8eb8712fd99df49075b547b.png

实现:

  • 删除多余模型(按面基元序号,既楼层数减去一); (节点delete)
  • 向上移动模型; (节点transform)
  • 平分楼顶模型,为后续操作做准备; (节点divide)

06d2921f586540ff719da146d0250021.png
为楼顶添加细分
  • 展开模型UV; (节点uvunwrap)
  • 赋予UE4材质 ; (节点unreal_material)

0a01a45762d22a3da0cc123f7a8cb8ed.png
预览楼顶UV

合并墙体与楼顶,预览效果

7281a00bd4fa85567835466fdd42f2de.png
预览效果

三,制作楼体竖直墙线与水平墙线

1,竖直墙线

制作思路:

dfc5916cfda7981767b211a4b4bd1a34.png
制作思路

具体实现:

  • 根据现有模型 重新分布点; (节点resample)
  • 设置每个点的法线@N = set(0,0,1); (节点pointwrangle);
  • 新建线; (节点line)
  • 在每个点上生成线; (节点copytopoints)
  • 新建圆环,调节段数; (节点Circle)
  • 旋转,缩放圆环; (节点transform)
  • 生成模型; (节点Sweep)
  • 预览效果

4238f00e2e79dbbff16855498c0dd800.png
竖直墙线

2,水平墙线

制作思路:

cade3796328b17f096eccd8dd716d989.png

具体实现:

  • 根据现有模型 重新分布点; (节点resample)
  • 新建圆环,调节段数; (节点Circle)
  • 旋转,缩放圆环; (节点transform)
  • 生成模型,以最开始的曲线为基础; (节点Sweep)

d1c27c552a77d1e627157f19621d3071.png
水平墙线
  • 最后合并竖直与水平墙线; (节点merge)
  • 平铺UV ; (节点uvunwrap)
  • 赋予贴图检测是否正确 ; (节点uvquickshade)
  • 赋予UE4的材质; (节点unreal_material)

11eb121d1e94d8b4d96e74b255b8248e.png
墙线效果
  • 线的高度要与楼层高度绑定;
  • 两次重新分布点数的操作,其中段数属性均可以作为参数,调节其在楼体上的分布数量;
  • 墙线的缩放以及段数可以作为参数;
  • 最后合并墙体,楼顶以及墙线,注意查看法线是否正确(可以使用节点reverse翻转法线)

2ef4b13f63a33c5c9a57dfabc8e2514d.png
整体效果

保存HAD,导入UE4中查看效果;

调节输入为曲线输入(CurveInput),封闭曲线(在封闭点处容易造成折点,注意移动一下);

f2acacc342585fcb4141f353b7c599cd.png
俯视图

5d9ae3a7acf20d20b40dd6d04d69104d.png
第一人称

这样一个快速简单的楼体制作完成;

节点解释参考:

Curve :

制作曲线,及曲线的生成模式等相关参数;

pointwrangle :

输入代码,对点属性进行相关计算,也可以调节对其他属性操作;

CopyandTransform :

将一个对象copy并设置每次copy的位置/旋转/缩放等;

Resample:

重新采样一个或多个曲线,对曲面生成等长的段数,该节点只会运用到多边形上,当输入的是NURBS或Bezier曲线,其首先会使用Level of Detail参数将其转化为多边形对象;

foreach:

对数组进行遍历,对其中每个点/顶点/基元等属性进行编辑;

transform:

对一个对象执行位置,旋转,缩放属性的操作;

megre:

合并物体对象;

Skin:

创建放样表面,几条线围成表面;

unreal_material:

创建unreal4可识别的材质;

例如UnrealEngine4 中复制路径为(Material'/Game/YY/M_LandTT.M_LandTT')复制到Houdini节点中要做一定的修改(/Game/YY/M_LandTT.M_LandTT)。

uvquickshade:

给表面分配一个图像shader.表面没有UV,它会自动添加一个正投影UV,之后也可以被其他节点取代或修改,可快速预览UV的效果;

switch:

切换输入;

delete:

删除几何体.可用于精简场景, 通过组,数字,体积范围,Primitive/Point/Edge 的法线,或其他规则来删除输入几何体;

divide:

平滑多变形,清理多变形,如修正凹形,把n边形转成三角或四边面,三角化非平面面,删除,光滑,三角化多边形 可以完成细分光滑,清除多边形,修正凹面体,细分N边多边形为三角形或四边形,以及三角形化非平面的多边形选项。

uvunwrap:

分离UV到一个展平的,没有重叠的组中,用于贴图(4 5 6 8 面投影);

line:

创建直线 ;

copytopoint

将一个对象copy另一个点上;

Circle:

创建一个圆,可调节段数为多边形;

Sweep:

用一横截面沿着主干线生成一串横截面,通过沿着路径线,扫描横截面创建曲面 ;

To Be Continued..........

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值