哈喽大家好哇!我是跳入西湖,最近在做 John Lemon 项目,学学游戏开发
在导入相关的素材时,发现角色是粉色的(其实是洋红色),一开始我还以为就是这样的,直到我后来创建一个地图场景放到游戏中时,发现场景也几乎是粉色的 我说这怎么可能是正常嘛?虽然我之前没做过游戏,但是咱也不是傻子,这肯定是什么地方出了问题。
啥地方出了问题?
经过搜索、验证,终于知道了这个问题是渲染管道不匹配引起的。
导入的素材用的是 「通用渲染管线 Universal Render Pipeline, URP」,而我项目里默认配置的是「内置渲染管线」,如图:
(其实我也不知道怎么看导入的素材是什么渲染管线,搜了一圈没搜到。只是升级为 URP 后问题解决了,所以我推断是这个原因😊,如果有大佬知道还请指点我一下,感激不尽)
等等?什么是渲染管线?
抛开数学公式和图像原理,渲染管线主要是干了一件事:把 3D 的数据变成一个个二维图像。因为
它解决的是「图形渲染」的问题。所以渲染管线不匹配,那么素材就不能正常的渲染到屏幕上,于是呈现粉色。 更多的基础知识放后面讲哈,现在先把渲染管线改了,步骤如下:
1. 安装 URP
2. 创建渲染管道资源文件
3. 设置渲染管道
给「可编辑渲染管线」设置新的管道资源
【可选】身体还是粉色?
一般来说,设置了 URP 后应该是正常了,但是我当时设置完了以后呢,玩家角色的衣服正常了,身体还是粉色的,当时的图找不到了,差不多跟下面一样:
这个是材质丢失的问题,重新设置一下就行,步骤:
- 先在 Models 中找到这个角色
- Inspector 中找到材质的设置
toon: n.动画角色,指动画片、漫画书等中的虚构角色。
- 设置 JohnToon 为 JohnToonShaded ,选择 Apply 即可
至此,粉色应该都没了,是正常的颜色。
背后的知识
渲染管线
在 John Lemon这个 3D 游戏中,我们添加的环境和角色都是 3D 空间下的,而我们的屏幕是 2D 的,3D 数据必然要转化成 2D 图像,这其中转换的工作,就交给「渲染管线」来做。
目前官方文档上描述的渲染管线有 4 种:
- 内置渲染管线是 Unity 的默认渲染管线。这是通用的渲染管线,能在所有平台上运行,但是不容易定制,同时效率也不是最好的
- 通用渲染管线 (URP) ,本文主角,大大优化了性能,所以是移动、网络和 VR 项目的理想选择,配置也比较复杂。
- 高清渲染管线 (HDRP) 是一种为高端平台设计的渲染管线,可让您在高端平台上(游戏机或者游戏电脑)创建出色的高保真图形。配置复杂,只能由老司机才能使用。
- 自定义渲染管线。
CPU 和 GPU 通力合作渲染图像,CPU不断地把数据丢给 GPU,GPU 如同工厂一样调用一个个计算单元(工人)对数据进行简单处理,最后产出产品------ 图像。分为以下几个步骤:
-
应用阶段:这是 CPU 负责的阶段,它传给GPU 的数据一般是场景灯光、模型、摄像机位置。传之前会对这些数据进行处理,比如把摄像机照不到的地方剔除(culling),避免过度渲染,还会告知 GPU 这些数据的渲染状态(纹理、材质和着色器)。
拿实际的工厂做类比,这个阶段相当于工厂的进货部门,采购员 CPU挑选材料,把材料和对应的加工方法丢给工厂的生产车间 GPU。
-
投影变换阶段:这是 GPU 负责的阶段。也就是渲染管线的部分,这一步要做的事情有------顶点着色器,模型转换与相机转换,坐标变换,逐顶点色彩信息处理,曲面细分着色器,几何着色器,投影,裁剪,屏幕映射。这时,把 3D 的数据转换成了屏幕上的三角形。
-
光栅化阶段,把投影变换阶段获取到的三角形的顶点数据,转化成片元(就是带有深度信息的像素)
-
着色阶段:求物体表面在光照下的光影效果