Unity URP - ShaderToy RenderFeature

发布时间: 2022年05月29日阅读数: 2

在Unity中使用ShaderToy网站上的shader方式:

1. 之前的文章中提到的ShaderToy Renderer : ShaderToy shader快速移植实现

  • 最终的渲染结果是一张RenderTexture,可以直接使用;
  • 也可以使用提供的对应的Material.

2. 这篇文章中会介绍如何在URP RenderFeature中使用ShaerToy Shader

效果展示, 点击打开视频

- 大概说明
    1. 转换Shader过程这里就不详细说明了,具体参考https://www.lazyun.cn/default/10.html
    1. 还是以ScriptableObject为主要载体,其中记录了多个Channel之间的链接关系,以及Channel使用的Shader,这里直接改用Shaer替换了之前的Material,减少移植的手工操作,如下图所示:
      ShaderToyAsset内容展示
    1. RenderFeature的设置,如下图中所示
      ShaderToyRenderFeature的设置展示
- RenderFeature参数详细说明
  • Draw To Screen : 是否直接画到屏幕上,这个可以用于快速调试
  • Use Screen Mouse : 是否直接使用屏幕鼠标坐标用于交互
  • Texture Scale : RenderTexture的全局缩放比率,降低RenderTexture分辨率缓解渲染和内存压力
  • Final Texture Name : Shader中的Global Texture名称,可以在Shader中直接采样该Texture获取ShaderToy的最终渲染结果用于进一步加工
  • Shader Toy Asset : ShaderToy Shader的主要载体
  • Default RenderTexture Info : 默认的ShaderToy使用的RenderTexture参数,可以在具体Channel中override覆写。
    • Texture Size : RenderTexture的尺寸,最终的尺寸将是这个值和Texture Scale的乘积,需要注意的是: 如果设置为零,将使用屏幕的宽高作为尺寸
    • Format : RenderTexture的格式,默认为ARGB Half, 如果转换结果与ShaderToy网站差距很大,但没其他线索的情况下,可以参数修改这个值
    • Filter Type : 默认Bilinear
    • Wrap Mode : 默认Clamp
    • Depth Buffer Depth Buffer

最后放上源码链接:https://github.com/LazyunGame/ShaderToyRenderFeature