예제 #1
0
    public MyPipeline1(bool dynamicBatching, bool instancing,
                       int shadowMapSize, float shadowDistance, float shadowFadeRange,
                       int shadowCascades, Vector3 shadowCascadeSplit) //constructor with configurations
    {
        GraphicsSettings.lightsUseLinearIntensity = true;
        if (SystemInfo.usesReversedZBuffer)
        {  //set the shadow case for outside all cascades
            worldToShadowCascadeMatrices[4].m33 = 1f;
        }

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        this.shadowMapSize  = shadowMapSize;
        this.shadowDistance = shadowDistance;
        globalShadowData.y  = 1f / shadowFadeRange;

        this.shadowCascades     = shadowCascades;
        this.shadowCascadeSplit = shadowCascadeSplit;

        #if UNITY_EDITOR
        Lightmapping.SetDelegate(lightmappingLightsDelegate);
        #endif
    }
예제 #2
0
    public MyPipeline(bool dynamicBatching, bool instanceing, MyPostProcessingStack defaultStack, Texture2D ditherTexture, float ditherAnimationSpeed, int shadowMapSize, float shadowDistance, float shadowFadeRange, int shadowCascades, Vector3 shadowCascadeSplit, float renderScale, int msaaSamples, bool allowHDR)
    {
        GraphicsSettings.lightsUseLinearIntensity = true;
        if (SystemInfo.usesReversedZBuffer)
        {
            worldToShadowCascadeMatrices[4].m33 = 1f;
        }
        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        if (instanceing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }
        this.ditherTexture = ditherTexture;
        if (ditherAnimationSpeed > 0f && Application.isPlaying)
        {
            ConfigureDitherAnimation(ditherAnimationSpeed);
        }
        this.shadowMapSize           = shadowMapSize;
        this.shadowDistance          = shadowDistance;
        globalShadowData.y           = 1f / shadowFadeRange;
        this.shadowCascades          = shadowCascades;
        this.shadowCascadeSplit      = shadowCascadeSplit;
        this.defaultStack            = defaultStack;
        this.renderScale             = renderScale;
        this.allowHDR                = allowHDR;
        QualitySettings.antiAliasing = msaaSamples;
        this.msaaSamples             = Mathf.Max(QualitySettings.antiAliasing, 1);
#if UNITY_EDITOR
        Lightmapping.SetDelegate(lightmappingLightsDelegate);
#endif
    }
예제 #3
0
        int                        m_UseSrpBatcher; // only needed to match native struct
#pragma warning restore 414

        public DrawingSettings(ShaderTagId shaderPassName, SortingSettings sortingSettings)
        {
            m_SortingSettings = sortingSettings;
            m_PerObjectData   = PerObjectData.None;
            m_Flags           = DrawRendererFlags.EnableInstancing;

            m_OverrideMaterialInstanceId = 0;
            m_OverrideMaterialPassIndex  = 0;
            m_fallbackMaterialInstanceId = 0;
            m_MainLightIndex             = -1;

            fixed(int *p = shaderPassNames)
            {
                p[0] = shaderPassName.id;
                for (int i = 1; i < maxShaderPasses; i++)
                {
                    p[i] = -1;
                }
            }

            m_PerObjectData = PerObjectData.None;
            m_Flags         = DrawRendererFlags.EnableInstancing;

            m_UseSrpBatcher = 0;
        }
