基础知识
学习虚拟形象和世界所需的先决条件
网格
模型的几何形状被称为网格,它由多边形或二维形状构成:三角形(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 纹理设置:
纹理类型
- 默认- 材质上的所有纹理,除了法线贴图
- 法线- 法线贴图必须设置为此类型才能正常工作
- Sprite(精灵)- 如果您想在 3D 空间中显示 2D 图像时,使用的纹理类型(例如用于挂在墙上的图片)
您应该在灰度纹理上禁用它(例如高度、AO、金属度),否则后者将无法正常工作!!!
如果纹理从远处看起来太模糊,请尝试将过滤算法从盒(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项目资产设立一个专用文件夹,并按照以下类别进行初步分类:
- 角色(Avatars)
- 世界(Worlds)
随后,可以进一步细分为:
- 纹理(Textures)
- 模型(Models)——如果某个纹理与特定的模型相匹配,建议将它们归类在同一文件夹中
- 预制件(Prefabs)
- 着色器(Shaders)
我推荐你根据纹理的类型,对它们进行分类,这与纹理网站,如 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://youtu.be/eSiqYvDHppM