Wallpaper Engine

Wallpaper Engine

Neptune Live2D
 This topic has been pinned, so it's probably important
今天的风儿好喧嚣  [developer] 26 Jul, 2017 @ 9:47pm
[指南] 模型适配和自定义
【【【已过期!!!】】】 暂时没空写中文版,请先查看英文版指南,过完年后我再回来更新

一篇关于Live2D模型适配和自定义的指南。

这是一篇综合的关于自定义模型的一切的指南,所以会比较长。如果你已经得到了一个为这个应用适配好了的模型,就可以不用看了。


引言
Neptune Live2D,就像名称说的一样,一开始只是为了在桌面上显示Neptune而做出来的的Live2D项目,但是后来我发现一些人会更喜欢其他角色,所以就做了这个自定义功能。

由于一些原因,如果不是海王星系列的模型的话,可能不会正常显示和运作。但是我并不保证这会被很好地修复,因为开始做这个项目时并没有打算支持其他类型的模型。
要应用任何更改,你需要重新选择这个壁纸,也就是先选择另一个壁纸然后再选回来。

在壁纸更新时你会丢失所有的更改,不确定新增的自定义文件会不会一样丢失,但最好还是保留一份备份。

带有下划线的功能/属性以及整个字幕功能只在这个项目里有效,它们不是Live2D应用标准的一部分。

在编辑JSON文件的时候,要注意双引号和逗号。根据JSON,每个语句(字符串)都必须在两个双引号之间,每两个对象或键值对都必须用逗号隔开。一个常见的错误是在字符串中使用了 " ,正确的做法应该是用 \" 来代替。
如果你的JSON还是出错的话,你可以在这里[www.json.cn]验证你的JSON文件。


准备
什么是Live2D
一个2D人物动画引擎。 官网[www.live2d.com]

可以找到海王星系列的模型的地方
官方手机应用[compileheart.com]或者百度(当然,最好用谷歌)。
应用里的资源都是加密的,需要解密才能拿到模型。好吧我知道我之前对它们做的事情是不对的,我有罪……

可能需要的工具
可以从上面网站的下载页面下载。
  • Cubism 2 / Cubism 3: 用来制作Live2D模型。
  • Live2D Viewer: 用来预览模型和创建一些简单的运行时文件。
    • 要加载一个模型,只需将它的模型配置文件或者.moc文件拖到应用的窗口里。你也可以拖其他的资源文件作为附加,比如物理效果(physics), 表情(expression)和动作(motion)。


导入模型
步骤:
  1. 从网上获取Live2D模型,或者自己做一个(大佬!)。
  2. 移动模型的文件夹到这个项目的目录。*
  3. 如果需要的话,编辑模型配置文件。
  4. 在壁纸设置面板里设置模型配置文件的路径。**
  5. 如果一切顺利,你的自定义人物应该出现了,享受吧!

* WE把文件访问限制在每个壁纸自身的项目目录里。
如何找到项目目录:在浏览壁纸界面右击壁纸的图标->在资源管理器中打开。

** 比如,把Noire放在live2d文件夹里,那么路径就是neptune/assets/live2d/noire/model.json。
也可以使用URL作为路径,只需要把文件拖到任意浏览器里面,然后从地址栏里复制URL。



模型配置文件
我没找到关于它的官方说明,所以就自己写了一个。如果你按照上面的步骤做了之后运行良好,那就可以忽略这部分了。

模型配置文件代表“Live2D模型配置”(Live2D Model Setting),通常被命名为“model.json”,它定义了所有的参数和相关的资源,。