예제 #4
0
    public MyPipeline(
        bool dynamicBatching, bool instancing,
        int shadowMapSize, float shadowDistance,
        int shadowCascades, Vector3 shadowCascasdeSplit
        )
    {
        GraphicsSettings.lightsUseLinearIntensity = true;
        if (SystemInfo.usesReversedZBuffer)
        {
            worldToShadowCascadeMatrices[4].m33 = 1f;
        }

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }
        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }
        this.shadowMapSize      = shadowMapSize;
        this.shadowDistance     = shadowDistance;
        this.shadowCascades     = shadowCascades;
        this.shadowCascadeSplit = shadowCascasdeSplit;
    }
    public VXGIRenderPipeline(VXGIRenderPipelineAsset asset)
    {
        _renderer = new VXGIRenderer(this);
        _command  = new CommandBuffer()
        {
            name = "VXGI.RenderPipeline"
        };
        _filterSettings = new FilterRenderersSettings(true)
        {
            renderQueueRange = RenderQueueRange.opaque
        };

        _drawRendererFlags = DrawRendererFlags.None;
        if (asset.dynamicBatching)
        {
            _drawRendererFlags |= DrawRendererFlags.EnableDynamicBatching;
        }

        _rendererConfiguration = RendererConfiguration.None;

        if (asset.environmentLighting)
        {
            _rendererConfiguration |= RendererConfiguration.PerObjectLightProbe;
        }
        if (asset.environmentReflections)
        {
            _rendererConfiguration |= RendererConfiguration.PerObjectReflectionProbes;
        }

        Shader.globalRenderPipeline = "VXGI";

        GraphicsSettings.lightsUseLinearIntensity            = true;
        GraphicsSettings.useScriptableRenderPipelineBatching = asset.SRPBatching;
    }
        #pragma warning restore 414

        public DrawRendererSettings(Camera camera, ShaderPassName shaderPassName)
        {
            rendererConfiguration = RendererConfiguration.None;
            flags = DrawRendererFlags.EnableInstancing;

            m_OverrideMaterialInstanceId = 0;
            m_OverrideMaterialPassIdx    = 0;

            fixed(int *p = shaderPassNames)
            {
                for (int i = 0; i < maxShaderPasses; i++)
                {
                    p[i] = -1;
                }
            }

            fixed(int *p = shaderPassNames)
            {
                p[0] = shaderPassName.nameIndex;
            }

            rendererConfiguration = RendererConfiguration.None;
            flags = DrawRendererFlags.EnableInstancing;

            InitializeSortSettings(camera, out sorting);
        }
    public MyPipeline(bool dynamicBatching, bool instancing, MyPostProcessingStack _defaultStack,
                      Texture2D _ditherTexture, float _ditherAnimationSpeed, int _shadowMapSize, float _shadowDistance
                      , float _shadowFadeRange, int _shadowCascades, Vector3 _shadowCascadeSplit, float _renderScale
                      , int _msaaSamples, bool _allowHDR, bool _syncGameCamera)
    {
        //Unity 认为光的强度是在伽马空间中定义的,即使我们是在线性空间中工作。
        GraphicsSettings.lightsUseLinearIntensity = true;

        //如果Z相反 阴影的z最远是1
        if (SystemInfo.usesReversedZBuffer)
        {
            worldToShadowCascadeMatrices[4].m33 = 1f;
        }

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        ditherTexture = _ditherTexture;
        if (_ditherAnimationSpeed > 0f)
        {
            ConfigureDitherAnimation(_ditherAnimationSpeed);
        }

        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        defaultStack = _defaultStack;

        shadowMapSize      = _shadowMapSize;
        shadowDistance     = _shadowDistance;
        globalShadowData.y = 1f / _shadowFadeRange;
        shadowCascades     = _shadowCascades;
        shadowCascadeSplit = _shadowCascadeSplit;
        renderScale        = _renderScale;
        //设置msaa 如果硬件不支持 则为自动回退为1
        QualitySettings.antiAliasing = _msaaSamples;
        msaaSamples = Mathf.Max(QualitySettings.antiAliasing, 1);
        allowHDR    = _allowHDR;

#if UNITY_EDITOR
        if (SceneView.onSceneGUIDelegate != null)
        {
            SceneView.onSceneGUIDelegate -= OnSceneView;
        }

        if (_syncGameCamera)
        {
            SceneView.onSceneGUIDelegate += OnSceneView;
        }
#endif

#if UNITY_EDITOR
        Lightmapping.SetDelegate(lightmappingLightDelegate);
#endif
    }
 public DrawRendererSettings(CullResults cullResults, Camera camera, ShaderPassName shaderPassName)
 {
     this._cullResults          = cullResults.cullResults;
     this.shaderPassName        = shaderPassName;
     this.rendererConfiguration = RendererConfiguration.None;
     this.flags       = DrawRendererFlags.EnableInstancing;
     this.inputFilter = InputFilter.Default();
     DrawRendererSettings.InitializeSortSettings(camera, out this.sorting);
 }
 public MyPipeline(bool dynamicBatching, bool instancing)
 {
     if (dynamicBatching)
     {
         drawFlags = DrawRendererFlags.EnableDynamicBatching;
     }
     if (instancing)
     {
         drawFlags |= DrawRendererFlags.EnableInstancing;
     }
 }
