查看: 3407|回复: 8

[教程] 【瞎写】什么是Effects,以及Effects的食用指南

[复制链接]

244

主题

1409

回帖

5

精华

活跃锤龟

只是普通的音mader而已

经验
8642
硬币
1012 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第十届MW杯冠军第十三届MW杯亚军PK!MF2 冠军PK!MF6 亚军综合发挥奖最佳人气奖人气之王人气之王欢迎光临秘密合战!他山之石

发表于 2022-7-9 13:29:26 | 显示全部楼层 |阅读模式
    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。


遵循一切喝了之力的指引!!!

244

主题

1409

回帖

5

精华

活跃锤龟

只是普通的音mader而已

经验
8642
硬币
1012 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第十届MW杯冠军第十三届MW杯亚军PK!MF2 冠军PK!MF6 亚军综合发挥奖最佳人气奖人气之王人气之王欢迎光临秘密合战!他山之石

 楼主| 发表于 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的照片,
xfx证件照((1).png
    最后发B站动态呈现上来的是赫卡提亚,
ac70a170113738085e24c0f730bbc4ca.jpg
    (来自Pixiv,画师未知,侵删)

    那么Effects就是修图的过程。
A (0-00-00-00)_1.png
    Effects能干什么?他是怎么工作的?举几个例子吧。


QQ截图20220709115459.png
    上图是MFAI4-4的一个关卡,很容易发现岩浆并非不透明或者半透明,而是发光的状态。这种岩浆可能部分做关经验丰富的朋友已经猜出来了,他使用了“add”特效(Effects)。那add特效的作用是什么?
    当我们把岩浆的各个像素扔进这个Effects里时,实际呈现的每个像素都会进行如下运算:

呈现的颜色R:岩浆的颜色R+背景的颜色R
呈现的颜色G:岩浆的颜色G+背景的颜色G
呈现的颜色 B:岩浆的颜色 B+背景的颜色 B

    当然了,颜色不会大于255。(如果你不知道这些是什么,建议在百度上搜素RGB。)
    得到的实际颜色大多都很鲜艳,是因为接近255时颜色越来越饱和,肉眼会觉得更加的鲜艳。所以add常用来进行简单的发光特效。

    那我们再举几个例子吧。先不讲解原理。(懒了


QQ截图20220709120628.png
    上图是来源于MFAI的一个关卡。其底部的红光使用了Color Dodge特效(颜色减淡)。


QQ截图20220709120716.png
    上图是来源于我新作的一个关卡。其模仿GB色彩(GB只有四个灰度)的特效并非是我自己在PS里绘制的,而是使用了我自己写的一个Effects。

    Effects的使用得当可以大大提升你关卡的美观程度,在部分时候也可以替代代码进行一些画面上的操作。


    第一部分完

遵循一切喝了之力的指引!!!

244

主题

1409

回帖

5

精华

活跃锤龟

只是普通的音mader而已

经验
8642
硬币
1012 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第十届MW杯冠军第十三届MW杯亚军PK!MF2 冠军PK!MF6 亚军综合发挥奖最佳人气奖人气之王人气之王欢迎光临秘密合战!他山之石

 楼主| 发表于 2022-7-9 13:50:07 | 显示全部楼层
本帖最后由 数字1528君 于 2022-7-9 14:00 编辑

我去论坛这个word编辑,吐了

二、如何使用一个Effects
本节将会教你使用MMF中的Effects作用于你的图层或是物品上。如果你已经知道如何操作,那么请往下翻到第三节。
1、如何将一个Effects作用到一个Object上

首先选中一个Object(我这里以Active为例子,感谢nmnmoooh- -)
QQ截图20220709122021.png



在 Properties(中文版翻译为属性)中选择Effect一栏,点击Edit。
QQ截图20220709122036.png



选择一个Effect即可。右边选项的解释:
QQ截图20220709121932.png
OK 即 字面意思
Cancel 即 关闭
Help 测试发现没有用处。估计是遗留下来的物件。
Refresh 刷新。如果你导入/编辑了一个的Effects可以用这个按钮刷新而不用重启MMF。
Editor 可以粗略查看fx文件(用于记录我们写的Effects)。
Store 进入MMF的官网。

中间的几个解释:
Hw 这里会显示插件是DX8,DX9还是DX11。注意高低版本无法兼容。
PS 这里会出现Pixel Shader的版本。

选中OK后,我们发现左边的Effects栏变成了我们选中的Effects,而原先的Active也变了。
QQ截图20220709122646.png
红框是Effects编写时所给予的参数,你可以改变这些参数来达到你想要的效果。

QQ截图20220709122734.png
图像最终的效果如上。


2、如何将一个Effects作用到一个layer上
操作其实大同小异。首先选择一个Layer。
QQ截图20220709121831.png

如红框所示,点击想要作用于的图层。




在Properties中选择Effects。之后的操作和上文都一样了。
QQ截图20220709121847.png



3、在代码层面中改变object的参数
情景:我这有一个glitch特效(电视机特效),但是是静止的。已知不同的随机参数可以让他以不同的方式坏掉(?)。我要如何一直改变这个参数让他动起来?
QQ截图20220709124255.png

首先按照前文给这个图层选择一个Glitch特效。

之后创建一个Layer Object,如图所示:
QQ截图20220709124325.png


创建一个Behavior,Action中选择
QQ截图20220709124413.png

其中Layers by Index代表用序号选中图层,而By Name则是用名字选择图层。建议使用By Name,这里使用By index。选择Set effect parameter。
QQ截图20220709130822.png
提示选择Parameter Name时,请写括号中的名字。
(这里括号内外的名称相同,不过部分Effects很傻贲没有这么干)
之后提示输入parameter,输入变量即可。
最后提示一点:显示界面(Frame Editor)是DX9的界面。如果选择了DX11才会生效的Effects,那么不会显示在Frame Editor中。放心,游戏中是正常的。


感谢您看完第二节。接下来我们要编写effects了,可能会稍难。加油!


遵循一切喝了之力的指引!!!

244

主题

1409

回帖

5

精华

活跃锤龟

只是普通的音mader而已

经验
8642
硬币
1012 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第十届MW杯冠军第十三届MW杯亚军PK!MF2 冠军PK!MF6 亚军综合发挥奖最佳人气奖人气之王人气之王欢迎光临秘密合战!他山之石

 楼主| 发表于 2022-7-9 13:57:56 | 显示全部楼层
三、如何编写一个Effects
有些时候可能会发现:自己已经安装的Effects并不够用。此时我们需要自己寻找资源。如果在网络上没有发现资源的话,我们也只能自己去写一个Effects了。
MMF中的Effects都是由HLSL这种语言写出来的。HLSL,中文称作高级着色器语言,是微软开发的一个神必语言。(,不过在这里我不会教HLSL怎么写,因为我也不会((
接下来我将以GBstyle为例子,介绍MMF中Effects的编写方式。
MMF中的Effects分为两个部分:xml部分和fx部分。我们先看xml部分。打开GBstyle.xml。

QQ截图20220709132128.png

这里使用Visual Studio Code打开。当然你用Notepad++甚至直接使用Notepad编辑都可以。本质上这堆玩意就是一坨文字。

咕了,等我慢慢更新

遵循一切喝了之力的指引!!!

244

主题

1409

回帖

5

精华

活跃锤龟

只是普通的音mader而已

经验
8642
硬币
1012 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第十届MW杯冠军第十三届MW杯亚军PK!MF2 冠军PK!MF6 亚军综合发挥奖最佳人气奖人气之王人气之王欢迎光临秘密合战!他山之石

 楼主| 发表于 2022-7-9 13:59:13 | 显示全部楼层
先占坑


遵循一切喝了之力的指引!!!

30

主题

297

回帖

2

精华

无敌地花

经验
4005
硬币
863 枚

赞助用户永吧十五周年倒计时海报勋章第十二届MW杯亚军PK!MF5 亚军PK!MF3 殿军欢迎光临秘密合战!欢迎光临秘密合战!LGR铜冰箱

发表于 2022-7-9 14:25:49 | 显示全部楼层
比较好,但我不会(
继续努力吧

162

主题

1390

回帖

12

精华

管理员

脚滑王

经验
9040
硬币
834 枚

永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第十一届MW杯冠军欢乐演员对不起,小姐欢迎光临秘密合战!请务必再光临秘密合战!

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

这个教学好(
以前没搞过特效
之后说不定我也可以试试w
个人网站wsw233.com
新作 AUEV0.5.0 制作中!
解说/版聊视频随缘更新!

0

主题

11

回帖

0

精华

害羞绿花

经验
60
硬币
3 枚
发表于 2023-6-11 11:50:01 | 显示全部楼层
之前一直觉得effect可以应用编译到安卓里面,直到亲身尝试制作,没办法套用

40

主题

817

回帖

14

精华

版主

经验
8436
硬币
1413 枚

赞助用户永吧十五周年建吧日纪念勋章永吧十五周年倒计时海报勋章第五届MW杯亚军对不起,小姐盲猜大王数字君X68数字君X68数字君X78

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

CTF 的 effect 是 d3d 的,而 Android 导出只有 OpenGL,很显然 CTF 没有做 hlsl→glsl 的转换,何况这也并不平凡。
Moonstruck Blossom
个人网站:dasasdhba.github.io
您需要登录后才可以回帖 登录 | 创建账户

本版积分规则