Unreal Engine 4 —— Post Process Shader练手(HLSL)

Unreal Engine 4 —— Post Process Shader练手(HLSL)

原创  2016年04月12日 14:27:16
  • 2357

UE4的材质大多数都是通过节点连线的,使用节点连线效率更高,对艺术家也更友好。但是用久了之后也会怀念当年写HLSL着色器代码的青葱岁月(注:这篇博客原本写于2015年10月,那段青葱岁月应该指的是倒腾FX composer的时光)。万幸UE4内置了Custom节点,可以编译着色器代码,所以不禁手痒写了几个后期特效,写篇博客记录一下吧!

Edge Detection

先有必要解释一下一些函数和参数:SceneTextureLookup函数指的是从总共的SceneTexture中选取对应ID的Texture,并且通过纹理坐标进行采样。参数分别为纹理坐标,Texture的ID和是否有Filter。LMN指的是进行grayscale操作中各颜色通道组成的向量,方便直接点乘。

材质如下:

Edge Detection

节点代码如下:

int tIndex = 14; 
float t1 = dot(SceneTextureLookup (UV + float2(-1.0f / sW, -1.0f / sH),tIndex, false), LMN ); 
float t2 = dot(SceneTextureLookup (UV + float2(0 , - 1.0f / sH),tIndex, false), LMN ); 
float t3 = dot(SceneTextureLookup (UV + float2(1.0f / sW, -1.0f / sH),tIndex, false), LMN );
float m1 = dot(SceneTextureLookup (UV + float2(-1.0f / sW, 0),tIndex ,false), LMN); 
float b1 = dot(SceneTextureLookup (UV + float2(-1.0f / sW, 1.0f / sH),tIndex, false), LMN );
float b2 = dot(SceneTextureLookup (UV + float2(0 , 1.0f / sH),tIndex, false), LMN ); 
float b3 = dot(SceneTextureLookup (UV + float2(1.0f / sW, 1.0f / sH),tIndex, false), LMN ); 
float tot1 = t3 + b3 + ( 2 * m3) - t1 - (2 * m1 ) - b1; float tot2 = b1 + (2 * b2 ) + b3 - t1 - ( 2 * t2) - t3; 
float4 col; 
if ((( tot1 * tot1 ) + (tot2 * tot2 )) > 0.05 ) 
{
    col = float4 (0, 0,0 ,1); 
} 
else 
{
    col = float4 (1, 1,1 ,1); 
}
return col;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

其实原理很简单,就是DIP中的滤波……

效果如下: 
Edge_Detection_1

原场景如下: 
Original_Scene

说实话,其实我挺喜欢这种风格……

浮雕风格

浮雕特效的shader其实特别简单,是一个只关于左上角和右下角的Filter。代码如下:

int tIndex = 14; 
float4 s22 = SceneTextureLookup (UV, tIndex,false); 
float4 s11 = SceneTextureLookup (UV + float2(-1.0f / sW, -1.0f / sH),tIndex, false); 
float4 s33 = SceneTextureLookup (UV + float2(1.0f / sW, 1.0f / sH),tIndex, false); 
s11.rgb = ( s11.r + s11. g + s11.b ); 
s22.rgb = ( s22.r + s22. g + s22.b ) * -0.5; 
s33.rgb = ( s22.r + s22. g + s22.b ) * 0.2 ; 
return ( s11 + s22 + s33);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

效果如下: 
Fudiao

原来场景: 
OriginalScene2

ASCII Art

代码参考自shadertoy,说实话我也没搞懂这是什么鬼……

代码如下:

