20 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			20 KiB
		
	
	
	
	
	
	
	
title, date, excerpt, tags, rating
| title | date | excerpt | tags | rating | 
|---|---|---|---|---|
| 卡通渲染开发总览 | 2023-12-08 09:59:57 | ⭐⭐⭐ | 
目录
- 卡通渲染相关资料里面的有原神、碧蓝幻想、罪恶装备、赛马娘、黑丝指的参考。
- 做完基础功能之后,再逐个寻找新的功能点与方向。
 
 - 知乎FlashYiYi的卡通渲染分享里面有许多Fake技巧
 - 参考对象分析
- 星穹铁道
 - 原神
- https://zhuanlan.zhihu.com/p/316138540
- 软阴影边界
 - 反射探针,获取BaseColor、Normal等,最后Relight来获得复合场景的反射CubeMap。
 
 
 - https://zhuanlan.zhihu.com/p/316138540
 - UnityChan
 - 破晓传说
 - 蓝色协议
 - 蓝色反射
 - 非人学园2
 - 少女前线2 追放
 - 明日方舟终末地
 - CEDEC
- 学园偶像大师
 - BanG梦想! 女子乐队派对
 - 异度神剑
 
 - 碧蓝幻想
- https://zhuanlan.zhihu.com/p/14858282081
 - https://zhuanlan.zhihu.com/p/27407759719
 - 【Cygames技术大会 2024】碧蓝幻想Relink - 角色模型制作事例 - Ale Feng的文章 - 知乎 https://zhuanlan.zhihu.com/p/16218213290
 
 - 归龙潮
 
 - 其他人的作品
- 蛋白胨 https://zhuanlan.zhihu.com/p/663968812
 - muro_cg
 - Nevrwind
- 【【UE5动画】你会来的对吗?】 https://www.bilibili.com/video/BV1kw4m1e7qZ/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
 - 【【UE5卡渲】椿 - K表情练习】 https://www.bilibili.com/video/BV1ay411b7Cm/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
 - 卡通渲染晕染效果【【UE5】一些最近做的好玩的卡渲后效】 https://www.bilibili.com/video/BV1gi421v7HA/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
 - 【Unity/虚幻5/Blender】3种引擎 绝区零风格 卡通渲染 星见雅 完整流程
 
 
 - 动漫制作
- 2024年4月新番 Girls Band cry【日本最顶级的3D动画制作过程【GBC官方动捕制作片段】】 https://www.bilibili.com/video/BV1uM4m1U7CL/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
 
 
PS. 先实现一波Cel,之后再实现Thickly - Coated。
最近开发计划
- 添加ShaderModel
 - 给材质添加一些属性
- 移植ToonDataAsset。
- MaterialInstance Override 完成
 
 - 添加BackFace Outline基础代码。
 
 - 移植ToonDataAsset。
 - 添加材质自定义Output节点。
 - 给GBuffer结构体添加子ToonBuffer结构体。
 - ShaderModel:ToonStandard
- 实现初版ToonStandard。
 
 - ToonOutline(后处理)
- ID、Depth、Normal Outline
- 深度描边初版
 - 法线描边初版
 - FOV宽度适配
 - ScreenPercentage、DPI宽度适配(包括Editor Overrider)
 - 后处理描边的内外描边问题。深度描边会描内部与外部。导致一些比较近的地方深度描边比较细。
- 内外描边通过是否是卡通材质来判断。所以分为 外内与内内2种情况。
 - 外描边之后考虑使用BackFace来实现。
 
 - ToonOutlineDataAsset 添加深度&法线描边开关选项。
 - ToonOutlineDataAsset ID描边实现。
 - ToonOutlineID Overrider实现。可以使用OutlineID贴图来实现单材质描边的功能。
 - Fix SkyAtmosphere 与ExponentialHeightFog会干掉Outline的问题。目前将ToonOutline移到SkyAtmosphere、ExponentialHeightFog Pass之后 另一个思路就是使用BackfaceOutline
 - Outine PostProcess Overrider设置。 ToonOutline.cpp 42行。
 - TODO: TSR Outline写入速度信息。
