GenshinCelShaderURP

GenshinCelShaderURP

基于Unity URP的原神风格卡通渲染库

GenshinCelShaderURP是一个基于Unity URP的开源卡通渲染库,旨在复现原神角色的渲染风格。该项目整合了多种渲染技术,包括ILM贴图和Ramp纹理,以实现独特的卡通效果。它提供了跨平台支持,适用于PC、移动设备和主机,注重性能和视觉效果的平衡。这个易用且可扩展的渲染库适合希望在Unity项目中实现类似原神风格的开发者。

Unity URP卡通渲染原神ShaderRamp贴图Github开源项目

GenshinCelShaderURP

这是什么?

这是一个基于Unity引擎URP管线的卡通渲染项目。经过一段时间的修改,它已经发展成了一个集成式的解决方案。整体技术难度不高,主要是整合了各位大佬的工程,进行了一段时间的效果调研,取其精华并将其整合封装到一套shader中。目前shader仍然使用unlit,未来计划转向lit。本着开源分享的精神,我决定将这个项目分享给大家,也希望通过开源的方式提高代码质量。我们的目标是创建一套能够还原原神角色卡通渲染风格的渲染库,在保证易用性的同时保持扩展性,同时兼顾PC端、移动端和主机端的兼容性、性能和效果。

安装与使用

只需将/Shaders/GenshinCelShaderURP/路径下对应版本的文件夹解压到你的Assets中,即可在材质球中看到添加的shader。 在开始之前,你至少需要准备以下贴图。如果不知道如何获取它们,可以参考B站 @小二今天吃啥啊 的这个教程,链接

图片
图片

(1)RGBA通道的身体Base Map (2)RGBA通道的身体Light Map(ILM Map) (3)身体Shadow Ramp (4)面部Base Map (5)面部阴影SDF阈值图 (6)头发Base Map (7)RGBA通道的头发LightMap(ILM Map) (8)头发ShadowRamp (9)面部阴影Mask (10)金属光泽Map

贴图示例

  1. 身体部分:
    图片
    图片
    图片

  2. 脸部的特殊处理: 图片
    图片

支持

关于shader兼容性(通用性),目前仅限于在URP的Forward渲染管线中工作。如果需要在延迟渲染管线中使用,请自行设置Render Objects。

PS. 不同游戏开发商对ilm贴图的处理方式略有不同,可以根据自己的需求进行修改和定制。理论上,只要有ilm(表现物体阴影、高光及反射面)和脸部sdf阴影阈值图,都可以使用该shader。值得注意的是,《崩坏3》旧角色的ilm贴图制作方法与新角色略有不同,没有alpha通道控制ramp采样区域,效果会稍差一些,这可能需要各位手动调色。

示例模型

示例用的模型和贴图附在/Model路径下,模型来源:模之屋,链接。可以用于结合我的shader进行测试,模型的最终解释权归mihoyo所有,切勿商用。

生成渐变纹理工具

这个配套工具用于在Unity编辑器中创建适用于该着色器的渐变纹理,可以根据自己的需求定制渐变颜色,具体使用方法可参考这里

关于渐变纹理

让我们回到卡通渲染的本质——将色彩从多个色阶降低到较少的色阶,减少色阶的丰富程度,从而实现类似手工着色的效果,通俗地说就是对光照进行色阶化。卡通渲染有两种常见的做法,一种是计算光照强度后去采样一张渐变贴图,另一种是使用数学计算去拟合渐变贴图。而采样渐变贴图的方法提供了更多的可控性,且更加直观,而且开销并没有增加太多。

图片

图为使用渐变纹理后的阴影效果

图片 half3color = lerp(_ShadowColor, _Color, ramp );

这是一种称为漫反射扭曲(Diffuse Warp)或扭曲漫反射的方法,该方法中使用了渐变贴图(Ramp Texture)。

贴图如上所示。

