VRChat 创作百科

本文简要介绍 VRChat 中虚拟形象和世界创建的各个方面的知识。此外,在假设您没有任何先验知识的前提下,额外介绍所有需要了解的计算机图形学和游戏设计相关的知识,以便入门。

这本指南并不打算提供包罗万象的资源,而是以 VRChat 内容创作为起点,为您走上许多不同的道路提供一个简单启蒙。

本文最初发布在Steam指南页面:https://steamcommunity.com/sharedfiles/filedetails/?id=2190684978

作者:Iconoclass

原文网址:The VRChat Creation Co... | VRCLibrary

注意:当前文档尚未经过翻译校对,部分内容可能存在谬误。

注意:当前文档尚未翻译完全!

序言

       任何曾经尝试学习 VRChat 内容创建的人都会遇到缺乏整理收集、内容冗长繁杂的学习材料。各种教程分散在各处,许多教程内容简陋、过时或脱离最佳实践(包括 VRChat 的官方文档)。本文的目标聚焦于集中最新的教程和文档,提炼知识,帮助那些想要开始从事创作的人以及那些已经在创作内容的人。特别是对于 VRChat 来说(一个必须进行实时渲染的 VR 应用),学习如何制作既吸引人又运作良好的内容的技术,至关重要。

本文中包含在蓝色信息框内的文字、章节和视频链接是可选阅读;它们通常会解释某事为何以某种方式运作。

       主标题将附有官方文档的链接(如果存在的话)。你不需要阅读它们,但如果你在某个特定主题上遇到问题或感到好奇,那么我建议您去尝试阅读。

       在Unity中,你可以点击任何组件上的蓝色问号书 (或 Unity 2019 及以上版本中的带有 ?的圆圈),它将带您转到相应的文档页面。

准备工具

要上传自定义内容到游戏中,您必须安装特定版本的 Unity、VRChat SDK,并使用至少为“New User(蓝色)”等级的 VRChat 账户(不是 Steam 或 Oculus 账户)。

安装 Unity

您会需要安装 Unity Hub,因为它使管理 Unity 变得更容易。在这里下载,然后点击这个链接下载 VRChat 当前使用的Unity版本。

然后,您会需要在登录 VRChat 网站后,从侧边栏下载按钮中下载 VRChat SDK
如果您正在开始一个新项目,您会想下载 VRCSDK3。它有两个版本:一个用于虚拟形象,一个用于世界。

您可能也需要 Blender,一个免费的3D建模软件。

Unity 界面

通过打开 Unity Hub,在右上角选择“新项目”并设置模板为 3D( VRChat 不支持其他模板)来创建一个新项目。

请注意,每个 GameObject 都包含一个 Transform 组件;一个对象的变换定义了它在 X、Y 和 Z 轴上的位置、旋转和缩放。

太长,不看

技巧

基础知识

学习虚拟形象和世界所需的先决条件

基础知识

网格

模型的几何形状被称为网格,它由多边形或二维形状构成:三角形(3条边)、四边形(4条边)和 n- 边形(5条边以上,通常不受欢迎)。

这些多边形由顶点(点)、边和面组成。

原图由 ck12.org 发布
模型拓扑

在网格上,这些多边形的组成被称为拓扑。拓扑在有效处理模型时至关重要。良好的拓扑对于处理模型是至关重要的。

法线

每个多边形都有一个法向量,垂直于其所在的二维平面,这有助于确定网格的内部和外部部分。

在Unity中,默认情况下不渲染多边形的背面,这称为背面剔除。


如果你只能看到你的形象(或其一部分)的背面,那么很可能网格的法线被反转了。这在自定义着色器被禁用时特别明显,经常发生在许多形象上。

基础知识

材质

接下来的部分将涵盖材质方面的知识,这对于虚拟形象和世界都是必要的。 

 

虚拟形象和世界的具体情况将在各自的部分中介绍。

材质通过使用着色器和纹理来为网格应用颜色或细节。

如果您的模型的某个部分是无阴影的洋红色,那么材质插槽(通常是因为缺失着色器)出了问题,或者该模型部分没有应用材质。

如要在 Unity 中创建材质,可右键单击项目窗口>创建>材质。默认着色器是 Standard shader,这是一种基于物理的 (或PBR) 着色器。

着色器

着色器是材质的一个组件,决定了材质如何与光相互作用。在 VRChat 中,您最常使用的两种着色器是用于写实外观的 PBR 着色器,以及用于卡通或动漫外观的卡通着色器。

观看下面的视频,它将帮助您更好地理解纹理部分。

省流: 任何着色器的设置,都会使得物体反射,吸收一些光。

纹理/贴图

材质会将 2D 图像组合,并投影到三角形上。

这些组合的图像被称为纹理(也称为贴图)。Unity使用几种不同类型的纹理,组合成一个材质,而您可以将其应用到 3D 模型上。

Texels(纹理像素)

纹理类型::
Albedo map(基础颜色贴图)

去除所有阴影信息的表面颜色。

Normal map(法线贴图)

一种蓝紫色的图像,通过改变光从表面反射的角度(特定Texels处的法线向量),来模拟3D效果。

出自 docs.unity3d.com:

一张石墙纹理图及配套的法线贴图纹理
Occlusion map(也称为 Ambient Occlusion ,AO,即环境遮挡贴图或遮挡贴图)

将间接阴影信息放入材质中,模拟光线难以逃脱的部分。将遮挡贴图与 Albedo 贴图分开,可以根据不同场景中的光线实现更复杂的阴影。

Smoothness map(平滑度贴图)

控制材质中反射的清晰度。

Unity 对这些有特殊处理方式,因为行业标准是粗糙度贴图,而不是平滑度贴图,我建议使用一个功能更丰富的上位 PBR 着色器,例如:

这些着色器比 Unity 的 Standard shader 提供更多的选项,并将提高您的虚拟形象或(尤其是)世界的视觉效果。您可在它们各自的部分中找到更多信息。

不要过度使用平滑度!如果某个材质没有光泽(比如未抛光的木头或砖块),不要让它过于闪亮!它看起来会像湿的或错误的!

Metallic map(金属度贴图)

定义材质的哪些部分是金属的。

Specular Map(高光贴图)

用于高光(Specular)工作流。如果您的材质附带了高光贴图,我建议您仅使用这种工作流程。

Emission map(发光贴图)

当激活时,材质的发光属性将用于定义它发出的光的强度和颜色。发光贴图用于定义材质不同部分的发光属性。

Diffuse map(漫反射贴图)

具有平衡阴影(没有明显方向性的光源)的基础颜色贴图。如果您只是拍摄某个物体表面的图片,这就是您会得到的纹理。如果一个模型只有一个纹理,那么它将被认为是漫反射纹理(您会在许多卡通着色模型中发现这一点)。

这种纹理在PBR工作流程中已经失宠,因为 Albedo 和环境遮挡纹理的组合允许对材质进行更多变的阴影处理,并在使用多个 Albedo 纹理时(例如不同的皮肤)实现更好的贴图压缩。

您可以在 Silent 处阅读有关 PBR 着色器的更深入指南。

UV 映射(UV mapping)

指定 2D 纹理应该如何投影到面上。

出自 Wikipedia:


认识它的最好的思考方式是你的网格是由纸制成的,您必须决定您想要在哪里切割,以便将其铺平。

由于 W、X、Y 和 Z 已被使用,故用 UV 来代表垂直和水平轴 U 和 V。

Unity 纹理设置:

纹理类型

SRGB(颜色纹理)