- ue4.26 体积云重投影 https://zhuanlan.zhihu.com/p/718922764
 
 - GDC2025 : Generalized Stylized Post Processing Outline https://zhuanlan.zhihu.com/p/1895785690161198348
 - Nanite支持Nanite学习笔记
 
 - OutlineMask& SDF Outline
- 8通道存储SDFOutlineMask8位精度不够,在Materal中计算依然有锯齿
 - 剩下8通道
- 3通道分别控制ID、Depth、Normal Outline Mask。
 - Offset、Feather?
 
 - PS绘画出不同压感的颜色。
- F5打开画笔设置对话框,点击“传递”页。
 - 将“不透明度抖动”设为0,并将控制方式设置为钢笔压力。最小钢笔压力设置成50%。
 - 如果效果不明显,将“流量抖动”设置组也一样设置。
 
 - 编写Outline贴图转换工具。
 
 - BackFaceOutline
- https://zhuanlan.zhihu.com/p/613772622
 - https://zhuanlan.zhihu.com/p/552283835
 - VertexShader,模型反向压平。
 - fix 模型勾选渲染CustomDepth才能正常渲染的bug
 - fix 开启一个模型的CustomDepth会让其他ToonStandard模型开启CustomDepth写入。(将CustomDepth写入 => Depth写入)
 - 深度剔除bug解决
 - 使用比较ToonMeshDrawOutline前后深度的方法来获取ToonMeshDrawOutlineMask.
 - TODO:确认VR中的运行结果是否正确?
 - TODO:Nanite模型支持。
 - TODO:另一种思路定点内扩+Stencil的方式渲染内描边?
 - TODO:顶点法线工具开发 https://tajourney.games/7689/
 
 - TODO:RayTacing描边方法。
 
 - ID、Depth、Normal Outline
 - ToonLighting
- Cel
 - 【UE5】卡通渲染着色篇3:多光源 https://zhuanlan.zhihu.com/p/717533663
 - UE5 浅谈光源更新多线程优化 https://zhuanlan.zhihu.com/p/27574076122?utm_psn=1879905019928764942
 
 - ToonPostProcess
- ToonBloom
 - ToonDiffusion:对场景亮部进行降采样,之后将亮度信息叠加到Toon物体的暗部上。
 - 晕染效果,Background透过光功能。

 - 实现一波Anti-Lut
 - 考虑其他风格的ToneMapper(可能还是使用LUT更好调整) https://zhuanlan.zhihu.com/p/716759929?utm_psn=1812047639874760707
- CCA Tonemapping
 - GT Tonemapping https://github.com/yaoling1997/GT-ToneMapping
 - AGX Tonemapping https://github.com/EaryChow/AgX
 - 其他Tonemapping: Local Tonemapping方案总结 https://zhuanlan.zhihu.com/p/519457212
 - Fix 运行的时候出现的渲染错误。
 
 
 - ToonRimLighting
- 材质边缘光(位于引擎插件/ToonUtility/MaterialFunction/MF_RimLighting)
 - 后处理边缘光
 - Matcap
 - ASoul边缘光
 
 - 关于逆ToneMapping映射的万能人肉求解法 https://zhuanlan.zhihu.com/p/14603997646
 - Reflection控制
- ReflectionAlpha实现。
 - Matcap Reflection实现。
 - 对Reflection Texture进行Kuawahara处理,之后根据亮度抽象成第二高光(提取亮度之后,乘以高光颜色)
- 【[UFSH2024]用虚幻引擎5为《幻塔》定制高品质动画流程风格化渲染管线 | 晨风 Neverwind 完美世界游戏】 【精准空降到 14:24】 https://www.bilibili.com/video/BV1rW2LYvEox/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e&t=864
 
 
 - Toon GI(Lumen / Other)
- DiffuseIndirect Alpha / DiffuseIndirect Saturation / AOAlpha
- Lumen
 - Other GI Method
 
 - 向下采样
 - 平滑法线 => 平滑饱和度
