这篇本来想放在特殊幻化系列的,但是它真的很有用,而且是纯文字的东西,不是做mod的过程,所以我还是单独拿出来,专门起了个名字。
如果你对特殊幻化感兴趣,或者想知道怎么手搓裙子物理、RMT之类的,又或者想知道一些小技巧,可以看这个导航贴。
我对于mrl3的理解还非常不足且片面,如果你有更深的理解并且乐于分享,欢迎你在评论区指出,我会直接进行修改相应的内容。
叠个甲,实际的关系很可能不是这样的,我只是这样子说一下方便理解。
mod3文件中,所有的网格都有它自己的材质名:
mrl3文件是引路人,当载入模型时,网格会在mrl3中找寻对应的材质。如果找不到对应的材质,轻则丢失贴图,重则游戏报错。
每种不同的材质都绑定了一系列贴图的位置,比如下面这张图:
AlbedoMap,即BML,指引到\nativePC\pl\Dimcirui\RPurana\BML_dress.tex这个文件:
找到贴图后载入。如果找不到这个贴图,就会丢失贴图,变成灰白格子。
1-资源区;2-材质区;3-资源指引/绑定区;4&5-材质数据头;6-参数序列;7&8-材质概要区与材质库
用于记录贴图的相对位置,所有路径省去了开头的nativePC\和结尾的.tex。
右键选单可以进行贴图的增、删、路径替换、删除未用路径的功能;左键拖动贴图路径可以对它们进行排序。
所有材质的列表,每个材质都有其自己的3~6区。右键选单可以删除材质。如何添加材质请跳到7~8区的部分。
这里列出了材质要用到的贴图。不同的材质用到的贴图不一样,这里是VFX的:
- texture代表材质,sampler和cbuffer我也不知道是什么,只知道不要碰,碰就出问题。
- Unkowns是未知参数,总之不要动。
- Resource是指向的路径,能改里面的序号,和1资源区的路径列表序号是一一对应的,这个部分只有这个需要改。
这里是部分材质的对应(t开头应该是代表texture):
- Material Name,材质名。它定义了材质到底叫什么。
材质名实际上是以哈希值来存储的,能显示出VFX_Standard__6这个材质名,是因为游戏内本身就存在这个材质名,哈希值和材质名能对应上。
如果你随便起一个材质名也是可以的,但是如果游戏内不存在,那么当你再次加载mrl3文件时,就会发现它变成了0x开头的一串字母和数字,这个就是它的哈希值。哈希值是独一无二的,所以不用担心每次都会不一样,可以手动记一下自定义材质名和哈希值的对应。
- Shader ID,着色器ID。它决定了材质究竟看起来是什么材质。
如果你想要用什么样的材质,去找,然后添加到材质区。不要直接改这个东西,游戏会直接崩溃。
可以直接在英文wiki里找,然后从游戏里解包使用这些材质的装备。
- Surface Direction,表面方向。它和材质的可见性相关。
单面透明、半透明等效果就是通过这个来实现的。4位16进制数,但是我不知道它的原理是什么,只知道哪些可以用:
如果你不怕把游戏搞崩溃的话,也可以随便输一些试试,比如:-1100、1f00、1dff、-1dff、1f01、1f02、-1f02、1000、1001、1002、-1000、-1001、-1002、-1101、-1102、1101、1102、2ef3、-2ef3。
——万一发现新的材质效果了呢?
- Stray Unkown和Unknown Offset,不知道是什么,不要碰。
- Unknown Parameters,未知参数。
虽然说是未知,但是其中的第2、5个参数是和透明度相关的。
第2个参数,值越低对于透明度的容忍度越大。容忍度的意思就是,屏蔽低于一定程度的透明度,比如说0就是容纳所有透明度,包括完全透明;而当这个值高到一定程度,即使是99%的透明度也会当作不透明。
第5个参数设为4~7其中一个数字可以启用半透明。这种方式启用的半透明有严重的瑕疵,看起来是网格状的。
那么无瑕疵的半透明如何实现呢?两种方法。
第一种:a通无瑕疵半透明
把Surface Direction设为1101,第二个参数设为0,第三个参数设为112,第四个参数设为1,即可直接套用alpha通道的半透明度。
(补充1:不一定对所有材质都有用,目前知道的是Ch_Wp_Mt和Ch_Pl_Standard_Mt这两个材质可以正常使用此方法)
(补充2:当使用该材质时,即使是不透明的部分,也会在雪地、天空等背景下表现出半透明的效果,所以建议将半透明部分与非透明部分分开,半透明部分单独使用此参数)
第二种:整体控制的半透明
第4个参数一般都是4,也有用0的,如果用-1e或者-2e开头的表面方向,然后把这个设为5,就可以通过参数序列里BaseMapFactor的第四个参数(对应a通)调整整体透明度;但同时,也会导致这部分材质溶于水(也就是进到水里就会消失)。此外,多层相同的半透明材质重叠会直接导致后面的材质消失掉。
在这里所有的参数都有一个小写字母前缀,b代表boolean布尔值,只能是0-禁用,1-启用;f代表float浮点数,可以是一个带小数的数字,范围是多少不知道;i代表int整数。
这里的所有参数都已经命名了,所以根据名字就能知道它大概的作用。不过说实话还是有点谜语人,所以我挑一些我知道的讲一讲。
这个区域一般有两栏(先后顺序可能不一样)。CBMaterialCommon我没用过,所以不知道,直接讲最最最重要的CMBhMaterialPLLocal:
对贴图进行的很多处理,完全可以在这个地方进行,而不需要每次都用PS改。不同的材质在这个地方有不同的参数,我比较常用Chpl和VFX_Standard,这两个材质的参数大同小异,Chpl的相对多一点,所以我直接拿Chpl的来讲。
为了讲起来方便,不全是按顺序来的,还请自己根据名字对应。
- BaseMapFactor:BML色彩贴图强度因子。四个值分别是BML贴图的R/G/B/Alpha通道的强度因子。比如说这里RGB全部设为0.2,就相当于是亮度调暗到0.2倍后的BML贴图(所以不需要PS手动调暗BML贴图啦)。Alpha通道在启用半透明之后,就代表透明度。
- EmissiveMapFactor:EM自发光贴图强度因子。三个值分别是EM贴图的R/G/B的发光强度。
比如把头盔自发光的R调成50,其他改成0,然后我们就看到了一只红温的太刀虾:
可以用这个来改发色、瞳色一类的东西。但由于是改整个通道强度,所以效果肯定是不如手动PS要好的:
- Roughness/Metalic/Translucency/Subsurface_uiUniform:这四个分别是RMT贴图的R/G/B/Alpha通道强度因子,也就是粗糙度、金属度、半透明度、次表面散射强度。这些值是可以高于1的。通过这三个属性,我们就可以利用同一张全白的RMT贴图,利用这三个因子进行整体质感的调整。不过具体到某个部件最好还是手动制作RMT贴图更好一点。
- BaseColorEmissive
不是很清楚它到底是干什么的,默认是0
如果设为1,那么自发光的强度就会变得很弱很弱,并且即使把自发光拉到非常高(比如说200),人物也不会变成光,而是整体变白,略微发光。所以大概能用它实现一种染色的效果?
比如下面的图从左到右,BML强度始终是0.1,EM强度最开始是5。从第二张开始启用这个东西,第三张将EM的R通强度改成20:
- fAnimEmitMin和fAnimEmitSpeed
是的,这个就是呼吸灯,是直接作用在自发光上的,并不是只有虫棍才有呼吸灯(不完美了,呜呜)。
AnimEmitMin呼吸灯的最小亮度,是一个比例值,基准是自发光强度。比如说你的自发光强度是50,这个设为0.5,那么就是自发光在亮度25~50之间变动,产生呼吸灯效果。
AnimEmitSpeed呼吸频率,具体单位不知道,自己调就是了,反正这个不用设置的很精准。
最小亮度设为0,呼吸频率设为2,就比较接近虫棍的呼吸灯表现了。
还需要提一点,VFX_Standard材质是没有呼吸灯/流水灯参数的(起码我正在用的没有)。所以已经使用VFX材质却想要这样的效果,只能更换成其他材质比如Chpl了。
- bUseWaveEmit和fAnimeEmitWave
这个是流水灯——呃,起码它名字是这么写的......
bUseWaveEmit表示是否启用,0禁用,1启用。
fAnimeEmitWave控制水流的速度(同时也会控制呼吸频率)。
这个要和XM贴图的B通道一块使用,这个通道是控制流水效果的映射和方向的,水流会从比较亮的地方流向比较暗的地方(注意是B通,如果是整个XM贴图并且其他两个贴图全黑的话,应该是亮蓝色流向暗蓝色的地方)。
比如我在后发对应贴图位置画一个心:
那么最后就是这样的效果:
爱心是红白交替向边缘扩散的,全黑的地方则是正常的呼吸灯效果。
(图片和文字都很难形容,还是建议你们自己试试)
如果XM贴图是全黑的,实际就和呼吸灯没太大区别,并且由于默认速度是64,会疯狂闪烁,看上去很鬼畜(光敏性癫痫警告)。记得调低,比如说改成5。
- fFilmThickness,fFilmBlend和fFilmIOR
和XM贴图的R通道相关。具体效果我还没测试,但是wiki是这样说的:
fFilmThickness,调高可以让模型呈现彩虹般的色彩
fFilmBlend,调高可以让模型褪色
fFilmIOR,调高可以增加前两者的强度
- fPanoramaTile
和XM贴图的G通道相关。panorama是全景的意思,但是这个具体是做什么的暂时不清楚,需要测试。
- bUseCMM:是否启用CMM
还有其他的一些参数,虽然我想着试一下来着,但是发现相关的贴图我根本就没有用过,没法试。不过根据名字你们也可以类推出来,比如写着Fur就是和FM有关,写着Snow就和AlbedoBlendMap(也就是Snow_Col_CMM)有关,写着DetailNormal就和DetailNormalMap有关,等等。
这两个区域主要是用来添加材质的,所以我就直接讲如何用它们添加材质了。
首先,在编辑器的左上角有个Compendium,里面的Rebase是替换原有的,Expand是在原有的基础上添加。随便选一个,然后弹出的窗口选中你想要导入的mrl3材质所在的文件夹(不是文件本身),之后就会把这个文件夹内所有mrl3里面的材质都导入到左下角的7材质概要区。
然后呢,把材质选单展开,里面有路径,把路径拖到8材质库,然后再把材质库的路径展开,直接把里面想要的材质拖到2材质区就成功添加材质了。
要注意添加材质的同时还会把这个材质所绑定的贴图一块导入到1资源区,不需要再自己手动添加资源路径了;如果只是借用材质(主要是借用材质的shader渲染),还得要手动添加资源路径,然后在3资源指引区绑定成自己想要的材质。不用的材质删或不删都可以(在资源区右键有个Delete Unused可以直接删掉没有用到的资源路径)。
这个材质库必须要求目标文件夹的指定mrl3文件存在,不然添加材质会直接闪退。
看完这些之后,我们接下来就准备直接实战,会讲一下如何搞三渲二与写实材质、半透明/瀑布材质效果、描边效果、发光效果。
不过如果你已经看完本篇,相信你已经可以自己动手尝试了!