Esempio n. 1
0
        static public void UpdateForwardLights()
        {
            const float RADIUS_FOR_LIGHTS = 400;

            BoundingSphere sphere = new BoundingSphere(MyCamera.Position, RADIUS_FOR_LIGHTS);

            GetRenderProfiler().StartProfilingBlock("Setup lights");

            MyEffectModelsDNS effectDNS = (MyEffectModelsDNS)GetEffect(MyEffects.ModelDNS);

            MyLights.UpdateEffect(effectDNS.DynamicLights, ref sphere, true);
            MyLights.UpdateEffectReflector(effectDNS.Reflector, true);

            MyEffectVoxels effectVoxels = (MyEffectVoxels)GetEffect(MyEffects.VoxelsMRT);

            MyLights.UpdateEffect(effectVoxels.DynamicLights, ref sphere, true);
            MyLights.UpdateEffectReflector(effectVoxels.Reflector, true);

            MyEffectDecals effectDecals = (MyEffectDecals)GetEffect(MyEffects.Decals);

            MyLights.UpdateEffect(effectDecals.DynamicLights, ref sphere, true);
            MyLights.UpdateEffectReflector(effectDecals.Reflector, true);

            GetRenderProfiler().EndProfilingBlock(); //Setup lights
        }
Esempio n. 2
0
        static void SetupAtmosphere(MyEffectVoxels shader, MyRenderVoxelCellBackground element)
        {
            shader.SetHasAtmosphere(element.HasAtmosphere);

            if (element.HasAtmosphere)
            {
                float depthScale = 0.2f;

                shader.SetInnerRadius(element.PlanetRadius);
                shader.SetOutherRadius(element.AtmosphereRadius);

                float scaleAtmosphere = 1.0f / (element.AtmosphereRadius - element.PlanetRadius);

                shader.SetScaleAtmosphere(scaleAtmosphere);
                shader.SetScaleAtmosphereOverScaleDepth(scaleAtmosphere / depthScale);

                Vector3 cameraToCenter = element.GetRelativeCameraPos(MyRenderCamera.Position);

                shader.SetRelativeCameraPos(cameraToCenter);

                shader.SetLightPos(-MySunGlare.GetSunDirection());
                shader.SetIsInside(element.IsInside(MyRenderCamera.Position));

                shader.SetScaleDepth(depthScale);

                shader.SetPositonToLeftBottomOffset(element.PositiontoLeftBottomOffset);

                shader.SetWavelength(element.AtmosphereWavelengths);
            }
        }
        public static void SetupVoxelEntity(MyLodTypeEnum lod, MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            {
                MatrixD worldMatrixD = renderElement.WorldMatrix;
                worldMatrixD.Translation -= MyRenderCamera.Position;
                var worldMatrix = (Matrix)worldMatrixD;
                effectVoxels.SetWorldMatrix(ref worldMatrix);
            }

            //effectVoxels.SetVoxelMapPosition((Vector3)(renderElement.WorldMatrix.Translation - MyRenderCamera.Position));
            //effectVoxels.SetPositionLocalOffset((Vector3)(renderElement.WorldMatrix.Right));
            //effectVoxels.SetPositionLocalScale((Vector3)(renderElement.WorldMatrix.Up));
            //effectVoxels.SetLodBounds(new Vector2((float)renderElement.WorldMatrix.M14, (float)renderElement.WorldMatrix.M24));
            effectVoxels.SetDiffuseColor(Vector3.One);
            if (MyRenderSettings.DebugClipmapLodColor && renderElement.VoxelBatch.Lod < MyRenderVoxelCell.LOD_COLORS.Length)
            {
                effectVoxels.SetDiffuseColor(MyRenderVoxelCell.LOD_COLORS[renderElement.VoxelBatch.Lod].ToVector3());
            }
            effectVoxels.EnablePerVertexAmbient(MyRender.Settings.EnablePerVertexVoxelAmbient);

            if (lod == MyLodTypeEnum.LOD_BACKGROUND && renderElement.RenderObject is MyRenderVoxelCellBackground)
            {
                SetupAtmosphere(effectVoxels, renderElement.RenderObject as MyRenderVoxelCellBackground);
            }
        }
        public static void SetupVoxelEntity(MyLodTypeEnum lod, MyEffectBase shader, MyRender.MyRenderElement renderElement)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            {
                MatrixD worldMatrixD = renderElement.WorldMatrix;
                worldMatrixD.Translation -= MyRenderCamera.Position;
                var worldMatrix = (Matrix)worldMatrixD;
                effectVoxels.SetWorldMatrix(ref worldMatrix);
            }

            var voxelCell = renderElement.RenderObject as MyRenderVoxelCell;

            if (voxelCell != null)
            {
                MyRenderVoxelCell.EffectArgs args;
                voxelCell.GetEffectArgs(out args);
                effectVoxels.VoxelVertex.SetArgs(ref args);
            }

            effectVoxels.SetDiffuseColor(Vector3.One);
            if (MyRenderSettings.DebugClipmapLodColor && renderElement.VoxelBatch.Lod < MyRenderVoxelCell.LOD_COLORS.Length)
            {
                effectVoxels.SetDiffuseColor(MyRenderVoxelCell.LOD_COLORS[renderElement.VoxelBatch.Lod].ToVector3());
            }
            effectVoxels.EnablePerVertexAmbient(
                MyRenderSettings.EnableVoxelAo,
                MyRenderSettings.VoxelAoMin,
                MyRenderSettings.VoxelAoMax,
                MyRenderSettings.VoxelAoOffset);
        }
