明天是我要配布新模型的日子,却在码这段字的今天发生了大无语事件,
专门开一个专栏来记录这件事好了,顺便做一个MMD自动渲染教学,
教学完全保姆式,尽量写的好玩些,大概会很尬233
(明明是个低技术力的玩意x)
我是一个mmder,会在bowlroll投稿一些3D的模型与场景,
但对新手来说会发生一件哭笑不得的事情,开开心心跑到b碗(bowlroll)
从b碗里下载宣传图十分绚丽好看的场景,兴奋的导入mmd中一看!!
场景效果异常简陋!!
什么特效都没有!!
和宣传图完全不符...
原来3D场景需要复杂的渲染和配置材质,才能变得像“卖家秀”中一样好看
对新手mmder来说,很难直接渲染出好看的场景,而就算对老手mmder来说,
导入一个场景的材质,打光,都十分麻烦,地板要贴上地板的材质,
墙壁要贴上墙壁的材质,是不是感觉十分繁琐与重复?
大部分mmder每一次制作mmd时都要重复这些相同的过程,
感觉十分繁琐
于是我喜爱研究各种mmd中便利的技巧,如配置好一次材质渲染后,
下一次直接导入配置文件,即可马上恢复上一次配置好的材质,
该怎么做到这一点呢?先从普通的渲染讲起吧!
最基础的开始~
准备好模型文件和特效fx,将模型pmx与特效fx文件放在同一个文件夹中
或者特效fx文件放在PMX所在文件夹中的子文件夹里,相对路径能找到的地方
总之要放在一起,如果没有把模型和特效放在一起,文件夹名称一变,就读取不了啦!
(相对路径是什么自己百度!!记得常用./和../)从右上角分配特效中打开mme特效面板,
右键模型选择展开,就能看见下面所有的材质,此时一个一个添加不同材质吧

!终于把材质添加好了!!那么怎么将这个配置保存成预设呢?
首先点击模型.pmx,让模型这一栏选中变蓝(重要,别忘了选中模型呀!!)
然后左上角文件-按模型单位保存模型,就可以单个模型保存出一个emd文件

就决定保存在和模型相同的目录~因为好找.

既然学会保存了,是不是也学会读取了呢?很简单,
只要从这里打开刚刚保存的文件就可以

之前配置好的预设fx就被轻松读取了~

但这种方法还是要从右上角的mme材质面板中打开emd配置文件读取,
好像还是很麻烦耶~追求研究mmd到便利极致的我怎么能停下脚步呢——
能不能一载入模型或场景,就让它自动读取fx?
能!方法很简单,只要你修改命名,把刚刚保存的emd配置文件的
文件名更改为和pmx相同的名称,并当前文件夹名称是纯英文,
一载入pmx,fx就自动读取好了!

恭喜你,你已经学会怎么给一个pmx添加自动渲染了。
有人可能会问Ray怎么办,又要加Main栏,又要加MaterialMap栏,
那只要分别保存俩个栏的emd,到时候在ray里分别读取即可~

流程如图,都是差不多的,以后记得保存emd,不要再重复加材质咯
但别急!但你还没学会怎么制作一个自动渲染的pmm格式mmd工程文件,
接下来,教你怎么打开一个mmd的工程,里面就是配置好的场景渲染效果吧!
可能有人会疑惑,mmd怎么可能做相对路径工程?
没错,mmd还真的支持相对路径,但是需要一个判定相对路径的契机,那就是
名称被命名为 “UserFile” 的文件夹,那么如何利用这个特性呢?
首先当然是准备好文件和文件夹
1.创建文件夹(场景名称命名随意)
2.在场景文件夹中创建文件夹 命名为 UserFile
3. 在UserFile文件夹中放入人物,场景,滤镜x文件
但以我个人的习惯,还是喜欢再创建文件夹进行分类:
创建Model文件夹,里面放入人物模型文件夹,与场景模型文件夹
Model中人物和场景都像上面一样配置成一载入,fx渲染就生效的那种.
Accessory文件夹中里面放入mme特效文件夹,如XX滤镜,ScreenTex,SvSSAO等

但是特效是有限制的,那就是不能动mme面板,只能是直接载入就生效的x文件特效.
如果你要动mme面板中的内容,如调节部分材质钩子与fx,那现在这里就不行(下面会解决)
4.打开新建工程的mmd,读取场景,人物,特效x文件,
配置好画面效果(注意模型与附件描画顺序)保存pmm
重点来了
把pmm保存到命名为 UserFile 的文件之中
现在这个文件夹应该这样的:

