Unity - 搬砖日志 - SRP/URP 相关


有空可以用 OpenGL 来写一个类似 Unity SRP Batcher 的合批处理:

shader cbuffer 分类:

  • PerDraw // 每个绘制对象的 cb
    • ObjectToWorldMatrix
  • PerMaterial // 每个材质对象的 cb
    • Color
  • PerFrame // 每帧绘制的 cb,或是叫:Global
    • CameraWorldPosition
    • LightInfos[N] // N : 1~16
      • Position
      • Color
      • Type
      • etc.

伪代码如下:

// 更新 PerDraw 的 CBuffer
void* perDrawCBuffer = GL.map(CBUFFER_IDX_1);
int perDrawCount = ...;
for (int i = 0; i < perDrawCount; i++)
{
    SinglePerDrawInfo* singleInfo = (SinglePerDrawInfo*)(perDrawCBuffer + i);
    singleInfo->xxx = xxx;
    ...
}
GL.ummap(CBUFFER_IDX_1);
perDrawCBuffer = NULL;

// 更新 PerMaterial 的 CBuffer 类似 PerObject
void* perMatCBuffer = GL.map(CBUFFER_IDX_2);
int matCount = ...;
for (int i = 0; i < matCount; i++)
{
    SinglePerMatInfo* singleInfo = (SinglePerMatInfo*)(perMatCBuffer + i);
    singleInfo->xxx = xxx;
    ...
}
GL.ummap(CBUFFER_IDX_2);
perMatCBuffer = NULL;

// 更新 PerFrame 的就更简单了,因为全局唯一一份数据,所以也叫 Global
PerFrameInfo* perFrameInfo = (PerFrameInfo*)GL.map(CBUFFER_IDX_3);
perFrameInfo->xxx = xxx;
GL.ummap(CBUFFER_IDX_3);
perFrameInfo = NULL;

References


官方

  • Universal Render Pipeline overview - 7.7.1 URP 版本的文档,在 Unity Packages Manager 的 View Documentation 可以查看
    • Feature comparison table - 和 Built-in RP 的功能比较
      • 其中有将到 URP 下,的灯管限制,每个对象最多多少个:如:
        • URP 下 MainDirectionalLight 最多一个
        • PerObj 的 Lighting 可以有 4~8 个
          • 8 (4 for GLES2). Can be point, spot, and directional Lights.
          • OpenGL ES 2.0 最多 4个
          • 其他高版本可以 8 个
          • 可以是 point, spot, directional 的三种光源类型
        • PerCamera 的 Lighting 最多可以 256 个
          • 16 for GLES 3.0 or lower, 32 on other mobile platforms
          • 在 OpenGL ES 3.0 16 个,或是更少
          • 在其他手机平台可以最多 32 个
  • Unity-Technologies/Graphics - Unity - Technologies/Graphics 图形方面的 GitHub 库,其中就包含了 HDRP, URP, SRP, ShaderGraph, VFX 等
    • javelinlin/Graphics - 怕以后年代久远,变动太大,2021/10/15 今天我将这个仓库 Fork 了一份
  • Unity-Technologies/UniversalRenderingExamples - 官方 GitHub URP Demo
  • Using the Universal Render Pipeline - 2019.4 版本的 URP 手册
  • Scriptable Render Pipeline fundamentals - 2019.4 版本的 URP 手册
  • Scriptable Render Pipeline (SRP) Batcher - 里面有讲到:How the SRP Batcher works
  • Unity-Technologies/SRPBatcherBenchmark - SRP Batcher Profiler,可以查看 On/Off 后的面板数据上的区别
  • Up and Running with URP - unity 官方提供:掌握 URP 的课程练习,2021/10/11 发现目前只有 2019.3 和 2019.4 版本的 URP 课程,但是发现讲的内容也太太太基础了!
  • Achieve beautiful, scalable, and performant graphics with the Universal Render Pipeline - 简单介绍 Boat Attack Demo
  • Level up your game graphics with these Universal Render Pipeline tutorials - 详细介绍 Boat Attack Demo,其中 Making a Water Shader in Unity with URP
    水体 Shader 的 Shader Graph 详细讲解
  • SRP Batcher: Speed up your rendering! - 推荐可以看看,有比较的详细
    • [译]SRP Batcher:提升您的渲染性能
    • [译]SRP Batcher:提升您的渲染性能
    • 上面的翻译与 官方的博客文章有点不同(可能官方后续有更新、补充内容)