您应该在灰度纹理上禁用它(例如高度、AO、金属度),否则后者将无法正常工作!!!

Mipmap 过滤

如果纹理从远处看起来太模糊,请尝试将过滤算法从盒(Box)更改为凯撒(Kaiser)。

解释 MipMapping

过滤模式

设置为三线性以获得最佳结果。

Aniso Level(各项异性过滤)

使纹理在从角度观看时不会出现模糊。我建议将其设置为16。

在Unity中,该设置是一个滑块,但其中只有 2 的幂的滑块值起作用。如果它设置为非 2 的幂,它将降至下一个最低的2的幂(例如10将降至8)。

纹理压缩设置

最大尺寸
纹理渲染的最大分辨率。
对于世界纹理,我通常不建议将其设置得高于1K(1024x1024)。

Crunch 压缩

一种有损压缩算法。我建议将其设置在20左右,以在文件大小和质量之间取得最佳折衷。

基础知识

优化

优化在 VRChat 中至关重要。由于 VRChat 是在虚拟现实环境中运行的,因此它需要以高帧率运行,以确保用户能够舒适地体验游戏。我多次遇到这样的情况:由于感到过于不适,我或我的朋友们不得不退出游戏。

材质插槽

每个材质插槽都会在中央处理器(CPU)上触发一次绘制调用。理想情况下,对于一个虚拟形象或三维模型,每个需要不同着色器的网格都应该有一个材质插槽。
减少绘制调用的数量是提升性能的最有效方法之一。

通过纹理图集技术,可以将多个材质插槽合并为一个,这一过程可以在 CATS Blender 插件中实现自动化。

多边形/三角形数量

在不显著降低质量的前提下,尽可能减少多边形或三角形的数量,是为这款游戏开发内容时需要进行的平衡艺术。在 Blender 中,这通常是通过应用“简化”修改器来减少多边形数量来实现的。

准备进行Quest创作[docs.vrchat.com]

基础知识

重要信息

整理文件,虽然看似乏味,却能长期为你省去不少麻烦!
我建议为VRChat项目资产设立一个专用文件夹,并按照以下类别进行初步分类:

随后,可以进一步细分为:

我推荐你根据纹理的类型,对它们进行分类,这与纹理网站,如 https://ambientcg.com/ 上的分类方式相似。 关键是要找到一种适合你自己的分类方式,你可以根据个人喜好进行调整。

请为你的文件命名时使用描述性词汇!这样,你无需打开文件就能知道它包含什么内容!

在文本框中按下 Tab 键,即可快速跳转到下一个文本框。

重置 GameObject 的变换属性
在 GameObject 的变换组件上,点击右上角的齿轮图标,然后选择“重置”。 这将使对象的 XYZ 坐标位置和旋转角度恢复到 0,0,0,并将 XYZ 缩放比例恢复到 1,1,1。

你也可以选择通过同一下拉菜单单独重置位置、旋转或缩放。

复制与粘贴组件

如果你使用的是 Blender,有许多插件(免费和付费)可以显著提高你的工作效率。

第三重要的提示:如果你是在创造自定义内容,使用参考图片! 与仅凭记忆相比,使用参考图片来创建3D模型会更加迅速和精准。许多细节和微妙之处很容易在记忆中遗漏。

第二重要的提示:如果你正尝试实现某个特定效果,不要独自苦思冥想,而是要主动寻找答案! 根据我的经验,这样做不仅容易令人沮丧,而且可能导致效率低下。互联网上有大量的教程和已解答的问题可以为你提供巨大帮助。如果你找不到答案,不妨提出你的问题!很可能其他人也有同样的疑问,并且已经有人知道答案。即使是专家也会不时提问。

而最重要的提示是:如果在Unity中遇到问题,一定要查看控制台!

Unity 技巧视频链接

点击以上链接,你可以直接观看这些Unity技巧视频。

基础知识

Blender

对于有兴趣的朋友来说,学习 Blender 并非总是必需的。在 Unity 资产商店 Booth 上,你可以找到许多 3D 资源,包括免费的选项。
至于构建世界几何结构,使用 Unity 的免费插件 Probuilder 通常更为简便快捷,特别是在进行原型设计时,这一点在你选择阅读本手册中关于世界建模部分的内容时将显而易见。


^^ 请先观看以上两个视频: ^^

Blender Basic Tutorials playlist <--- 请先学习这个!

往返世界工作流程 : https://vrclibrary.com/wiki/books/maebbies-precise-solutions/page/blender-3-28x-mapping-config-for-mapping

相关视频链接:
https://youtu.be/eSiqYvDHppM

https://youtu.be/7DT0dtarYv4

https://youtu.be/7pZVngqwgDo

.blend1文件是什么,你为何可能需要或不需要它们?

虚拟形象

涵盖从基础到高级的关于虚拟形象上传和创建的文章。

虚拟形象

基础上传指南

以下是使用 Pumkin’s Avatar Tools[github.com] 的一份(稍显过时)的替代指南。

  1. 将 VRCSDK 和 Pumkin’s Avatar Tools 导入到你的 Unity 项目中,只需将它们从 Windows 资源管理器拖拽至 Unity 底部的“项目”窗口。Unity 界面的顶部将新增选项:VRCSDK > Show Control panel & Tools >  Pumkin’s Avatar Tools。

  2. 导入你的模型 FBX 文件及其所有纹理。

  3. 在项目窗口中右键点击,选择“创建 > 材质”。在检查器窗口中,将着色器更改为 VRChat>Mobile>Toon Lit 或 VRChat>Mobile>Standard Lite. 根据纹理数量,复制(Ctrl+D)这个材质,直到每个纹理都有可对应的材质。

  4. 点击一个空白材质,将纹理拖拽至检查器窗口中的相应位置。对所有纹理重复此操作。

  5. 点击项目窗口中的 FBX 文件,在检查器中点击“Rig”,在下拉菜单中选择“Humanoid”(如果头像是人形),然后点击“应用”。

  6. 在FBX文件的“材质”标签下,将材质拖拽至相应的材质槽,然后点击“应用”。

  7. 将FBX拖拽至“场景”窗口,点击齿轮图标并选择“重置变换”,这将使模型居中并设置其缩放比例为1。

  8. 在顶部工具栏中,选择 Pumkin>Tools>Avatar Tools. 点击 “Select from Scene”,然后点击 “Quick Setup Avatar”. 同时记得把 “Fill Visiemes” 和 “Fill Eye Bones”点上。

  9. 在顶部工具栏中,打开 VRCSDK>Show Control Panel. 登录后,进入构建器标签页,自动修复所有红色错误,然后点击“Build and Publish for Windows”。

  10. 稍等片刻,填写必要的信息,完成上传。(如果右侧头像不正确,你可以去场景窗口,拖动 VRCCam 并返回游戏窗口).


你可以通过 Pumkin's tools 调整头像的尺寸/缩放。
如果您不使用工具,而直接缩放,请记得重新定位视点。

设置纯色背景非常简单!在相机组件下,将清除标志更改为“纯色”,并点击颜色框选择自定义颜色。

你也可以通过 Pumkin’s Avatar Tools 来更轻松的制作自定义的模型头像!

通过导入图片,并将检查器中的纹理类型从“默认”更改为“精灵”,相机从“透视”更改为“正交”,将这张图片作为模型的头像上传。

(对于初学者来说,上传为虚拟形象可能会有些复杂。我计划在收集反馈后制作一个简洁的视频教程,解释用户可能遇到的错误以及如何克服它们。该视频将主要针对完全初学者,教授如何在Unity中上传预制模型,以及如何在 Blender 中进行修改。遵循最佳实践,最终你的头像应获得优秀的性能评级[浅绿星, Good 评级])