《军团要塞2》率先使用了这种着色方法,具有重要的历史意义。它不仅能表现鲜明的明暗对比,还能呈现柔和的明暗过渡。我也经常使用这种方法。

相关资料 - https://steamcdn-a.akamaihd.net..

大家可以结合上面的渐变贴图和下方的实现效果一起观察,就能理解渐变贴图是如何影响最终结果的。我们可以这样理解:在采样渐变贴图时,将半兰伯特值应用于UV坐标上,当半兰伯特值较暗时,映射到纹理的左侧;当值较亮时,则映射到纹理的右侧。

除了将横轴对应半兰伯特值的方法外,我们还可以通过灵活处理纵轴来获得不同的效果。例如,在不考虑性能开销的情况下,使用多层"3D渐变"图对阴影和高光进行三次采样,实现三层效果的叠加,并使用外部参数实时调整颜色,做到所见即所得。我们还可以将采样的Y值与各种参数结合,比如以视角与法线的夹角值按Y轴采样,综合实现类似菲涅尔现象的卡通渲染效果。

如在《崩坏3 MMD》中,利用顶点颜色绘制(Vertex color painting),将UV的Y轴映射到顶点颜色值,直接调整软硬明暗效果。(需要注意的是,MMD shader和游戏内shader的实现方式有所不同。)

在《DOTA2》中,还额外使用了一张漫反射扭曲遮罩纹理(Diffuse Warp Mask)。

被遮罩的部分通过采样渐变图来实现明暗渐变。将采样坐标值存入顶点色中有助于优化。

原神相比崩坏3(崩坏3第二部似乎也采用了类似的技术),在漫反射基础色上增加了渐变阴影来实现漫反射效果。在卡通渲染这类非真实感渲染(NPR)中,我们通常会通过冷暖色调分离、硬化阴影边缘等多重手段来达到风格化的目的。例如《原神》这种利用ILM贴图配合渐变纹理实现色调控制的方法,其实早在几年前的《罪恶装备Xrd》中就已经存在类似的实现了。《罪恶装备》和《崩坏3》同样延续了这种思路,只不过在原神中使用了一张单独的2D渐变纹理。在原神中,角色的反照率(Albedo)颜色本身并不依赖于任何光源(也可能是通过后期处理实现,这一点不太确定),而是通过采样渐变颜色(RampColor)来实现。漫反射的暗部由diffuse * RampColor得到,亮部则为diffuse。根据光照贴图(LightMap)的alpha通道不同值域,选择渐变图中的不同层。 图片

原神的Ramp使用了十行一维的Ramp,分为上下五组,分别代表暖色调阴影和冷色调阴影,对应游戏中白天和黑夜使用的两种Ramp。每五组之间通过Ramp Range贴图进行区分,以让不同材质的物体使用不同的Ramp贴图表现不同的材质。Ramp有两张,头发和身体各一张,共10层,分上下两部分,前5行为暖色调阴影,后5行为冷色调阴影,对应夜晚与白天。结合diffuse实现整个Albedo颜色。如下图。

图片

这种做法的优点显而易见,首先是节省性能,因为漫反射的颜色部分不需要参与任何光照计算,亮部就是贴图颜色,阴影颜色已经以贴图形式预先绘制,只需要后期根据光源方向控制阴影位置即可。其次是美术可以更加灵活地控制阴影颜色和明暗过渡,便于实现更复杂的风格化效果。缺点是对美工的要求非常高。

注:《原神》角色ramp图与常规Ramp贴图的不同之处在于——一般的Ramp明暗交界线在0.5的位置,但这个在接近最右边的位置,去除了一些变化不大的亮部部分,既节约了带宽,又保证了美术的操作空间不受限制(压缩Ramp贴图降低采样)。

采样思路:以下是针对该贴图每一行作用的描述: 对于y轴,思路是根据LightMap.a通道,结合光照模型(halflambert)的范围,分层采样ramp图赋予漫反射颜色。我们采样的像素分为冷暖两种色调,以适应白天和夜晚不同的光线环境。为了实现冷暖色调切换,我们要通过shader_feature来进行采样的切换,直接用if语句在inspector中进行调整即可。

