工程配置
- 创建一个3d project
- 安装 Core RPLibrary(com.unity.render-pipelines.core)
- Windows->Package Manager
- 点击左上角加号选择 add package from git url
- 输入com.unity.render-pipelines.core 回车
- 设置颜色空间为Linear 线性空间(Project Setting->Player->Color Space)
创建管线
- 创建RenderPipeline 子类 MyPipLine 实现 Render 方法
public class MyPipLine : RenderPipeline
{
protected override void Render(ScriptableRenderContext context, Camera[] cameras)
{
}
}
- 创建
RenderPipelineAsset
的子类 实现RenderPipeline
方法
[CreateAssetMenu(menuName = "Tools/CreateMyPipeline")]
public class MyPipLineAsset : RenderPipelineAsset
{
protected override RenderPipeline CreatePipeline()
{
return new MyPipLine();
}
}
- 在unity中使用右键菜单Tools->CreateMyPipline创建pipline资源
- 打开Edit->Project Settings->Graphics 将创建出的资源拖拽至Scriptable Render Pipeline Settings
这样管线就创建完成了。接下来只要实现MyPipline
的Render
方法了
渲染物体
- 在场景中创建一个立方体
- 添加一个材质赋予立方体,材质的shader 选择为Unlit/Color
- 实现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();
}
在场景中就可以看到物体了