世界

基本上传和建模 - 世界

学习世界创建的最简单、最全面的方法是观看本指南顶部链接的系列教程:[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 着色器。

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