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 }
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); }
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); } }
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 }
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); }
public abstract void SetupVoxelMaterial(MyEffectVoxels shader, MyRenderVoxelBatch batch);
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; } }