- 使用哪个https://zhuanlan.zhihu.com/p/25839790454
 - 尝试使用高斯模糊Lumen法线。
 - 尝试使用ViewVector来平滑法线。
- 用相机方向的话,随着相机绕角色旋转,角色身上亮度变化会比较明显,所以视频里用的是把平滑度乘在Lumen的1-2阶球谐上
 
 - 尝试平滑二阶、三阶球谐,来使得Lumen效果低频化
- 伪代码 OutSH = SH0 + (SH1 + SH2) * Smoothness;
 
 - Cel适配,需要实现Toon多光源参考
 
 
 - DiffuseIndirect Alpha / DiffuseIndirect Saturation / AOAlpha
 - 阴影控制
- 控制深度偏移
- 在材质中使用ShadowPassSwitch再对ViewSpace的Z轴方向(使用DirectionalLightVector比较可以只对方向光进行偏移)进行WPO偏移实现。
 
 - ContactShadow接触阴影实现衣服细节的DetailShadow
 - 半程阴影(DirectionOffsetToViewShadow)半分阴影
- PerObjectShadow 支持VSM https://zhuanlan.zhihu.com/p/1948342864548442719
 
 - 给图元添加禁用自阴影功能——发现启用RecivedViewOffsetShadow就可以起到这个功能。
 
 - 控制深度偏移
 - ToonHair 1. 【UE5】通过深度偏移计算刘海投影 2. UE5 NPR-Shadow-Character Shadow(2)
 - ToonTranslucent
- 通过模仿SingleLayerWater实现折射效果 https://zhuanlan.zhihu.com/p/657928532
 - 眉眼细节 
- 【【Unity/虚幻5/Blender】3种引擎 崩坏: 星穹铁道风格 卡通渲染 从球谐光照到眉毛透过刘海 完整流程】 【精准空降到 1:24:29】 https://www.bilibili.com/video/BV1CN411C7qx/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e&t=5069
 
 - 【UE5】逐材质stencil、半透明排序、OverlayMaterial
 
 - TSR
 - Toon多光源参考
 - 【虚幻5】UE_动画变形工具(晶格变形)
 - 掰法线相关
- 【Blender插件 Easy Custom Normals V1.1.0汉化版,卡通渲染优化利器!-哔哩哔哩】 https://b23.tv/meLiEkj
 - 月下幻影的掰法线思路:
N = _Scale * NoL * L + N尝试找到使用场景。资产路径/Game/ToonContentExample/MaterialUtility/NormalOffsetToDirectionalLight/M_NormalOffsetToDirectionalLight 
 - RGS 光线追踪与路径追踪支持。
 - 给EditorView添加卡通渲染用场景,默认场景的渲染效果对不上。
 - 实现前向混合管线?思路有2:1. Material直接计算光照结果。2. 自定义ToonBasePass到LightingPass后,复制阴影贴图与Lumen渲染结果进行Composition。
