public override void Execute(ScriptableRenderer renderer, ScriptableRenderContext context, ref RenderingData renderingData) { Camera camera = renderingData.cameraData.camera; LookingGlassUtil.SetupCameraInfo(camera, perCameraInfo.fov, perCameraInfo.size, perCameraInfo.nearClipFactor, perCameraInfo.farClipFactor); // clear Tile Texture commandBuffer.SetRenderTarget(dstTiledTexture); commandBuffer.ClearRenderTarget(true, true, Color.black); context.ExecuteCommandBuffer(commandBuffer); // setup CalculateVpMatrixOffsetsAndTileRects(camera); Shader.SetGlobalVector("LookingQuiltSize", new Vector4(dstTiledTexture.width, dstTiledTexture.height, 0, 0)); MaterialPropertyBlock materialPropertyBlock = new MaterialPropertyBlock(); materialPropertyBlock.SetVectorArray("LookingVPOffset", m_VpOffsetParam); materialPropertyBlock.SetVectorArray("LookingScreenRect", m_ScreenRectParam); DebugSetup(camera, materialPropertyBlock); Shader.EnableKeyword(LgInstancingShaderKeyword); // todo メッシュ一覧取得周りの仕組みつくる var meshFilters = Resources.FindObjectsOfTypeAll <MeshFilter>(); foreach (var meshFilter in meshFilters) { var meshRenderer = meshFilter.GetComponent <MeshRenderer>(); var mesh = meshFilter.sharedMesh; if (mesh == null) { continue; } if (meshRenderer == null || meshRenderer.sharedMaterial == null) { continue; } var material = meshRenderer.sharedMaterial; if (!material.enableInstancing) { continue; } var matrix = meshFilter.transform.localToWorldMatrix; this.CalculateInstancingMatrix(ref matrix); commandBuffer.DrawMeshInstanced(mesh, 0, material, 0, this.m_RenderMatrix, m_RenderMatrix.Length, materialPropertyBlock); } context.ExecuteCommandBuffer(commandBuffer); context.Submit(); commandBuffer.Clear(); Shader.DisableKeyword(LgInstancingShaderKeyword); }
public override void Execute(ScriptableRenderer renderer, ScriptableRenderContext context, ref RenderingData renderingData) { int w = drawInfo.renderTargetW / drawInfo.tileX; int h = drawInfo.renderTargetH / drawInfo.tileY; RenderTextureDescriptor renderTextureDesc = new RenderTextureDescriptor(w, h, RenderTextureFormat.ARGB32, 16); RenderTexture tempRenderTexture = RenderTexture.GetTemporary(renderTextureDesc); Camera camera = renderingData.cameraData.camera; LookingGlassUtil.SetupCameraInfo(camera, perCameraInfo.fov, perCameraInfo.size, perCameraInfo.nearClipFactor, perCameraInfo.farClipFactor); var opaqueSortFlag = renderingData.cameraData.defaultOpaqueSortFlags; var opaquedrawSettings = CreateDrawRendererSettings(camera, opaqueSortFlag, rendererConfiguration, renderingData.supportsDynamicBatching); var transDrawSettings = CreateDrawRendererSettings(camera, SortFlags.CommonTransparent, rendererConfiguration, renderingData.supportsDynamicBatching); // clear Tile Texture commandBuffer.SetRenderTarget(dstTiledTexture); commandBuffer.ClearRenderTarget(true, true, Color.black); context.ExecuteCommandBuffer(commandBuffer); context.Submit(); commandBuffer.Clear(); var tileSize = new Vector2(w, h); int counter = 0; int tileNum = drawInfo.tileX * drawInfo.tileY; for (int i = 0; i < drawInfo.tileY; ++i) { for (int j = 0; j < drawInfo.tileX; ++j) { SetupVPMatrices(context, commandBuffer, camera, counter, tileNum); commandBuffer.SetRenderTarget(tempRenderTexture); commandBuffer.ClearRenderTarget(true, true, Color.black); context.ExecuteCommandBuffer(commandBuffer); commandBuffer.Clear(); // opaque renderer draw context.DrawRenderers(renderingData.cullResults.visibleRenderers, ref opaquedrawSettings, m_OpaqueFilterSettings); // Render objects that did not match any shader pass with error shader renderer.RenderObjectsWithError(context, ref renderingData.cullResults, camera, m_OpaqueFilterSettings, SortFlags.None); // transparent renderer Draw context.DrawRenderers(renderingData.cullResults.visibleRenderers, ref transDrawSettings, m_TransparentFilterSettings); commandBuffer.CopyTexture(tempRenderTexture, 0, 0, 0, 0, tempRenderTexture.width, tempRenderTexture.height, dstTiledTexture, 0, 0, j * w, i * h); context.ExecuteCommandBuffer(commandBuffer); context.Submit(); ++counter; } } commandBuffer.Clear(); RenderTexture.ReleaseTemporary(tempRenderTexture); }