有关UnrealEngine材质编辑器中的Custom节点的一些小贴士

PS:本文写于2017.2.1日,使用版本为4.13。

一、前言
在Unreal中材质编辑器提供了Custom节点,作为HLSL代码编写接口。以此可以实现更多的效果。
虽然使用Custom节点会有若干限制,但是相对的比较方便,适合快速开发。如果遇到限制而导致无法使用Custom解决,此时就需要使用虚幻的RHI(硬件渲染接口)配合USF文件(虚幻着色器文件)来实现,这些我以后可能会写一篇文章来解析吧,如果着急可以参考Wiki上的HLSL插件。(竟然还可以使用计算着色器感觉好屌),目前类似Unity的材质代码编辑器的提议已经上了路线图,但是啥时候实现还遥遥无期。

目前为止我所知道的限制有一下几点:
1、无法#include XXX.usf
2、无法主动声明一个函数
3、按照官方文档所说这样写对性能又一定影响,例如把Time节点写入影响就比较大了。
第一二点就导致了Custom节点能做的事还是相当有限的。

二、官方文档没有说的事
Custom的使用方法请看官方文档:https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/ExpressionReference/Custom/index.html#warnings
下面我说一些文档没说的:
1、在材质编辑器中点击Window-》HLSLCode,就可以看到对应的材质代码。你会发现写在Custom节点里的代码出现在HLSLCode中。
其实这里的代码都是从引擎中的Engine\Shaders目录中的MaterialTemplate.usf文件复制过来的。而我们写在Custom节点里的代码也就相当写在这个材质里面。你可以把代码复制到文本编辑器中查看,可以使用Notepad++之类的有着色的编辑查看。
2、只有把Custom节点连入材质编辑器,这段代码才会被写入这个材质中。
3、Custom节点里的代码,会写进一个对应的 CustomExpression函数中,你可以在Custom节点中通过调用对应的CustomExpression函数来实现迭代的功能。
4、材质编辑器中的节点在usf中都有对应的函数,你可以调用对应函数的方式来起到代替节点的功能。但如果是在#if宏后面的函数是不能直接调用的。比如ScreenTexture节点对应的SceneTextureLookup函数,你必须将一个ScreenTexture节点连入材质,才能在Custom节点中调用SceneTextureLookup函数,即使你一点都不用他。

时间: 2024-11-11 03:09:58

有关UnrealEngine材质编辑器中的Custom节点的一些小贴士的相关文章

在UnrealEngine中用Custom节点实现描边效果

在<Real Time Rendering, third edition>一书中,作者把描边算法分成了5种类型.1.基于观察角度与表面法线的轮廓渲染.缺点很明显.2.过程式几何轮廓渲染.即先渲染背面,通过顶点压平等手段,渲染轮廓线,之后渲染正面.优点:快速有效,适合大多数模型,缺点:不合适和立方体之类的平整模型.3.基于图像处理的轮廓线渲染.通过边缘监测来判断轮廓.4.基于轮廓检测的轮廓线渲染.同时监测相邻的2个面法线值得正负是否相反.5.以上方法结合.除此之外还有:6.沿法线方向放大模型(v

在UnrealEngine中用Custom节点实现毛玻璃的效果

本人在论坛上找到了一篇实现毛玻璃效果的文章:https://forums.unrealengine.com/showthread.php?70143-So-Blurred-glass-material-is-impossible-in-Unreal-Engine-4&highlight=SceneTextureLookup原理是通过SceneColor获得translucent物体后面的场景渲染结果,之后根据后面的场景距离进行模糊.相关参数中还增加了TempAAParamer来实现随机值.以及添

从UEditor内容中获取指定节点值(转)

今天吐槽一下百度的富文本编辑器UEditor,这种富文本编辑器极大地方便我们上传文件,开发人员无需编写任何上传代码,只需配置几个路径即可.但高度集成的东西有时也显得笨重,灵活度不高.比如:编辑器中我既要插入文字也要插入图片与视频,编辑器中的所有内容均可以HTML代码存到数据表中,这样很方便读取,但我需要单独提取图片与视频的路径地址存到另一张表.此时,就显得极不方便,无法在提交内容的时候顺道获取图片与视频的路径. 解决思路:获取编辑器中的内容,转化为uNode节点,再获取指定Node节点进行遍历,

MySQL中双NDBD节点Cluster快速配置

是MySQL适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.在MyQL 5.0及以上的二进制版本中.以及与最新的Linux版本兼容的RPM中提供了该存储引擎.(注意,要想获得MySQL Cluster 的功能,必须安装 mysql-server 和 mysql-max RPM).目前能够运行MySQL Cluster 的操作系统有Linux.Mac OS X和Solaris(一些用户通报成功地在FreeB

[译]如何在Unity编辑器中添加你自己的工具

在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作出的任何动作,这些全部都是用编辑器脚本来实现的. 这篇教程假设你已经熟悉Unity的基本工作流程.如果你知道如何在编辑器中创建物体.预设.场景并且知道如何移动它们,知道如何添加组件,那么你可以开始本教程的学习了. 最终结果预览 让我们看一下我们做出的最终结果是什么样子: 如你所见,我们会创建一个编辑

C++中的链表节点用模板类和用普通类来实现的区别

C++中的链表节点通常情况下类型都是一致的.因此我们可以用模板来实现. #include <iostream> using namespace std; template<typename Type>//定义一个模板类必须有的声明 class LinkNode //表示链表节点的类 { public: LinkNode() :m_pnext(nullptr){}//构造函数,在函数体内实现的相当于默认在前面加了inline关键字修饰 LinkNode(Type item, Link

在Unity3d编辑器中加入菜单以及菜单项

在引用UZGUI插件时,u3d编辑器的菜单条发生了变化,新增了菜单和菜单项,于是乎自己也像尝试一下,看了EZGUI的About_EZ_GUI脚本文件后,结果大出我所料,原来SO EASY! 1 using UnityEngine; 2 using UnityEditor; 3 4 public class Example { 5 6 [MenuItem("new Menu/new/new new/new item")] 7 static void showDialog() 8 { 9

ckeditor编辑器中去除p标签

ckeditor中默认添加p标签.去掉<p>标签的方法在ckeditor文件下config.js中加: config.shiftEnterMode = CKEDITOR.ENTER_P; 如果你想在ckeditor编辑的时候把回车换成<br/>标签,加: config.enterMode = CKEDITOR.ENTER_BR; 如果你想把编辑器设置为源码模式,加: config.startupMode = 'source'; ckeditor编辑器中去除p标签,布布扣,bubuk

vi和vim编辑器中上下左右变成了ABCD

[问题] 一次在使用普通用户在redhat中使用vi和vim编辑器时,发现在vi和vim编辑器中:在命令行模式下能够正常使用上下左右键,但是在非命令行模式下不能正常使用上下左右方向键 [网上解决办法] 1)在/etc/vim/vimrc 中加入以下内容: set nocompatible  //支持方向键 set backspace=2   //支持backsapce前删键 2)在vi和vim的命令行模式下输入:set nocompatible [最后没办法的办法(不是最好)] 由于当前是普通用