C# Renderer

C# Renderer API allows you to change renderer settings and draw debug primitives. To learn more about renderer settings themselves and what they do, read the renderer documentation.

Renderer class is a static class that can be used for changing renderer settings. There are special enums and structs that Renderer class uses. They are listed below:

public struct RendererVertex
{
    public Vector3 Location;
    public Color3 Color;
}

public struct RendererLine
{
    public RendererVertex Start;
    public RendererVertex End;
}

public struct RendererTriangle
{
    public RendererVertex V0, V1, V2;
}

public enum FogEquation
{
    Linear = 0,
    Exponential = 1,
    Exponential2 = 2, // Square exponential
}

public enum AmbientOcclusion
{
    None,
    SSAO,
    GTAO
};

public enum TonemappingMethod
{
    Reinhard,
    Filmic,
    ACES,
    PhotoLinear
}

public enum AAMethod
{
    None,
    TAA
};

public struct PhotoLinearTonemappingSettings
{
    public float Sensitivity;
    public float ExposureTime;
    public float FStop;
}

public struct FilmicTonemappingSettings
{
    public float WhitePoint;
}

public struct SkySettings
{
    public Vector3 SunPos;
    public Color3 CloudsColor;
    public float SkyIntensity;
    public float CloudsIntensity;
    public float Scattering;
    public float Cirrus;
    public float Cumulus;
    public uint CumulusLayers;
    public bool bEnableCirrusClouds;
    public bool bEnableCumulusClouds;
}

public struct FogSettings
{
    public Color3 Color;
    public float MinDistance;
    public float MaxDistance;
    public float Density;
    public FogEquation Equation;
    public bool bEnabled;
}

public struct BloomSettings
{
    public AssetTexture2D Dirt;
    public float Threshold;
    public float Intensity;
    public float DirtIntensity;
    public float Knee;
    public bool bEnabled;
}

public struct SSAOSettings
{
    public uint Samples;
    public float Radius;
    public float Bias;
}

public struct GTAOSettings
{
    public uint Samples;
    public float Radius;
}

public struct VolumetricLightsSettings
{
    public Vector3 Albedo;
    public float Anisotropy;
    public uint Samples;
    public float MaxScatteringDistance;
    public float FogSpeed;
    public bool bFogEnabled;
    public bool bEnabled;
}

public struct ShadowMapsSettings
{
    public uint PointLightShadowMapSize;
    public uint SpotLightShadowMapSize;
    public uint[] DirLightShadowMapSizes;

    public const uint MinPointLightShadowMapSize = 64u;
    public const uint MinSpotLightShadowMapSize = 64u;
    public const uint MinDirLightShadowMapSize = 64u;
}

public struct DepthOfFieldSettings
{
    public Vector2 ApertureShape;
    public float ApertureSize;
    public float FocalLength;
    public float COCScale;
    public float MaxCOC;
}

public struct MotionBlurSettings
{
    public bool bEnabled;
    public uint NumSamples;
    public float Strength;
}

public struct AutoExposureSettings
{
    public float MinLogLum;
    public float MaxLogLum;
    public float AdaptationSpeed;
    public float AdaptationKey;

    public bool bEnabled;
    public bool bHalfResolution;
}

public struct ScreenSpaceReflectionsSettings
{
    public float RoughnessThreshold;
    public uint SamplesPerQuad;
    public uint MaxTraversalIterations;
    public bool bEnabled;
}

public enum EmitterEmissionShapeType
{
    Point, Sphere, SphereSurface, Box, Ring, Mesh
}

public enum EmitterCollisionModeType
{
    None, DestroyOnHit, Bounce,
    }

