在游戏开发的制作中可能需要制作地形,需要制作的相关的地形工具,绝大部分情况下并不会使用unity的terrain,因为其在移动平台上的表现很差,相同顶点甚至更多的mesh性能也比其优秀很多(或许是因为其内部动态生成terrainmeshrender的关系或者维护四叉树的节点开销)。所以在有些情况下,会利用terrain制作部分地形,然后将其导出为mesh。
在unity商店里也有几个类似这样的工具,比如terraintomesh,mte等等,但是测试下来,如果要表现更多更好的细节,那必然需要增加顶点,但是这些插件因为顶点生成都是均匀分布的,如果分配的大小过大,则总顶点非常庞大。而且需要平原地区需要的顶点数量并不多,会造成大量的浪费。所以放弃这些插件方案,后来考虑了下voxel engine,其用噪波函数生成地形,虽然生成的地形地貌贴近自然,而且减少了模型组的工作量,但是无法自由的编辑和配置且风格把控方面制作不易,所以也被放弃。因此,制作了自己的terrain2mesh,基于三角剖分和插件的shader而出,放出效果图如下:
资源下载地址:点击打开链接
2018.6.21:
更新V3版本:1。修正缺角问题(这是因为原始生成的切割多边形都是带有旋转的,可以通过调整在inspect面板上的RotPolygonAngle旋转参数,来控制输出)
2.修正SplitPercent 影响参数,通过maxcellcnt和autoconfig进行调整,
3.增加obj导出功能
tips: 这里使用0.01作为平面判断的额外系数在RemovePanelPolygon 中,你可以把这个参数外置,调整这个参数可以帮你剔除更多的无用平面,但是需要谨慎,
通过开放removelv的功能,可以将splitrange调小,splitpercent调大,然后控制removelv,建议小于0.1,来生成更多更细的切割多边形,最后通过三角剖分来生成更优的mesh,甚至可以通过导出obj来让模型师进行微调,来减面。
at the last,如果有人愿意提供一些场景资源,我可以帮你们做一个例子和视频~~
v3地址:https://download.csdn.net/download/kubilitydef/10490325
2018.6.25:
增加剪贴板复制参数的功能,添加几个函数如下,然后添加guilaout.button 即可:
void SetParams()
{
SplitMesh ScriptData = target as SplitMesh;
string buffer = GUIUtility.systemCopyBuffer;
string[] sp = buffer.Split(';');
if(sp.Length >0)
{
ScriptData.depth = ReadInt(sp,0);
ScriptData.RotPolygonAngle = ReadFloat(sp, 1);
ScriptData.SplitPercent = ReadFloat(sp, 2);
ScriptData.removelevl = ReadFloat(sp, 3);
ScriptData.MaxCellcnt = ReadInt(sp, 4);
ScriptData.SplitBias = ReadInt(sp, 5);
ScriptData.SplitRange = ReadFloat(sp, 6);
}
}
int ReadInt(string[] sp,int idx)
{
string value = sp[idx];
string[] nextsp = value.Split(':');
return int.Parse(nextsp[1]);
}
float ReadFloat(string[] sp, int idx)
{
string value = sp[idx];
string[] nextsp = value.Split(':');
return float.Parse(nextsp[1]);
}
void CopyParams()
{
SplitMesh ScriptData = target as SplitMesh;
GUIUtility.systemCopyBuffer = string.Format("depth:{0};angle:{1};pecent:{2};lv:{3};cellcent:{4};bias:{5};range:{6}", ScriptData.depth, ScriptData.RotPolygonAngle, ScriptData.SplitPercent
, ScriptData.removelevl, ScriptData.MaxCellcnt, ScriptData.SplitBias, ScriptData.SplitRange);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)