对于x轴,根据原来的lambert值,做smoothstep重映射,只保留0到一定数值的渐变,而大于这一数值的全部采样ramp最右边的颜色。这样既可以保留阴影色的过渡,又可以形成硬边,将明暗很好地区分开来(形成硬边)。

最后补充一下原神内ilm贴图各通道的作用:

LightMap.r:高光类型Layer,根据值域区分不同的高光以及matcap金属高光。

LightMap.g:阴影AO ShadowAOMask,可以理解为二级阴影,也就是不随光照方向变化的常驻阴影。

LightMap.b:BltMap.a:Raask SpecularIntensityMa制漫反射暗部颜色。

LightMap.a:Ramp类型Layer,根据值域选择不同的Ramp(控制漫反射暗部颜色,非常重要,待会介绍)

VertexColor.g:Ramp偏移值,值越大的区域越容易"感光"(在特定角度偏移光照明暗)

VertexColor.a:描边粗细

致谢

感谢以下大佬们提交的代码(排名不分先后):

1、Zzzzohar(Generate Ramp Texture Tool) https://github.com/Zzzzohar/Ramp-Tools

2、ashyukiha(shader菲涅尔边缘光、sdf面部阴影、Emission、Bloom、AlphaClipping) https://github.com/ashyukiha/GenshinCharacterShaderZhihuVer

3、ColinLeung-NiloCat(shader卡通轮廓线) https://github.com/ColinLeung-NiloCat/UnityURPToonLitShaderExample

4、YuiLu(shader ramp漫反射及纹理采样、头发修剪视角高光、金属高光、屏幕空间深度等宽边缘光) https://github.com/YuiLu/GenshinCharacterShading

5、T.yz(知乎)(v3版本漫反射模块,包括ramp采样、混合、光照模型、环境光遮蔽等) https://zhuanlan.zhihu.com/p/547129280

使用规则

为了规范项目的使用,你可以将其用于... 学习卡通渲染相关知识、了解HLSL基本语法结构、个人独立游戏开发(相关代码需要遵循MIT许可进行开源)、根据自己需求定制修改源码、MMD等影视制作(如要使用此shader时请在片尾或简介中署名Thanks名单中的名字(可以不写我的名字))

请不要用于... 1 禁止用此模型参与任何商业性质活动和内容制作 2 禁止用此模型参与18禁作品,极端宗教宣传,血腥恐怖猎奇作品,人身攻击视频、暴力、色情、反社会、政治的内容制作 3 禁止对此模型进行侮辱性或猎奇的改造 4 允许对shader的全部代码进行改造,但须始终保持署名(Thanks名单当中,使用哪些作者们代码请把他们署名) 5 禁止个人之间以任何形式的二次配布(即二次传播项目文件) 3 未获得原作者许可,禁止用于商业用途(交易售卖/商业广告类宣传视频等) 5 仅允许使用本场景制作MMD视频,禁止用于其他领域(VRCHAT/游戏MOD等) 6 其他违反GPL开源许可证的行为

在遵守第五则的前提下,允许对此shader二次配布,同须始终保持署名为Github/Gaolingx

链接

欲了解更多作者相关信息欢迎访问: 米游社@爱莉小跟班gaolxBilibili@galing2333

结语

最后,希望大家玩得开心,这个项目将持续进行更新,如果对我们的项目感兴趣记得给一个star,这便是对我们最好的鼓励与支持。由于本人仅仅是高三的学生,编程水平有限,如有不足之处希望谅解。如果你针对shader部分有任何好的想法、意见或建议,欢迎在Issues中讨论或者提交你的PR。也可以通过邮箱联系我(gaolingxiang123@163.com)。如果你觉得我的作品值得赞赏,我将非常感谢你的赞助。

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多