Corona XML maps format

See Corona XML materials format for basic info on the format. Here we will only list specific map definitions, but they still need to be contained in the <mtlLib><mapDefinition>… structure as outlined in the main article.

Shared utilities

UV mapper

This object is no a standalone map in itself, but it modifies UVW mapping of other maps by for example switching between 2D and 3D mapping, or by stretching or offsetting the UVW coordinates.

Only some maps have UVW mapping. For example noise and bitmap have mapping and can be manipulated by providing a UV mapper, but Ambient occlusion map cannot be modifies, since its geometric effect does not depend on UVW coordinates. Any map can contain UV mapper definition: <map><uvMap>…</uvMap>…</map>. If a map has a custom UV mapper defined, then also all its child nodes have the same UV mapper (except for referenced maps).

Definition of UV mapper is:

<uvMap>
    <mode>uvw|3dworld|3dlocal|forceEnviro</mode>
    ?<mapChannel>[int]</mapChannel>
    ?<scale>[XYZ]</scale>
    ?<offset>[XYZ]</offset>
    ?<rotateZ>[float - deg]</rotateZ>
    ?<enviroRotate>[float - deg]</enviroRotate>
    ?<enviroMode>spherical|screen|dome|cross|mirrorBall</enviroMode>
    ?<wrapModeU>clamp|repeat|none</wrapModeU>
    ?<wrapModeV>clamp|repeat|none</wrapModeV>
    ?<blur>[float]</blur>
    ?<useRealWorldScale>[bool]</useRealWorldScale>
    ?<dome>
        <origin>[XYZ]</origin>
        <radius>[float]</radius>
        <cameraHeight>[float]</cameraHeight>
    </dome>    
</uvMap>
mode 3dlocal differs from 3dworld in that in the local mode the mapping “sticks” to the object even when it is rotated/moved, while in 3dworld the mapping “flows” on the object if it is moved. forceEnviro means that the map will be evaluated as environment-mapped (spherical or screen, see enviroMode option), even when it is applied on a geometry
rotateZ rotation of the map in the UV-plane when using the UVW mode, in degrees
blur Amount of blurring applied to the map
wrapModeX Controls what happens outside of the 0-1 UVW range. Clamp means that the border pixels will be returned outside of the interval. Repeat means that the entire map will be repeated. None means that black will be returned

Alpha-mixing map with constant value

If a slot has [RGB]|[map] or [float]|[map] content, it can also contain both. In that case the map's alpha channel will be evaluated (if there is any), and will be used for blending with the constant value. Example of red color mixing with bitmap:

<diffuse>
1 0 0 
<map class="Texture">
    ...
</map>
</diffuse>

Color mapping/transform maps

Normal

Transforms any input map to a normal map - meaning it will be interpreted as normal map instead of height map when in bump slot.

<map class="Normal">
    <child>[map]</child>
</map>

Channel

Maps channels on the output to the channels on the input. Output channels are R,G,B,Alpha and Mono. Individual mapping options for each channel are:

  • R - Red channel of the input
  • G - Green channel of the input
  • B - Blue channel of the input
  • A - Alpha channel of the input
  • RgbIntensity - Average of Red, Green and Blue of the input
  • One - Output channel is set to the value of 1.0

By default an output channel is mapped to the corresponding input channel. Mono is mapped to the RgbIntensity.

<map class="Channel">
    <rSource>R|G|B|A|RgbIntensity|One</rSource>
    <gSource>R|G|B|A|RgbIntensity|One</gSource>
    <bSource>R|G|B|A|RgbIntensity|One</bSource>
    <alphaSource>R|G|B|A|RgbIntensity|One</alphaSource>
    <monoSource>R|G|B|A|RgbIntensity|One</monoSource>
    <child>[map]</child>
</map>

For example, you could swap green and blue channels of the input (child) map using the following snippet.

<map class="Channel">
    <gSource>B</gSource>
    <bSource>G</bSource>
    <child><map>...</map></child>
</map>

Curve