( VRChat 官方文档中也有一份针对上传第一个头像的初学者指南[docs.vrchat.com],但我认为它不够充分,并且部分内容已经过时,因为它涉及已经被取代的Avatars 2.0。)

故障排除

如果你的头像出现未着色的紫红色区域:

  1. 找到有问题的材质(文件图标是球形的)。

  2. 更换其他着色器(靠近检查器顶部的下拉菜单),如 Poiyomi、VRChat > Mobile > Standard Lite 或 VRChat > Mobile > Toon Lit。

这种情况通常是因为 Unity 在寻找一个不存在的自定义着色器。你可以更改为另一个存在的自定义着色器或 Unity 的标准着色器,但建议首先使用 VRChat 的着色器,因为它们简单且优化良好,并且即使在玩家的安全设置中屏蔽了着色器时,看起来也完全相同。

之后,你可以根据需要决定是否使用更高级的着色器 (Silent’s, Xiexie’s or Poiyomi) 当然,这些着色器更复杂,需要学习和熟悉它们的功能以发挥最大潜力。
另外, Silent’s Cel Shader 是 Cubed’s Cel Shader 的重写后版本(后者现已弃用)。

你可能还需要在模型的骨架中取消映射下巴。点击 FBX 文件,转到 rig 标签,选择 Head,找到分配给 jaw 的骨骼并删除,然后应用更改。

确保你的模型 ARMATURE(而不是模型本身)的 XYZ 缩放比例设置为1,1,1。

转换与上传至 Quest

你可以通过 VRChat 官方的方式[docs.vrchat.com]进行转换和上传,这需要维护两个独立的项目;或者,你可以使用我提供的单项目方法。

  1. 复制你的模型。

  2. 按F2并在层级结构中的名称后添加"Quest"。

  3. 导入 EasyQuestSwitch [github.com]。

  4. 设置所有材质,使它们在 Quest 上切换到 VRChat/Toonlit 着色器。

  5. 在 VRCSDK 窗口的上传标签下,选择 "Switch Build Target to Android" (会花一点时间)

  6. 使用 Pumkin's Avatar Tools 从模型中移除不兼容的组件,如 Dynamic Bones 和 constraints。

  7. 打开 VRCSDK 窗口,修复任何其他错误并上传。

  8. 完成后,在 VRCSDK 窗口中切换回 Windows 构建

以下是如何制作一个为 Quest 端优化的虚拟形象的视频教程:


或者,你也可以使用 Blender CATS 插件中的"Bake"设置来快速生成一个可能略逊一筹的 Quest 端优化虚拟形象。Quest 端优化的虚拟形象可以用作非 Quest 兼容形象的后备选项。

虚拟形象

自定义虚拟形象工作流

VRoid

对于那些不愿意深入处理 MMD 组件及随后创作虚拟形象过程中的繁琐细节,而是希望以一种更统一、更传统的艺术手法来创作 3D 虚拟形象的用户,VRoid 提供了一个绝佳的选择。

您所需做的就是通过 VRoid Studio[vroid.com] 创建一个模型,然后使用 Unity工具, VRM Converter for VRChat[booth.pm]将其上传。

(如果对此部分有更多需求,我可能会进一步扩展它的内容。由于我不太喜欢VRoid的风格,所以我并没有太多使用它的经历。)

拼接一个模型

将不同的组件,如基础躯体、面部、发型、服装等,组合成一个具有统一骨架的单一模型。这些组件通常来源于MMD模型。

以下内容由 Tupper 发布:
MMD 模型是什么,我该如何获取它们?
“MMD”是什么?
MMD 是由 MikuMikuDance(MMD)程序使用的模型文件。该程序通常用于制作音乐视频、动画等。在YouTube上搜索"MMD舞蹈",你将找到许多使用这些模型的示例。

它们是导入模型的理想选择,因为它们配备了完整的骨架、纹理和 UV 贴图。你所要做的只是将其设置为适用于 VRChat ,这正是我在指南中所涵盖的内容。

如果你不想成为一个二次元人物,那么很遗憾,MMD 模型通常是动漫风格的。你可能需要考虑导入 Source Filmmaker 或GMOD 模型,或者访问 Models Resource[www.models-resource.com],这是一个包含从游戏中提取的模型的大型资源库。

我该如何获取 MMD 模型?
许多人建议在 DeviantArt 上寻找模型,但大多数模型都是“缝合怪”——也就是说,有人将多个部件组合起来创造一个原创角色。这些模型可能看起来独特且有吸引力,但它们的多边形数往往非常高。这就是为什么我推荐以下两个网站来寻找 MMD 模型:

Nicovideo[3d.nicovideo.jp] - 提供极高质量模型的绝佳资源,尤其是 Kancolle 系列。

Bowlroll[bowlroll.net] - 同样是一个优秀的资源站,但可能稍微难以查找资源。

这两个网站都是日语的,因此我建议使用 Google Chrome 的自动翻译功能来浏览页面。此外,这两个网站都需要注册账户——我只需用我的 Twitter 账号登录 Bowlroll,但为 Nicovideo 。我需要创建一个账户来登录。

非常重要 - 尊重协议
艺术家们投入了大量的努力来制作他们的模型,并且他们通常对模型的使用有特定的许可协议。请确保已阅读,并尽可能严格遵守这些许可协议。

虽然使用不符合许可条款的模型并不会导致你被 VRChat 封禁,但艺术家可能会向 VRChat 发出 DMCA 下架请求,以移除该模型。在这种情况下,模型将从服务器中移除,而 VRChat 可能会通知你。

通常,如果你通过社交网络工具联系创作者,并解释你打算如何使用该模型,他们会同意的。你没有通过该模型获利,所以有时艺术家们会乐意让你“扮演”他们的角色。

例如,我在 VRChat 中使用的模型是 electrica2014 制作的东方角色 Cirno。我通过 Google 翻译在 Twitter 上联系了 electrica2014 ,并解释了我的用途。他很高兴让我使用该模型,因为我征得了他的同意。

就东方的许可而言,ZUN 对东方的许可非常开放——他允许使用(甚至销售)粉丝作品。VRChat 在许可方面最接近的概念是“cosplay”,所以如果许可中提到 cosplay 是允许的,那么你很可能是没问题的。

最后,违反 MMD 的许可规则还有一个副作用——如果这种情况变得普遍,MMD 艺术家将不太可能在未来公开发布他们的模型。显然,我们不希望看到这样的结果——所以,请征得同意再使用!

Tupper 的教程 - 从 MMD 创建自定义虚拟形象
VRChat 指南
作者: Tupper
本指南包含了我制作的一系列不断更新的视频,涉及从 MMD 源导入、优化和设置自定义虚拟形象。

(我直接复制粘贴了这部分内容,而没有提供链接,因为指南的其他部分已经过时)


免费模型指南[gitlab.com]

模型素体与配件选择[vrchat.fandom.com]

拼接模型的过程包括收集所有你想要的部件,通过 CATS 将它们导入到同一个.blend文件中(别忘了点击“Fix Model!”),将它们摆放到与基础模型重叠的位置,并通过 CATS 在 Custom Model Creation 标签下进行合并。

在多边形数量高的对象上应用简化修改器。在制作纹理图集之前,记得保存一个新文件(在Blender的“另存为”菜单中点击+号可以方便地另存为)。