int tIndex = 14;
float2 uv  = UV .xy * ScreenResolution.xy ;
float3 col = SceneTextureLookup( floor(uv /8.0)* 8.0/ScreenResolution .xy, tIndex,false);
float gray = (col.r + col. b)/2.0;
float n =   65536.0;             // .c
if ( gray > 0.2) n = 65600.0 ;    // :
if ( gray > 0.3) n = 332772.0 ;   // *
if ( gray > 0.4) n = 15255086.0 ; // o
if ( gray > 0.5) n = 23385164.0 ; // &
if ( gray > 0.6) n = 15252014.0 ; // 8
if ( gray > 0.7) n = 13199452.0 ; // @
if ( gray > 0.8) n = 11512810.0 ; // #
float2 p = fmod (uv/ 4.0, 2.0) - 1.0 ;
p = floor (p* float2(4.0 , - 4.0) + 2.5 );
if ( clamp(p .x, 0.0 , 4.0 ) == p.x && clamp (p. y, 0.0, 4.0 ) == p.y) {
float c = fmod(n /exp2( p.x + 5.0*p .y), 2.0 );
if ( int(c ) == 1 ) col = col*1 ;
else col = col*0 ;
}
else col = col*0 ;
return float4(col, 1.0);    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

效果如下: 
Ascii Art

有那么点酷炫啊……

——全文完——

 

UE4 shader编程 基础学习笔记 --- 熟悉各个节点 Texture Sample:用所需要的纹理覆盖到Mesh上,展示效果,Mesh上存在漫反射 + 高光 + 环境变量的和制造出了左上角的纹理光照效果。该节点可以调节RGBA四个参数, 由于Parameter是参数类型,所以可以在外部进行修改。同样的Param,连在Base Color和次表面的效果,明显次表面的效果的饱和度会高很多。金属度越小,越偏向于塑料,越高越有金属质感,最高为1,比1大的效果和1效果是一样的。用于草地被风吹动的效果,将草的顶点进行一个偏移。第三个参数为高光度,高光反射强度的大小。 阅读详情

相关推荐

Cesium与Unreal引擎结合:动态水面效果优化与自定义波浪实现

在数字孪生与虚拟仿真领域,实时渲染技术是构建沉浸式三维场景的核心。其原理在于通过GPU并行计算,高效处理光照、材质与几何数据,最终生成逼真图像。这项技术的价值在于能够将大规模地理空间数据与高保真视觉效果无缝融合,极大地提升了城市规划、仿真训练等应用的场景真实感与交互性。本文聚焦于如何利用Gerstner波模型与GPU计算优化,在Cesium for Unreal构建的宏大地理场景中,实现一套高性能、高逼真度且能与真实水体边界完美契合的动态水面系统,解决了坐标匹配、性能开销与视觉效果融合等关键挑战。

weixin_30340819的博客 321

Unreal Engine 4 使用HLSL自定义着色器(Custom Shaders)教程(上)

原文|《Unreal Engine 4 Custom Shaders Tutorial》 作者|Tommy Tran Apr 2 2018 | 翻译 开发游戏的老王 阅读时长|25分钟 内容难度|入门级 在本文中你将学会使用HLSL创建自定义着色器

开发游戏的老王 1万+

Unity/Unreal引擎相机投影深度解析:透视与正交实战调试指南

在计算机图形学中,相机投影是将三维场景映射到二维屏幕的核心技术,决定了视觉呈现的基础规则。其原理基于视锥体(Frustum)的几何变换,通过投影矩阵实现空间坐标的转换。透视投影模拟人眼“近大远小”的视觉效果,而正交投影则保持物体尺寸与距离无关,两者在游戏开发、UI设计和可视化应用中各有不可替代的技术价值。理解FOV(视场角)、Aspect Ratio(宽高比)和裁剪面等关键参数,能帮助开发者精准控制画面构图、优化渲染性能并解决常见的视觉失真问题。本文聚焦于Unity和Unreal Engine双引擎环境,通

chuannaoxuan4674的博客 388

UE5 描边、径向模糊

UE5 描边、径向模糊

伪善者的博客 3435

UE5 NiagaraUIRenderer插件:在UMG中高效渲染粒子特效的完整指南

在游戏开发中,粒子系统是创造动态视觉反馈的核心技术,它通过模拟大量微小元素(如火花、烟雾、光点)的运动与变化,极大地增强了场景的表现力与沉浸感。其原理通常基于物理模拟或程序化动画,控制每个粒子的生命周期、位置、速度、颜色等属性。从技术价值看,一套高效的粒子渲染方案能显著提升游戏的视觉品质与交互体验,尤其在UI界面中,实时的粒子反馈能让操作更具响应感和吸引力。然而,传统方法在UI层集成粒子效果时,常面临性能开销大、延迟高或灵活性不足的挑战。针对这一痛点,NiagaraUIRenderer插件提供了一种创新解决