public struct ParticleEmitter
    {
            // ---------------- Particle properties ----------------
            public AssetTexture2D TextureAsset;

            public Color4 ColorStart;
    public Color4 ColorEnd;

            public Vector3 VelocityMin;
    public Vector3 VelocityMax;

            public Vector3 VelocityCoefStart;
    public Vector3 VelocityCoefEnd;

            public float RotationZStart;
    public float RotationZEnd;

            public Vector2 SizeStart;
            public Vector2 SizeEnd;
    public Vector2 ColliderSizeRatio; // Can be used to increase the size of a collider to prevent small and fast-moving particles from clipping through

            // In seconds
            public float LifetimeMin;
    public float LifetimeMax;

            public float BouncinessMin;
    public float BouncinessMax;

            // ---------------- Emitter properties ----------------
            public string Name;
            public Transform RelativeTransform; // Relative to the particle system
            public AABB VisibilityAABB; // If not visible by the camera, it's not rendered to improve perf
            public uint LoopCount; // 0 - infinity
            public uint NumParticles;
            public float NumParticlesRatio; // Can be used to control `NumParticles`
            public float RadialAcceleration; // If it's negative, particles will move towards the center of the emitter. If positive, they move away from the center
            public float TangentialAcceleration; // Particles will move away from the center of the emitter in a spiral way.
    public float NormalVelocityFactor; // If not 0, particle's initial velocity will be affected by `EmissionShapeType` normal direction

    public EmitterEmissionShapeType EmissionShape;
    // Sphere emission shape
    public Vector3 SphereRadius;
    // Box emission shape
    public Vector3 BoxMin;
    public Vector3 BoxMax;
    // Ring emission shape
    public Vector3 RingRadius;
    public Vector3 RingThickness;
    // Mesh emission shape
    public AssetStaticMesh MeshAsset;

    public EmitterCollisionModeType CollisionMode;

    // Animation
    public UVector2 AnimationImagesNum; // Horizontal & Vertical images count
    public float AnimationSpeed;

            public bool bDestroyImmediately; // If set to true, particles will be destroyed immediately when emitter is disabled/destroyed (instead of following their lifetime)
            public bool bEmit;
            public bool bExplode; // If set to true, all particles will be emitted at once. Otherwise, they're emitted sequentially throughout the lifetime
            public bool bApplyGravity;
            public bool bAlphaBlending;
            public bool bAdditive;
    public bool bBlendAnimation;
    }

Renderer class has the following functionality

public static class Renderer
{
    public const uint CascadesCount = 4u; // The size of `DirLightShadowMapSizes` array

    public static void DrawLine(RendererLine line);
    public static void DrawTriangle(RendererTriangle triangle);
    public static void DrawAABB(AABB aabb, Transform worldTransform);

    public static void SetFogSettings(FogSettings value);
    public static FogSettings GetFogSettings();

    public static void SetBloomSettings(BloomSettings value);
    public static BloomSettings GetBloomSettings();

    public static void SetSSAOSettings(SSAOSettings value);
    public static SSAOSettings GetSSAOSettings();

    public static void SetGTAOSettings(GTAOSettings value);
    public static GTAOSettings GetGTAOSettings();

    public static void SetPhotoLinearTonemappingSettings(PhotoLinearTonemappingSettings value);
    public static PhotoLinearTonemappingSettings GetPhotoLinearTonemappingSettings();

    public static void SetFilmicTonemappingSettings(FilmicTonemappingSettings value);
    public static FilmicTonemappingSettings GetFilmicTonemappingSettings();

    public static void SetCubemap(AssetTextureCube cubemap);
    public static AssetTextureCube GetCubemap();

    public static void SetCubemapIntensity(float intensity);
    public static float GetCubemapIntensity();

    public static void SetSkySettings(SkySettings value);
    public static SkySettings GetSkySettings();

    public static void SetVolumetricLightsSettings(VolumetricLightsSettings value);
    public static VolumetricLightsSettings GetVolumetricLightsSettings();

    public static void SetShadowMapsSettings(ShadowMapsSettings value);
    public static ShadowMapsSettings GetShadowMapsSettings();

    public static void SetDepthOfFieldSettings(DepthOfFieldSettings value);
    public static DepthOfFieldSettings GetDepthOfFieldSettings();

    public static void SetMotionBlurSettings(MotionBlurSettings value);
    public static MotionBlurSettings GetMotionBlurSettings();

    public static void SetAutoExposureSettings(AutoExposureSettings value);
    public static AutoExposureSettings GetAutoExposureSettings();

    public static void SetScreenSpaceReflectionsSettings(ScreenSpaceReflectionsSettings value);
    public static ScreenSpaceReflectionsSettings GetScreenSpaceReflectionsSettings();

    public static Vector2 GetViewportSize();

    public static bool bUseSkyAsBackground; // Allows you to render sky while keeping IBL enabled.
    public static bool bRenderSkyboxEnabled; // Allows you to disable just the skybox rendering (If disabled, IBL will still light the scene)
    public static bool bSkyboxEnabled; // Affects Sky and Cubemap (IBL)
    public static float Gamma;
    public static float Exposure;
    public static float LineWidth;
    public static TonemappingMethod Tonemapping;
    public static AmbientOcclusion AO;
    public static AAMethod AA;
    public static bool bVSync;
    public static bool bEnableSoftShadows; // Hard shadows are still filtered using 3x3 PCF filter.
    public static bool bTranslucentShadows;
    public static bool bEnableCSMSmoothTransition;
    public static bool bVisualizeCascades;
    public static bool bStutterlessShaders;
    public static bool bEnableObjectPicking; // You can disable it when it is not needed to improve performance and reduce memory usage.
    public static bool bEnable2DObjectPicking; // If set to true, 2D objects will be ignored. This value is ignored, if `bEnableObjectPicking` is disabled
    public static bool bSortOpaqueParticles;
    public static bool bEnableDebugLinesDepthTest;
    public static uint TransparencyLayers;
}