非官方

  • Cyan 的 blog

    • Writing Shader Code in Universal RP (v2) - 关于 URP 的内容,这一篇写的相当的详细
    • [Unity]URP学习记录(1) - 引用 Cyan blog 的内容
  • cat like coding 的译文

    • Unity通用渲染管线(URP)系列(一)——自定义渲染管线(Taking Control of Rendering)
    • Unity通用渲染管线(URP)系列(二)——Draw Calls(Shaders and Batches)
    • Unity通用渲染管线(URP)系列(三)——方向光(Direct Illumination)
    • Unity通用渲染管线(URP)系列(四)——方向阴影(Cascaded Shadow Maps)
    • Unity通用渲染管线(URP)系列(五)——烘焙光(Baked Light)
    • Unity通用渲染管线(URP)系列(六)——阴影遮罩(Shadow Masks)
    • Unity通用渲染管线(URP)系列(七)——LOD和反射(Adding Details)
    • Unity通用渲染管线(URP)系列(八)——复杂的贴图(Masks, Details, and Normals)
    • Unity通用渲染管线(URP)系列(九)——点光源和聚光灯(Lights with Limited Influence)
    • Unity通用渲染管线(URP)系列(十)——点光和聚光灯阴影(Perspective Shadows)
    • Unity通用渲染管线(URP)系列(十一)——后处理(Bloom)
    • Unity通用渲染管线(URP)系列(十二)—— HDR(Scattering and Tone Mapping)
    • Unity通用渲染管线(URP)系列(十三)——颜色分级(Playing with Colors)
    • Unity通用渲染管线(URP)系列(十四)——多相机(Camera Blending & Rendering Layers)
    • Unity通用渲染管线(URP)系列(十五)——粒子(Color and Depth Textures)
    • Unity通用渲染管线(URP)系列(十六)——渲染缩放(Scaling Up and Down)
  • SRP 自定义 - 大部分是来自 cat like coding

    • Unity自定义SRP(一):构建渲染框架
    • Unity自定义SRP(二):Draw Call
    • Unity自定义SRP(三):平行光
    • Unity自定义SRP(四):平行光阴影
    • Unity自定义SRP(五):烘培光
    • Unity自定义SRP(六):阴影遮罩
    • Unity自定义SRP(七):LOD和反射
    • Unity自定义SRP(八):复杂纹理
    • Unity自定义SRP(九):点光和聚光
    • Unity自定义SRP(十):点光和聚光阴影
    • Unity自定义SRP(十一):后处理
    • Unity自定义SRP(十二):HDR
    • Unity自定义SRP(十三):颜色分级
    • Unity自定义SRP(十四):抗锯齿和缩放渲染
    • Unity自定义SRP(十五):SSAO
    • Unity自定义SRP(十六):内嵌VFX Graph
  • Alex TA 同学的内容

    • Alex TA
  • 升级 URP 注意

    • 内置管线Shader升级到URP详细手册
    • Unity Built-in转URP速查表 - Alex TA
  • ConstantBuffer

    • Unity ConstantBuffer的一些解析和注意
    • cbuffer和tbuffer
    • [ZZ] cbuffer和tbuffer
  • 后处理

    • Unity Shader - 搬砖日志 - URP 扩展后效 - 实现 BoxMosaicPP (矩形马赛克后效)
    • 如何扩展Unity URP的后处理Volume组件
    • UNITY URP
    • Unity - 通用渲染管线(URP)1.渲染、后处理
    • Edge Detection Outlines
  • 阴影

    • Unity Shader - URP ShadowCast & ShadowRecieve - 投影 和 接受阴影
    • 关于SHADOWS_SCREEN - URP 下的阴影
    • 如何在unity的URP下实现阴影
    • Unity URP Shader 支持内置阴影
  • 环境光

    • Unity Shader - 在 URP 获取 Ambient 颜色
    • Unity URP Shader 支持内置雾效
  • Instancing

    • Unity Shader - URP Instancing
    • Unity SRP2019教程二:DrawCall那点事
  • 类多 Pass

    • Unity - URP RenderFeature - 实现类似多 Pass 的 XRay: Rim、Dithering
  • Others

    • Unity - 可编程渲染管线(Scriptable Render Pipeline)
    • Unity URP/SRP 渲染管线浅入深出【匠】
  • MSDN

    • Shader Constants (HLSL) - Constants Buffer 包含:cbuffer, tbuffer 两种 都是 多个 shader 之间可以共享使用的 buffer,所以我们在传给某个 shader 绘制状态数据都可以放这,一次性设置,而不用像以往的 逐个 uniform 来设置而降低性能
    • How to: Create a Constant Buffer - 以创建 cbuffer 为例
    • Buffers - DX 中就三大类的 buffer:Constants Buffer, Vertex Buffer, Index Buffer
  • 问题

    • 从 Builtin 管线升级到 URP
  • 案例

    • 《黑暗之潮》中次时代技术的应用经验及技术 - 其中有讲到使用了 URP,还有 ESC + DOTS 优化剔除、动画更新

你可能感兴趣的:(unity,unity-shader,unity,SRP/URP,URP)