예제 #10
0
 public MyPipeline(bool dynamicBatching, bool instancing)
 {
     GraphicsSettings.lightsUseLinearIntensity = true;
     if (dynamicBatching)
     {
         drawFlags = DrawRendererFlags.EnableDynamicBatching;
     }
     if (instancing)
     {
         drawFlags |= DrawRendererFlags.EnableInstancing;
     }
 }
예제 #11
0
    public MyPipeline(bool dynamicBatching, bool instancing)  //constructor with configurations
    {
        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }
    }
예제 #12
0
  public VXGIRenderPipeline(VXGIRenderPipelineAsset asset) {
    _renderer = new VXGIRenderer(this);
    _command = new CommandBuffer() { name = "VXGIRenderPipeline" };
    _filterSettings = new FilterRenderersSettings(true) { renderQueueRange = RenderQueueRange.opaque };

    _drawRendererFlags = DrawRendererFlags.None;
    if (asset.dynamicBatching) _drawRendererFlags |= DrawRendererFlags.EnableDynamicBatching;

    Shader.globalRenderPipeline = "VXGI";
    Shader.SetGlobalVectorArray("LightColors", new Vector4[64]);
    Shader.SetGlobalVectorArray("LightPositions", new Vector4[64]);

    GraphicsSettings.useScriptableRenderPipelineBatching = asset.SRPBatching;
  }
예제 #13
0
    //
    // non default constructor
    //
    public MyPipeline(bool dynamicBatching, bool instancing)
    {
        GraphicsSettings.lightsUseLinearIntensity = true; // even if we are in linear, intensities are gamma by default.

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }
    }
예제 #14
0
 public MyPipeline(bool dynamicBatching, bool instancing, int shadowMapSize, float shadowDistance)
 {
     GraphicsSettings.lightsUseLinearIntensity = true;
     QualitySettings.shadows = ShadowQuality.All;
     if (dynamicBatching)
     {
         drawflags = DrawRendererFlags.EnableDynamicBatching;
     }
     if (instancing)
     {
         drawflags |= DrawRendererFlags.EnableInstancing;
     }
     this.shadowMapSize  = shadowMapSize;
     this.shadowDistance = shadowDistance;
 }
예제 #15
0
    public MyPipeline(bool dynamicBatching, bool instancing)
    {
        GraphicsSettings.lightsUseLinearIntensity = true;

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        if (instancing)
        {
            //注意这里使用的是OR操作符,flag只有一个,当两个都被打开时,unity更喜欢实现批处理
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }
    }
예제 #16
0
    public MyPipeline1(bool dynamicBatching, bool instancing, int shadowMapSize)  //constructor with configurations
    {
        GraphicsSettings.lightsUseLinearIntensity = true;

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }

        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        this.shadowMapSize = shadowMapSize;
    }
예제 #17
0
        public MobilePipeline(MobilePipelineAsset pipelineAsset)
        {
            _pipelineAsset = pipelineAsset;
            _cameraBuffer  = new CommandBuffer {
                name = "Custom Render Camera"
            };
            if (_pipelineAsset.DynamicBatching)
            {
                _drawFlags = DrawRendererFlags.EnableDynamicBatching;
            }

            if (_pipelineAsset.Instancing)
            {
                _drawFlags |= DrawRendererFlags.EnableInstancing;
            }
        }