Remaps each color component of the child map values according to a curve. Defined by multiple (2+) control points. Linearly interpolated between control points, constant outside of defined ranges.

<map class="Curve">
    <child>[RGB]|[map]</child>
 
    +<point position="[float]">[float]</point>
</map>

Example: this example clamps all output to be at most 0.5:

<map class="Curve">
    <child><map>...</map></child>
 
    <point position="0">0</point>
    <point position="0.5">0.5</point>
    <point position="1">0.5</point>
</map>

Interpolation

Similar to curve, but evaluates the child map as mono, and then uses the mono input to interpolate between RGB values, which can be also mapped.

<map class="Interpolation">
    <child>[RGB]|[map]</child>
 
    +<point position="[float]">[RGB]|[map]</point>
</map>

Fresnel

Applies a fresnel curve on mono input provided by a child node.

<map class=”Fresnel”>
    <ior>[float]</ior>
    <child>[RGB]|[map]</child>
</map>

ToneMap

Applies some predefined tone mapping operations on child map.

<map class=”ToneMap”>
    <child>[RGB]|[map]</child>
    ?<multiplier>[RGB]</multiplier>
    ?<alphaMultiplier>[float]</alphaMultiplier>
    ?<offset>[RGB]</offset>
    ?<invert>[bool]</invert>
    ?<clamp>[bool]</clamp>
    ?<abs>[bool]</abs>
    ?<removeToneMapping>[bool]</removeToneMapping>
</map>

Result:

output = offset + input*multiplier
if(invert) {
    output = 1 - output
}
if(abs) {
    output = abs(output)
}
if(clamp) {
    output = clamp(output, 0, 1)
}
if(removeToneMapping) {
    output = inverseImageToneMapping(output)
}

ColorCorrectMap

Applies color correction operations on child map.

<map class=”ColorCorrectMap”>
    <child>[RGB]|[map]</child>
    ?<removeToneMapping>[bool]</removeToneMapping>
    ?<tonemappingShader>
        ?<linearMultiplier>[RGB]</linearMultiplier>
        ?<contrast>[float]</contrast>
        ?<saturation>[float]</saturation>
        ?<brightness>[float]</brightness>
        ?<invertColors>[bool]</invertColors>
        ?<gamma>[float]</gamma>
        ?<lut>
            <path>[filename]</path>
            ?<convertToLog>[bool]</convertToLog>
            ?<opacity>[float]</opacity>
            ?<gamma>[float]</gamma>
        </lut>
        ?<colorCurve>
            <red>
                <interpolation>PiecewiseCubic|PiecewiseLinear</interpolation>
                *<controlPoint>[XY]</controlPoint>
            </red>
            <green>
                <interpolation>PiecewiseCubic|PiecewiseLinear</interpolation>
                *<controlPoint>[XY]</controlPoint>
            </green>
            <blue>
                <interpolation>PiecewiseCubic|PiecewiseLinear</interpolation>
                *<controlPoint>[XY]</controlPoint>
            </blue>
            <master>
                <interpolation>PiecewiseCubic|PiecewiseLinear</interpolation>
                *<controlPoint>[XY]</controlPoint>
            </master>
        </colorCurve>
    </tonemappingShader>
