【瞎写】什么是Effects,以及Effects的食用指南
RT,吧里目前还缺少这样关于Effects的教程。虽然Defisym佬已经写过(https://zhuanlan.zhihu.com/p/258588374)不过对俺这种完全没学过C和HLSL的,光介绍几个接口也写不出来一个标准的Effects。于是乎稍微研究了一会搞出来个这么文章,欢迎学习过C以及HLSL的朋友们勘误。 本文仅作为MMF的effects编写的短平快入门教程,并非专业的C语言或者HLSL(高级着色器语言,在下文介绍)教程。甚至为了理解,本文的大部分语言都相当的不专业(也包括我的水平问题)。本文最后用到的所有资料会一并上传,感谢猫步以及De佬,Lstg群友们的支持。 本文至少要求你拥有高中数学的水平以及对MMF的代码知识的了解,并对计算机语言的掌握没有任何要求。本文主要分为四大部分: 一、什么是Effects。 二、Effects如何使用。 三、Effects如何编写。 四、编写一个简单的模糊Effects。
本帖最后由 数字1528君 于 2022-7-9 13:49 编辑
一、什么是Effects?他能干什么?(简单介绍Effects) 实际上前文所说的Effects准确来说应该叫做shader(着色器)。shader是一种渲染图像的可编辑工具,其主要包括Vertex Shader(顶点着色器)以及Pixel Shader(像素着色器,有时你也会看到另一个名字Fragment Shader片元着色器)。 是不是很无理?都干啥用的? 那我们先抛开这些概念不谈,举几个例子,简单来说,MMF里的Effects工作方式为:
输入像素->用一种“方式”处理->输出像素
其中我们编写的“方式”就是MMF里呈现的Effects。相当于你拍了几张XFX的照片, 最后发B站动态呈现上来的是赫卡提亚, (来自Pixiv,画师未知,侵删)
那么Effects就是修图的过程。 Effects能干什么?他是怎么工作的?举几个例子吧。
上图是MFAI4-4的一个关卡,很容易发现岩浆并非不透明或者半透明,而是发光的状态。这种岩浆可能部分做关经验丰富的朋友已经猜出来了,他使用了“add”特效(Effects)。那add特效的作用是什么? 当我们把岩浆的各个像素扔进这个Effects里时,实际呈现的每个像素都会进行如下运算:
呈现的颜色R:岩浆的颜色R+背景的颜色R呈现的颜色G:岩浆的颜色G+背景的颜色G呈现的颜色 B:岩浆的颜色 B+背景的颜色 B
当然了,颜色不会大于255。(如果你不知道这些是什么,建议在百度上搜素RGB。) 得到的实际颜色大多都很鲜艳,是因为接近255时颜色越来越饱和,肉眼会觉得更加的鲜艳。所以add常用来进行简单的发光特效。
那我们再举几个例子吧。先不讲解原理。(懒了
上图是来源于MFAI的一个关卡。其底部的红光使用了Color Dodge特效(颜色减淡)。
上图是来源于我新作的一个关卡。其模仿GB色彩(GB只有四个灰度)的特效并非是我自己在PS里绘制的,而是使用了我自己写的一个Effects。
Effects的使用得当可以大大提升你关卡的美观程度,在部分时候也可以替代代码进行一些画面上的操作。
第一部分完 本帖最后由 数字1528君 于 2022-7-9 14:00 编辑
我去论坛这个word编辑,吐了
二、如何使用一个Effects本节将会教你使用MMF中的Effects作用于你的图层或是物品上。如果你已经知道如何操作,那么请往下翻到第三节。1、如何将一个Effects作用到一个Object上
首先选中一个Object(我这里以Active为例子,感谢nmnmoooh- -)
在 Properties(中文版翻译为属性)中选择Effect一栏,点击Edit。
选择一个Effect即可。右边选项的解释:OK 即 字面意思Cancel 即 关闭Help 测试发现没有用处。估计是遗留下来的物件。Refresh 刷新。如果你导入/编辑了一个的Effects可以用这个按钮刷新而不用重启MMF。Editor 可以粗略查看fx文件(用于记录我们写的Effects)。Store 进入MMF的官网。
中间的几个解释:Hw 这里会显示插件是DX8,DX9还是DX11。注意高低版本无法兼容。PS 这里会出现Pixel Shader的版本。
选中OK后,我们发现左边的Effects栏变成了我们选中的Effects,而原先的Active也变了。红框是Effects编写时所给予的参数,你可以改变这些参数来达到你想要的效果。
图像最终的效果如上。
2、如何将一个Effects作用到一个layer上操作其实大同小异。首先选择一个Layer。
如红框所示,点击想要作用于的图层。
在Properties中选择Effects。之后的操作和上文都一样了。
3、在代码层面中改变object的参数情景:我这有一个glitch特效(电视机特效),但是是静止的。已知不同的随机参数可以让他以不同的方式坏掉(?)。我要如何一直改变这个参数让他动起来?
首先按照前文给这个图层选择一个Glitch特效。
之后创建一个Layer Object,如图所示:
创建一个Behavior,Action中选择
其中Layers by Index代表用序号选中图层,而By Name则是用名字选择图层。建议使用By Name,这里使用By index。选择Set effect parameter。提示选择Parameter Name时,请写括号中的名字。(这里括号内外的名称相同,不过部分Effects很傻贲没有这么干)之后提示输入parameter,输入变量即可。最后提示一点:显示界面(Frame Editor)是DX9的界面。如果选择了DX11才会生效的Effects,那么不会显示在Frame Editor中。放心,游戏中是正常的。
感谢您看完第二节。接下来我们要编写effects了,可能会稍难。加油!
三、如何编写一个Effects有些时候可能会发现:自己已经安装的Effects并不够用。此时我们需要自己寻找资源。如果在网络上没有发现资源的话,我们也只能自己去写一个Effects了。MMF中的Effects都是由HLSL这种语言写出来的。HLSL,中文称作高级着色器语言,是微软开发的一个神必语言。(,不过在这里我不会教HLSL怎么写,因为我也不会((接下来我将以GBstyle为例子,介绍MMF中Effects的编写方式。MMF中的Effects分为两个部分:xml部分和fx部分。我们先看xml部分。打开GBstyle.xml。
这里使用Visual Studio Code打开。当然你用Notepad++甚至直接使用Notepad编辑都可以。本质上这堆玩意就是一坨文字。
咕了,等我慢慢更新 先占坑
比较好,但我不会( 数字1528君 发表于 2022-7-9 13:57
三、如何编写一个Effects有些时候可能会发现:自己已经安装的Effects并不够用。此时我们需要自己寻找资源。 ...
这个教学好(
以前没搞过特效
之后说不定我也可以试试w 之前一直觉得effect可以应用编译到安卓里面,直到亲身尝试制作,没办法套用 marikey 发表于 2023-6-11 11:50
之前一直觉得effect可以应用编译到安卓里面,直到亲身尝试制作,没办法套用 ...
CTF 的 effect 是 d3d 的,而 Android 导出只有 OpenGL,很显然 CTF 没有做 hlsl→glsl 的转换,何况这也并不平凡。
页:
[1]