最近在自学Unity,给某个游戏开发Mod,在将模型导入进Unity时,发现了问题。在Blender中看起来正常的模型,在游戏中呈现的效果很奇怪。Blender中本该完全透明的面,在Unity里却显示了出来,效果看起来有点奇怪。


注意看Saber和Rin的眼睛。眼睛的外缘应该是透明的。
为什么会这样呢?
这是因为原始模型自带的基本纹理没有ALPHA通道,在Unity HDRP/Lit shader中,ALPHA通道需要和带RGB通道基本纹理存储在一个文件中,才能正常读取。原模型基本纹理和对应的ALPHA通道纹理是分开的两个文件。因此,这就需要将两个文件合并成为一个文件。
关于什么是Alpha通道,简单来说,它记载着一个像素的透明度。在RGBA图片中,每个像素的颜色值由一个(R,G,B,A)四元数组表示,范围是0-255。其中,RGBA 对应(Red,Green,Blue,Alpha)。Alpha通道并不是必须的。也就是说如果这个像素Alpha通道值为0,它就完全透明,Alpha为255,它就完全不透明。如果将Alpha通道单独输出为一张灰度图,那么纯黑为透明,纯白为完全不透明。
这就需要用到大名鼎鼎的Photoshop了。打开 想要修改的纹理图片, 在其所在的图层创建蒙版, 蒙版内容是单独存储的Alpha通道灰度图,之后整体保存为PNG格式,就可以得到带有RGBA四通道的纹理文件。
之后就是在Unity中重新进行贴图和材质的修改。
对于模型自带的材质,Unity不能直接修改。想要修改,得先从模型中抽离该材质。在Unity界面下方的文件浏览器中,找到待修改的材质,右键,点击Extract from Prefab. 首先会让你选择导出的文件存放在哪,选择好后,界面里用到该材质的部分会变成粉红色,表示材质丢失。需要手动重新绑定,把抽离出的材质拖拽到场景中的对应位置就行。

之后就是设置Shader.
对于只有黑白两色的alpha通道来说,shader里 surface type 选择默认的opaque, 使用Alpha clipping 并调节Threshold 到合适的值即可达到伪透明的效果。但是这样的做法有缺点,因为渲染只能有两个状态:不透明(完全渲染)和完全透明(不渲染)。想实现真正的透明(比如alpha通道有灰色),或者是想实现玻璃效果,surface typ e就必须选择transparent.

Comments | NOTHING