</map>
removeToneMapping If set to true, the texture will not be affected by VFB tone mapping controls
tonemappingShader > linearMultiplier Linear multiplier the image gets multiplied with as a first step of the mapping
tonemappingShader > contrast Amount of contrast. Must be a non-negative number, image is unaffected for 1
tonemappingShader > saturation Amount of color saturation. Must be in interval ←1, 1>, image is unaffected for 0
tonemappingShader > brightness Nonlinear brightness modification, in interval ←1, 1>
tonemappingShader > invertColors If true, colors are inverted (in sRGB space)
tonemappingShader > gamma Gamma transformation (output = input^(1/gamma)), in interval <0.01, 10>. 1 is neutral (no change) value. Note that since texturing is done entirely in linear color space, the value 2.2 does not have any special meaning here, and is not the default/correct/required value. You do not need to set this to 2.2 to get “correct” result - use it purely as artistic control over texture midpoint brightness
lut > path Path to the LUT file. Currently supported formats are .cube and .3dl. If not present, the image is unaffected by LUT
lut > convertToLog If true, the input color is converted to Log colorspace before LUT is applied
lut > opacity Strength of the LUT. Must be in interval <0, 1>; 0 turns of LUT completely
lut > gamma Exponent of gamma transform baked into LUT. Default value 2.2 corresponds to LUT being applied in sRGB space. Note that if convertToLog is true, gamma is applied before log transformation
colorCurve > red green blue master Defines a tone mapping curve for a given RGB component (red, green, blue) or for all components (master)
colorCurve > * > interpolation Defines the type of curve interpolation: either smooth cubic (PiecewiseCubic) or linear (PiecewiseLinear)
colorCurve > * > controlPoint Control points that define the curve shape. Each point is two dimensional and must fit in <{0,0},{2,2}>

Mixing

Multi

Select one of the sub-maps as output based on randomization by selected feature. MixMin and MixMax, if used, enable partial blending between the randomly selected submap and all other maps in the same point.

<map class=”Multi”>
    <mode>Material|MaterialId|Instance|Primitive</mode>
 
    +<slot>
        <item>[RGB]|[map]</item>
        <frequency>[float]</frequency>
    </slot>
 
    ?<mixMin>[float]</mixMin>
    ?<mixMax>[float]</mixMax>
    ?<seed>[int]</seed>
    ?<hueRandomization>[float]</hueRandomization> 
    ?<gammaRandomization>[float]</gammaRandomization>
 
</map>
item Color or map being selected
frequency Probability of selection of this item; does not have to add up to 1
mixMin Minimum amount of blending
mixMax Maximum amount of blending
seed Random seed
hueRandomization Additional randomization of color hue of the resulting color, must be in [0, 1]
gammaRandomization Additional randomization of gamma exponent of the resulting color, must be in [0, 1]

UvwRandomizer

Modifies UWV coordinates of the input map based on given randomization mode; works similarly to MultiMap. All randomization parameters have a minimal and maximal value and a step. If the step is 0, the selected value of the parameter can be any real number within the interval. For positive value of the step, the selected value is (from + k * step) for some integer k. The step cannot be negative.

<map class=”UvwRandomizer”>
    <mode>Material|MaterialId|Instance|Primitive</mode>
 
    <input>[map]</input>
 
    ?<seed>[int]</seed>
    ?<uOffset>
       <from>[float]</from>
       <to>[float]</to>
       <step>[float]</step>
    </uOffset>
    ?<vOffset>
       <from>[float]</from>
       <to>[float]</to>
       <step>[float]</step>
    </vOffset>
    ?<wRotation>
       <from>[float - deg]</from>
       <to>[float - deg]</to>
       <step>[float - deg]</step>
    </wRotation>
    ?<uScale>
       <from>[float]</from>
       <to>[float]</to>
       <step>[float]</step>
    </uScale>
    ?<vScale>
       <from>[float]</from>
       <to>[float]</to>
       <step>[float]</step>
    </vScale>
 
    ?<lockScale>[bool]</lockScale>
</map>
input Input map
seed Random seed
uOffset Interval of offset in U coordinate
vOffset Interval of offset in V coordinate
wRotation Interval of rotation around W
uScale Interval of scaling in U coordinate. Must be positive values
vScale Interval of scaling in V coordinate. Must be positive values
lockScale If true, the scaling is uniform, i.e. the same in U and V (based on the value of U parameter). Otherwise, U and V are scaled independently.

RaySwitcher

Selects one of submaps during shading based on incident ray type. If one of the types is not defined, “base” slot will be used instead for that ray type.

<map class=”RaySwitcher”>
    <base>[RGB]|[map]</base>
    ?<reflect>[RGB]|[map]</reflect>
    ?<refract>[RGB]|[map]</refract>
    ?<direct>[RGB]|[map]</direct>