在 Blender 中制作模型时,除非绝对必要,否则不要应用破坏性更改!

破坏性更改是指那些无法通过简单的 Ctrl+Z 撤销的操作,比如点击修改器上的“应用”,或者制作纹理图集。

在进行破坏性更改之前,请务必另存为新文件!

你可以在Blender的“另存为”菜单中通过点击+号轻松另保为新文件。

这种工作流程使得你的模型在导出到 Unity 时易于定制,同时也保持了优化。
此外,你还可以拥有多个存档点,以便在制作过程中发生意外时可以及时撤回,而不用从头开始。

如果出现问题,Blender还会自动保存备份文件(通过“文件>恢复>自动保存...”访问)。

虚拟形象

学习自定义虚拟形象创作

CATS 文档(在此处学习 CATS)[github.com]

Twist Bones(扭曲骨骼)

Lip sync(口型同步)

若要通过 CATS 自动生成口型同步,请访问“Visemes”下拉菜单。您至少需要3个基本口型键:AA、OH 和 CH。具备这些条件后,启动 CATS,打开“Visemes”菜单,选择相应的形状键,并点击“创建 Visemes”。[这将生成 VRChat 中进行唇形同步所需的15个 Visemes]

如果 3 个插槽未自动填充对应的口型键,请尝试通过“Model Options”下拉菜单对您的模型进行转换。如果您的模型中尚未包含形状键,则必须使用 Blender 创建它们。

在 Unity 中,可以通过 Pumkin's Tools 来填充 Visemes。

https://youtu.be/gdV-j1aMt6s  - (可以看看这个视频,如果您的模型没有附带 CATS 所需的 3 个 Visemes)

https://youtu.be/ZB2aXKkwXuA - (不常见,需要额外工作)


Eyetracking(眼部追踪)

允许模型的眼睛四处游移并聚焦在感兴趣的物体上。您可通过 CATS 配置这个功能。弹出的工具提示将为您提供指导。
在 CATS 中配置好后,首先通过使用 Pumpkin's tool 在 Unity 中启用这个功能,然后在 VRC Avatar Descriptor(虚拟形象描述符) 中设置 Eye Rotation(眼部旋转)。

删除外表不可见的多边形面

如果基础网格上有衣服,请删除下方应覆盖的多边形!这不仅能提高性能,还能防止穿模!

选择基本网格,进入线框模式并选择要删除的面。然后转到网格的数据属性选项卡(的绿色倒三角形选项上),创建一个新的顶点组,并只选中要删除的面,然后点击分配。完成后重命名该顶点组为您容易记住的名字,然后取消选择。

在删除这些面之前,请先保存一个新文件!

自定义手势/表情(Avatar 3.0)

在 Unity 的 SDK 中找到 Examples3 文件夹。点击 vrc_AvatarV3HandsLayer.controller 并复制它(Ctrl+D),然后重命名为您容易记住的文件名。在模型文件夹中新建一个用于放置动画的子文件夹,并将新控制器放在其中。

在 VRC Avatar Descriptor 中的 Playable Layers(可播放层)下单击 Customize(自定义),然后在 FX 栏右侧的 Default Non-Transform 按钮上单击,将控制器拖入该插槽。

在场景中复制你的模型。打开动画窗口(Ctrl+6)。创建一个新动画(如微笑)。点击录制。然后点击层次结构中的身体网格,在蒙皮网格渲染器中打开 Blendshapes 下拉栏(形态键)。拖动它们做出你想要的表情(在本例中,Blendshapes 包括眨眼快乐、微微一笑和微微扬起的眉毛。)

完成后,在动画制作器中点击第 0 帧顶部的菱形,按住 Ctrl+C,然后在第 1 帧按住 Ctrl+V。

在动画控制器窗口中,导航到手的动作(本例中为 "Open"),并在检查器窗口的 Motion 槽中拖入设置动画文件。

AV3 演练 - 第 3 部分 - 权重、混合和跟踪 - Avatar 3.0[ask.vrchat.com]

装配

