Skip to content

crl/lwrp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CustomPipeline

由于Unity接口的变化太过频繁,我无法了解旧接口变成一个什么样的新接口 所以复制了unity官方最新2019.2P10的轻量级管线的代码来做 自定义

学习unity 自定义管线,可调试版本来做测试

我会改写一些操作 并相应的添加一些注释来做自我的说明 一些无用的操作 或者文档 我会直接删除掉 以免影响到我对机制的理解

我也会收集一些别的人总结 放入此仓库中 以供更简便的理解

👍预先查看 会帮助你更好的懂此代码

  1. 每个物体最多只受4个附加灯光影响
  2. 一般主光源会做阴影,但也可为附加光源启用阴影
  • 平形光阴影 (方向等于Matrix.GetColumn(2),w=0) 不需位置但需用正交视角
  • 灯光源阴影 (位置等于Matrix.GetColumn(3),w=1)
  • 聚光源阴影 ...
  • 对它们各自的分级采样
  1. HLSL
  • Core.hlsl 为基本的运算操作
  • SpaceTransforms.hlsl 空间转换 及mvp定义
  • Lighting.hlsl 光照的运算,如 顶点光照,球楷模型,lightmap,GI,BlinnPhong,pbr等
  • Shadow.hlsl 用于阴影的计算,包含是否支持屏幕空间阴影,只否多级采样
  1. shader里面会include相应的hlsl,如简单的lit.shader(光照) 会引LitForwardPass.hlsl
  • 有点麻烦的是,它对所有平台用了宏,所以看一些写法会比较奇怪,如:tex(_MainTex,uv) 会变成SampleAlbedoAlpha(uv, TEXTURE2D_PARAM(_MainTex, sampler_MainTex))
  • 顶点着色器中会计算最多4盏附加光照,并存储在vertexLight,它使用基本的LightingLambert,还有基本的SH光照
  • 片段中会取主光源,再与gi做MixRealtimeAndBakedGI,做基本的漫反射及高光运算,然后加入最多4盏附加光照的漫反射及高光运算,然后选择性的加入vertexLight
  • 当然片段着色器中 可以选择用哪种形式来做光bdrf,如BlinnPhong/PBR
  1. 程序入口LightweightRenderPipeline
  • 收集CameraData,lightData,shadowData
  • rendererSetup没特殊情况下其实为:ForwardRendererSetup 的setup
  • 由上面收集来的数据 来收集或者启用不同的pass
  • 相应该的pass的Setup,会返回是否加入到passExecuters列表中,当然还有一部份是会自动加入基本的流程
  • 是否有postEffect,是否需要copy深度图等
  • ...
  • 对passExecuters 里面的pass做foreach操作,并调用pass.execute();

About

unity 轻量级渲染管线的理解

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published