Atlassian uses cookies to improve your browsing experience, perform analytics and research, and conduct advertising. Accept all cookies to indicate that you agree to our use of cookies on your device. Atlassian cookies and tracking notice, (opens new window)

Enlighten SDK 3.10 Documentation
Results will update as you type.
  • Welcome to Enlighten
  • How Enlighten works
  • Artist workflow
  • Install Enlighten
  • Libraries
  • Implementation guide
    • The Enlighten scene
    • The precompute process
    • The lightmap UV pipeline
    • Enlighten runtime data
      • Lightmap UV data
      • Persistent radiosity data
      • Material colour data
      • Albedo and emissive textures
    • Runtime radiosity updates
    • Sample implementation
  • Technical reference
  • Advanced techniques
  • Tools
  • Enlighten Mobile
  • White papers
  • Third-party licences
  • Release notes
    Calendars

You‘re viewing this with anonymous access, so some content might be blocked.
/
Persistent radiosity data

    This is the documentation for Enlighten.

    Persistent radiosity data

    Nov 21, 2019

    The precompute outputs radiosity data grouped by system, probe set and cubemap.

    The radiosity data for each system is further broken down into objects and sections that enable different functionality in the runtime.

    Extract radiosity data

    The examples below show how to extract the radiosity data.

    To minimize runtime memory usage and loading times, the examples below specify the default sections to include only the data required to enable the core Enlighten runtime functionality.

     To extract the radiosity data for a system:

    // path: "radiosity/[system id].rc.sse"
    const Enlighten::RadSystemCore* radiosityCore
    	= Enlighten::ReadRadSystemCoreFromFile(path, Enlighten::Iff::RadSystemCoreDefaultSections);
    
    // path: "radiosity/[system id].iw.sse"
    const Enlighten::InputWorkspace* inputWorkspace
    	= Enlighten::ReadInputWorkspaceFromFile(path, Enlighten::Iff::InputWorkspaceDefaultSections);
    
    // path: "radiosity/[system id].vis"
    const Enlighten::PrecomputedVisibilityData* directionalVisibility
    	= Enlighten::ReadPrecomputedVisibilityDataFromFile(path);
    
    // path: "radiosity/[system id].rnt"
    Geo::GeoRGBXTexture* radiosityNormals = LoadInterface<Geo::GeoRGBXTexture>(path);

    If the instances within this system are lit using probes, the system does not have lightmap UV data.

    For such a system, the radiosity core and radiosity normals are not required.

    To extract the radiosity data for a probe set:

    // path: radiosity/[probe set id].ps.sse
    const Enlighten::RadProbeSetCore* radiosityCore
    	= Enlighten::ReadRadProbeSetCoreFromFile(path, Enlighten::Iff::RadProbeSetCoreDefaultSections);

    To extract the radiosity data for a cubemap:

    // path: radiosity/[cubemap id].rcm.sse
    const Enlighten::RadCubeMapCore* radiosityCore
    	= Enlighten::ReadRadCubeMapCoreFromFile(path);

    Persistent radiosity data

    To make it easier to manage the data on disk, we recommend to combine the radiosity data into fewer files. A typical implementation might concatenate all data for the same zone into a single file.

    When the radiosity data is loaded on a constrained target platform such as console or mobile device, the memory usage and loading time are critically important. To minimize loading times, store each persistent radiosity data object as a flat buffer. No memory allocation is required when loading the data.

    The examples below show how to write radiosity data as a flat buffer to a stream of type IGeoStream. Use GeoFileStream to write to a file, or GeoMemoryStream to write to a buffer.

    To write the radiosity data for a system:

    Geo::u64 radiosityCoreOffset = stream.GetPosition();
    Enlighten::WriteRadSystemCoreForInPlace(radiosityCore, stream);
    Geo::u64 radiosityCoreSize = stream.GetPosition() - radiosityCoreOffset;
    
    Geo::u64 inputWorkspaceOffset = stream.GetPosition();
    Enlighten::WriteInputWorkspaceForInPlace(inputWorkspace, stream);
    Geo::u64 inputWorkspaceSize = stream.GetPosition() - inputWorkspaceOffset;
    
    Geo::u64 directionalVisibility = stream.GetPosition();
    Enlighten::WritePrecomputedVisibilityDataForInPlace(directionalVisibility, stream);
    Geo::u64 directionalVisibilitySize = stream.GetPosition() - directionalVisibilityOffset;
    
    Geo::u64 radiosityNormalsOffset = stream.GetPosition();
    stream.Write(radiosityNormals->GetTextureData(), radiosityNormals->GetTextureData() + radiosityNormals->GetWidth() * radiosityNormals->GetHeight());
    Geo::u64 radiosityNormalsCount = radiosityNormals->GetWidth() * radiosityNormals->GetHeight();

    To write the radiosity data for a probe set:

    Geo::u64 radiosityCoreOffset = stream.GetPosition();
    Enlighten::WriteRadProbeSetCoreForInPlace(radiosityCore, stream);
    Geo::u64 radiosityCoreSize = stream.GetPosition() - radiosityCoreOffset;

    To write the radiosity data for a cubemap:

    Geo::u64 radiosityCoreOffset = stream.GetPosition();
    Enlighten::WriteRadCubeMapCoreForInPlace(radiosityCore, stream);
    Geo::u64 radiosityCoreSize = stream.GetPosition() - radiosityCoreOffset;

    Load radiosity data

    The examples below show how to load the radiosity data from an array of bytes.

    Enlighten::RadSystemCore* radiosityCore = Enlighten::ReadRadSystemCoreInPlace(data + radiosityCoreOffset, radiosityCoreSize);
    Enlighten::InputWorkspace* inputWorkspace = Enlighten::ReadInputWorkspaceInPlace(data + inputWorkspaceOffset, inputWorkspaceSize);
    Enlighten::PrecomputedVisibilityData* directionalVisibility = Enlighten::ReadPrecomputedVisibilityDataInPlace(data + directionalVisibilityOffset, directionalVisibilitySize);
    Geo::GeoRGBXTextureElement* radiosityNormals = reinterpret_cast<Geo::GeoRGBXTextureElement*>(data + radiosityNormalsOffset);
    Enlighten::RadProbeSetCore* radiosityCore = Enlighten::ReadRadProbeSetCoreInPlace(data + radiosityCoreOffset, radiosityCoreSize);
    Enlighten::RadCubeMapCore* radiosityCore = Enlighten::ReadRadCubeMapCoreInPlace(data + radiosityCoreOffset, radiosityCoreSize);

    The radiosity data objects are constructed in-place within the data array. You must allocate the data array with 16-byte alignment.

    You must ensure that the data array is not freed while radiosity data is in use. You must not delete or destroy the radiosity data objects directly.

    , multiple selections available,
    {"serverDuration": 24, "requestCorrelationId": "0e1c62b0e3e84a8590f65c3eb246e89b"}