虚幻4中的程序化生成【2】程序化生成藤曼

本次做的效果里,主要用到的是样条线,样条线模型等工具。

程序化生成藤曼是非常有必要的。建过模的就知道,在三维软件里面做藤曼,树根模型是一件非常令人头疼的事情。十分费时费力而且灵活性差。如果程序化生成这些东西,会省不少事情。至于效率问题大可不必担心。因为生成过程只会在游戏初始化的时候执行。在游戏过程中,这些数据是不会重复运算的,也就是说,它只会执行一次而且是在游戏开始之前。所以完全不会影响到玩家体验。而且程序化生成还有一个好处,那就是节约磁盘储存空间。同样是一大片藤蔓,程序化和不程序化生成的区别仅仅是游戏开始之前的一些计算。我觉得这个代价远远小于我们获得的收益。


那么来捋一下要做程序化生成藤蔓我们的步骤:

【1】准备需要的美术资源

【2】如何程序化生成

【3】程序化生成我们的第一条藤蔓

【4】发散思维,让程序化生成的东西更丰富



【@1】第一步当然是需要准备程序化生成需要的美术资源啦。美术资源无非就是模型和贴图。但是这个模型和贴图肯定不是一般的模型和贴图。这个模型和贴图需要满足我们程序化生成的需要。

首先我先展示一下我的:

因为我们需要程序化生成,所以我们需要用程序的思维去对模型进行抽象。我把一根树根分为了两个部分,第一部分为枝干可循环部分。这部分的贴图必须前后循环,拼在一起后前后两个能接上。第二部分为根的末端,为封闭三角形(当然你也可以探索如何让它更好看)。根的末端的UV必须和根的循环部分的UV能衔接上。在做模型的时候,可以先把可循环部分和末端部分拼在一起完成贴图的制作(雕刻啦,法线烘焙啦)。完成制作之后再把它们拆开。拆开之后要调整这两个模型的轴向。延伸方向应该和X轴的负轴同向(和引擎里坐标匹配)。完成模型制作之后就可以导出了。导出的时候注意模型位置归零。


【@2】有了资源之后我们如何程序化生成呢。在MAx里我们以前做头发的时候,有一种方法。把一个面片拾取样条线路径,用这种方式做头发。其实在引擎里也可以用这个办法。把藤曼模型附加到一条样条线路径上。

那么现在问题转化为如何得到一条能匹配场景的样条线呢(因为藤曼或树根是爬在墙上或者地面生长的)。

这里是我的做法,从一个给定的点做检测。检测到环境表面的点,然后把这些位置信息给样条线。

于是我们就得到了一条能自我匹配环境的样条线


【@3】现在我们已经捋清了思路,那么我们来生成第一条藤蔓吧(或者树根)

有了上一步的样条线,我们接下来的工作就是把模型附加上去,这里的模型用SplineMeshComponent。注意和Spline做区分。一个SplineMeshComponent其实只是我们藤蔓的一节而已。而不是整个藤蔓。这里需要做个数组循环。注意index。

做好模型附加之后就能得到下面的效果


【@4】我们来发散一下思维。一根藤蔓或树根看起来特别假。因为现实生活中藤蔓或树根都是成片成片出现的。我们可以把上面我们做的逻辑封装成一个函数,然后再在构造函数里面多次执行一次生成多根藤蔓,传入不同的起始位置和延展方向。我下面简单做了个生成两根,延展方向为X和Y的

当然我们还能继续往上加,加入随机扰动等,让藤蔓或树根看起来更真实。在每个Point点给不同的缩放等。


按着这个思路,再继续探索如何制作得更加自然。加入一些随机算法啦什么的。我简单做了一个岩石树根效果。




  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在虚幻引擎4,可以使用“静态网格体实例化器(StaticMeshActor)”来实现实例化静态网格体制作瞄准线的效果。具体步骤如下: 1. 创建一个空的“Actor”蓝图,并将其命名为“AimLineActor”(或者其他你喜欢的名称)。 2. 在“AimLineActor”蓝图上添加一个“StaticMeshComponent”组件,用于显示瞄准线的形状。 3. 在“AimLineActor”蓝图上添加一个“InstancedStaticMeshComponent”组件,用于实例化静态网格体。 4. 在代码,使用“SpawnActor”函数来实例化“AimLineActor”对象,例如: ``` AAimLineActor* AimLineActor = GetWorld()->SpawnActor<AAimLineActor>(AAimLineActor::StaticClass(), SpawnLocation, SpawnRotation); ``` 其,“AAimLineActor”是“AimLineActor”蓝图的C++类,而“SpawnLocation”和“SpawnRotation”是实例化位置和旋转信息。 5. 在代码,使用“InstancedStaticMeshComponent”组件的“AddInstance”函数来向瞄准线添加实例化静态网格体,例如: ``` AimLineActor->InstancedStaticMeshComponent->AddInstance(FTransform(InstanceLocation)); ``` 其,“InstanceLocation”是实例化位置信息。 6. 可以根据需要,对实例化后的“AimLineActor”对象进行进一步的调整和设置,例如修改位置、旋转、缩放等。 需要注意的是,虚幻引擎4的实例化静态网格体制作瞄准线的方法相对较为复杂,但是也能够实现更加复杂的瞄准线效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值