- 原神早期的方案:
- 渲染地形(远景
 - CubeMap环境光照,(和时间与地区有关)
 - 渲染屏幕空间深度图
 - 渲染角色以及近景模型(卡通材质相关渲染Pass)
- 有计算直接光照与阴影。使用屏幕空间深度图来计算阴影。
 
 - 渲染深度与法线Buffer。
 - 渲染级联阴影。
 - 合成,阴影与环境光照(AO、环境探针)。
 
 
 - 原神早期的方案:
 - 云彩生成器
- https://www.bilibili.com/video/BV1L5kdYFEXc/?spm_id_from=333.1007.tianma.4-1-11.click&vd_source=d47c0bb42f9c72fd7d74562185cee290
 - 风格化水面资产 https://item.taobao.com/item.htm?id=865360489543&pisk=gLHsX7NMiNb1gB7njFKURXly5Dwb5q9y1iZxqmBNDReTkigKDtQA6-FLJorOMSU2sqNju2VxQRoZRGDIPtWwSCmAh-yvzUJyUcman-Lyk8kOUGq4mNUAurCKv-rjPdNAXcmgnrIFkQlKjZg5RK5YDrKQpor7k-EYW9KQcuaYHPFAJ6E8JrexkSIdJuZ5MZCTHkKQju5OBoeYvMEaVtBtk-KIvyqxnDXQDCZ-fHz1qUDkpeKgJtBxdlNpTcUKrr-4i5TjbyXvy1Zg1coTRtBxKXkPllz9ZMz0QPDbfqvlIRFjTAVoQeBsl20KBSDp8B00QuV-MD-lTPDIQvFsCU1uCX3nd5DOWhqtsqDbQx71hDMb57HTOKx0CDEYdbneq6zidAkL1AT5ZPMiDjPItNTUuboEBWgJ89g0GXkgZA8dC4IyzTz7sJ5fA7XbAz-BAsf0xzPwqJ_edaNTxlTyAH_Gi5E3AmtBAsDg6kqF6HtCWc1..&spm=a21xtw.29178619.product_shelf.74.41727d6dRCDvul
 
 - 添加Debug View https://zhuanlan.zhihu.com/p/668782106
- UE5.5 自定义/扩展缓冲可视化调试功能 https://zhuanlan.zhihu.com/p/16314329507
 
 - UE5 Shader Print系统
 - GBufferView实现。
 - Toon Debug模式,可以让美术在材质进行进行简单的光照计算。
 - ToonShadow
 - LookDev场景
 - 考虑往GBuffer中添加更多数据(考虑Velocity以及SingleLayerWater)
- ShaderMaterialDerivedHelpers.cpp(Shader宏)、GBufferInfo.cpp(GBuffer格式)BasePassRendering.cpp(950行,SingleLayerWater写入GBuffer格式相关)
 - 确定一下SingleLayerWater中VSMFiter与DistanceFieldShadow对渲染结果的影响,之后在文档中说明。
 
 - 修复SIngleLayerWater的缩略图渲染渲染错误(双击会有一瞬间的错误产生)
 - 添加对应的Stat https://zhuanlan.zhihu.com/p/716644594
 - ToonLumen、GI以及晕染效果实现。!卡通渲染晕染效果.mp4
 - 在材质中实现ToonEye相关效果
 - 尝试实现Forward+
 - DX11问题修复
- ToonOutline SceneColorTexture为空的问题。 DX11限制,必须CopyTexture
 
 - 卡通渲染针对TAA的优化思路 https://zhuanlan.zhihu.com/p/678876237
 - Unreal Engine 5.4 Scene Extension https://zhuanlan.zhihu.com/p/706268007
- 通过SceneExtension改进ToonObjectID,这样可以减少对应ToonBuffer的精度来存其他数据。
 - https://www.bilibili.com/video/BV1fM4m1U7Tp/
 
 
TODO:
- ShadingModels.ush 完善Hair高光、自定义高光
 - 实现对应后处理效果的ComputeShader版本。
- ToonOutline
 - RimLighting?
 
 - 尝试使用新的笔记系统 https://post.smzdm.com/p/a96l0kn5/
 
修改标记方便后续删除备注//BlueRose Modify //BlueRose Modify End // Copyright BlueRose, Inc. All Rights Reserved.
渲染功能兼容的游戏
- 罪恶装备
 - 原神
 - 星穹铁道
 - 绝区零
 - 蓝色协议
 - 碧蓝幻想
 
卡通渲染引擎功能总览(按照渲染顺序进行排序)
- GBuffer For ToonShaderModel
 - ToonShaderModel
- ToonStandard
 - Thickly - Coated
 
 - 描边
 - 
阴影
 - 边缘光
 - 其他特性
 
待实现功能
知乎提到的渲染功能:
- 发尖勾线 https://zhuanlan.zhihu.com/p/405518306
 - SDF 描边
 - 屏幕空间深度边缘光 Screen Space Depth Rimlight
 - 原神实现
 - 遮挡时的模糊网点效果
 
按照需求优先级进行排列:
- 
Anit-Lut功能
- Anit-ToneMapping
 - 完整的Anit-Lut功能(虚拟拍摄也会用到)
 
 - 
描边改进
- 后处理部分,使用蓝色协议的方案
 - MultiDraw BackFace部分
 - 绘制轮廓方法落地:本村线、SDF
 - 使用添加MeshDrawPass的方式实现比较完美的BackFace
 
 - 
ToonData与ToonWorldSettings改进
- 增加多个SSS 预积分贴图功能
 - 将材质以外的参数都集中到ToonWorldSettings类中,以方便调节
 
 - 
面部光影方案改进
- 在GBuffer中添加额外面部自定义法线
 - SDF面光方案
 
 - 
角色面部Anit-Perspective 与 手指放大效果
- 模仿VRM4U的参数
 - 参考AnimMaker
 
 - 
后处理
- 原神 辉光效果
 - TAA抗锯齿 => Responsive AA,解决Outline模糊问题
 - 影视级Bloom实现
 
 - 
眉毛效果
- 可以考虑使用TranslucencySortPriority来解决
 - 通过MeshDrawPass实现眉毛最前显示效果
 - 实现眉毛描边效果
 
 - 
额发效果
- 额发阴影效果(衣服阴影效果)
 - 实现半透明额发
 
 - 
天光与间接光处理
- 为了防止环境光把角色照出立体感,所以计算环境光时,会把法线全部看作世界空间上方向来处理。同时增加了一些参数可以进行一些定制化调整。
 
 - 
使用顶点色与第二套UV来修改一些可以实时修改的效果
 - 
实现PBR <=> Cel 卡通渲染效果的参数切换
 - 
使用Kawaii插件实现柔体效果
 - 
后处理边缘光落地
 - 
SSGI 卡通渲染适配?实现AnimMaker 中的一个效果
 
- ShaderModel
- 分阶着色
- 二阶化:
 - 多阶化:
 - 自定义次表面(暗部)颜色
 - 颜色过渡(羽化):
 - lut:待讨论
 
 - 高光
- 高光贴图
 - 高光颜色
 - 参数化高光形状
 - 多层高光
 
 - Shader内编辑法线
- N=_scale * L + N
 
 
 - 分阶着色
 - 描边
- 外描边:后处理描边 、 Mesh挤出 2种方式,原神采用了Mesh挤出。
 - 内描边:后处理、SDF描边、本村线 3种方式
 - 使用Mesh基础、后处理、模型绘制。(后处理传递Id贴图)
 
 - 阴影
- 自定义阴影颜色
 - 自定义阴影范围
 - 自定义阴影形状
 - 阴影过渡(sdf阴影)
 
 - 边缘光
- 边缘光是否受到光照影响
 - 多层边缘光
 - 边缘光衰减(入射角度更明显 or 背光角度更明显)
 
 - 多光源支持
 - 根据相机角度调整模型(非必要)
 - 眼睛
- 反射 环境反射或者matcap支持
 - 内阴影 AO实现或者画死的内阴影
 - 瞳孔 瞳孔缩放
 - 视差和效果 凹凸效果
 - 高光 自定义高光形状&位置
 - 高光流动效果
 
 - 头发
- 各项异性头发
- 高光扰动
 - 高光贴图
 - 自定义高光属性
 - 高光天使环
 
 - 无各项异性头发
- 自定义高光参数
 - 高光贴图
 - 高光天使环
 
 
 - 各项异性头发
 - 特殊效果
- 眉毛/睫毛不受遮挡
 - 自发光
 - 阴影内素描效果
 
 - 后处理效果
- 后处理 辉光效果
 - 之后提到了SunFlare,应该是那个屏幕后处理效果。卡通渲染很依赖体积光,所以自然会有好的效果,假也没关系,假才是对的。谷歌搜SNN Filter https://www.shadertoy.com/view/MlyfWd
 - 旁边的Kuwahara应该是个类似的算法,64采样。
 
 


