2023-11-17-blender整合建筑部件导入ue

一些sweep profile在su导入的模型中不尽如人意,利用hardop曲线提取路径曲线和形状曲线,在路径曲线到曲线编辑面板bevel中选取形状曲线,形状曲线需在编辑模式下翻转方可使得sweep正常显示。曲线在编辑模式下f键可以闭合、打开曲线。j键在物体编辑模式下连接曲线。

目前来看导入的模型要是朝右前方显示才能在PBG中正常使用,具体配合导入时的旋转设置。一些部件有附件、装饰超出主体的边界需要用socket length修正,目前看来是物体本身的blender边界尺寸减去超出的部分,在ue的socket length中填入y值。

今天发现stable diffusion不能用了折腾了一会儿浪费了不少时间脑细胞,最后整个压缩包重新解压启动就完事了,几个插件安装会被网速折腾,直接原来安装好的按照路径填充即可。明天开机再看看。

之前做的这个版本facade外立面逻辑不正确,这样会导致无法转角做连续的segment,facade应该是薄的一层而非整个体块,这里参考matrix的模型,facade mesh厚度在25cm也没问题,corner mesh无需在语法中定义,PBG会自动添加,right corner的pivot需要在左前下处顶点,corner mesh需要是以转角轴线对称的,不然就会像下面这般一边空心露馅了。

通过实验发现只要对相邻的segment的mesh pivot一个设置左下前方一个设置左下后方即可解决拼角重合问题(外拼角right corner),而当拼角为内拼角left corner则需要pivot保持一致。

不过这样做再非90度转角的平面布局下就会很不和谐。

结合socket可以使corner mesh与wall mesh更为和谐,根据图3可以看出来具体的socket和corner mesh的边界有关系,并不一定可以从始至终用一个固定值。

多个segment不同立面mesh的做法是一个meshlist包含所有立面的mesh,多个grammar list,一个grammar对应一个segment,然后再floor execution flow中定义s0-s1-s2选择对应的grammar list。

第一个小区中所用的小高层的mesh如果切分是左侧wall mesh要负责右边阳台玻璃栏杆的墙体,那么就会使得其厚度必须要有一定保障,这样会导致无法做corner mesh,如图2把墙体丢给阳台的mesh即可。

对于摆放后会出现异常重叠的,socket y坐标定义其所占用的水平方向大小似乎就可以解决问题,例如下面这个例子中socket的数值为黑色砖墙的宽度。

调整材质,有的大楼需要无损的那种感觉,石材、金属的贴图需要换另一套模式,我这里套用了hillside的金属材质,改贴图需要对master material中的texture sample改VT,不然instance中无法改动。

blender搞sweep cornice比较麻烦,为了制作left、right corner mesh必须拆解cornice这个用hardop的dice v2整体分段即可切出。今天发现了一个诡异的问题,用一个cornice的轮廓再次使用曲线路径生成出来的曲面并不完全相同,原理暂时不清楚,也不需要弄明白,这提醒我每次组装房型时需要画一个品字形的曲线路径提前将所有的sweep类型确认下来生成mesh,之后不做修改了,不然拆解完要改若发生以下这个问题就要大返工了。

通过mesh materializer这个插件可以在blender中对曲面投射,只不过尺寸方面需要在这个插件的面板中调整,另外此插件不支持blender3.3因此要用blender3.6操作,这样的话就可以解决道路设计的曲面问题了。

MESH MATERIALIZER and Conform Object - Wrap Objects on Other Objects in Blender!

在这个教学中还提及conform object也可以将物体投射到曲面,相对于mesh materializer更加方便,是对位的投射不用后期移动位置,但我看了下贴合效果不好。另外在我的应用场景中若对大的terrain做mesh materializer会卡,需要将小区所覆盖的地块提取出来,然后重排uv,注意得使用cube projection,不然使用插件后物体的位置布局会诡异。

选中terrain所有的面再ctrl加选一个面片使用knife project可以在terrain表面投射面片的布线借此再沿着local坐标系移动即可做出顺着地形向下凹的效果这样可以制作小区道路两侧凹陷防止cobblestone的效果。以下视频展示的是用这个方法对terrain局部平整,这样么可以制作房子的地基以及游泳池、水池的凹陷。

Modeling Terrain in Blender - How to FLATTEN TERRAIN!

在blender中通过原生的array+curve两个modifier即可实现沿着路径对物体连续无缝隙排列从而实现绘制道路以及规则间距散布物体。综合这个技术加上mesh materializer,那么小区地形道路的绘制流程如下:

先从大的地形上截取小区部分,添加ai生成的小区平面效果图,对uv做cube projection,用画笔模式绘制bezier曲线生成所有道路的路径,使用合适的profile配合array+curve两个modifier形成道路mesh,此时所有的道路应该都在z0位置,也就是同一平面上,手动编辑这些mesh完成岔口的制作,最后用mesh materializer完成道路对地形表面的吸附。

下拉option这里有个affect only 勾选origins可以移动物体的pivot,按住control吸附到vertex,这样可以快速调整pivot。