作为示例,下面给出了Neptune的model.json。我移除了一些不重要的对象,并把它缩短了以适应排版,你可以直接从项目目录里打开这个文件以查看完整和准确的版本。
{ "type": "Live2D Model Setting", "name": "ネプテューヌ - ジャージワンピ", "model": "normal.moc", "textures": ["tx1024/0.png", "tx1024/1.png", "tx1024/normal_2.png"], "pose": "./general/pose.json", "physics": "physics.json", "subtitle": "subtitles.json", "layout": {"center_x": 0, "center_y": -0.1, "width": 2}, "hit_areas": [ {"name": "head", "id": "D_REF.PT_HEAD"}, {"name": "body", "id": "D_REF.PT_BUST"}, {"name": "belly", "id": "D_REF.PT_BELL"} ], "expressions": [ {"name": "normal", "file": "exp/normal.json"}, {"name": "happy", "file": "exp/happy.json"} ], "motions": { "idle": [ {"file": "mtn/idle_00.mtn", "fade_in": 2000, "fade_out": 2000} ], "alt_idle": [], "start_up": [ {"time": 6, "subtitle": "16", "sound": "snd/021.ogg", "file": "mtn/nep_start_morning_1.mtn"}, {"time": 15, "subtitle": "20", "sound": "snd/025.ogg", "file": "mtn/nep_start_evening_1.mtn"} ], "tap_body": [ {"subtitle": "1", "sound": "snd/001.ogg", "file": "mtn/nep_touch_head_1.mtn"} ], "pinch_out": [], "pinch_in": [], "shake": [], "flick_head": [] } }
model(模型)
Live2D模型的主要文件,包括材质绑定、参数定义和其它信息。

textures(材质)
一个材质文件的数组。

pose(姿势)
一个定义了可见/不可见部分的文件。如果没有可用的pose文件,可以像上面那样使用默认(空的)的那个。

physics(物理)
一个定义了头发和其它物件的物理效果的文件。

subtitle(字幕)
一个字幕文件,查看指南的后面部分。

layout(布局)
设置一些参数的值。可用的参数有:width,height,x,y,center_x,center_y,top,bottom,left,right。我没法解释它们,因为我了解得也不多,你可能需要通过测试得出它们的值。

hit_areas(命中区域)
给命中区域命名,用于互动。这些id可以用Live2D Viewer来找出。在这个项目里,命中head被绑定于改变表情,命中body或者belly是一个“tap_body”事件。

expressions(表情)
表情文件和名称。名称一般不重要,但是必须要有一个命名为“normal”的空的表情作为默认,如果你的模型没有这个的话,可以用Neptune的那个。

motions(动作)
带有事件的动作组。当一个事件被触发时,它的动作会被随机激活。如果一个组里没有动作,那就留一个空数组,不然的话可能会出问题。
  • 动作属性
    • file(动作) / sound(声音): 文件。
    • fade_in(渐进) / fade_out(渐出): 毫秒时间,可以省略掉以使用默认值500。
    • subtitle(字幕): 在你的字幕文件里定义的字幕名称(name)。
    • time(时间): (仅用于start-up动作)这个动作的有效时间区间的起点。

  • idle(空闲)
    当人物空闲时触发,意味着其他的动作都完成了。

  • start_up(启动)
    当壁纸启动时触发。属性time指示了这个动作的有效时间区间的开始。如果有两个以上的动作使用了相同的时间区间,它们会被随机选择。
    例如,上面的两个启动时动作的示例定义了,一个早晨问候从6点开始到14点,一个傍晚问候15点到5点(第二天),所以一次在6点到14点之间的壁纸启动会触发早晨问候(显然14点前后已经不是早晨了……不要在意)。

  • pinch_out(放大) / pinch_in(缩小)
    当任务缩放到最大/最小时触发。

  • tap_body(点击身体) / flick_head(敲头)
    点击身体/摸头时触发。

  • shake(摇动)
    晃动时触发,需要加速度传感器。

pinch_in / pinch_out / flick_head / shake这些事件目前在这个项目里还不支持。

你可能注意到我在路径里使用了“./”,就像很多人都知道的那样,这个代表上一级文件夹。你还可以使用类似于“../”或“.../”这样的来访问更上层的文件夹。



字幕
当一个带有对话的动作开始时,它的字幕(有的话)会以对话框显示出来。我使用了JSON作为字幕文件的格式以得到清晰的结构和更好的扩展性。

这里是Neptune的简化版subtitles.json。
[{ "locale": "default ja-jp", "name": "日本語(Japanese)", "description": "Any help with translation will be appreciated!", "font":"MS Gothic", "subtitles": [{ "name": "1", "text": "なにか面白いことでもあった?" }, { "name": "8", "text": "わっ!びっくりしたなー、もう。" }] },{ "locale": "en-us", "name": "English", "description": "Based on <b>Card</b>'s translations, thanks to him!", "font":"Trebuchet MS,Segoe UI", "subtitles": [{ "name": "1", "text": "Was there something interesting?" }, { "name": "8", "text": "Wow! I was surprised." }] }]