Esempio n. 5
0
        static void SetupShaderForMaterialAlternative(MyEffectBase shader, MyVoxelCacheCellRenderBatchType batchType, MyMwcVoxelMaterialsEnum m0, MyMwcVoxelMaterialsEnum?m1, MyMwcVoxelMaterialsEnum?m2)
        {
            MyEffectVoxels effectVoxels = shader as MyEffectVoxels;

            if (batchType == MyVoxelCacheCellRenderBatchType.SINGLE_MATERIAL)
            {
                effectVoxels.UpdateVoxelTextures(OverrideVoxelMaterial ?? m0);
            }
            else if (batchType == MyVoxelCacheCellRenderBatchType.MULTI_MATERIAL)
            {
                effectVoxels.UpdateVoxelMultiTextures(OverrideVoxelMaterial ?? m0, OverrideVoxelMaterial ?? m1, OverrideVoxelMaterial ?? m2);
            }
        }
Esempio n. 6
0
        static public void UpdateForwardLights()
        {
            GetRenderProfiler().StartProfilingBlock("Setup lights");

            MyEffectModelsDNS effectDNS = (MyEffectModelsDNS)GetEffect(MyEffects.ModelDNS);

            MyLights.UpdateEffect(effectDNS.DynamicLights, true);
            MyLights.UpdateEffectReflector(effectDNS.Reflector, true);

            MyEffectVoxels effectVoxels = (MyEffectVoxels)GetEffect(MyEffects.VoxelsMRT);

            MyLights.UpdateEffect(effectVoxels.DynamicLights, true);
            MyLights.UpdateEffectReflector(effectVoxels.Reflector, true);

            MyEffectDecals effectDecals = (MyEffectDecals)GetEffect(MyEffects.Decals);

            MyLights.UpdateEffect(effectDecals.DynamicLights, true);
            MyLights.UpdateEffectReflector(effectDecals.Reflector, true);

            GetRenderProfiler().EndProfilingBlock(); //Setup lights
        }
Esempio n. 7
0
 public sealed override void SetupVoxelMaterial(MyEffectVoxels shader, MyRenderVoxelBatch batch)
 {
     throw new InvalidOperationException();
 }
 public override void SetupVoxelMaterial(MyEffectVoxels effect, MyRenderVoxelBatch batch)
 {
     effect.UpdateVoxelMultiTextures(MyRender.OverrideVoxelMaterial ?? batch.Material0, MyRender.OverrideVoxelMaterial ?? batch.Material1, MyRender.OverrideVoxelMaterial ?? batch.Material2);
 }
Esempio n. 9
0
 public abstract void SetupVoxelMaterial(MyEffectVoxels shader, MyRenderVoxelBatch batch);
Esempio n. 10
0
        static void BeginShaderAlternative(MyEffectBase shader, MyMeshDrawTechnique technique, MyVoxelCacheCellRenderBatchType batchType)
        {
            switch (technique)
            {
            case MyMeshDrawTechnique.DECAL:
            {
                if (shader is MyEffectModelsDNS)
                {
                    (shader as MyEffectModelsDNS).BeginBlended();
                }
            }
            break;

            case MyMeshDrawTechnique.HOLO:
            {
                if (m_currentLodDrawPass != MyLodTypeEnum.LOD_NEAR && !MyRenderConstants.RenderQualityProfile.ForwardRender)
                {
                    (shader as MyEffectModelsDNS).ApplyHolo(false);
                }
                else
                {
                    (shader as MyEffectModelsDNS).ApplyHolo(true);
                }
            }
            break;

            case MyMeshDrawTechnique.ALPHA_MASKED:
            {
                (shader as MyEffectModelsDNS).ApplyMasked();
            }
            break;

            case MyMeshDrawTechnique.VOXEL_MAP:
            {
                MyEffectVoxels effectVoxels = shader as MyEffectVoxels;
                if (batchType == MyVoxelCacheCellRenderBatchType.SINGLE_MATERIAL)
                {
                    effectVoxels.Apply();
                }
                else if (batchType == MyVoxelCacheCellRenderBatchType.MULTI_MATERIAL)
                {
                    effectVoxels.ApplyMultimaterial();
                }
                break;
            }

            case MyMeshDrawTechnique.VOXELS_STATIC_ASTEROID:
            {
                ((MyEffectVoxelsStaticAsteroid)shader).Apply();
            }
            break;

            case MyMeshDrawTechnique.MESH:
            {
                ((MyEffectModelsDNS)shader).SetTechnique(MyRenderConstants.RenderQualityProfile.ModelsRenderTechnique);
            }
            break;

            case MyMeshDrawTechnique.VOXELS_DEBRIS:
            {
                ((MyEffectVoxelsDebris)shader).SetTechnique(MyRenderConstants.RenderQualityProfile.VoxelsRenderTechnique);
            }
            break;

            default:
            {
                System.Diagnostics.Debug.Assert(false);
            }
            break;
            }
        }