11 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
卡通渲染开发总览 2023-12-08 09:59:57

目录

PS. 先实现一波Cel之后再实现Thickly - Coated。

最近开发计划

  1. 添加ShaderModel
    1. https://zhuanlan.zhihu.com/p/658700282
    2. https://zhuanlan.zhihu.com/p/597568404
  2. 给材质添加一些属性
    1. 移植ToonDataAsset。
      1. MaterialInstance Override 完成
    2. 添加BackFace Outline基础代码。
  3. 添加材质自定义Output节点。
  4. 给GBuffer结构体添加子ToonBuffer结构体。
  5. ShaderModelToonStandard
    1. 实现初版ToonStandard。
  6. ToonOutline(后处理)
    1. ID、Depth、Normal Outline
      1. 深度描边初版
      2. 法线描边初版
      3. FOV宽度适配
      4. ScreenPercentage、DPI宽度适配包括Editor Overrider
      5. 后处理描边的内外描边问题。深度描边会描内部与外部。导致一些比较近的地方深度描边比较细。
        1. 内外描边通过是否是卡通材质来判断。所以分为 外内与内内2种情况。
      6. ToonOutlineDataAsset 添加深度&法线描边开关选项。
      7. ToonOutlineDataAsset ID描边实现。
      8. ToonOutlineID Overrider实现。可以使用OutlineID贴图来实现单材质描边的功能。
    2. SDF Outline
      1. 将OutlineMask 16位 15位存储SDFOutline + 1位存储Mask。
      2. https://www.shadertoy.com/view/4lfyR2
    3. BackFaceOutline
  7. ToonPostProcess
    1. ToonBloom
    2. 实现一波Anti-Lut
  8. ToonRimLighting
    1. 后处理边缘光
    2. Matcap
    3. ASoul边缘光
  9. Reflection控制
  10. Toon GILumen)
  11. 阴影控制
    1. CustomDepth制作头发阴影偏移效果哦 https://zhuanlan.zhihu.com/p/689578355
  12. ToonTranslucent
  13. 实现前向混合管线思路有21. Material直接计算光照结果。2. 自定义ToonBasePass到LightingPass后复制阴影贴图与Lumen渲染结果进行Composition。
    1. 原神早期的方案:
      1. 渲染地形(远景
      2. CubeMap环境光照和时间与地区有关
      3. 渲染屏幕空间深度图
      4. 渲染角色以及近景模型卡通材质相关渲染Pass
        1. 有计算直接光照与阴影。使用屏幕空间深度图来计算阴影。
      5. 渲染深度与法线Buffer。
      6. 渲染级联阴影。
      7. 合成阴影与环境光照AO、环境探针
  14. 添加Debug View https://zhuanlan.zhihu.com/p/668782106
  15. UE5 Shader Print系统
  16. GBufferView实现。
  17. Toon Debug模式可以让美术在材质进行进行简单的光照计算。
  18. ToonShadow
    1. !星穹铁道中下巴阴影处理.png
  19. 考虑往GBuffer中添加更多数据考虑Velocity以及SingleLayerWater
    1. ShaderMaterialDerivedHelpers.cppShader宏、GBufferInfo.cppGBuffer格式BasePassRendering.cpp950行SingleLayerWater写入GBuffer格式相关
    2. 确定一下SingleLayerWater中VSMFiter与DistanceFieldShadow对渲染结果的影响之后在文档中说明。
  20. 修复SIngleLayerWater的缩略图渲染渲染错误双击会有一瞬间的错误产生
  21. 添加对应的Stat https://zhuanlan.zhihu.com/p/716644594
  22. ToonLumen、GI以及晕染效果实现。!卡通渲染晕染效果.mp4
  23. 在材质中实现ToonEye相关效果
    1. 【二次元人物眼睛如何变形?】 https://www.bilibili.com/video/BV14M4m1y71A/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e
      1. 原视频 https://www.youtube.com/watch?v=euIyX9v8rvw
      2. 眼睛建模 https://youtu.be/s2_7Q2IIvNY?si=fWiYjqcLFXzdeQ-B&t=126
  24. Unreal Engine 5.4 Scene Extension https://zhuanlan.zhihu.com/p/706268007
    1. 通过SceneExtension改进ToonObjectID这样可以减少对应ToonBuffer的精度来存其他数据。
    2. https://www.bilibili.com/video/BV1fM4m1U7Tp/

TODO:

  • ShadingModels.ush 完善Hair高光、自定义高光
  • 实现对应后处理效果的ComputeShader版本。
    • ToonOutline
    • RimLighting

修改标记方便后续删除备注//BlueRose Modify //BlueRose Modify End // Copyright BlueRose, Inc. All Rights Reserved.

渲染功能兼容的游戏

  • 罪恶装备
  • 原神
  • 星穹铁道
  • 绝区零
  • 蓝色协议

卡通渲染引擎功能总览(按照渲染顺序进行排序)

待实现功能

知乎提到的渲染功能:

按照需求优先级进行排列:

  • Anit-Lut功能

    • Anit-ToneMapping
    • 完整的Anit-Lut功能虚拟拍摄也会用到
  • 描边改进

    • 后处理部分,使用蓝色协议的方案
    • MultiDraw BackFace部分
    • 绘制轮廓方法落地本村线、SDF
    • 使用添加MeshDrawPass的方式实现比较完美的BackFace
  • ToonData与ToonWorldSettings改进

    • 增加多个SSS 预积分贴图功能
    • 将材质以外的参数都集中到ToonWorldSettings类中以方便调节
  • 面部光影方案改进

    • 在GBuffer中添加额外面部自定义法线
    • SDF面光方案
  • 角色面部Anit-Perspective 与 手指放大效果

  • 后处理

    • 原神 辉光效果
    • TAA抗锯齿 => Responsive AA解决Outline模糊问题
    • 影视级Bloom实现
  • 眉毛效果

    • 可以考虑使用TranslucencySortPriority来解决
    • 通过MeshDrawPass实现眉毛最前显示效果
    • 实现眉毛描边效果
  • 额发效果

    • 额发阴影效果(衣服阴影效果)
    • 实现半透明额发
  • 天光与间接光处理

    • 为了防止环境光把角色照出立体感,所以计算环境光时,会把法线全部看作世界空间上方向来处理。同时增加了一些参数可以进行一些定制化调整。
  • 使用顶点色与第二套UV来修改一些可以实时修改的效果

  • 实现PBR <=> Cel 卡通渲染效果的参数切换

  • 使用Kawaii插件实现柔体效果

  • 后处理边缘光落地

  • SSGI 卡通渲染适配实现AnimMaker 中的一个效果

  • 丝袜 https://zhuanlan.zhihu.com/p/636157482

厚涂风格研究与开发笔记

  • 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采样。

动画技法