Skip to content

JTRP : Unity HDRP ToonShading Render Pipeline (Preview)

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
LICENSE.meta
Notifications You must be signed in to change notification settings

yuyujie22/JasonMaToonRenderPipeline

This branch is 2 commits ahead of, 8 commits behind JasonMa0012/JTRP:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

May 12, 2022
20693e8 · May 12, 2022

History

28 Commits
May 6, 2022
Apr 28, 2022
Apr 22, 2022
May 6, 2022
May 6, 2022
May 6, 2022
May 6, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Sep 4, 2021
Apr 22, 2022
May 6, 2022
May 6, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Apr 22, 2022
Sep 4, 2021
Apr 22, 2022
Apr 28, 2022
Apr 22, 2022

Repository files navigation

imgJason Ma Toon Render Pipeline (JTRP)

这是我业余时间开发的基于Unity HDRP并支持DX12 RayTracing的卡通渲染工具集,定位于实时生产影视级质量卡通渲染CG。

基于UTS二次开发:https://github.com/unity3d-jp/UnityChanToonShaderVer2_Project

专栏:https://www.zhihu.com/people/blackcat1312/posts

B站:https://space.bilibili.com/42463206

邮箱:[email protected]

Works

https://www.bilibili.com/video/BV1wD4y1w7oU?spm_id_from=333.999.0.0

https://www.bilibili.com/video/BV1Bq4y1r7bn?p=3

Installation

  1. 使用Unity 2021最新版本创建一个新项目(或使用你自己的项目)

  2. 确保安装了Blender,以及双击.blend文件可以直接打开Blender,否则示例模型将无法导入

  3. (需要代理)Window > Package Manager > Add > Add package from git URL 输入https://github.com/JasonMa0012/JasonMaToonRenderPipeline.git

    • 你也可以选择手动从Github下载Zip,然后从Package Manager > Add package from disk添加Local Package
    img
  4. 在Project面板中找到Packages > JTRP,同时打开Edit > Project Settings > Graphics,将JTRP\RenderPipelineResources\JTRP_RenderPipelineAsset分配给SRP Settings

    img
  5. 打开Window > Rendering > HDRP Wizard(一般会自动打开),点击Fix All,重启编辑器

  6. 双击JTRP\Samples\JTRP_Samples.unitypackage导出示例场景,打开Assets\JTRP_Samples\SampleScenes中的场景,检查渲染结果是否与截图一致,若渲染结果异常,请重新检查安装过程或提交Issue

Getting Started:三渲二入门视频教程

JTRP教程

教程:https://www.bilibili.com/video/BV1AA411A7RR/

模型配布:https://www.bilibili.com/video/BV1a7411i7js/

视频中你会学到:

版本控制

前置知识

JTRP

Usages

由于JTRP是在UTS的基础上扩展而来,因此你应该先了解UTS的基本功能:https://github.com/unity3d-jp/UnityChanToonShaderVer2_Project/blob/release/legacy/2.0/Manual/UTS2_Manual_en.md

JTRP Custom Pass

主要控制场景内所有Toon Shader物体的渲染,若丢失则回退到灰模状态。

另可控制Outline的全局设置,若使用BackFace Outline需要先打开开关

PostProcess Outline可以使用,但处于预览状态,功能不完善,主要用于场景描边,通过配置材质球更改颜色。

Geometry Outline只开发了一半,设置较为复杂,不推荐使用。已经有优化思路,但是没有时间继续开发,有缘人可以一起开发,效果参考视频:https://www.bilibili.com/video/BV1vp4y1r7sF

Pencil+ Outline 4 Unity

视频教程里有使用方法,官方文档:https://docs.psoft.co.jp/pus400w/jp/4.1.2/index.html

如要去除水印和范围限制请购买正版,官网:https://www.psoft.co.jp/jp/product/pencil/unity/。

Material Parameters

如有遗漏,可以参考视频教程和UTS文档,这里只列出JTRP相对于UTS的新增部分。