恭喜你,你完成了基础的pmm工程相对路径封包,
但是别高兴的太早,你发现更改一下场景命名,mme就会出错,
因为你会发现Stage.pmm旁边,有一个和pmm相同名称的Stage.emm文件,
还记得上面是按模型文件保存XX的吗?其实这个emm文件就是工程版本的emd,
但现在为了做一键渲染的工程,这个emm文件是不需要的,只要删除这个emm文件,
直接运行pmm文件,里面就是配置好的内容啦!
其实在右上角mme插件中选择不自动保存配置文件的话,
就不会跟着一起保存出这个emm文件了,但为了以防翻车,
还是,每次保存后手动删除emm文件比较好,别问为什么...

现在你可以再在pmm工程中添加一些小彩蛋,
给人物摆个姿势或小动画,给场景k帧加一些动态,k个好看的镜头保存,
之后发给别人,打开pmm文件,就是有一个漂亮渲染,fx全配置好的工程啦!
当然带控制器的x特效也可以,比如ikBokeh景深,用控制器设置成
自动聚焦模式,就能很方便的读取带景深和渲染的场景了
如此例,发给别人后,别人一打开pmm工程,就是这个画面,
是不是谜之很震撼,有种Sketchfab的感觉

如此一来,pmm就会自动读取pmx和x文件,pmx会因为有emd自动读取fx渲染,
而x文件滤镜mme也因为会自动挂载相同名称的fx而生效
但是这有一个致命的缺点——无法改动mme面板中的内容,
因为你会把emm文件删掉,做到每次读取都重新配置mme路径,
因此不能调整mme面板中的任何fx和钩子...
也就是说,不能用Ray!!NOOO——
这确实是困扰我很久的一个问题,mmd竟然能以这样奇葩的方式支持了相对路径,
但mme插件保存出来的emm配置文件,竟是不支持任何相对路径的...
为了让自动渲染能用上需要调节控制面板的mme,我开始想各种办法,
于是得到了俩个方法,方法1和方法2,这俩个方法也可以同时使用,
但最佳最便利的方法其实是方法2,想看的建议直接跳到方法2.
方法1有很大缺点,但想看也可以先看看,
因为方法1不能根据材质设置不同fx.
方法1:通过修改fx文件,让某些模型默认挂载不同的fx
当你载入一些x格式的mme特效后,mme面板就会多出该特效的调节栏,
第一排会有谜之灰色代码,那就是用于设定初始挂载什么fx
比如这个SvSSAO,我想修改NormalMapRT栏中默认挂载fx的状态

通过搜索关键词DefaultEffect,发现在SvSSAO.fx的407行开始,
可以设定x和pmx的默认状态
=xxx.fx为此栏默认挂载该fx
=hide为隐藏,默认不勾显示钩子
=none为不隐藏但不添加任何fx

在这里,我只要把可能对SvSSAO效果会造成干扰的物件进行屏蔽隐藏即可,
所以我设置了一堆的=hide,这样一读取这些名称的模型,
SvSSAO就能自动屏蔽这些不需要的模型了
Ray也是用此设定DefaultEffect
给天空球默认添加一个none环境光,和给材质添加一个material_2.0材质球的

原来环境光的DefaultEffect藏在.\ray-mmd-1.5.2\Shadertextures.fxsub中,
默认用相对路径指定了这个skylighting_none.fx 并把其他物体设置为无环境光
学学怎么写相对路径后,可以在这里添加特定名称的pmx设定
让ray自动挂载想要的天空球环境光
当然除了环境光外,下面还有其他的比如MaterialMap材质栏,
SSAOMap缝隙阴影栏,PSSM阴影显示栏等多处的DefaultEffect设定

如果你让ray载入模型后自动挂载一个卡通材质fx,也是可以在这修改与添加啦!
但因为方法1只能对每个模型单独进行设定,不能根据材质分别设定fx,
所以还是不能用于给ray加材质,而且很麻烦!我绕了很大的弯路呀qwq
赶快抛弃这个繁杂的方法1,看看方法2吧.
方法2就是——编写一个读取当前目录并修正mme路径的小程序~
也就是对emm文件中的路径信息动刀,这是我的想法:
准备好一个等待修改mme目录的配置目录用emm文件
把小程序放在和pmm相同的目录中,首先让小程序检测当前在什么目录,
把当前的目录信息添加到配置用的emm文件中,保存为和pmm命名相同的emm文件
这样一来,即可完成修正mme路径了xd
(P.S.不建议emd自动加fx那招和这个一起用,虽然也没啥太大问题...
但你配置好emm之后,后续才添加emd会有问题(?))
这是小程序bat中的内容

