崩坏:星穹铁道卡通着色器
效果图:(更新于2024年7月13日)
这是什么?
这是一个基于Unity引擎URP管线的模仿星穹铁道风格的卡通渲染项目。
致谢
此着色器是根据 Bilibili@给你柠檬椰果养乐多你会跟我玩吗 大佬的视频制作,另外参考了 Github@stalomeow 大佬的 StarRailNPRShader 项目,加入了后处理部分(泛光、色调映射)。在此非常感谢各位大佬无私分享的技术。
安装和使用
- 点击Window>Package Manager,从包管理器的添加菜单中选择"Add package from git URL...",导入https://github.com/stalomeow/StarRailNPRShader.git包(必需)。
- 打开Project Settings>Player>Other Settings,使用线性色彩空间。
- 找到项目使用的Universal Render Pipeline Asset,在Renderer List中找到使用的Universal Renderer Data,确保RenderingPath设置为Forward/Forward+,关闭Depth Priming,点击Add Renderer Feature,将Honkai Star Rail的Renderer Feature添加进去。
- 最后,将TestModels目录下的测试模型拖入场景,将../SRUniversal-main/Scripts/Runtime下的SRCharacterRenderingController组件添加到模型上,检查渲染是否正常。 在开始之前,你至少需要准备以下贴图,如果不知道如何获取它们,可以参考B站 @小二今天吃啥啊 的这个教程,链接
(1)RGBA通道的身体BaseColor Map (2)RGBA通道的身体ILM Mask Map (3)身体ShadowCoolRamp (4)身体ShadowWarmRamp (5)面部BaseColor Map (6)面部阴影SDF阈值图+ILM Mask Map(7)头发BaseColor Map (8)RGBA通道的头发ILM Mask Map (9)头发ShadowCoolRamp (10)头发ShadowWarmRamp
纹理导入设置
为什么我要特别说明这个问题?根据反馈,有些人在使用着色器时发现一些不正确的效果,这通常容易被认为是代码错误导致的,实际上是因为他们没有使用正确的纹理导入设置。如下图所示,ramp阴影的交界处出现了我们不希望看到的锯齿,看起来很奇怪。
1、除了表达颜色的贴图(如Base Texture和Ramp Texture等颜色贴图)以外,其他用于数值计算的贴图在Texture Import Settings中需要取消勾选sRGB,以确保贴图在线性空间中。
2、考虑到Ramp贴图的特殊性,需要在导入设置中关闭"生成MipMap"(必选),将Wrap Mode设置为"Clamp"以避免采样超出边界导致问题(必选),并将Compression改为"High Quality"以获得更高精度(可选)。
完成上述设置后,效果终于正确了!做得好!
*重要信息
这个着色器是根据哔哩哔哩用户"给你柠檬椰果养乐多你会跟我玩吗"的教程制作的《崩坏:星穹铁道》卡通着色器(ToonShader)。非常感谢这位大佬的教程,在此基础上我个人增加了一些有趣的功能,如添加关键字以提高性能,支持自定义描边颜色(基于材质),曝光控制等。此着色器仅适用于Unity的URP管线。为了使深度边缘光正常工作,请在Universal Render Pipeline Asset中启用深度纹理。如果要用于其他游戏或MMD,请记得给lightmap的alpha通道赋值。ramp图可以用Photoshop绘制,也可以使用文件夹附带的工具。请记得在ramp贴图的导入设置中关闭"生成mipmap",以避免渲染错误。
下一步计划研究如何在着色器部分加入色调映射和平滑法线,再添加一套程序化的lightmap和ramp纹理生成插件,以扩展该着色器的通用性。如果你感兴趣,可以考虑关注。请遵守开源协议。测试模型版权归米哈游所有。祝使用愉快。如果觉得不错,可以给个星标。有任何想法和建议欢迎提出问题或提交拉取请求。
祝你玩得开心!
链接
欲了解更多作者相关信息欢迎访问: 米游社@爱莉小跟班gaolx、Bilibili@galing2333