(原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(3)修正
@author: 白袍小道
转载说明原处,爱护劳动
插件同步在GITHUB: DaoZhang_XDZ
说明
1、本篇是接着-----(原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(2)
2、通过上一篇小的已经知道MaterialExpression的基础过程。下面进入到加入自定义
MaterialExpression的案例(为了方便这里就直接用ABS,Gif/RAWTexture为两个案例,GIF放到单独)
3、让自定义的MaterialExpression在MaterialEditor中的GraphyEditor中包含和使用。
效果

案例过程
一、基础
先来看一个关键地方
MaterialExpressionClasses::InitMaterialExpressionClasses()
(在这里会讲所有的UCLASS进行过滤获取MaterialExpression,并按照规则放入不同

(附图,UCLASS的初始管理部分)

二、书写相关代码
下面代码就是ABS的迁移而已,有需要可以自己按规则书写
、UDZMatExpressionAbs
a\ 继承于UMaterialExpression
b\ 三个函数:构造,Compile,Caption
Construct
|
struct FConstructorStatics { FText NAME_Math; FConstructorStatics() : NAME_Math(LOCTEXT("Math", "Math")) { } }; static FConstructorStatics ConstructorStatics; #if WITH_EDITORONLY_DATA MenuCategories.Add(ConstructorStatics.NAME_Math); #endif |
Compile
关于Compile(案例中直接用了原来ABS的代码)
留心的话会知道在前一篇提到了FHLSLMaterialTranslator,其中FHLSLMaterialTranslator也是继承了MaterialCompile.完成实现。(当然也可以重新书写一个MaterialCompile)
FHLSLMaterialTranslator::ABS

|
#if WITH_EDITOR int32 UDZMatExpressionAbs::Compile(FMaterialCompiler * Compiler, int32 OutputIndex) { int32 Result = INDEX_NONE; if (!Input.GetTracedInput().Expression) { // an input expression must exist Result = Compiler->Errorf(TEXT("Missing DZAbs input")); } else { // evaluate the input expression first and use that as // the parameter for the Abs expression // Compiler中已经实现ABS部分,一般基础都是包含了的,你也可以自由组合 // 如果新完全新加(跳入shader-HLSL篇) Result = Compiler->Abs(Input.Compile(Compiler)); } return Result; } #endif |
|
void UDZMatExpressionAbs::GetCaption(TArray<FString>& OutCaptions) const { OutCaptions.Add(TEXT("DZ_Abs")); } |
(原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(3)修正的更多相关文章
- (原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(3)
@author: 白袍小道 转载说明原处 插件同步在GITHUB: DaoZhang_XDZ 说明 1.本篇是接着-----(原) MaterialEditor部- UmateriaE ...
- (原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(1)
@author: 白袍小道 转载说明原处 插件同步在GITHUB: DaoZhang_XDZ 最后YY需求(手滑) 1.在理清楚基础套路和细节后,自定义纹理资源,并加入到现有UE材质系统 2. ...
- (原) MaterialEditor部- UmateriaEditor中 Node编译过程和使用(2)
@白袍小道 转载说明原处 插件同步在GITHUB: DaoZhang_XDZ 需求: 1.梳理FexpressionInput和Output的编译和链接(套路和逻辑目的) 2.如何做到节点编译 ...
- (原) MatEditor部- UmateriaEditor中Texture使用过程(1)
@author: 白袍小道 转载说明原处 插件同步在GITHUB: DaoZhang_XDZ 最后YY需求(手滑)(开黑前弄下,充数,见谅) 1.在理清楚基础套路和细节后,自定义纹理资源,并加 ...
- 【Android】源码external/目录中在编译过程中生成的文件列表
=> external/eyes-free: accessibilityvalidator.jar (host,share) => external/mesa3d: libMesa ...
- 第48章 MDK的编译过程及文件类型全解—零死角玩转STM32-F429系列
第48章 MDK的编译过程及文件类型全解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...
- 第48章 MDK的编译过程及文件类型全解
Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...
- MDK 的编译过程及文件类型全解
MDK 的编译过程及文件类型全解 ------(在arm9的开发中,这些东西都是我们自己搞定的,但是在windows上,IDE帮我们做好了,了解这些对深入开发是很有帮助的,在有arm9开发的基础上,下 ...
- [译]C++, Java和C#的编译过程解析
1.1.1 摘要 我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,这样计算机才能执行高级语言编写的程序,在接下来的博文中,我们将介绍非托管和托管语音的编 ...
随机推荐
- 关于从Oracle数据库中删除表数据
1,删除表 drop 1.1 执行drop table table_name 语句 被 drop后的表被放在用户回收站(user_recyclebin)里,而没有被直接删除掉,回收站里的表可以被恢复 ...
- Spring知识点小结(四)
一.JdbcTemplate(jdbc模版--抽取的工具) web阶段DBUtils: QueryRunner runner = new QueryRunner(dataSource); ...
- 前端的字符串时间如何自动转换为后端Java的Date属性,介绍springMVC中如何解决时间转换问题
平常在开发过程中,前端选择时间一般都要使用时间选择插件,但是这种插件选出来的时间都是字符串类型,我们该怎么转换为后端的Date呢?/? 前端效果如下(笔者用的是layDate5.0插件): 修改前的后 ...
- Python入门 —— 06语音识别
Python 语音 实现语音操控的原理 语音操控分为语音识别和语音朗读两部分 我们使用speech模块实现语音模块(python 2.7) SAPI是微软Speech API , 是微软公司推出的语音 ...
- vue中将html字符串转换成html后的一些问题
今天整理之前做vue项目时遇到的一些问题,发现了当时遇到的一个很小但是又会引出很多问题的一个问题(总之就是很有意思,听我慢慢给你到来),这个问题就是当时处理后端数据时,如何将后端返回来的字符串转换成h ...
- 使用Screen管理远程会话
在本地开发时,经常需要使用远程连接到Linux服务器,一开始我自己都是有几个远程就开几个SSH窗口,这种方法很原始很直接,但每次都受够了密码输入,即使用了SSH免密码登录,也会觉得每次输入SSH的 ...
- asp.net在一般处理程序里面操作Session
1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState ...
- 第七篇:gcc和arm-linux-gcc常用选项
目录 一.gcc和arm-linux-gcc的常用选项 二.从.c文件到可执行文件过程 一.gcc和arm-linux-gcc的常用选项 常用选型 -v 查看gcc编译器的版本,显示gcc执行时的详细 ...
- java instanceof 的理解
简单来说,java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法 ...
- java语言描述 猴子吃桃问题(递归和循环写法)
//题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个//第二天早上又将剩下的桃子吃掉一半,又多吃了一个//以后每天早上都吃了前一天剩下 的一半零一个.到第10天早上想再 ...