本次做的效果里,主要用到的是样条线,样条线模型等工具。
程序化生成藤曼是非常有必要的。建过模的就知道,在三维软件里面做藤曼,树根模型是一件非常令人头疼的事情。十分费时费力而且灵活性差。如果程序化生成这些东西,会省不少事情。至于效率问题大可不必担心。因为生成过程只会在游戏初始化的时候执行。在游戏过程中,这些数据是不会重复运算的,也就是说,它只会执行一次而且是在游戏开始之前。所以完全不会影响到玩家体验。而且程序化生成还有一个好处,那就是节约磁盘储存空间。同样是一大片藤蔓,程序化和不程序化生成的区别仅仅是游戏开始之前的一些计算。我觉得这个代价远远小于我们获得的收益。
那么来捋一下要做程序化生成藤蔓我们的步骤:
【1】准备需要的美术资源
【2】如何程序化生成
【3】程序化生成我们的第一条藤蔓
【4】发散思维,让程序化生成的东西更丰富
【@1】第一步当然是需要准备程序化生成需要的美术资源啦。美术资源无非就是模型和贴图。但是这个模型和贴图肯定不是一般的模型和贴图。这个模型和贴图需要满足我们程序化生成的需要。
首先我先展示一下我的:
因为我们需要程序化生成,所以我们需要用程序的思维去对模型进行抽象。我把一根树根分为了两个部分,第一部分为枝干可循环部分。这部分的贴图必须前后循环,拼在一起后前后两个能接上。第二部分为根的末端,为封闭三角形(当然你也可以探索如何让它更好看)。根的末端的UV必须和根的循环部分的UV能衔接上。在做模型的时候,可以先把可循环部分和末端部分拼在一起完成贴图的制作(雕刻啦,法线烘焙啦)。完成制作之后再把它们拆开。拆开之后要调整这两个模型的轴向。延伸方向应该和X轴的负轴同向(和引擎里坐标匹配)。完成模型制作之后就可以导出了。导出的时候注意模型位置归零。
【@2】有了资源之后我们如何程序化生成呢。在MAx里我们以前做头发的时候,有一种方法。把一个面片拾取样条线路径,用这种方式做头发。其实在引擎里也可以用这个办法。把藤曼模型附加到一条样条线路径上。
那么现在问题转化为如何得到一条能匹配场景的样条线呢(因为藤曼或树根是爬在墙上或者地面生长的)。
这里是我的做法,从一个给定的点做检测。检测到环境表面的点,然后把这些位置信息给样条线。
于是我们就得到了一条能自我匹配环境的样条线
【@3】现在我们已经捋清了思路,那么我们来生成第一条藤蔓吧(或者树根)
有了上一步的样条线,我们接下来的工作就是把模型附加上去,这里的模型用SplineMeshComponent。注意和Spline做区分。一个SplineMeshComponent其实只是我们藤蔓的一节而已。而不是整个藤蔓。这里需要做个数组循环。注意index。
做好模型附加之后就能得到下面的效果
【@4】我们来发散一下思维。一根藤蔓或树根看起来特别假。因为现实生活中藤蔓或树根都是成片成片出现的。我们可以把上面我们做的逻辑封装成一个函数,然后再在构造函数里面多次执行一次生成多根藤蔓,传入不同的起始位置和延展方向。我下面简单做了个生成两根,延展方向为X和Y的
当然我们还能继续往上加,加入随机扰动等,让藤蔓或树根看起来更真实。在每个Point点给不同的缩放等。
按着这个思路,再继续探索如何制作得更加自然。加入一些随机算法啦什么的。我简单做了一个岩石树根效果。