</map>

Mix

Mixes two maps with selected operation:

<map class=”Mix”>
    <a>[float]|[map]</a>
    <b>[float]|[map]</b>
    ?<amountB>[float]|[map]</amountB>
    <operation>mul|add|sub|mix|...TODO</operation>
</map>

Result:

if operation == mix: 
    output = eval(a)*(1-eval(amountB)) + eval(b)*eval(amountB)
else if operation == mult: 
    output = eval(a) * eval(b)
else if operation == add: 
    output = eval(a) + eval(b)
else if operation == sub: 
    output = eval(a) - eval(b)
else: 
    ERROR

Addition also works on bump maps.

FrontBack

Returns either “front” submap when ray hits the geometry from its front side, and “back” submap otherwise.

<map class=”FrontBack”>
    <front>[RGB]|[map]</front>
    <back>[RGB]|[map]</back>
</map>

Geometry maps

Data

Returns some geometry data directly re-casted as color values.

<map class=”Data”>
    <mode>UVW|shadingNormal|geometryNormal|dotProduct|zDepth|dUvw</mode>
</map>

Falloff

Returns angle between a normal and specified axis - white for facing, black for grazing edges, negative for back-facing.

<map class=”Falloff”>
    <mode>view|local|world</mode>
    <axis>[XYZ]</axis>
    ?<absValue>[bool]</absValue>
</map>
Axis Which axis to use. This is usually 0 0 1 for camera rays
mode Which geometry frame is the Axis defined in.
absValue If true, absolute value of negative values will be used.

Example: Creates a dot product shading between shading normal and camera ray direction:

<map class=”Falloff”>
    <mode>view</mode>
    <axis>0 0 1</axis>
</map>

Round Edges

Special map for use in bump slot, which simulates rounded edges/corners by perturbing shading normal.

<map class=”RoundEdges”>
    <maxRadius>[float]</maxRadius>
    ?<samples>[int]</samples>
    ?<mappedRadius>[map]</mappedRadius>
</map>
maxRadius Radius of the rounded corners effect
mappedRadius If used, then this map will modulate the MaxRadius parameter
samples Optional number of samples to take. It influences the render noise and speed

Gradient

Creates a smooth UVW-mapped gradient

<map class=”Gradient”>
    <mode>u|v|radial</mode>
</map>
u/v Creates a gradient in the u/v axis by directly returning the u/v value as intensity
radial Creates a radial gradient in the 0-1 UVW square with center in 0.5, 0.5

Ao

Creates the ambient occlusion (darkening in corners) effect. Returns 0 for completely unoccluded and 1 for completely occluded geometry.

<map class=”Ao”>
    <maxDistance>[float]</maxDistance>
    ?<mappedDistance>[map]</mappedDistance>
    ?<samples>[int]</samples>
    ?<phongExponent>[float]</phongExponent>
    ?<mixExponent>[float]</mixExponent>
    ?<normalMode>outside|inside|both</normalMode>
    ?<offset>[XYZ]</offset>
    ?<excludeMode>list|same|other</excludeMode>
    ?<includeExclude>[includeList]</includeExclude>