结构

文件
├───语言对象(1)
│  ├───locale(地区)
│  ├───name(名称)
│  ├───description(描述)
│  ├───font(字体)
│  └───subtitles(字幕)
│      ├───字幕对象(1)
│      │  ├───name(名称)
│      │  └───text(文字)
│      └───字幕对象(2)
└───语言对象(2)

多语言
语言对象里的属性:
  • locale: 给语言的标记。
    • 你可以查看 <WE>/locale/ 目录来为你的语言找到它。(如果你认不出是哪个,可以看这个网站[www.science.co.il]

    • 你可以在里面放多个地区,比如“zh-chs zh-cht”,用一个空格隔开。

    • 注意“default”也被当做一个地区。当查找一个字幕时,如果没有已选择的语言或者已选择的语言里不包含这个字幕,应用将会从带有“default”地区的语言里查找。

  • name / description: 会在语言选择器里显示。(HTML可用!)

  • font: 此语言里的字幕的显示字体。
    • 你可以在里面放多个字体,用一个逗号隔开。 (实际上会被作为CSS: font-family来使用)

    • 请不要用一个只有你安装了的字体——大多数其他人都会看不到。你可以使用“安全字体”,也就是(大多数)Windows的内建字体,可以在C:\Windows\Fonts里找到它们。如果你不知道一个字体的确切名称,可以从上面说的目录里打开这个字体,然后它的名称会显示在第一行。

  • subtitles: 所有字幕对象。

添加一个字幕
// subtitles.json { "name": "blahing", "text": "Blah blah" } // model.json {"subtitle": "blahing", "sound": "blah.ogg", "file": "blah.mtn"}
  1. 复制一个字幕对象,填上文字。
  2. 指定一个名称,可以是不重复的任何值。
  3. 将名称作为相关对话的定义里subtitle的值。


如果出问题的话请及时告诉我!
Last edited by 今天的风儿好喧嚣; 10 Jan, 2020 @ 3:04am
< >
Showing 1-14 of 14 comments
能不能发一下模型的资源_(:3」∠)_
今天的风儿好喧嚣  [developer] 15 Oct, 2017 @ 5:32pm 
不可以:azuki2: 不过讨论区已经有人发过了,可以找一找
我已经研究了两天了,希望可以提供一些解密的提示。。。
今天的风儿好喧嚣  [developer] 17 Oct, 2017 @ 11:25am 
讨论区里发的就是解密文件的链接啊,如果还是要解密提示的话我就不能给了……只能说加密算法很简单
时崎狂三 31 Oct, 2017 @ 3:25am 
完全看不懂 很伤
CZAL 24 Nov, 2017 @ 4:14am 
很开心的点进来看完了全部
发现他喵的什么都没看懂
今天的风儿好喧嚣  [developer] 24 Nov, 2017 @ 5:30am 
很开心看到有人回复这个帖子
发现他没看懂(/TДT)/
NPC 6 Dec, 2017 @ 1:24am 
怀之绅士的心情进来看了看,发现, 这TM都是什么
B1gGuп 10 Dec, 2017 @ 5:23am 
一定是我打开的方式不对... 为什么我没看懂...
很开心的点进来看了一会
然后发现太长了不想看并且有点繁琐(因为我懒)
虽然我看完了这个也许能做的出来但是我懒qwq
所以还是尼普好.jpg
同是天涯 27 May, 2019 @ 6:44pm 
6
想問一下 , 如何做雙重Live2D ? 謝謝
今天的风儿好喧嚣  [developer] 5 Aug, 2019 @ 12:57am 
抱歉前几天电脑坏了_(:з」∠)_ 目前的版本不支持多个模型,我正在做一个新版本,到时候会支持的,不过大概要一两个月之后吧
Originally posted by 今天的风儿好喧嚣:
抱歉前几天电脑坏了_(:з」∠)_ 目前的版本不支持多个模型,我正在做一个新版本,到时候会支持的,不过大概要一两个月之后吧
謝謝
< >
Showing 1-14 of 14 comments
Per page: 1530 50