img HDRP/Toon
Workflow Mode 优先使用ShadingGradeMap,否则不保证功能完全
img Shadow
Shading Grade Map 通过一张灰度图控制阴影的范围。阴影是通过光线方向与法线方向的点积(Gradient)计算,通过影响Gradient使某些区域更容易变亮/变暗。贴图颜色默认0.5灰色,越接近白色越容易变亮,为1时常亮,反之亦然。
img JTRP Features
Is Face / Hair 头发和脸的开关,如需使用发影、脸影功能则须正确设置。
对于脸材质打开Is Face,对于头发材质打开Is Hair,普通材质保持默认关闭即可。
Hair Shadow …… 脸材质上对发影进行调整,Width控制宽度,Ramp控制宽度的距离衰减,Bais控制裁剪距离
Hair Z Offset 头发材质上调整,控制发影渲染时在视线方向上的偏移
Face Shadow Bias 脸材质上调整,打开脸接受阴影的选项(System Shadows Self Shadows Receiving)时调整脸的阴影在光线方向的偏移,可以裁剪掉一些近距离不想要的阴影
Spherical Shadow…… 高级选项,控制球面化法线,需要配合脚本使用,参考视频教程
Anti-Perspective 高级选项,控制反透视强度,为1时模型在视线方向压扁,从而抵消透视畸变。在3D中,FOV越大,透视畸变越大,视角越广,而三渲二追求还原手绘感,所以需要尽可能减小透视畸变,此功能适合在单独展示模型时使用,否则会与3D场景穿插造成穿帮。
img Outline
Outline Width Ramp 通过Ramp控制描边在不同距离下的粗细
img Environmental Lighting
Built-in Light Direction 该功能可以手动指定光线方向,从而控制脸影、发影等。可以搭配脚本实现更智能的光线方向控制,参考视频教程
img Hair HighLight(先点击Show All properties切换UI

看视频吧,实在没时间写了,欢迎好心人提交RP
img Screen Space Rim Light(同上

Scripts

如有疑问参考视频教程

img Spherical Hair High Light Helper
Hair Center 头发中心的代理,将头发整体视为一个球,在头骨下新建一个空物体放在球心处,然后在头发上新建该脚本,将球心赋给Hair Center
Renderers 选择使用该功能的Renderer
img
Center / Renderer 原理同上
Project Light Dir 将光线方向投影到2D圆环上。光源方向通常不可控,但三渲二中对脸影的要求又相当严格,通过这些设置可以将光线方向限制在一个与头顶方向相切的圆环上,防止光源乱跑。
1. 在脸材质上开启Built-in Light Direction
2. 把场景中的Directional Light赋给Light
3. 在ForwardDir中选择脸的正面方向是FaceCenter的哪根轴向,Forward是+Z,Up是+Y,Right是+X
4. 调整Y Offset,旋转光源查看效果
5. (可选)通过Dot Power重映射Y Offset,横轴是光线与Forward点积(可以理解为夹角),竖轴是该夹角下的Y Offset值
img Camera Sync

在编辑器和Timeline中同步Scene View和Game View相机,方便预览渲染效果和制作相机动画
Game To Scene / Scene To Game 字面意思,手动复制一个View的相机状态到另一个View的相机
Mode Game To Scene / Scene To Game:自动复制相机状态
Automatic:适用于Timeline中预览/修改相机动画
1. 选择场景中的Timeline组件赋给Timeline Playable Director
2. 选择相机的Transform赋给Root
3. 在Timeline中播放相机动画,此时Scene View的相机会跟随Game View相机
4. 时间轴定位到要修改的相机动画关键帧处,移动Scene View相机,此时Game View相机会跟随Scene View相机
5. 使用Update Create Key (Shift+Q)保存相机关键帧

Real Time Style Transfer

https://www.bilibili.com/video/bv1FY4y1h7Vm

image-20220506162404333

参考:https://blog.unity.com/technology/real-time-style-transfer-in-unity-using-deep-neural-networks

6-8ms on RTX3070 1080P

DXR Sample (Removed)

image-20210111010551810image-20210111010608857

Video:https://www.bilibili.com/video/BV1Tr4y1F7Pv

Light Weight ShaderGUI

image-20210110034731796

LWGUI是一般ShaderGUI的替代方案,为了写最少的代码并保持灵活易用而编写。所有功能基于Custom Drawer,只需在Shader Property前加上Attribute即可实现各种自定义ShaderGUI。使用时无需写一行ShaderGUI,写Shader的同时进行排版,不同Shader互不相干。Shader末尾需要添加 CustomEditor "JTRP.ShaderDrawer.LWGUI"

LWGUI内置于JTRP,你可以在JTRP的Lit Shader找到更多使用示例。

Function List

/// 创建一个折叠组
/// group:group key,不提供则使用shader property name
/// keyword:_为忽略,不填和__为属性名大写 + _ON
/// style:0 默认关闭;1 默认打开;2 默认关闭无toggle;3 默认打开无toggle
Main(string group = "", string keyWord = "", float style = 0)
  
/// 在折叠组内以默认形式绘制属性
/// group:父折叠组的group key,支持后缀KWEnum或SubToggle的KeyWord以根据enum显示
Sub(string group)

/// n为显示的name,k为对应KeyWord,最多5组,float值为当前激活的KeyWord index(0-4)
KWEnum(string group, string n1, string k1, ... string n5, string k5)

/// 以单行显示Texture,支持额外属性
/// extraPropName:需要显示的额外属性名称
Tex(string group = "", string extraPropName = "")
  
/// <summary>
/// 将一张4*256的Ramp贴图绘制为Gradient
/// </summary>
RampDrawer(string group, string defaultFileName =JTRP_RampMap)
  
/// 支持并排最多4个颜色,支持HDR/HSV
/// parameter:填入HSV则将当前颜色转换为HSV颜色传入Shader,无需则填"_"
/// color:可选额外颜色的property name
/// 注意:更改参数需要手动刷新Drawer实例,在shader中随意输入字符引发报错再撤销以刷新Drawer实例
Color(string group, string parameter, string color2, string color3, string color4)
  
/// 以SubToggle形式显示float
/// keyword:_为忽略,不填和__为属性名大写 + _ON
SubToggle(string group, string keyWord = "")
  
/// 同内置PowerSlider,非线性Range
SubPowerSlider(string group, float power = 1)
  
/// 同内置Header,仅与LWGUI共同使用
Title(string group, string header)

/// 绘制float以更改Render Queue
[Queue]

其中函数名带Sub的一般只支持在折叠组下显示,不带Sub的group参数填“_”以在折叠组外显示,另外Decorator与内置Drawer不兼容,比如 [Header(string)]只应在不使用Attribute或使用内置Attribute的Property上使用,而在使用LWGUI的Property上应使用 [Title(group, string)],否则显示可能会出错。

Model Outline Importer(Legacy)

导入流程已经失效,详情可以参考此文章

如要对硬表面生成平滑法线建议借助DCC工具或NormalMap,UTS文档中也有对应介绍。

Future Works

UTS3已经被收录于Unity官方Package:https://github.com/Unity-Technologies/com.unity.toonshader

未来,在UTS3推出稳定版本并支持ShaderGraph之后,我计划将JTRP重构为一个灵活、轻量的插件,使用CustomNode或CustomPass等方式对UTS3进行非破坏性扩展。

About

JTRP : Unity HDRP ToonShading Render Pipeline (Preview)

Resources

License

MIT, Unknown licenses found

Licenses found

MIT
LICENSE
Unknown
LICENSE.meta

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 51.9%
  • HLSL 22.9%
  • ShaderLab 20.3%
  • HTML 4.5%
  • Python 0.4%