Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
timchen1002
CustomSRP_01_CustomRenderPipeline
提交
38ca1ddd
C
CustomSRP_01_CustomRenderPipeline
项目概览
timchen1002
/
CustomSRP_01_CustomRenderPipeline
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
CustomSRP_01_CustomRenderPipeline
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
38ca1ddd
编写于
9月 10, 2021
作者:
timchen1002
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
f20989b2
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
70 addition
and
15 deletion
+70
-15
Assets/RawAssets/Standard Transparent.mat
Assets/RawAssets/Standard Transparent.mat
+7
-6
Assets/Scripts/CameraRenderer.Editor.cs
Assets/Scripts/CameraRenderer.Editor.cs
+20
-1
Assets/Scripts/CameraRenderer.cs
Assets/Scripts/CameraRenderer.cs
+36
-8
Assets/Scripts/CustomRenderPipeline.cs
Assets/Scripts/CustomRenderPipeline.cs
+4
-0
Assets/Scripts/CustomRenderPipelineAsset.cs
Assets/Scripts/CustomRenderPipelineAsset.cs
+3
-0
未找到文件。
Assets/RawAssets/Standard Transparent.mat
浏览文件 @
38ca1ddd
...
...
@@ -9,12 +9,13 @@ Material:
m_PrefabAsset
:
{
fileID
:
0
}
m_Name
:
Standard Transparent
m_Shader
:
{
fileID
:
46
,
guid
:
0000000000000000f000000000000000
,
type
:
0
}
m_ShaderKeywords
:
m_ShaderKeywords
:
_ALPHAPREMULTIPLY_ON
m_LightmapFlags
:
4
m_EnableInstancingVariants
:
0
m_DoubleSidedGI
:
0
m_CustomRenderQueue
:
-1
stringTagMap
:
{}
m_CustomRenderQueue
:
3000
stringTagMap
:
RenderType
:
Transparent
disabledShaderPasses
:
[]
m_SavedProperties
:
serializedVersion
:
3
...
...
@@ -60,19 +61,19 @@ Material:
-
_BumpScale
:
1
-
_Cutoff
:
0.5
-
_DetailNormalMapScale
:
1
-
_DstBlend
:
0
-
_DstBlend
:
1
0
-
_GlossMapScale
:
1
-
_Glossiness
:
0.5
-
_GlossyReflections
:
1
-
_Metallic
:
0
-
_Mode
:
0
-
_Mode
:
3
-
_OcclusionStrength
:
1
-
_Parallax
:
0.02
-
_SmoothnessTextureChannel
:
0
-
_SpecularHighlights
:
1
-
_SrcBlend
:
1
-
_UVSec
:
0
-
_ZWrite
:
1
-
_ZWrite
:
0
m_Colors
:
-
_Color
:
{
r
:
0.18039227
,
g
:
0
,
b
:
1
,
a
:
1
}
-
_EmissionColor
:
{
r
:
0
,
g
:
0
,
b
:
0
,
a
:
1
}
...
...
Assets/Scripts/CameraRenderer.Editor.cs
浏览文件 @
38ca1ddd
...
...
@@ -3,11 +3,15 @@ using UnityEngine;
using
UnityEngine.Rendering
;
using
UnityEngine.Profiling
;
/// <summary>
/// 相机渲染管理类
/// </summary>
partial
class
CameraRenderer
{
partial
void
DrawGizmos
();
partial
void
DrawUnsupportedShaders
();
#if UNITY_EDITOR
// SRP不支持的着色器标签类型
static
ShaderTagId
[]
legacyShaderTagIds
=
{
new
ShaderTagId
(
"Always"
),
new
ShaderTagId
(
"ForwardBase"
),
...
...
@@ -16,6 +20,7 @@ partial class CameraRenderer
new
ShaderTagId
(
"VertexLMRGBM"
),
new
ShaderTagId
(
"VertexLM"
),
};
// 绘制成使用错误材质的粉红色颜色
static
Material
errorMaterial
;
partial
void
PrepareForSceneWindow
();
...
...
@@ -25,7 +30,7 @@ partial class CameraRenderer
string
sampleName
{
get
;
set
;
}
/// <summary>
/// 绘制
所有不支持的
着色器
/// 绘制
SRP不支持的内置
着色器
/// </summary>
partial
void
DrawUnsupportedShaders
()
{
...
...
@@ -46,6 +51,10 @@ partial class CameraRenderer
context
.
DrawRenderers
(
cullingResults
,
ref
drawingSettings
,
ref
fliteringSettings
);
}
/// <summary>
/// 绘制Gizmos
/// </summary>
/// <returns></returns>
partial
void
DrawGizmos
()
{
if
(
Handles
.
ShouldRenderGizmos
())
...
...
@@ -55,16 +64,26 @@ partial class CameraRenderer
}
}
/// <summary>
/// 在Game视图绘制的几何体也绘制到Scene视图中
/// </summary>
/// <returns></returns>
partial
void
PrepareForSceneWindow
()
{
if
(
camera
.
cameraType
==
CameraType
.
SceneView
)
{
// 如果切换到了Scene视图,调用次方法完成绘制
ScriptableRenderContext
.
EmitWorldGeometryForSceneView
(
camera
);
}
}
/// <summary>
/// 设置buffer缓冲区的名字
/// </summary>
/// <returns></returns>
partial
void
PrepareBuffer
()
{
// 设置只有在编辑器模式下才分配内存
Profiler
.
BeginSample
(
"Editor Only"
);
buffer
.
name
=
camera
.
name
;
Profiler
.
EndSample
();
...
...
Assets/Scripts/CameraRenderer.cs
浏览文件 @
38ca1ddd
using
UnityEngine
;
using
UnityEngine.Rendering
;
/// <summary>
/// 相机渲染管理类:单独控制每个相机的渲染
/// </summary>
public
partial
class
CameraRenderer
{
ScriptableRenderContext
context
;
Camera
camera
;
const
string
bufferName
=
"Render Camera"
;
// 创建缓冲区
CommandBuffer
buffer
=
new
CommandBuffer
{
name
=
bufferName
};
// 存储相机剔除后的结果
CullingResults
cullingResults
;
// 着色器标记ID
static
ShaderTagId
unlitShaderTagId
=
new
ShaderTagId
(
"SRPDefaultUnlit"
);
/// <summary>
/// 相机渲染
/// </summary>
/// <param name="context"></param>
/// <param name="camera"></param>
public
void
Render
(
ScriptableRenderContext
context
,
Camera
camera
)
{
this
.
context
=
context
;
this
.
camera
=
camera
;
// 设置buffer缓冲区的名字
PrepareBuffer
();
// 在Game视图绘制的几何体也绘制到Scene视图中
PrepareForSceneWindow
();
if
(!
Cull
())
{
return
;
}
Setup
();
// 绘制可见几何体
DrawVisibleGeometry
();
// 绘制SRP不支持的内置shader类型
DrawUnsupportedShaders
();
// 绘制Gizmos
DrawGizmos
();
// 提交缓冲区
Submit
();
}
...
...
@@ -48,16 +65,23 @@ public partial class CameraRenderer
return
false
;
}
/// <summary>
/// 设置相机的属性和矩阵,在着色器中被称为unity_matrixvp
/// </summary>
void
Setup
()
{
// 设置视图投影矩阵 在着色器中被称为unity_matrixvp
context
.
SetupCameraProperties
(
camera
);
// 得到相机的clearflags
CameraClearFlags
flags
=
camera
.
clearFlags
;
// 设置相机清除状态
buffer
.
ClearRenderTarget
(
flags
<=
CameraClearFlags
.
Depth
,
flags
==
CameraClearFlags
.
Color
,
flags
==
CameraClearFlags
.
Color
?
camera
.
backgroundColor
.
linear
:
Color
.
clear
);
buffer
.
BeginSample
(
sampleName
);
ExecuteBuffer
();
}
/// <summary>
/// 提交缓冲区命令
/// </summary>
void
Submit
()
{
buffer
.
EndSample
(
sampleName
);
...
...
@@ -65,6 +89,9 @@ public partial class CameraRenderer
context
.
Submit
();
}
/// <summary>
/// 执行缓冲区命令
/// </summary>
void
ExecuteBuffer
()
{
context
.
ExecuteCommandBuffer
(
buffer
);
...
...
@@ -72,28 +99,29 @@ public partial class CameraRenderer
}
/// <summary>
/// 绘制可见几何体
/// 绘制可见几何体
,顺序:不透明物体->天空盒->透明物体
/// </summary>
void
DrawVisibleGeometry
()
{
//
顺序:不透明->天空盒->透明
//
设置绘制顺序和指定渲染相机
var
sortingSettings
=
new
SortingSettings
(
camera
)
{
criteria
=
SortingCriteria
.
CommonOpaque
};
//
用哪个着色器(shaderPassName)和对可见对象排序(sortingSettings)
//
设置渲染的shader pass和渲染顺序
var
drawingSettings
=
new
DrawingSettings
(
unlitShaderTagId
,
sortingSettings
);
//
描述如何过滤要渲染的给定可见对象集
var
filteringSettings
=
new
FilteringSettings
(
RenderQueueRange
.
all
);
//
只绘制RenderQueue为opaque不透明物体
var
filteringSettings
=
new
FilteringSettings
(
RenderQueueRange
.
opaque
);
// 绘制不透明
// 绘制不透明
物体
context
.
DrawRenderers
(
cullingResults
,
ref
drawingSettings
,
ref
filteringSettings
);
// 绘制天空盒
context
.
DrawSkybox
(
camera
);
sortingSettings
.
criteria
=
SortingCriteria
.
CommonTransparent
;
drawingSettings
.
sortingSettings
=
sortingSettings
;
// 只绘制RenderQueue为transparent透明的物体
filteringSettings
.
renderQueueRange
=
RenderQueueRange
.
transparent
;
// 绘制透明
// 绘制透明
物体
context
.
DrawRenderers
(
cullingResults
,
ref
drawingSettings
,
ref
filteringSettings
);
}
}
Assets/Scripts/CustomRenderPipeline.cs
浏览文件 @
38ca1ddd
using
UnityEngine
;
using
UnityEngine.Rendering
;
/// <summary>
/// 自定义渲染管线实例
/// </summary>
public
class
CustomRenderPipeline
:
RenderPipeline
{
CameraRenderer
renderer
=
new
CameraRenderer
();
protected
override
void
Render
(
ScriptableRenderContext
context
,
Camera
[]
cameras
)
{
// 遍历所有相机单独渲染
foreach
(
Camera
camera
in
cameras
)
{
renderer
.
Render
(
context
,
camera
);
...
...
Assets/Scripts/CustomRenderPipelineAsset.cs
浏览文件 @
38ca1ddd
using
UnityEngine
;
using
UnityEngine.Rendering
;
/// <summary>
/// 自定义渲染管线资产
/// </summary>
[
CreateAssetMenu
(
menuName
=
"Rendering/Custom Render Pipeline"
)]
public
class
CustomRenderPipelineAsset
:
RenderPipelineAsset
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录