예제 #18
0
    public MyPipeline(bool dynamicBatching, bool instance, int shadowMapSize)
    {
        //By default Unity considers the light's intensity to be defined in gamma space, even through we're working in linear space
        GraphicsSettings.lightsUseLinearIntensity = true;

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }
        if (instance)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        this.shadowMapSize = shadowMapSize;
    }
    public MyPipeline(bool dynamicBatching, bool instancing)
    {
        if (dynamicBatching)
        {
            _drawFlags |= DrawRendererFlags.EnableDynamicBatching;
        }

        if (instancing)
        {
            _drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        // 从gamma color space转到linear color sapce.
        GraphicsSettings.lightsUseLinearIntensity            = true;
        GraphicsSettings.useScriptableRenderPipelineBatching = true;
    }
예제 #20
0
    public Scriptable_Render_Pipeline_2_RenderPipeline(bool useDynamicBatching, bool useInstanceing)
    {
        Shader errorShader = Shader.Find("Hidden/InternalErrorShader");

        errorMaterial = new Material(errorShader)
        {
            hideFlags = HideFlags.HideAndDontSave
        };
        if (useDynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }
        if (useInstanceing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }
    }
예제 #21
0
    public MyPipeline(bool dynamicBatching, bool instancing, MyPostProcessingStack defaultStack, int shadowMapSize, float shadowDistance,
                      int shadowCascades, Vector3 shadowCascadeSplit, float renderScale, int msaaSamples, bool allowHDR)
    {
        // Unity默认光强度是在Gamma空间中定义,即使我们工作在线性空间
        // 我们需要指定Unity将光强度理解为线性空间中的值
        GraphicsSettings.lightsUseLinearIntensity = true;

        if (SystemInfo.usesReversedZBuffer)
        {
            worldToShadowCascadeMatrices[4].m33 = 1f;
        }

        if (dynamicBatching)
        {
            // 开启动态批处理
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }
        if (instancing)
        {
            // 开启GPU实例化
            // 如果同时开启动态批处理,Unity优先使用GPU实例化
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        this.defaultStack = defaultStack;

        this.shadowMapSize      = shadowMapSize;
        this.shadowDistance     = shadowDistance;
        this.shadowCascades     = shadowCascades;
        this.shadowCascadeSplit = shadowCascadeSplit;

        this.renderScale = renderScale;

        // QualitySettings会处理平台或者硬件不支持的情况,所以把值赋过去再取回。如果不支持MSAA,取回的值是0
        QualitySettings.antiAliasing = msaaSamples;
        this.msaaSamples             = Mathf.Max(QualitySettings.antiAliasing, 1);

        this.allowHDR = allowHDR;
    }
        public unsafe DrawRendererSettings(Camera camera, ShaderPassName shaderPassName)
        {
            this.rendererConfiguration = RendererConfiguration.None;
            this.flags = DrawRendererFlags.EnableInstancing;
            this.m_OverrideMaterialInstanceId = 0;
            this.m_OverrideMaterialPassIdx    = 0;
            fixed(int *ptr = &this.shaderPassNames.FixedElementField)
            {
                for (int i = 0; i < DrawRendererSettings.maxShaderPasses; i++)
                {
                    ptr[(IntPtr)i * 4] = -1;
                }
            }

            fixed(int *ptr2 = &this.shaderPassNames.FixedElementField)
            {
                *ptr2 = shaderPassName.nameIndex;
            }

            this.rendererConfiguration = RendererConfiguration.None;
            this.flags = DrawRendererFlags.EnableInstancing;
            DrawRendererSettings.InitializeSortSettings(camera, out this.sorting);
        }
예제 #23
0
    public MyPipeline(
        bool dynamicBatching, bool instancing,
        Texture2D ditherTexture, float ditherAnimationSpeed,
        int shadowMapSize, float shadowDistance, float shadowFadeRange,
        int shadowCascades, Vector3 shadowCascasdeSplit
        )
    {
        GraphicsSettings.lightsUseLinearIntensity = true;
        if (SystemInfo.usesReversedZBuffer)
        {
            worldToShadowCascadeMatrices[4].m33 = 1f;
        }

        if (dynamicBatching)
        {
            drawFlags = DrawRendererFlags.EnableDynamicBatching;
        }
        if (instancing)
        {
            drawFlags |= DrawRendererFlags.EnableInstancing;
        }

        this.ditherTexture = ditherTexture;
        if (ditherAnimationSpeed > 0f && Application.isPlaying)
        {
            ConfigureDitherAnimation(ditherAnimationSpeed);
        }

        this.shadowMapSize      = shadowMapSize;
        this.shadowDistance     = shadowDistance;
        globalShadowData.y      = 1f / shadowFadeRange;
        this.shadowCascades     = shadowCascades;
        this.shadowCascadeSplit = shadowCascasdeSplit;
#if UNITY_EDITOR
        Lightmapping.SetDelegate(lightmappingLightsDelegate);
#endif
    }