数字1528君 发表于 2022-7-9 13:29:26

【瞎写】什么是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:31:01

本帖最后由 数字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 13:50:07

本帖最后由 数字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了,可能会稍难。加油!

数字1528君 发表于 2022-7-9 13:57:56

三、如何编写一个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:59:13

先占坑

冻结的双重射手 发表于 2022-7-9 14:25:49

比较好,但我不会(

无视我233 发表于 2022-7-9 15:51:51

数字1528君 发表于 2022-7-9 13:57
三、如何编写一个Effects有些时候可能会发现:自己已经安装的Effects并不够用。此时我们需要自己寻找资源。 ...

这个教学好(
以前没搞过特效
之后说不定我也可以试试w

marikey 发表于 2023-6-11 11:50:01

之前一直觉得effect可以应用编译到安卓里面,直到亲身尝试制作,没办法套用

dasasdhba 发表于 2023-6-11 11:51:41

marikey 发表于 2023-6-11 11:50
之前一直觉得effect可以应用编译到安卓里面,直到亲身尝试制作,没办法套用 ...

CTF 的 effect 是 d3d 的,而 Android 导出只有 OpenGL,很显然 CTF 没有做 hlsl→glsl 的转换,何况这也并不平凡。
页: [1]
查看完整版本: 【瞎写】什么是Effects,以及Effects的食用指南