2023-12-9更新:小区道路吸附地形可以用knife project功能实现。绘制bezier曲线,outline延伸得到等宽平行曲线路径,在编辑模式下f make segment闭合,curve tool插件edit面板curve boolean合并封闭曲线可以得到图2效果,来到顶视图地形mesh进入edit face模式,ctrl加选道路曲线,knife project可以将曲线投射到面片上,这个方法对地形mesh没有细分要求可以精准投射道路。最后对地形mesh提取道路face即可对道路进行独立编辑。

建筑物需要确保其地坪平整,生成一个和建筑物发现方向一致的轮廓基本几何体提取投影曲线,使用knife project投射曲线到地形landscape上,选取这个曲线开启propotional editing用scale 0的方式对z方向使曲线平齐这样能保障周围区域平滑过度z方向的起伏不会产生僵硬高差。

对于一个被PRG分割的矩形地块,目前发现从地形mesh提取出来的覆盖上去有不小的出入,然而对landscape进行雕刻往下挖十分卡,暂时不知道怎么解决,我看了下当前使用的landscape是8192x8192像素的,使用2048x204或者4096x4096像素的landscape sculpt并不会卡,这需要进一步通过复制PRG看看会不会有影响,使用低像素的landscape使得最小单位landscape paint变大,但考虑到精确道路的绘制不可能使用landscape paint,它只用于大块面的绘制。

通过矩形curve精确绘制出街区的范围,knife project投射出这个区域,到ue中调入这个街区比对无误之后ai生成街区的平面参考,再具体规划建筑位置、小区道路。

提取的地块在ue中与landscape基本吻合,不过有高低起伏偏差用landscape sculpt下挖使提取的地形mesh整体浮现,然而边缘部分只有ue的landscape能和PRG通过landscape deform保持平齐,因此需要在blender中通过propotional 权重控制将边缘部分拉低使ue的landscape高于提取的地形mesh。

至此问题变成了地形mesh和ue landscape的接缝地带如何处理了,也就是PRG主路和地块间的边缘。目前看来就3种,1是像曙光泊岸直接土壤、绿化,这种情况是可以蒙混的,在交界处用植物mesh去遮掩可以成功过渡到地形mesh中的边缘绿化带;2是建筑裙楼环绕如下图2、3,这种效果要求地形mesh与ue landscape在主路边缘处是同一水平面,也就是说主路本身就是基本平坦的,若是像我现在这个地块的情况,由于主路高低起伏剧烈周边的地块边缘必然也是起伏的导致裙楼的地基不能在一个水平面上,两种解决办法一个是地形mesh边缘整体沉降并scale拉平,使得landscape到地形mesh有个明显高差二者直接通过下沉阶梯连接,另一个是增加一个地基mesh使地形mesh边缘整体拉高通过上升阶梯连接landscape;3是围墙,围墙可以通过nvspline吸附landscape,围墙内侧一般是一圈绿化可以蒙混,但小区大门入口这里呢?仔细想想入口的地砖应该是PRG的sidewalk,也就是说需要一个十分宽的sidewalk来覆盖,这样的话需要让sidewalk corner mesh同步扩大,另一种办法是添加一个sidewalk mesh,激活allow segment data tracking,对大部分的segment remove只保留小区入口处这一片,这个办法必须选择道路非corner mesh附近的部分,不然sidewalk的延伸可能与临近道路的sidewalk穿帮。

经测试用knife project直接提取面的道路mesh由于拓扑混乱,即使用simlifier curve将提取面片的曲线提取以后优化曲线的vertex排布,依旧不能使vertex“平行站位”,就算zen uv打直了uv整体看的过去了但是材质分布会有扭曲拉伸。

另一个方案是只投影一根曲线到地形mesh,将它提取出来,用array配合curve两个modifier将一个mesh生成道路。这个方法相对上一种方法与地形mesh的间隙更,不过这个遮掩问题不大,这个方法不会有纹理拉伸的问题,对array的mesh做改动也方便些。

不规则形状交界处用布尔解决。可以得到完美接缝的岔口。

不过我想了下这样的工作流程太麻烦了,这涉及到所有的建筑物要做地坪平整,这对于初期确认建筑位置等于说多了一个预处理工作,所有的挖坑要对地形做投射,阶梯由于道路不平整会部分埋入地下在视觉上不公整,所有的岔口需要对道路的接口路段做点的z方向平齐涉及多段的权重调整。

小区内要加入起伏高低我感觉主要就是道路和局部绿化,那么道路部分路段对地形mesh投射权重z偏移,可以制造局部起伏,绿化也是局部投射一个面片做拉伸、下沉?

经测试water在2048这个landscape像素下操作是顺畅的,4096巨卡。打开两个ue工程可以互相复制actor到另一边,围墙在splinemesh模式下巨卡,还是得用PRG的prop system,制作时开启spline only操作会很顺畅,确定曲线形状后吸附,使用一个road mesh用来align surface吸附到landscape表面,拐角处的围墙在对齐上会出问题需要对个别进行手动微调。bake mesh之后PRG会转换成instance mesh再用hillside的meshtoinstance widget转换static mesh,手动微调后再把它们转换回instance。现在看下来8-10米宽的sidewalk很有必要,绿化带、街边的装饰没有一定空间搞不了。

