转自:http://blog.csdn.net/pizi0475/article/details/50396277

随着近来虚幻引擎4的一些变化,渲染多种颜色的轮廓线已经可以实现了!通过自定义模板,类似自定义深度的缓冲区——但允许网格作为整数值来渲染。它提供了一个0~255范围,可以在网格上定义不同颜色的轮廓线,甚至可以多个功能混用,例如下图使用不同模板索引的描边效果。

          原始自定义深度
去年制作的原始轮廓线材质是基于在自定义模板可用之前的自定义深度。也就是说,在作为一个单通道深度值绘制到缓冲区后,不能决定网格的类型。原始效果用到的指令很少,所以若你的游戏不需要多种颜色,可以考虑使用旧的特效。
新特效依旧使用自定义深度来决定遮蔽(可选的),通过在后期处理中修改FillAlpha参数来添加一个模糊的覆盖颜色来调整。可以不勾选材质实例中的FillOcclusion选项来关闭该遮蔽。
          开启自定义模板
自定义模板缺省是不开启的,可以依次点击Window> Project Settings > Rendering > Post Process > CustomDepth-stencil Pass ,将其设为Enabled with Stencil来启用自定义模板。
在本例中,一些网格在自定义模板视图中不可见,他们的模板值为0(缺省),不包含在缓冲区中。
为了让它们在视图中可见,依次查看Lit > Buffer Visualizer > Custom Stencil。
你可以通过渲染目录下网格的编辑菜单,来启用自定义深度或改变模板索引。
若你使用C++,为了方便起见,可以在游戏头文件(比如:survivalGame.h)中对它们进行宏定义。
/* Stencil index mapping to PP_OutlineColored */
#define STENCIL_FRIENDLY_OUTLINE 252;
#define STENCIL_NEUTRAL_OUTLINE 253;
#define STENCIL_ENEMY_OUTLINE 254;
#define STENCIL_ITEMHIGHLIGHT 255;

在C++中直接启用自定义深度并设置顺序。

GetMesh()->SetRenderCustomDepth(true);
GetMesh()->CustomDepthStencilValue = STENCIL_ENEMY_OUTLINE; // or simply assign an int32 within 1-255 range.
设置后期处理
你需要放置一个Post ProcessVolume来启用轮廓线。确保设置为Unbound,这样就可以不管相机是否在体积内。在选中PostProcess Volume状态下,点击Settings > Blendables 并添加PPI_OutlineColored作为第一个入口。
 
原文链接:http://www.tomlooman.com/multi-color-outline-post-process-in-unreal-engine-4/
原文作者:Tom
 
代码参考:http://www.tomlooman.com/soft-outlines-in-ue4/
float3 CurColor=;
float2 NewUV = UV;
int i=;
float StepSize = Distance / (int) DistanceSteps;
float CurDistance=;
float2 CurOffset=;
float SubOffset = ;
float TwoPi = 6.283185;
float accumdist=; if (DistanceSteps < )
{
return Texture2DSample(CustomDepthTexture,CustomDepthTextureSampler,UV);
}
else
{
while (i < (int) DistanceSteps)
{
CurDistance += StepSize;
for (int j = ; j < (int) RadialSteps; j++)
{
SubOffset +=;
CurOffset.x = cos(TwoPi*(SubOffset / RadialSteps));
CurOffset.y = sin(TwoPi*(SubOffset / RadialSteps));
NewUV.x = UV.x + CurOffset.x * CurDistance;
NewUV.y = UV.y + CurOffset.y * CurDistance;
float distpow = pow(CurDistance, KernelPower);
CurColor += ceil(Texture2DSample(CustomDepthTexture,CustomDepthTextureSampler,NewUV))*distpow;
accumdist += distpow;
}
SubOffset +=RadialOffset;
i++;
}
CurColor = CurColor;
CurColor /=accumdist;
return CurColor;
}
 

