https://blog.csdn.net/HerbertD/article/details/51198537
平行光的阴影绘制:
1、申请rt:GetTemporaryRT
2、设置目标:SetRenderTarget
3、清空画布:ClearRenderTarget
4、执行命令:ExecuteCommandBuffer
5、清空命令:Clear
6、计算矩阵:ComputeDirectionalShadowMatricesAndCullingPrimitives
7、设置矩阵:SetViewProjectionMatrices
8、执行命令:ExecuteCommandBuffer
9、清空命令:Clear
10、画阴影:DrawShadows
总的流程代码:
public void Setup (
ScriptableRenderContext context, CullingResults cullingResults,
ShadowSettings shadowSettings
) {
this.cullingResults = cullingResults;
buffer.BeginSample(bufferName);
shadows.Setup(context, cullingResults, shadowSettings);
SetupLights();
shadows.Render();
buffer.EndSample(bufferName);
context.ExecuteCommandBuffer(buffer);
buffer.Clear();
}
也是需要cullingresults的。
然后阴影绘制完:
public void Render (
ScriptableRenderContext context, Camera camera,
bool useDynamicBatching, bool useGPUInstancing,
ShadowSettings shadowSettings
) {
this.context = context;
this.camera = camera;
PrepareBuffer();
PrepareForSceneWindow();
if (!Cull(shadowSettings.maxDistance)) {
return;
}
buffer.BeginSample(SampleName);
ExecuteBuffer();
lighting.Setup(context, cullingResults, shadowSettings);
buffer.EndSample(SampleName);
Setup();
DrawVisibleGeometry(useDynamicBatching, useGPUInstancing);
DrawUnsupportedShaders();
DrawGizmos();
lighting.Cleanup();
Submit();
}
context,可以设置矩阵;
commandbuffer,也可以设置矩阵;
context可以绘制阴影,context还可以绘制render;
context可以绘制阴影
ShadowDrawingSettings(CullingResults cullingResults, int lightIndex);
context.DrawShadows(ref shadowSettings);
context还可以绘制render
context.DrawRenderers(cullingResults, ref drawingSettings, ref filteringSettings);
你看到没有,这个两个都有一个绘制的内容:cullingResults.
但是,有个不同点,就是绘制render的时候,多了两个参数:drawsettings和filteringsettings。