围墙后来我经过调节,把面数从30万降到8万后用PRG以road模式做spline mesh,可以达到1分钟内显示调整效果。spline mesh的好处是高低起伏的围墙完全“连续”,且转折处能呈现完美的弧度,注意要在水平方向增加分段不然是无法有足够面数进行转折的。(dice V2)

对PRG部分路段的spline point的z轴坐标平齐,再用landscape deform可以使得附近地块整体水平平齐,这样可以在这个部分平铺建筑物、入口可以使得物体能在一个水平面上,现实中这样也是符合逻辑的,一个大门不可能再一个弯曲起伏的路段上。

2023-12-15更新:ue的matrix材质做小区道路细节可以,其中uv offset、tiling可以快速调节,因此没必要在blender中搞了,blender只要uv展开即可,到ue里面弄。后来我尝试了把大门与小区围墙对接,但在ue中想完美拼接物体实在太难了,另一方面是围墙与人行道并不“曲线平行”,歪歪扭扭高高低低,一看就很掉档次,这是PRG解决不了的问题,通过看大王ue建筑效果,我感觉有必要再尝试一下在dcc软件中做主路,毕竟小区的道路解决了起伏蜿蜒问题,主路为什么不也这么做呢?

2023-12-16更新:道路部分再次做出重大调整?可能要抛弃PRG了,问题出在PRG要搞地形起伏用align surface会导致路面的起伏过于不规律,没法做手动的权重渐进调整,另外两个PRG之间没法“曲线平行”,比如围墙与人行道不平行,效果就很诡异了。PRG的好处是一次绘制可以重复利用,再次使用就是画spline即可,但是ue中画spline没法精确,配合blender curve export和PRG widget会重构曲线的构成。

为什么要用PRG的初衷我想是因为它可以配合ue的landscape做起伏。然而小区的起伏让我感到用osm原生的landscape太难操控了,于是摸索出了起伏可以对所在物体以及其地形mesh的顶点做z轴权重渐进偏移。下图1提取道路曲线用array和curve 两个modifier实现了在blender中做“曲线平行”人行道的围墙,下图2对局部道路以及围墙整体渐进偏移,测试发现选中的点数过多blender会巨卡,对于权重渐进偏移只要如下图3合理的选取少量点就能对局部做整体偏移了。

昨天花了70多块买了flex road generator这个基于geometry node的道路插件,它需要在preference中file path设置asset library引入FRG.blender,3.3版本显示不正常得用3.6版本。先把项目拖动引进来,通过下图1可以看到这个插件的构成是基于curve在modifier中设置,在edit模式下删除到只剩两个点就算到了初始状态的ue splinemesh了。最上面的curve 中设置bevel可以调节道路弯道的弧度圆润程度。接下来逐个FRG Mesh的modifier是以曲线自身为中心往左侧延伸添加spline mesh,可以通过other side将spline mesh放到另一侧,不过它不是镜像的,这些spline mesh在FRG的体系下是通过一个curve profile生成的,默认是矩形可以自己做profile关联起来,比如下图1、2中这个curb是我做的,要做镜像效果就是把profile本身做镜像,然后其中一个设置other side,对没有方向的mesh直接two side即可。

在FRG mesh中设置curve override通过curve在edit 模式下调节radius可以对道路做局部放缩。这样配合two side甚至可以做出单边道路局部变宽渐进收缩的效果,也就是类似公交车进站点的道路。

对于intersection和corner,需要结合curve中的curve sample length、road中的road width、road intersection mesh中的bevel amount可以快速调节出不同的corner mesh效果。图1是road 22宽,图2是road16宽。

FRG point instancing相当于PRG中的prop可以配置间隔,随机偏移,出现概率,以及分布的随机种子。

最后右键convert mesh即可将它转换成mesh。

2023-12-17更新:在frg转换成mesh后所有的物体会join起来,这回导致整个mesh过于庞大,我们当然希望instance能被分离出来,昨天我问了作者,它点出了需求但暂时还没回复解决办法。我早上想了下利用loose part分离部件,再link object data但是并不顺利。这样搞出来的instance都是一个朝向,也就是一旦有弯道就不行了。另外这里面还涉及需要用多重布尔合并loose part部件,不然分离出来的路灯是分部件的。作者后来回复我解决了分离出instance和道路,但依旧不解决问题。

最后我通过这个链接里的scripts实现了对FRG中的instance的真正实例化。加载这个插件选中需要的物体,再加选frg几何节点确保realize不勾选,然后点击realize instances即可生成。

Blender’s Geometry Nodes - Realize Instances to individual objects with UVS

甚至这个树,其collection下有多个品种,我选了其中一个realize instances居然自动全部对号入座生成了instances!

至此意味着通过flex road generator和realize instances插件可以完成对道路散布instance包括树木、车站、绿化、路灯,道路添加spline mesh,道路的corner、intersection自动生成,且可以调整corner角度,intersection支持各种岔道,道路可以不等宽添加公交车进站车道。

2023-12-14-blender道路uv展开FRG替换PRG 2023-12-5-完整景观项目分析3

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×