weixin_30500473的博客 307

UE VR双目立体天空盒:原理、实现与性能优化实战

在计算机图形学中,天空盒是构建虚拟环境背景的核心技术,它通过包裹场景的球体或立方体贴图来模拟天空和远景。其原理是利用环境映射技术,为摄像机提供全方位的背景图像,从而营造沉浸感。这项技术的核心价值在于,它能以极低的几何开销实现宏大的场景表现,是平衡视觉质量与渲染性能的关键手段。在VR、游戏开发、建筑可视化等对沉浸感要求极高的应用场景中,天空盒的质量直接影响用户体验。然而,传统2D天空盒在VR中因缺乏双目视差而显得扁平,破坏了立体沉浸感。为此,双目立体全景天空盒技术应运而生,它通过为左右眼分别提供具有视差的全景

sunjhgq的专栏 422

Unity、Unreal、Godot三大游戏引擎核心技术对比与选型实战

游戏引擎是现代游戏开发的核心框架,它封装了渲染、物理、音频等底层系统,为开发者提供高效的内容创作工具链。其核心原理在于通过抽象硬件接口,管理资源生命周期,并执行游戏循环,驱动逻辑与画面的更新。引擎的技术价值在于大幅降低了交互式实时图形应用的开发门槛,使团队能聚焦于创意实现而非底层细节。在应用场景上,从移动端休闲游戏到3A级主机大作,再到影视虚拟制片和工业仿真,引擎技术已渗透至数字创作的各个领域。本文聚焦于Unity、Unreal Engine和Godot三大主流引擎,通过对比分析其渲染管线、物理模拟、脚本系

weixin_30700099的博客 338

UE4数字孪生中Cesium与UDS光照冲突的5种解决方案

在Unreal Engine 4(UE4)中进行三维可视化与数字孪生项目开发时,动态天气系统与地理空间光照的集成是一个常见的技术挑战。其核心原理在于渲染管线中,多个系统对后处理体积(Post Process Volume)和光源(如Directional Light)控制权的争夺,尤其是曝光(Exposure)参数的写入冲突,会导致画面闪烁、颜色失真。解决此类光照冲突对于保障项目视觉效果的统一性与稳定性具有重要价值,广泛应用于智慧城市、模拟训练等需要高真实感环境渲染的场景。本文聚焦于UE4环境下,当使用Ce

weixin_34074740的博客 559

UE5 使用 custom stencil + custom depth + world normal + material id map 制作描边效果

思路:custom stencil 处理外描边custom depth处理内描边WorldNormal处理两个stencil的白色在一起时交接处不描边的问题 + material id map做衣服皮肤头发区域描边边界打开 [Material.cpp]在里面增加MSM_DefaultLit让材质编辑器在选择shadingmodels为DefaultLit时,开启CustomData0为可用pin。

qqQQqsadfj的博客 244

UE4法线接缝Bug:不修改引擎源码的完整修复方案

在计算机图形学中,法线是决定三维模型表面光照效果的关键向量数据。其连续性直接影响着色质量,当顶点数据在光栅化插值过程中出现不连续时,就会产生视觉瑕疵,即法线接缝。这一问题的技术价值在于,它揭示了渲染管线中顶点属性处理、切线空间构建与光照计算之间的内在联系。解决法线接缝对于保障游戏及实时渲染应用的视觉保真度至关重要,尤其在复杂模型、大规模场景及程序化生成内容等应用场景中。本文聚焦于UE4引擎,针对因UV拆分和切线空间计算不一致导致的法线接缝问题,提供了一套无需修改C++引擎源码的实践方案。通过优化模型数据预处

weixin_33749242的博客 443

CARLA地图导入替代方案:RoadRunner插件与手动流程深度解析