把以下这些代码保存到txt文本(GB2312编码),把txt格式尾名改为bat,
就是能运行这些指令的bat批处理小程序了:
@echo off
color f0
title MME FIX
echo Detecting drive letter and path for current location:
echo 正在检测当前位置的盘符和路径:
echo Start repairing Mme path:
echo 即将开始修复mme路径:
echo ...Loading files...
echo ...读取文件中...
set "currentpath=%~dp0"
if "%currentpath:~-1%" equ "\" set "currentpath=%currentpath:~,-1%"
cd /d "%currentpath%"
set "txtfile1=%currentpath%\MME.emm"
set "txtfile2=%currentpath%\Stage.emm"
set "oldword=--Waiting for edit path--"
set "newword=%currentpath%"
echo ...Repair path...
echo ...修正路径中...
(echo;txt1=WSH.Arguments^(0^):txt2=WSH.Arguments^(1^):ow=WSH.Arguments^(2^):nw=WSH.Arguments^(3^)
echo;enc="GB2312"
echo;Set stream=CreateObject^("ADODB.Stream"^)
echo;stream.Type=2:stream.Mode=3
echo;stream.Charset=enc
echo;stream.Open^(^)
echo;stream.LoadFromFile txt1
echo;stream.Position=0
echo;text=stream.ReadText^(^)
echo;text=replace^(text, ow, nw^)
echo;stream.Position=0
echo;stream.WriteText text
echo;stream.SaveToFile txt2, 2)>"%tmp%\v.v"
if not exist "%txtfile1%" (echo;"%txtfile1%" not found&goto end)
for /f "delims=" %%a in ("%txtfile2%") do md "%%~dpa" 2>nul
cscript -nologo -e:vbscript "%tmp%\v.v" "%txtfile1%" "%txtfile2%" "%oldword%" "%newword%"
:end
for /l %%i in (1,1,2000) do echo %%i >nul
echo MME Repair complete.
echo 修复mme路径已成功.
pause
exit
另外一边,当然是要准备好替换目录信息的emm文件,
复制出正常保存出来的emm文件更名为MME.emm,用文本打开,
把盘符到\UserFile为止的内容都全部替换为上面bat设定好的文本内容:
“--Waiting for edit path--”

以后只要一运行bat程序,就能从MME.emm文件中配置出正确路径的Stage.emm了

于是我用这个原理,制作了不少一键渲染ray渲的场景
打包时记得写好完整的借物表,以及注意不能二配的素材哦
但是。。。
翻车了,b碗把我的ray自动渲染场景都下架了...
...原因就在那个小程序

因为我考虑到如果有人把场景解压在了C盘,系统盘,系统有关目录中,
bat小程序会因为防火墙,没有管理员权限修改保存emm文件而失效...
为了防止这件事情的发生,我也想了对策,
既然都做保姆擦屁股了!那就要擦到底X
我想了一个方法,把bat封包成一个运行时自动需求管理员权限的exe文件,
当有人使用bat版本因为没权限而失效时,可以用能获取管理员权限的exe版本解决,
这样一来,就不怕修正mme路径失效了!
但正因我给bat程序加壳封包,导致了一部分杀毒软件的误报,
我的投稿中收到了这样的评论:

我是否加了恶意病毒,是否是恶意软件分销商,
也请阅读这篇专栏的人自行判断。

我投稿了一年的自动渲染,四个自动渲染场景都被举报不放过,我天美的谢谢你
打包一次一个自动渲染的场景,又要建模,又要做材质,又要配置特效,又要封包,
制作和配布都来之不易,其中费劲了我心血研究怎么让他人使用更加便利,
却因此搬起石头砸了自己的脚

昨晚我在紧急联系了bowlroll官方推特,
b碗经理果然解释是因为接到了举报,并且误Northon确实报毒,
我表达了我的愤怒,争取到了把投稿文件恢复到未公开的状态
但现在还没有回复不清楚能否重新公开我的场景
我费尽心思搞自动渲染的目的大概是气死我自己吧
--------- ---------
现在码这段字已经是第二天,收到了b碗回复:
如果去除了病毒,可以重新公开,b碗官方也会重新对文件进行检测,
虽然是喜事,但看来官方依然认为这是一个病毒,让我感觉很难过
我之后还是会坚持自己的清白
总之终于码完了我所知的mmd自动渲染全部方法,你学废了吗?
这么受苦受累的保姆怎么能只有我一个人当呢,带上大家一起受苦受累才好玩啊
顺便贴一下我的b碗账号,之后会重新公开这些场景
https://bowlroll.net/user/182602