虚幻引擎之WireframeLit模式

虚幻引擎之WireframeLit模式

1 前言

“WireframeLit”是什么?这显然是笔者胡乱取的名字。

  • Wireframe,即线框模式;
  • Lit,即光照模式;

所以,WireframeLit模式,表示的是在光照模式下,同时显示线框的一个编辑器模式下的观察方式。

这源于美术的一个需求,想要模拟和3DsMax软件中类似的效果,如下所示。
在这里插入图片描述
其实,虚幻是可以同时显示线框和光照的,只是不再同一个View中。

通过点击场景编辑器右上角的“重叠方块”,可以将场景编辑器分成四个View,那么就可以设置一个显示线框模式,一个显示光照模式。

在这里插入图片描述

然而,美术肯定不会放过你的,这样明显不同于3DsMax。(求放过!

2 模式的实现

2.1 实现方案

很明显,这是一个比较简单的需求,实现的方案就是只需将Mesh绘制两次即可。

一次为光照模式,另一次为线框模式。

那么为何还需要写呢?无他,就是记录下一些实现过程中的细节。

大概梳理一下需要实现哪些东西:

  1. 添加一个ViewMode选项UI;
  2. 渲染逻辑的修改,实现绘制两遍,一遍是正常材质的光照模式,另一遍是线框模式。

注,其实从之前的文章虚幻引擎之SecondPass支持已经可以看到基本的实现思路。考虑静态Mesh和动态Mesh分别处理。

2.2 实现细节

2.2.1 ViewMode的UI

所涉及修改的文件如下:

EngineBaseTypes.h
ShowFlagsValues.inl
ShowFlags.cpp
ViewModeNames.cpp
EditorViewportCommands.h/cpp
SEditorViewport.cpp
SSCSEditorViewport.cpp
SEditorViewportViewMenu.cpp

增加ShowFlag枚举

EngineBaseTypes.h

在EViewModeIndex中增加枚举量:

UENUM()
enum EViewModeIndex
{
	//... 省略部分源码
	
	// 笔者添加
	VMI_WireframeLit = 29 UMETA(DisplayName = "Wireframe Lit"),
	// 虚幻源码,在这部分前添加
	VMI_Max UMETA(Hidden),
	VMI_Unknown = 255 UMETA(DisplayName = "Unknown"),
};

ShowFlagsValues.inl

// 找到VMI_Wireframe源码这个位置,在下面添加
/** needed for VMI_Wireframe and VMI_BrushWireframe */
SHOWFLAG_FIXED_IN_SHIPPING(0, Wireframe, SFG_Hidden, NSLOCTEXT("UnrealEd", "WireframeSF", "Wireframe"))
// 笔者添加 VMI_WireframeLit
SHOWFLAG_FIXED_IN_SHIPPING(0, WireframeLit, SFG_Hidden, NSLOCTEXT("UnrealEd", "WireframeLitSF", "WireframeLit"))
  • ShowFlagsValues.inl 会被ShowFlags.h中的struct FEngineShowFlags类使用。生成一个成员属性。

添加这个Flag标记的思路如下:

  • 若开启WireframeLit,就可以通过这个标记来开启光照模式下,再加上线框的渲染。

ShowFlags.cpp

FindViewMode函数中添加:

// 笔者添加,返回对应的枚举
else if (EngineShowFlags.WireframeLit)
{
	return VMI_WireframeLit;
}
// 虚幻源码&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值