Unity SRP 环境搭建

工程配置

  1. 创建一个3d project
  2. 安装 Core RPLibrary(com.unity.render-pipelines.core)
  1. Windows->Package Manager
  2. 点击左上角加号选择 add package from git url
  1. 输入com.unity.render-pipelines.core 回车
  2. 设置颜色空间为Linear 线性空间(Project Setting->Player->Color Space)

创建管线

  1. 创建RenderPipeline 子类 MyPipLine 实现 Render 方法
public class MyPipLine : RenderPipeline
{
    protected override void Render(ScriptableRenderContext context, Camera[] cameras)
    {
        
    }
}
  1. 创建RenderPipelineAsset的子类 实现RenderPipeline方法
[CreateAssetMenu(menuName = "Tools/CreateMyPipeline")]
public class MyPipLineAsset : RenderPipelineAsset
{
    protected override RenderPipeline CreatePipeline()
    {
        return new MyPipLine();
    }
}
  1. 在unity中使用右键菜单Tools->CreateMyPipline创建pipline资源
  2. 打开Edit->Project Settings->Graphics 将创建出的资源拖拽至Scriptable Render Pipeline Settings

这样管线就创建完成了。接下来只要实现MyPiplineRender方法了

渲染物体

  1. 在场景中创建一个立方体
  2. 添加一个材质赋予立方体,材质的shader 选择为Unlit/Color
  3. 实现MyPipLine类的Render方法
protected override void Render(ScriptableRenderContext context, Camera[] cameras)
    {
        foreach (var camera in cameras)
        {
            //设置相机参数
            context.SetupCameraProperties(camera);
            //获取相机裁剪参数
            camera.TryGetCullingParameters(out var cullingParameters);
            //根据裁剪参数获取裁剪结果
            var results = context.Cull(ref cullingParameters);
            //设置渲染Pass
            var ds = new DrawingSettings();
            ds.SetShaderPassName(1, new ShaderTagId("SRPDefaultUnlit"));
            //渲染过滤器设置为全部渲染
            var fs = new FilteringSettings(RenderQueueRange.all);
            //绘制渲染结果
            context.DrawRenderers(results,ref ds,ref fs);
            //绘制天空盒子
            context.DrawSkybox(camera);
        }
        //提交
        context.Submit();
    }

在场景中就可以看到物体了

上一篇:【SRP协议】The Secure Remote Password Protocol论文笔记


下一篇:单一职责原则(SRP)