许多模型和底座都可能是预先安装好的。如果您自己装配模型,则必须符合 [VRChat 装配要求](https://docs.vrchat.com/docs/rig-requirements)\[docs.vrchat.com\]。 如果使用人形模型,请确保在模型导入选项中将其设置为人形。 如果使用的是非人形模型,请使用通用装备(genic rig)[并且最好使用您自己的动画控制器(animation controller)]。

可以在 Blender 中使用 rigify 进行装配。

还可以通过网站 mixamo.com 快速、轻松地完成装配。
快速入门 - Mixamo 模型创建[vrchat.fandom.com]

重量绘制

骨骼映射到网格的方式是通过权重。骨骼权重可以通过权重绘制绘制到网格上。

权重绘制很难。没有完美的权重绘制。在绘制权重时,你会吃很多苦头。
没关系,这是每个 3D 艺术家在正确装配角色时必须承受的痛苦。

编辑纹理

找到要编辑的图像纹理(如头发纹理),并将其带入图像编辑器(如 GIMP 或 Photoshop)。如果要编辑颜色,请选择要编辑的内容,然后在颜色设置上做文章。如果完全想改变颜色,先将其设置为灰度,然后再改变色调。

服装

服装模特可在 DeviantArt 上搜索,搜索 "MMD(服装名称)"。
然后,您就可以使用 CATS 对服装进行母版化。
别忘了尊重规则,很多规则都明确规定不得在 VRChat 中使用。

在 Blender 中创建自定义服装最简单快捷的方法是:选中模型上所有希望有服装的面孔,标记接缝、UV 展开、添加纹理并添加固化修改器,使服装看起来有深度,而不是收缩包裹在模型上。

此外,您还可以根据自己的喜好雕刻服装网格。对于简单的编辑,您只需使用抓取笔刷(键盘上的 G)即可。
您也可以使用 Blender 基于物理原理的布料笔刷进行雕刻,并将额外的细节烘焙到法线贴图中。

在 Blender 中,通过 "拼接 "应用了布料物理特性的 2D 平面,可以更真实地创建服装。 [https://youtu.be/HPz5gk\_AT6w](https://youtu.be/HPz5gk_AT6w) [https://youtu.be/7ULae\_1GVpc](https://youtu.be/7ULae_1GVpc) 我不推荐这种方法,因为它很繁琐。

如果你对制作 3D 服装特别感兴趣,你可以购买 bartoszstyperek 提供的 Blender 服装工具,或者定制你的服装模型。为特定模型定制服装模型通常会让装配变得更简单、更精确,而且通常会减少多边形数量。遗憾的是,Marvelous Designer 不再出售永久许可证,所以即使是真正想设计 3D 衣服的人,我也不推荐使用它。

头发

对于动漫风格的 3D 角色,您需要基于几何图形的头发(而不是基于粒子的头发)。根据您想要的最终效果,有不同的头发建模方法。

纹理绘画

在模型上绘制纹理的过程。对于非 PBR 纹理绘制(只是漫反射纹理),Blender 可以很好地完成。可以通过 GIMP 或 Photoshop 编辑预制的图像纹理(如 MMD 面等)。

迄今为止,Substance Painter 是最强大的 PBR 纹理绘制应用程序,但也是最昂贵的。替代软件包括 ArmorPaint(预编译版本 16 欧元)和免费的 Quixel Mixer。

同样,如果您只是绘制漫反射纹理,只需使用 Blender 即可。

Avatar 3.0

AV3 攻略索引 - Avatars 3.0[ask.vrchat.com]

全身跟踪

VRChat 建议不要使用钻机黑客,因为它们可能会在未来的更新中被破解。

####

完成模型创建(初学者勿用!!!)

你是否有足够的受虐倾向,想要自己制作模型的每一个部分?
Rainhet 的模型课程似乎是在 Blender 中从头开始制作模型的最精简、最简单的课程。

有一个逐步播放列表和一个节选播放列表

(DATED, Avatars 2.0) 自定义动画

Avatars 2.0 现已废弃。请勿将其用于新项目。

要添加这些动画,请在 VRCSDK 中找到 CutsomOverrideEmpty 文件。复制该文件(ctrl+D)并重命名(类似 CustomOverride)(按 F2)。

单击该文件后,动画槽将出现在检查器窗口中,但其中没有任何内容。 空。如果是空的,动画将是 VRChat 的默认动画;如果填充的是 .anim 文件,它将被覆盖并使用该动画。

要将动画应用到模型上,请单击模型并将自定义覆盖拖到检查器窗口中模型动画组件的自定义站立动画和自定义坐姿动画插槽上。

虚拟形象

有关模型优化的注意事项

模型制作之”切勿“事项


切勿在模型上设置自动播放的音频(如加载时播放的音乐)。这种音频会在玩家重载模型时再次重放,比如每次更改安全设置时。这是您可以在模型上安装的最令人讨厌的组件之一,因为世界上的每个人都能以相同的,非空间化的音量听到它,所以请避免使用它。

切勿在模型中添加实时灯光。

切勿使用粒子特效;这些没有必要的特效会降低帧率,而且易使玩家恶心、癫痫和焦虑。

切勿在模型上使用屏幕扭曲效果。这是模型上最糟糕的组件,因为它同样易使玩家恶心、癫痫和焦虑。


模型优化技巧

请首先了解模型性能限制
并阅读 VRChat 官方模型优化技巧文档
尽量使用 Blender CATS 插件!
以及 Pumkin’s Avatar Tools ,它可以让您非常轻松地删除模型中不必要的内容!

模型下载大小

  1. 在每个纹理文件(图像,通常为 .jpg 或 .png)的对应检查器窗口上,
    在压缩选项中,选择中等质量或 Normal
  2. 开启 crunch compression
  3. 点击应用

(您可以在多选纹理的情况下进行此操作,以提高效率)


多边形数量

您可通过网格简化来降低模型面数。您可以直接使用 CATS 对模型进行快速减面,或者使用 CATS 将模型分为数个独立网格(如按松散部件),然后对这些网格单独应用精简修改器,以获得更好的效果。


材质数量

您可打开 CATS 侧边栏,在其中的 Optimization 下拉菜单中, 在“材质"选项卡中,一键合并相同的材质。
合并不同的材质,同时把多个纹理合并为一个图集,这样可以减少绘制调用并提高性能。

骨骼数量

越少越好。您可以通过将骨骼的权重并入父骨骼来减少骨骼的数量。许多 MMD 模型的衣服等部位的骨骼数量远远超过 VRChat 的最佳值。CATS 有一个骨骼合并部分。


Dynamic Bones

Dynamic Bone 来自一个付费的 Unity 插件,它允许骨骼利用物理原理延迟回到默认静止位置,并主要用于头发或动物耳朵。它们通常是模型上最耗费性能的组件,因此如果您想使用它们,请首先适当合并您的骨骼链,并尽可能将 Dynamic Bones 的使用量保持在较低的水平。

请注意,Oculus Quest 不支持 Dynamic Bone。


Dynamic Bone 组件

您应当将该组件,放在需被动态化的骨骼的父级骨骼上,组件数量越少越好。例如,如果你想在头发上设置 Dynamic Bone,可以在头部骨骼上设置一个 Dynamic Bone 组件(并排除所有非头发骨骼),而不是在每一串头发骨骼上设置一个单独的 Dynamic Bone 组件。


Dynamic Bone collider 组件

可使模型上的 Dynamic Bone 与该组件发生碰撞。一般情况下效果不佳,且对性能影响很大,最好不要使用,如果您确实需要使用它,推荐最多使用 2 个,每只手一个。

请注意,该组件的碰撞形状是一个胶囊,而不是一个球体。

您可通过 Pumkin’s Avatar Tools. 可以轻松移除碰撞器。

在 "安全设置 "的 "性能选项 "中有一项名为 "限制动态骨骼使用 "的功能,该功能默认已启用,可将 Dynamic Bone 骨骼数量的最大数量限制为 32 个,Dynamic Bone 组件的最大数量限制为 8 个。您可通过合并骨骼权重和使用较少的 Dynamic Bone 组件,并在这些组件上设置排除项(例如,在头部骨骼上设置一个用于头发的排除项,但排除所有非头发组件),尽量将骨骼与组件数量量控制在限制内。


针对 Quest 端的模型优化

请首先在这里,查看所有 Quest 端的模型限制。
并阅读针对 Quest 端的 VRChat 官方优化技巧文档

总结:渣优化模型之九宗罪

虚拟形象

模型材质与着色器

标准着色器不适合用于硬表面,也不适合用于许多角色模型上的一些特征,如皮肤头发、眼睛或布料。如果您要追求逼真的风格,最好寻找更专业的 PBR 着色器来满足您的需求。

通常您应避免在模型上使用高度贴图。(高度贴图在观察角度较大时会出现破损,而且对性能要求较高。它们更适用于世界中的某些环境模型,而不应当用在玩家模型上)。有关高度贴图的更多信息,请查看 "世界材质 "页面。

Quest 模型需要使用 VRChat 的着色器,主要是 Standard Lite 和 Toon lit。如果您不打算制作 Quest 模型,则一般应避免使用这些着色器。

用于模型的两种最流行、最通用的卡通着色器是 Poiyomi'sSilent's

Poiyomi 有很多功能,并有丰富的 视频文档

Silent 的着色器也有很多功能和书面文档

您可以亲自试用这两种着色器,看看自己更喜欢哪一种。

Thickness map(厚度贴图)

用于次表面散射(SSS),模拟光线穿过材质的情况。例如皮肤、树叶或布料。 

您可以在 Blender 中通过反转法线并烘焙环境光遮蔽来生成此贴图。

您需要一个自定义着色器来应用它,比如 Poiyomi,或者 Silent 的 photorealistic SSS 和 toon 着色器。

世界

世界

基本上传和建模 - 世界

学习世界创建的最简单、最全面的方法是观看本指南顶部链接的系列教程:[https://youtube.com/playlist?list=PLPdWkxUSZ65Fp6ICr\](https://youtu.be/uLi52YrrDmY)

我推荐使用 VRWorldToolkit:一个用于制作 VRChat 世界的 Unity 编辑器扩展[github.com]。它将帮助你优化你的世界。

EasyQuestSwitch[github.com] 可以帮助将世界(或头像)从 PC 切换到 Oculus Quest:允许将所有指定资产的属性(如材质的着色器)切换到指定的 PC 或 Quest 版本,只需一个按钮。

Probuilder

制作/试制关卡和关卡几何图形的好帮手。它实际上是 Unity 中的一个简单 3D 建模器。

</span

提示:
创建空的 Gameobjects(GameObject>Create Empty 或 Ctrl+Shift+N 或右键单击 Hierarchy>Create Empty)并将其用作文件夹来组织对象!在将任何东西作为 gameobject 的子对象之前,请重置变换!!!不要移动空的 gameobject!不要移动空游戏对象本身,而要移动其中的所有对象(如果不这样做,会破坏程序!!)。

当多个二维平面处于完全相同的位置时(例如墙上的一幅画),就会出现 Z-Fighting,也称为拼接。避免这种情况的方法是将应该重叠的物体向前移动微小的距离。

Polybrush

用于在 Unity 中进行简单的雕刻。非常适合制作自然景观。

UNOFFICIAL VRChat Creator Glossary[docs.google.com]

资产猎取

提示:只下载您认为会用到的免费资产;您可以随时回来获取它们。您可以在 Unity 资产商店找到大量免费和付费资产。下面我将列出一些其他的免费资产网站:

Kenney Free Assets

纹理

如果有的话,请检查您下载的材质的尺寸度量。这将告知您需要更改多少贴图设置才能使其正确缩放。它们通常以一米为单位(如 1m x 1m)。

在寻找纹理时,请选择无损 .PNG 而不是有损 .JPG。如上所述,Unity 会压缩纹理;在 Unity 中使用无损图像将获得更高质量的纹理和更小的纹理尺寸。

[(完全可选)如果想在电脑上无损压缩 .PNG,可以使用 PNGGauntlet 这样的程序。Unity 不会以 PNG 或 JPEG 等常见图像格式存储纹理,因为它们的解压缩时间相对较慢。]

纹理搜索引擎(textures.one/] 免费 PBR 纹理网站:

如果非彩色纹理在 Unity 中显示为彩色(如轻微的绿色),请将其导入 GIMP 等照片编辑程序,并导出为灰度图像(GIMP 中为 8bpc GRAY,如果有 alpha/transparency 通道则为 GRAYA)。

[Substance播放器](https://substance3d.adobe.com/documentation/sp31/substance-player-2294742.html)是一款免费程序,您可以使用.sabar文件轻松创建自定义的高质量纹理。您可以在 [AmbientCG.com](https://ambientcg.com/list?type=SBSAR) 免费获取这些文件。

模型

寻找模型要比寻找纹理困难得多。请确保

文件格式为 .obj 或 .fbx,最好是后者 多边形数量较少(否则您将不得不自己对其进行分解)

我建议先查看 Unity 资产商店。如果找不到,那就谷歌一下"(*对象名称/*3D 模型"。
免费 3D 模型网站& 资源/[devga.me/]

细化(降低网格的多边形数)可以通过删除/合并顶点/面手动完成,也可以自动完成。
要在 Blender 中自动完成,可以在 CATS 中选择快速去边或在网格上使用去边修改器。
\如果你想更进一步,十进制修改器也是创建 LOD 的好帮手。
还有一些专门用于去角质和重拓扑的程序,比如免费的 Instant Meshes。

切勿将 .blend 文件直接导入 Unity!先导出为 .fbx,然后再导入!

您还需要一个天空盒。你可以从 Unity Asset Store 获取一些,或者我也喜欢 TowelCloud's skyboxes[gitlab.com]。

世界

物理

Pickupabble 对象需要 3 个组件:

要使 VRChat 对象可被抓取,请在 GameObject 中添加 VRCPickup 组件。
这将自动添加一个刚体(如果还没有的话)。

对撞机类型[按性能成本从低到高排列]:

网格对撞器会根据网格形成对撞器。如果应用到具有刚体的物体上,网格碰撞器应该设置为凸形,这样它就可以与其他具有刚体的物体碰撞,这些刚体也具有凸形网格碰撞器。
凸形碰撞器还会将碰撞网格限制为 256 个三角形。
此外,"凸 "与 "凹 "有关;碰撞器不是凹形的;例如,任何开口(如碗或杯子上的开口)都会被凸形碰撞器覆盖。
在为具有刚体的物体创建对撞器时,最好使用基元或基元组合,以获得性能和可信度兼具的效果。

正交视图模式(所有物体与摄像机的距离相等)对编辑碰撞器非常有帮助。要启用该模式,请单击场景视图右上角的方框。
例如,在一个啤酒瓶上,我会在可以滚动的部分周围使用一个胶囊对撞器,在胶囊内使用一个方框对撞器,方框对撞器延伸到瓶子的顶部和底部,这样瓶子就可以竖立起来。

要优化拾取器,请确保所有拾取器都位于层次结构根部的单个游戏对象之下。每个具有刚体的对象不仅需要在每一帧更新变换,还需要更新其所有父游戏对象的变换。确保所有拾取器都在一个父对象下,这样既能使层次结构井然有序,又不会浪费性能。

例如,如果您有一个地毯地板,您可以为其应用高摩擦力物理材料,为冰层应用低摩擦力物理材料。有几种物理材料带有 Unity Standard Assets[assetstore.unity.com]

对于复杂的网格,请勿使用网格粘贴器!(这非常耗费精力!)。 最好在对象上添加一个或多个基元(盒状、球状或囊状)对撞器,使对撞器与网格相匹配。
在三维建模程序(如 Blender)中,您可以在同一模型中创建一组更简单的网格,关闭它们的网格渲染器,并为更简单的网格添加网格对撞器。这将节省性能,而且大多数玩家不会注意到其中的差别。

Unity 还使用不同类型的连接。这些对于创建物理门之类的功能非常有用。

</span

世界

预制件

预置可将对象及其所有组件保存为单个资产。 这些对于灯具或拾音器等特别有用!将光源和 3D 模型组合到预制件中!将拾取器、其 vrc_pickup 脚本和碰撞器组合到一个预制件中!

查看 Udon prefabs section[docs.google.com] of VRCPrefabs.我还推荐 Vowgan's Collision Sounds[vowgan.booth.pm], they are incredibly satisfying.

世界

世界教程系列

您是否曾想过创建自己的世界,但却不知从何下手?

完整播放列表在此

世界

照明

照明类型:
灯光类型:

理想情况下,所有灯光都应烘烤,不应使用实时灯光

VRChat中的实时灯光要么看起来很糟糕,要么会降低帧速率,或者通常两者兼而有之。

那么如何为动态对象打光呢?灯光探测器。这些探针会预先计算对象在该探针位置的照明效果。许多探针被放置在一个组中,当动态对象穿过该组时,它们会与探针混合并相应地点亮。

反射探测器

用于反射。它们就像照相机一样,从所放置的位置(6 个方向)拍摄 6 张照片,然后将这些数据组合成立方体地图(球形图像)。重叠的反射探头可进行混合。
切勿在 VR 中使用屏幕空间反射。

反射探针指南([gitlab.com/])</span Reflection Probe Box Projection([docs.unity3d.com/])</span

灯光设置

转到 Window>Rendering>Lighting Settings(窗口>渲染>灯光设置),弹出该窗口。

如果场景完全在室内,没有窗户,请关闭天空盒照明。
如果是室外场景,则打开天空盒照明,并在照明设置中设置定向光源。

单位像素

Texels 就像放置在物体上的像素,用于计算烘焙光照。对于许多 PC 世界来说,我认为每单位约 30 个像素足以兼顾质量和大小。
将灯光设置为柔和的阴影。

要实际查看灯光贴图的像素如何投射到几何体上,可以单击 "场景 "窗口顶部的下拉菜单(通常设置为 "阴影"),将其设置为 "烘焙灯光贴图"。

要更改网格的光贴图 UV,可以在模型设置中进行(点击 "项目 "窗口中的模型,更改 "模型 "选项卡底部的 "生成光贴图 UV "设置)。

虽然某些阴影较短的物体使用硬阴影可能更准确,但在较长的距离上,软阴影更准确,而且在较低的像素分辨率下看起来更好。Unity 并不包含 PCSS(百分比接近软阴影)等开箱即用的自适应阴影。 下次在阳光下,看看你的阴影。看看靠近原点(你的脚)的边缘是如何清晰的,而越往上越模糊!这就是 PCSS 等技术所模拟的效果。

不要过度使用像素!像素越多,光贴图的文件大小就越大!

https://unity3d.com/how-to/progressive-lightmapper-optimization-tips

在某些情况下,由于光映射 UV 重叠(常见于 probuilder 对象),您会希望使用更高的 texel 数。UV重叠([docs.unity3d.com/])</span

在您的关卡设计中,如果您的灯光是烘焙的,请避免在地板上或墙壁低处放置细节阴影;在这些阴影上行走的非静态模型将不会投射到这些细节阴影上。

灯光贴图分辨率

控制灯光贴图的最大分辨率。将其设置为只有一个光贴图,以获得最佳性能。

反弹

控制光线的反弹次数。[这些需要很长时间来烘烤] Most scenes shouldn't need more than 2.\例外情况是完全间接照明的场景。

Occlusion Culling/[docs.unity3d.com/]

将您的静态 GameObjects 设置为 static [这将把子参数、occlusion 和 occludee static 设置为 true] 。然后转到 Windows>Rendering>Occlusion Culling,并在上传您的世界之前点击 bake。

Unity 将不会呈现玩家看不到的头像;由于呈现头像对性能的影响最大,因此良好的 VRChat 关卡设计应下意识地引导玩家只关注与之交互的其他玩家,而不会在后台呈现一堆他们并不关心的性能不佳的头像。

世界

关卡设计

你是否拉过门把手,只是在你应该推的时候?关卡设计就像门的设计一样,最好的状态是你根本不会注意到它。 通过关卡设计,你可以让人们在潜移默化中执行操作。这听起来可能很明显,但人们不会做他们做不到的事情。 作为一名关卡设计师,你的工作就是以这样一种方式来设计你的关卡,让人们在不知不觉中做你想让他们做的事情。 例如,不想让人们聚集在某个区域(如楼梯)?通过设计,您可以使人们聚集在那里的可能性大大降低(例如,将该区域设计得比周围区域更小、更不吸引人)。 通过设计,您可以极大地影响玩家的行为。

推荐视频: .

</span

- 设计适用于我们所使用的一切,而不仅仅是电子游戏

在 VR 关卡设计中,有一个非常重要但又经常被忽视的方面,那就是海拔高度的变化。在游戏空间中行走时,高度不应不断变化。即使是在游戏空间中平移,但在游戏中上下移动一个斜坡,也会造成极大的迷失。 在虚拟现实中,海拔高度的变化应该是

- 预期的

VRChat 有一个名为 "Walkthrough "的图层;如果将对象设置为该图层,物理对象仍会与之发生碰撞,但玩家将穿过该图层。我建议将大部分家具设置为该图层。

{如果您对关卡设计超级感兴趣,您可以阅读这篇由业内专家撰写的关于该主题的 123 页文档[docs.google.com]

世界

粒子

Particles([docs.unity3d.com/])</span

关于粒子的一个重要注意事项,您可能已经看到,如果您在游戏中滚动耳机,粒子会随着您的头部动作旋转。如果渲染器选项卡下有 "允许滚动 "选项,请取消勾选。这将解决该问题。

世界

后期处理

使用 VRWorldToolkit 的快速功能,您可以轻松地对场景进行后期处理。

更多信息请阅读 Silent 的帖子

***如果您想在材质上使用屏幕空间反射效果,可以使用 Moochie 的着色器,但 SSR 经常会损坏,尤其是在 VR 中,而且它的性能成本很高,所以如果您使用它(几乎总是不应该使用),请谨慎使用!!!!!!!!!!

**屏幕失真/翘曲效果绝对不能在 VR 中使用。

就像真实的相机或你的眼睛一样,它可以根据虚拟相机的光线强弱自动调整曝光。进入后期处理卷,在自动曝光下,最重要的设置是最小和最大 EV 值。如果您将鼠标悬停在这些设置上,系统会给出简要说明,如果您需要更多信息,可以点击所有 Unity 组件上带有问号的圆圈。</span

我(基于经验,没有实证或研究,所以不要引用我的观点)建议将最小 EV 设置为 -0.7(至少对于室内),最大 EV 设置为 0.7,曝光补偿设置为 0.7。如果您发现曝光波动太大或太快,可以将最小值和最大值设置为相同的值。

世界

音频

[Audio](https://docs.unity3d.com/2018.4/Documentation/Manual/AudioOverview.html)\[docs.unity3d.com\]
创建一个新的 GameObject 并添加一个 VRC Spatial Audio Source 组件,这将自动添加一个音源组件。

如果是世界音乐,请取消选中启用专业化。

要压缩音频,请将压缩格式设置为 Vorbis,并将滑块调低以获得更多压缩。 如果音频是空间化的,请选中 "强制为单声道"。

Audio-basics-crash-course[ask.vrchat.com]

世界

Udon

Udon 是如何在 VRChat 世界中编写代码的。它是一种可视化脚本语言,这意味着它使用的是块和节点,而不是传统的代码行。    如果您已经了解 C#,并希望使用它来编写您的Udon脚本,您可以使用 UdonSharp[github.com] 这样做。    Udon入门([ask.vrchat.com/])</span VRChat Udon 教程

许多人认为编码是一个令人生畏的黑盒子。作为一名程序员,我可以向你保证,对编码原理的基本了解并不像某些人描述的那样复杂。我能给你的最好建议是

最后一条是最重要的。想一想计算机为达到预期效果而必须完成的确切逻辑步骤。然后将其组合在一起,这主要是一个将逻辑转化为计算机代码的过程。    哦,还有 2 个最重要的提示: *阅读控制台!写评论!!!!!!!!!!!!!!!!!!!!!!!!!!。    Unity 基于 C# 运行,因此如果您想开始学习编程语言,C# 将是一个很好的开始。截至发稿时,Brackeys 正在制作一个有关 Unity 编程的系列教程。如何用 C# 编程 YT 播放列表

基础知识

数据类型:

注意,C# 中的 ints 是 32 位的,这意味着它们有 ~21 亿的限制,无论正负。超过此限制将导致溢出,从而引发错误。

另外,您还可以使用社区开发的 UdonSharp。它可以将 C# 脚本翻译成 Udon 行为。它更加可靠,如果您有基本的编码经验,我建议您使用它,而不是 Udon 的可视化脚本。

世界

最后的工作(版本控制、优化)

版本控制

如果你在一个世界上投入了大量的时间和精力,那么版本控制是必须的(以免你像我一样最终丢失了你的工作)。版本控制可以跟踪您对项目所做的更改,并允许您将项目还原到之前的状态(如果出了问题,这是不可或缺的)。

<span style="color: 在一个世界中工作,你很可能是一个人在一台电脑上,所以我建议使用 Sourcetree([www.sourcetreeapp.com]

优化(回顾)

世界创建、优化和社区实验室技巧([docs.vrchat.com/]) 任务内容优化([docs.vrchat.com/])

请记住,遮挡剔除只会影响物体的视觉渲染!视图之外的对象仍会被处理并影响性能!

确保在性能较高的游戏对象上加入切换按钮,例如:

使用 Unity 剖析器!它将帮助您找到世界中导致性能下降最严重的地方!这对于确定如何优化脚本尤其有用!




世界

用 Blender 制作世界(进阶用户)

Blender 中的关卡设计

您可以使用 Probuilder 在 Unity 中对基本关卡设计和形状进行灰盒化,并使用 Probuilder 的导出功能或 FBX 导出器(可在软件包管理器中下载)导出资产,以便在比例不变的情况下进一步修改和细化。

有关往返工作流程,请参见 Maebbie 的指南

您还可以使用 ArchViz 加载项(如 Archimesh)在 Blender 中完全制作内饰!

定制斜面型材对细节处理(从椅子到楼梯、底板和柱子等)非常有用。

您可以在 Blender 中使用 SHIFT+` 在飞行/行走模式下移动视口,这与 Unity 中的场景导航类似。

如果你想在 Blender 中创建一个与照片相匹配的场景(参考照片非常重要!!),使用免费的 fSpy 来完成第一件事(即排好 3D 摄像头)是非常棒的!

Blender 现在支持 VR 场景查看,支持 Oculus 和 Windows MR。您可以通过选择加入 SteamVR 测试版,使用 Vive 或 Index 进行查看。(Blender 使用 OpenXR,SteamVR 测试版才刚刚开始支持该标准)。

在 Blender 中编辑资产

拓扑结构非常重要;如果您的网格上的拓扑结构不好,将给工作带来不必要的困难。

您在网上找到的大量网格都具有可怕的、不可行的拓扑结构。

There are programs/addons to remesh, including (surprisingly good) free ones:

</span

在 Blender 中为自己的资产建模

与头像不同,您要为世界建模的资产使用不同的工作流程,即硬表面建模。

(超级重要)学习破坏性建模和非破坏性建模之间的区别:</span

--只要看这个就可以了,不用跟读。它使用了名为 HardOps 和 BoxCutter 的付费附加组件,但要理解视频中教授的概念和技术,并不需要这些附加组件。

Hard Surface Modeling in Blender - YT 播放列表,需要熟悉 Blender

在 Blender 中为高多边形网格绘制法线贴图,然后降低多边形数量(高级) </p

世界

世界材质

要想获得理想的介绍,我建议您观看我的 "创建您的第一个 VRChat 世界 "系列中有关材料主题的视频,或阅读其相关脚本

使用原始页面上列出的 4 种 PBR 着色器之一可以提高视觉质量,还能提供许多附加功能,包括烘焙镜面光照!这将使镜面高光与烘焙光一起出现,而使用标准着色器时则无法实现这一点。

高度(又称位移)贴图

此纹理可嵌入或挤出材质的不同部分。

在 Unity 中,通常应将其设置得很低,否则从某个角度观察材质会破坏效果,这在 VR 中尤为明显。

与其他贴图相比,这些贴图的计算成本更高(因此 Oculus 的文档建议完全不要使用这些贴图)。在某些情况下,这些贴图看起来会很不错,但如果没有必要,则应避免使用。

Originally posted by **docs.unity3d.com**:
[![](https://steamuserimages-a.akamaihd.net/ugc/1482200421113069055/B12A595A448FB3935AB8004959E86BD66BECEBD8/)](https://steamuserimages-a.akamaihd.net/ugc/1482200421113069055/B12A595A448FB3935AB8004959E86BD66BECEBD8/) "上图中从左到右: 1.已分配反照率的岩壁材质,但没有法线贴图或高度贴图。 2.已指定法线。表面修改了照明,但岩石之间没有相互遮挡。 3.指定了法线贴图和高度贴图的最终效果。岩石似乎从表面突出,较近的岩石似乎遮挡了后面的岩石"。

位移贴图是使用 Unity 中的视差贴图计算的。这是一种性能相对较低的实时近似方法,但也不是非常精确,而且在角度较大时会产生错觉。使用类似 Mochie 标准的着色器,您可以控制视差贴图的 "步数"。

[辅助贴图(细节贴图)& 细节遮罩](https://steamcommunity.com/linkfilter/?url=https://docs.unity3d.com/2018.4/Documentation/Manual/StandardShaderMaterialParameterDetail.html) 用于显示额外的细节或瑕疵,例如表面的裂缝、划痕或皮肤的细小毛孔。Originally posted by **docs.unity3d.com**:[![](https://steamuserimages-a.akamaihd.net/ugc/1495711913292348208/F6100F4EA2AC54417FBC244D060FB08092A8D6B9/)](https://steamuserimages-a.akamaihd.net/ugc/1495711913292348208/F6100F4EA2AC54417FBC244D060FB08092A8D6B9/) 这个角色有皮肤纹理贴图,但还没有细节纹理。我们将添加皮肤毛孔作为细节纹理。

最终结果是,该角色现在的皮肤上有细微的皮肤毛孔细节,分辨率远远高于基础反照率或法线贴图层所允许的分辨率。

细节纹理可以对光线照射表面的方式产生微妙而显著的影响。这是在不同光照环境下的同一个角色。您可以找到许多单独的表面瑕疵贴图

厚度贴图

用于次表面散射 (SSS),模拟光线穿过材料的情况。皮肤、树叶或布料就是一个很好的例子。

您可以在 Blender 中通过反转法线并烘焙环境光遮蔽生成此贴图。

您需要一个自定义着色器来应用它,比如 Silent 的 photorealistic SSS 着色器。

您可能还想使用自定义着色器来实现特殊效果,例如使用水着色器伪造体积照明着色器来使光源更加耀眼。

总结

寄语

你已经走到了这一步,不要放弃!保持好奇,永远不要停止学习新事物!

通过实践和考虑所有反馈来提高你的艺术水平,学习你应该继续做什么以及你应该避免什么!

创造可以是极其令人满足的,但当你不知道你在做什么时就不是这样了!继续吸收教育和信息资源!


更多学习资源:

VRChat 文档[docs.vrchat.com]

VRCLibrary[vrclibrary.com]

(非 VRChat 特定)
Unity 2018.4 手册 - Unity 通用信息[docs.unity3d.com]
官方 Unity 教程 (非 HDRP,URP/LWRP,2D,ECS 或 DOTS)
Brackeys - 简洁的 Unity 教程
CGMatter - 娱乐且简洁的 Blender 教程
Digital Foundry - 深入的游戏技术分析
Game-maker’s toolkit - 游戏设计分析


还是找不到您要的东西或答案?

可以在查找时付出英勇的努力(首先检查官方文档)
其次可以发布到 Unity[forum.unity.com]/VRChat 论坛[ask.vrchat.com]


我的视频教程

我现在有自己的简洁的脚本化视频教程了!可以来看看我的 YouTube 频道!

如果您想制作自己的教程,我建议您先观看这些视频:


为什么我写了这本百科

在我学习如何为 VRChat 创建世界和虚拟形象的经验中,我不满于遵循最佳实践的,简洁和最新的资源的缺乏。在询问许多 VRChat 上的创作者,关于他们是如何学习他们的技能时,没有人给我一个令人满意的、可复制的方法。

我在 VRChat 上与许多人交谈过,他们想要创建自己的虚拟形象,但却不知道如何开始。在我看来,那些人需要的是一个全面的指南,而不是分割的指南。这是我写这本百科的意图。



翻译

如果您可以将这本大全翻译成另一种语言,请这样做并将链接指向这个英文原版。


反馈

我相信建设性的批评是一个人可以收到的最有用类型的反馈;它不批评你,它批评你的行为或你的工作,它告诉你确切地你做错了什么,并给你如何改进的想法。如果你可以就如何改进这本指南发表评论,我恳求你这样做,并可能将你的建议和/或信息纳入修订版。这样一来,我们都能学到东西。



这本百科及其内含的书面内容与 VRChat Inc.无关。