🔥Unity 导入素材为粉色?我用一个插件轻松解决

哈喽大家好哇!我是跳入西湖,最近在做 John Lemon 项目,学学游戏开发

在导入相关的素材时,发现角色是粉色的(其实是洋红色),一开始我还以为就是这样的,直到我后来创建一个地图场景放到游戏中时,发现场景也几乎是粉色的 我说这怎么可能是正常嘛?虽然我之前没做过游戏,但是咱也不是傻子,这肯定是什么地方出了问题。

啥地方出了问题?

经过搜索、验证,终于知道了这个问题是渲染管道不匹配引起的。

导入的素材用的是 「通用渲染管线 Universal Render Pipeline, URP」,而我项目里默认配置的是「内置渲染管线」,如图:

(其实我也不知道怎么看导入的素材是什么渲染管线,搜了一圈没搜到。只是升级为 URP 后问题解决了,所以我推断是这个原因😊,如果有大佬知道还请指点我一下,感激不尽)

等等?什么是渲染管线?

抛开数学公式和图像原理,渲染管线主要是干了一件事:把 3D 的数据变成一个个二维图像。因为

它解决的是「图形渲染」的问题。所以渲染管线不匹配,那么素材就不能正常的渲染到屏幕上,于是呈现粉色。 更多的基础知识放后面讲哈,现在先把渲染管线改了,步骤如下:

1. 安装 URP

2. 创建渲染管道资源文件

3. 设置渲染管道

给「可编辑渲染管线」设置新的管道资源

【可选】身体还是粉色?

一般来说,设置了 URP 后应该是正常了,但是我当时设置完了以后呢,玩家角色的衣服正常了,身体还是粉色的,当时的图找不到了,差不多跟下面一样:

这个是材质丢失的问题,重新设置一下就行,步骤:

  1. 先在 Models 中找到这个角色
  1. Inspector 中找到材质的设置

toon: n.动画角色,指动画片、漫画书等中的虚构角色。

  1. 设置 JohnToon 为 JohnToonShaded ,选择 Apply 即可

至此,粉色应该都没了,是正常的颜色。


背后的知识

渲染管线

在 John Lemon这个 3D 游戏中,我们添加的环境和角色都是 3D 空间下的,而我们的屏幕是 2D 的,3D 数据必然要转化成 2D 图像,这其中转换的工作,就交给「渲染管线」来做。

目前官方文档上描述的渲染管线有 4 种:

  1. 内置渲染管线是 Unity 的默认渲染管线。这是通用的渲染管线,能在所有平台上运行,但是不容易定制,同时效率也不是最好的
  2. 通用渲染管线 (URP) ,本文主角,大大优化了性能,所以是移动、网络和 VR 项目的理想选择,配置也比较复杂。
  3. 高清渲染管线 (HDRP) 是一种为高端平台设计的渲染管线,可让您在高端平台上(游戏机或者游戏电脑)创建出色的高保真图形。配置复杂,只能由老司机才能使用。
  4. 自定义渲染管线

CPU 和 GPU 通力合作渲染图像,CPU不断地把数据丢给 GPU,GPU 如同工厂一样调用一个个计算单元(工人)对数据进行简单处理,最后产出产品------ 图像。分为以下几个步骤:

  1. 应用阶段:这是 CPU 负责的阶段,它传给GPU 的数据一般是场景灯光、模型、摄像机位置。传之前会对这些数据进行处理,比如把摄像机照不到的地方剔除(culling),避免过度渲染,还会告知 GPU 这些数据的渲染状态(纹理、材质和着色器)。

    拿实际的工厂做类比,这个阶段相当于工厂的进货部门,采购员 CPU挑选材料,把材料和对应的加工方法丢给工厂的生产车间 GPU。

  2. 投影变换阶段:这是 GPU 负责的阶段。也就是渲染管线的部分,这一步要做的事情有------顶点着色器,模型转换与相机转换,坐标变换,逐顶点色彩信息处理,曲面细分着色器,几何着色器,投影,裁剪,屏幕映射。这时,把 3D 的数据转换成了屏幕上的三角形。

  3. 光栅化阶段,把投影变换阶段获取到的三角形的顶点数据,转化成片元(就是带有深度信息的像素)

  4. 着色阶段:求物体表面在光照下的光影效果

参考资料

解决洋红色问题的教程

Unity 渲染管线文档

Unity Materials 选项卡文档介绍

初识渲染管线,这文章写得好,简明扼要

相关推荐
羑悻的小杀马特5 小时前
【AIGC篇】畅谈游戏开发设计中AIGC所发挥的不可或缺的作用
c++·人工智能·aigc·游戏开发
la_vie_est_belle16 小时前
《Cocos Creator游戏实战》非固定摇杆实现原理
游戏·cocos creator·游戏开发·cocos·非固定摇杆
Thomas_YXQ16 小时前
Unity3D Huatuo技术原理剖析详解
unity·unity3d·游戏开发·性能调优·热更新
火云洞红孩儿18 小时前
基于AI IDE 打造快速化的游戏LUA脚本的生成系统
c++·人工智能·inscode·游戏引擎·lua·游戏开发·脚本系统
Clarify8 天前
一种增量式的状态同步方案
后端·游戏开发
Thomas_YXQ15 天前
Unity3D项目为什么要使用FairyGUI
开发语言·unity·游戏引擎·unity3d·游戏开发
nicepainkiller15 天前
Flutter 内嵌 unity3d for android
flutter·unity3d
Raysen19 天前
GridLayout玩出花系列-使用Android原生GridLayout控件打造方块消除小游戏
android·游戏开发
Thomas_YXQ1 个月前
Unity3D ngui和ugui区别与优缺点详解
服务器·游戏·unity·unity3d·游戏开发
Thomas_YXQ1 个月前
Unity3D Lua如何支持面向对象详解
开发语言·游戏·junit·性能优化·lua·unity3d