UE4中多种颜色轮廓线的后期处理的更多相关文章

  1. NSString -- UILabel中字体有多种颜色,字符串自动计算高度/换行

    一:UILabel中字体有多种颜色 UILabel *label = [[UILabel alloc] init]; label.frame = CGRectMake(, , , ); label.b ...

  2. UE4中Timeline的使用

    UE4中经常需要一些和时间相联系的功能,例如在一段时间内完成一个动作,播放一段动画,或者只是单纯的延迟函数的执行时间,即调整事件的执行顺序.在UE4的蓝图自带函数中有一个很好用的函数可以完美地解决这些 ...

  3. TextView的一些高级应用(自定义字体、显示多种颜色、添加阴影)

    1.    自定义字体可以使用setTypeface(Typeface)方法来设置文本框内文本的字体,而android的Typeface又使用TTF字体文件来设置字体所以,我们可以在程序中放入TTF字 ...

  4. 充分利用 UE4 中的噪声

    转自:https://www.unrealengine.com/zh-CN/blog/getting-the-most-out-of-noise-in-ue4 UE4 推出基于材质的程序式噪声已经有一 ...

  5. UILable:显示多种颜色的方法

    借用别人封装好的类库,用来显示同一个UILable上的多种颜色的字. 类库可以直接在次博客中下载,下载后别忘留言哦. 类库使用:主要用了CoreText里面的东西,所以在使用类库之前需要引用CoreT ...

  6. 3D游戏开发之在UE4中创建非玩家角色(NPC)

    接着上节我们继续学习,现在我们来创建一些NPC(non-playable characters,非玩家角色).在这个游戏中,当我们靠近NPC时,它们会做出相应的反应. 一 创建C++类 1) 在UE编 ...

  7. UE4中的单映射:TMap容器

    一.TMap<T>是么 TMap<T>是UE4中的一种关联容器,每个键都关联着一个值,形成了单映射关系.因此你可以通过键名来快速查找到值.此外,单映射要求每个键都是唯一的.类似 ...

  8. UE4中动画蒙太奇的合成

    在游戏中的技能施法动作是可以通过软件合成的,笔者在这里介绍一种用UE4合成多个动画的操作. 在UE4中角色的动作可以由多种方式达成,一种是混合空间,例如角色的跑动和跳跃,其中的动作是由状态机控制的,原 ...

  9. UE4中资源加载资源的方式

    在UNITY中,我们加载资源一般是通过Resources.Load(path).即可完成.该方法返回的是Object类型.如果你想要的是材质或者贴图等等,只要价格类型转换的关键字就可以了例如 as M ...

随机推荐

  1. C libraries in Linux

    Copy from a book. There are several C libraries to choose from. The main options are as follows: gli ...

  2. 利用反射--调用一个按钮的Click事件

    最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...

  3. 在CentOS 6上使用 AWStats 分析 httpd 和 Tomcat 日志

    准备工作: Awstats 是由perl语言编写的,所以要首先准备好awstats的运行环境.# yum install –y perl*   Apache 一.首先,要安装apache服务器,并且启 ...

  4. adb command

  5. mongodb之 非正常关闭启动报错处理

    Mongodb如果非正常关闭,直接启动会报错.查看日志文件. 处理: 需要做的是删除mongod.lock和WiredTiger.lock这两个lock文件,然后执行--repair,这里的mongo ...

  6. laravel 事务处理

    //開啟事務 DB::beginTransaction(); try { //賬號密碼同步到後台登錄表 $user = new \App\Models\User; $user->name = $ ...

  7. API - .after

    .after() Insert content, specified by the parameter, after each element in the set of matched elemen ...

  8. cmp命令详解

    Linux cmp命令 Linux cmp命令用于比较两个文件是否有差异.主要用来比较两个二进制文件 当相互比较的两个文件完全一样时,则该指令不会显示任何信息.若发现有所差异,预设会标示出第一个不同之 ...

  9. CentOS7局域网下安装离线Ambari

    1 Ambari介绍.安装与应用案例介绍 1.1 Ambari Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目 ...

  10. TCP加速锐速SS(ServerSpeeder)破解版一键安装

    速(serverspeeder),是一款TCP加速程序,能够增强VPS/服务器连接的稳定性,且有效的提高服务器的带宽利用率,进而提高访问速度.老左经常看到论坛.群里有用户提到锐速这款软件可以提高VPS ...