CARLA模拟器中的地图导入是自动驾驶仿真落地的关键环节,其本质是OpenDRIVE标准与Unreal Engine物理/渲染/语义系统的多维对齐。理解地图导入原理,需掌握OpenDRIVE语义解析、UE碰撞体配置、材质光照响应及CARLA语义ID映射机制等核心技术。该过程直接影响车辆动力学仿真精度、传感器数据真实性与场景复现可信度。实践中常见黑屏、穿模、语义ID全为0等问题,根源在于.xodr结构校验缺失、FBX导入参数误设、路径命名不规范及Linux/Windows平台底层差异(如Shader编译目标、

congmi8078的博客 587

UE4后期处理材质实现全局描边:原理、实现与优化指南

在实时渲染与游戏开发中,边缘检测是一项基础且关键的图像处理技术,它通过识别像素在深度、法线或颜色上的突变来勾勒物体轮廓。其核心原理通常基于Sobel等算子计算图像梯度,从而在屏幕空间高效定位边缘。这项技术的工程价值在于,它能以可控的性能开销,为场景添加风格化轮廓或实现精准的对象高亮,极大地增强了视觉表现力与交互引导。在虚幻引擎4(UE4)中,利用后期处理材质结合场景深度与法线缓冲进行边缘检测,是实现全局、风格化描边效果的经典方案。该方案无需修改原始资产,通过参数即可动态调整描边颜色、宽度与强度,灵活应用于卡

weixin_33857679的博客 451

UE游戏性能优化全流程:从CPU/GPU瓶颈定位到移动/PC平台实战策略

在游戏开发中,性能优化是确保流畅体验的核心工程实践。其原理在于系统性地识别并消除硬件瓶颈,涉及CPU逻辑处理、GPU渲染管线、内存管理与资源流送等多个层面。优化的技术价值在于,它能让应用在有限硬件资源下实现更佳的画面表现与运行稳定性,直接提升用户留存与产品口碑。典型的应用场景包括开放世界游戏的视距管理、移动端的高效渲染,以及多平台适配的性能调优。本文聚焦于虚幻引擎(UE)项目,深入探讨如何利用Unreal Insights、GPU Profiler等工具链进行深度性能剖析,并结合材质优化、Draw Call

weixin_33834137的博客 423

UE4卡通渲染:不修改引擎源码实现自定义ShadingModel的工程化方案

在计算机图形学中,着色模型定义了物体表面与光线交互的计算方式,是渲染管线的核心组件。其原理是通过一系列数学函数模拟光照效果,如漫反射、高光和环境光遮蔽。自定义着色模型的技术价值在于能够突破物理渲染的限制,实现特定的艺术风格,例如非真实感渲染中的卡通着色。在游戏开发、动画制作等应用场景中,自定义着色能力对于塑造独特的视觉风格至关重要。本文聚焦于UE4引擎,探讨如何在不修改引擎源码的前提下,通过材质函数库和渲染管线扩展插件,将自定义的卡通着色逻辑优雅地注入标准流程,有效解决了传统“连连看”式修改带来的维护难题,

weixin_34152820的博客 428

HLSL滤镜效果

使用高级着色语言(HLSL)+RENDERMONKEY实现类似photoshop中的滤镜效果。包括黑白化,模糊,马赛克,描边,HDR/blow,水彩等效果。并介绍了Rendermonkey和HLSL的一些使用基础。

WKWebView 白屏问题,WKWebView request body丢失问题

1,WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会...

weixin_37543822的博客 734

UE5高级材质核心:材质函数与参数化Master Material实战解析

在虚幻引擎5的渲染体系中,材质系统是连接美术表现与底层渲染逻辑的关键枢纽。许多开发者从入门到进阶的瓶颈,往往不是对单个节点的理解不够,而是缺乏将复杂逻辑抽象为可复用单元的能力。材质函数(Material Function)正是应对这一挑战的核心工具,它允许开发者将一组表达式封装为带输入输出接口的逻辑块,从而实现跨材质的复用与工程化组织。而参数化Master Material则进一步将材质逻辑与数据分离,通过材质实例(Material Instance)和全局参数集实现灵活调控,大幅降低维护成本。在实际项目中

aoe41606的博客 384

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 708
上一篇: BundleFusion 解析
下一篇: vc6和vc2017在std写法上的区别
hypercube2
博客等级 码龄18年 23粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值