</map>
mappedDistance If used, this map will modulate the maxDistance
samples Number of ray tracing samples to make in each evaluation, influences the noise-speed ratio
phongExponent How concentrated should be the rays around normal
mixExponent Sets balance between occluded and unoccluded color (works similarly to gamma correction)
normalMode Where to compute the effect - on the outside/inside of the object. Corona 1.5+
offset Constant offset in world space added to all generated rays. This can be used to shift the distribution of rays in one constant direction (typically up or down to create for example water weathering
excludeMode If present this can be used to exclude some objects from consideration when computing occlusion. “Other” means that occlusion by other objects will be disregarded and only same object occlusion will be used. “Same” is the opposite, with occlusion by the same object as hit point ignored. “List” means that an include/exclude list will be used

Wire

Wire shader, which mixes 3 colors or maps - base, color for geometry edges between triangles, and color for geometry vertices. If edge/vertex parameters are not included, then the edges/vertices will not be visible in the result.

<map class=”Wire”>
    <base>[RGB]|[map]</base>
    <edge>[RGB]|[map]</edge>
    <vertex>[RGB]|[map]</vertex>
    <edgeWidth>[float]</edgeWidth>
    <vertexWidth>[float]</vertexWidth>
    <worldSpace>[bool]</worldSpace>
    <allEdges>[bool]</allEdges>
    <falloff>[float]</falloff> (1.6+)
</map>
worldSpace If true, then edgeWidth and VertexWidth are in world units. If false, they are in screen units (projected pixels).
allEdges False by default and if that is the case then only the base mesh edges are visualized. By base mesh edges we mean those the user see in the content creation tool. All edges created by Corona (for example in displacement) remain hidden.

Generators

Solid

This special map always return constant value. It is optimized to have zero runtime overhead:

<map class=”Solid”>
    [RGB]|[float]
</map>

Checker

Produces black and white checker based on mapping (default is UVW, but can be altered with a UV mapper).

<map class=”Checker”>
    <size>[float]</size>
</map>
size determines the size of tiles

Noise

Generates black and white noise. Can have uvmap

<map class=”Noise”>
    <type>perlin|cellular|...TODO</type>
    <size>[float]</size>
optional: <levels>[float]</levels>
optional:   <uvmap>...</uvmap>
optional:   <phase>[float]</phase>
</map>

Sky

Used for environments, evaluates the Hosek & Wilkie sky model to compute physically correct sky dome.

<map class=”Sky”>
    <groundColor>[RGB]</groundColor>
    ?<mode>preetham|rawafake|hosek</mode>
    ?<turbidity>[float]</turbidity>    
    ?<multiplier>[float]</multiplier>
    ?<horizonBlur>[float]</horizonBlur>
    ?<skyAffectGround>[bool]</skyAffectGround>
    ?<rawafake>
        ?<zenith>[RGB]</zenith>
        ?<horizon>[RGB]</horizon>
        ?<sunGlow>[float]</sunGlow>
        ?<sunSideGlow>[float]</sunSideGlow>
        removed in 1.7: <sunBleed>[float]</sunBleed>
        removed in 1.7: <sunFalloff>[float]</sunFalloff>
    </rawafake>
</map>
multiplier Overal intensity multiplier
turbidity Amount of haze in the atmosphere. Has to be between 1.7 and 10
groundColor Color of the ground - used for rays looking downwards (with negative Z component). Additionally, if skyAffectGround is true, then this color is also used to influence the sky color on horizon.
horizonBlur Simulates aerial perspective by blurring the line between sky and horizon
mode Which sun/sky model to use (preetham - old physically-based model, very inaccurate near horizon; rawafake - ad-hoc model by Rawalanche, with customizable color; hosek - improved physically-based model by Hosek&Wilkie, very accurate, used by default)

Specific parameters for rawafake mode

zenith Sky color at zenith
horizon Sky color at the horizon
sunGlow The amount of glow of the sky very near the sun. Value between 0 and 1 is required
sunSideGlow The amount of glow of the sky in the general direction of the sun. Value between 0 and 1 is required
sunBleed Intensity of the sun tint. Value between 0 and 1 is required
sunFalloff Slope of change of suns color

Texture

Regular image texture.

<map class=”Texture”>
    <image>[filename]</image>
 
    ?<gamma>[float]</gamma>
    ?<bumpStrength>[float]</bumpStrength>
    ?<interpolation>bilinear|bicubic|nearest</interpolation>
 
    ?<crop>
        <startX>[float]</startX>
        <startY>[float]</startY>
        <endX>[float]</endX>
        <endY>[float]</endY>
    </crop>
 
    ?<placement>
        <startX>[float]</startX>
        <startY>[float]</startY>
        <endX>[float]</endX>
        <endY>[float]</endY>
    </placement>
 
</map>
gamma If present, overrides default gamma handling (2.2 for LDR and 1.0 for HDR formats)

Log In