UE4 TRPG制作日志九

待解决: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的生态链更好一些)。第一个周末踢球,太累了,休息了两天。

工资不高,但是期望:工作生活娱乐互相协调。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值