待解决:PMC方案中C++的vertexColor和material混合颜色发生变化的问题,如何设置vertexcolor?
解决方法:所以不再使用PMC方案,改用RMC方案。
左图使用vertexcolor和material混合后颜色不正,右图为蓝图的PMC(vertexColor不设置),所以想到的解决方法是查看默认的vertexColor是什么。
主要定义的地方有两个:
Vertex.Color = (VertexColors.Num() == NumVerts) ? VertexColors[VertIdx] : FColor(255, 255, 255);
// Convert FLinearColors to FColors
TArray<FColor> Colors;
if (VertexColors.Num() > 0)
{
Colors.SetNum(VertexColors.Num());
for (int32 ColorIdx = 0; ColorIdx < VertexColors.Num(); ColorIdx++)
{
Colors[ColorIdx] = VertexColors[ColorIdx].ToFColor(false);
}
}
网络好的话再查一下answerHub,查一下具体导致这种差异的原因
但是用RuntimeMesh的话没有上述问题,RMC中用的是FColor,右对角线的颜色为正常颜色。所以不再使用PMC方案,改用RMC方案。
1、RunTime Mesh的安装与使用
如果不想去编译插件的话,商城购买插件然后安装,但是这个方式不支持4.16以上的版本
所以说还是要编译安装插件。421、420编译插件失败,422编译成功
编译安装的过程:
1)、工程目录下新建Plugins文件夹
2)、解压组件到Plugins中
、
3)、重新生成解决方案
4)、打开,提示进行编译
点击确认后
打开后可见,说明编译成功
以后想在其他工程中使用的话,一般来说,直接复制其他工程中编译好的Plugins文件夹过去即可
基础使用方式:https://github.com/Koderz/RuntimeMeshComponent/wiki
1)、基础概念:
Each section can individual control:
- Visibility
- Shadow casting
- Collision*
- Update Frequency (Trade-off between rendering and update performance)
- Vertex structure (Example: One section can have 2 UVs while the others have
2)、Mesh基础:
Meshes in the RMC are made up of 2 parts, the vertex buffer, and the index/triangle buffer.
3)、通过蓝图使用RMC
4)、通过C++来使用RMC //目前仍存在版本支持问题:要使用C++的话就用422版本吧,不用添加RenderCore\RHI这些,只用添加RunTimeMeshComponent,
有一种是通过已有mesh来创建runtimeMesh的,这个不做研究
留作思考题。读者自行尝试实现:
1、创建Box,难点在于三角形的划分和贴图的对应,要利用好对称关系
目前感觉最好理解的一种就是6个section,每个section创建一个面片,可以单独设置材质,共需24个顶点,12个三角形,如果是利用自带的staticMesh中的Cube,可以看到顶点数比较多。但是RMC提供的例子中也有创建Box,直接调用API,更为方便吧。需要了解如何为这种Box设置类似MC中的贴图。
2、创建MC-liked地形,会用到Noise
可以参考油管相关视频
更深入的就是地形的动态创建与保存加载,各种植被等的覆盖等
使用RMC修正了之前PMC颜色不正的问题
抽空看了看youtube上那个12个小时写MC的视频,里面方块贴图设置,场景生成与保存等 都可以学习借鉴
1、方块贴图
看了7集上述视频,视频里用到的是PMC方案创建方块,借助了三维软件导出cube为obj格式,并查看obj中的顶点等信息的方式,只创建了一个section,不过用i从0到5来对应输入顶点vertex,而且定义的vertextcolor为(FColor(255,255,255,i)),并以此作为设置材质的依据,如下,输入的vertexcolor*255与1进行比较,即可对应不同的贴图。挺有技巧的。(当然可以在RMC中这么做)
但是既然RMC直接提供了建立Cube的例子,直接拿来用就是,所以我想的另一种方法,将模型导入到blender进行unwrap,设置好贴图,再导入,讲道理的话应该也可以。
这种在blender中直接指定6个面的材质不是我想要的
(1)、首先看看blender中的cube能不能直接做贴图拿来使
(2)、进入编辑模式,这种简单图形的UV展开图应该可以直接使用
或者面对复杂图形时,用f3搜索“smart uv”,margin设置为0.3
(3)、导出贴图
blender2.8不会用这一块(绘制的贴图导出失败,也可能是我的版本有问题),也没查到教程,换成2.79了(我这里网不好)https://www.jb51.net/softjc/531318_all.html
找到原因了,在导入到UE4时要先把贴图给导入过去,再选择导入fbx,基于贴图创建一个材质应用即可。
问题二:这个贴图可以用于自定义的Box吗?需要与自定义的box的UVChannel中的展开方式匹配
最终验证这个想法优点失败,不能用于动态创建的Actor,除非是创建的时候与是基于已有物体创建的(这个不去纠结)。
不过肯定有类似vertext color那种方案。我猜测在material中判断面的位置的高低进行material的设置,RMC的例子中就只有1个面uv展开
10.30更新解决方案:
使用vertex normal ws获得顶点的法线方向可以或者使用pixel normal ws获得点的法线方向(一个三维数组,每一维分量最大为1)
网络真的有很大问题,很难上传图片
下面是我的MC贴图实现,分别能够设置顶面、侧面和底面贴图
2、场景的生成与销毁:
将生成物体的TArray块中,当该块处于视线之外即销毁该TArray块(相应的里面的物体也会被销毁,因为保存的是object reference)。另外,因为保存的是物体的引用,单独的销毁物体,会使得TArray中的相应Index为空。在销毁前首先应该进行的操作是保存该TArray。至于保存在哪,怎么保存,仍然是一个问题。
个人时间安排:
周一到周五:工作
(早晚)吃货研究时间,用来研究下早晚做点什么东西吃
早晚可以拿出半个小时的时间来处理问题和更新文档中遗留问题
周六周日:只要不加班(目前已确定不加班),不应酬(经常和同学见面),就思考和完善游戏设计相关内容。基本上UE4 TRPG制作日志七 中已经概括了一个大致的方向。
后面会用到linux(思考软硬件平台的搭建),(如果是作为一个真正的桌面TRPG的话,还是觉得windows的生态链更好一些)。第一个周末踢球,太累了,休息了两天。
工资不高,但是期望:工作生活娱乐互相协调。