...
Uniform | Type | Located In | Purpose |
---|---|---|---|
bboxMin/bboxMax | vec3 | inc_common | Give access to local bounds of a given rendered mesh in xyz. |
texFBColor | sampler2D | inc_common | Frame buffer (screen pixel color). This buffer is an image with width and height in unit space (0 to 1) as opposed to your screen dimensions. Each fragment contains the pixel color of that pixel on your screen from a previously drawn frame. The color buffer does not contain information from emitter particles. |
texFBDepth | sampler2D | inc_common | Depth Buffer. This buffer is an image with width and height in unit space (0 to 1) as opposed to your screen dimensions. Each fragment contains the depth of field at that pixel on your screen from a previously drawn frame. The depth buffer does not contain information from emitter particles. |
fogParams | vec4 | inc_common | Contains XYZW = [fogEnabled, fogStart, FogEnd, fogInvEndMinusStart]. In older shaders these values were separate uniforms. |
playerPosition | vec3 | inc_common | player position in world coordinates |
playerCameraDist | float | inc_common | distance between player and camera position |
playerInCutscene | int | inc_common | flag denoting if player is in cutscene camera mode |
cameraPosition | vec3 | inc_common | position of the camera in world coordinates |
cameraPitch | float | inc_common | |
cameraYaw | float | inc_common | |
cameraFocus | vec3 | inc_common | the vector the camera is focused toward (ie. camera facing) |
cameraViewAngle | float | inc_common | |
cameraDialogState | int | inc_common | |
userinputMousePosition | ivec2 | inc_common | screenspace coordinates of mouse pointer (lower left is 0,0) |
screenParams | vec2 | inc_common | contains XY = [screenWidth, screenHeight]. In older shaders these values were separate uniforms. |
pixelParams | vec3 | inc_common | contains XYZ = [invScreenWidth, invScreenHeight, fAspectRatio] In older shaders these values were separate uniforms. |
clipParams | vec3 | inc_common | contains XYZ = [nearClip, farClip, fDepthToLinearModifier] In older shaders these values were separate uniforms. |
m_proj | mat4 | inc_common | matrix for converting from view to screen projection |
m_proj_inv | mat4 | inc_common | matrix for converting from screen projection to view |
m_vp_inv | mat4 | inc_common | matrix for converting from screen projection to world |
m_view_inv | mat4 | inc_common | matrix for converting from view to world |
m_view | mat4 | inc_common | matrix for converting from world to view |
m_texture | mat4 | inc_common | matrix for applying uv orientation |
m_mv | mat4 | inc_common | matrix for converting from model to view |
m_mvp | mat4 | inc_common | matrix for converting from model to screen projection |
texNoiseBound | int | inc_common | Equals 1 if noise texture was bound |
texture<n>Bound {1..16} | int | inc_common | 11 separate uniforms identifying if texture n is bound, where <n> = 0 to 10 |
texEnvCubeBound | int | inc_common | Equals 1 if an environment cubemap is bound |
texEnvBound | int | inc_common | Equals 1 if an environment flatmap is bound |
m_boneRotations[] | vec4 | inc_common | Contains orientations of bones at the current frame for use with Mobile version |
m_bonePositions[] | vec4 | inc_common | Contains positions of bones at the current frame for use with Mobile version |
m_bones | mat4 | inc_common | Contains matrix transforms for bones (both position and rotation) for use with non-Mobile versions |
texUnit<n> | sampler2D | inc_common | 11 separate uniforms containing the texture sampler for texture n, where <n> = 0 to 10 |
DisplacementOffset | float | inc_common | Defines the offset from which height map displacement will begin. Can be modified in the material file using "parameter" lines |
texUnitEnv | sampler2D | inc_common | contains the texture sampler for the environment map |
texUnitEnvCube | samplerCube | inc_common | contains the cubemap sampler for a cubemap environment |
texUnitNoise | sampler2D | inc_common | contains the noise texture sampler |
envMapCube | int | inc_common | Equals 1 if environment map type is cubemap, otherwise type is flatmap |
fAlphaDiscardValue | float | inc_common | Contains the minimum alpha level to draw. Any value below this will be dropped, greatly speeding up rendering of transparent objects as they stack up over distance. |
skinmesh | int | inc_common | Equals 1 if the mesh type is a skinmesh |
Specularity | float | inc_material | Contains a specularity override value, as passed in from a material file. If not provided, specularity will be imported from texUnit2 red channel, or in the case that specularity is based on the environment map, it will be calculated from there. Positive values only. |
Roughness | float | inc_material | Contains a roughness override value, as passed in from a material file. If not provided, roughness will be imported from texUnit3 red channel, or in the case that roughness is also included in the spec map, it will be read from texUnit2 green channel. Positive values only. Use flag MATERIAL_READ_ROUGHNESS_FROM_SPECULAR_MAP = 1 to force reading from texUnit2 green channel. |
Metallicness | float | inc_material | Contains a metallicness override value, as passed in from a material file. If not provided, metallicness will be calculated from specularity. Positive values only. |
CustomSpecularColor | vec4 | inc_material | Contains a specular color override value, as passed in from a material file. Prevents specular color from being derived from albedo, height, and metallicness. |
lightColor[] | vec4 | inc_lighting | Contains the light color for each light passed to the shader for the scene. Used if gamma correction is enabled. |
lightMaxIntensityInv | float | inc_lighting | |
lightFalloffFactor | float | inc_lighting | |
lightAmbient[] | vec4 | inc_lighting | Contains the ambient light color for each light passed to the shader for the scene. Used if gamma correction is not enabled. |
lightDiffuse[] | vec4 | inc_lighting | Contains the diffuse light color for each light passed to the shader for the scene. Used if gamma correction is not enabled. |
lightQuadraticAtten[] | float | inc_lighting | Contains the light light falloff calculation for each light in the scene. |
lightPosition[] | vec4 | inc_lighting | Contains the position of each light in the scene in world coordinates. |
numLights | int | inc_lighting | Number of lights passed to the shader for the scene. |
staticLighting | int | inc_lighting | |
lightAreaAmbient | vec3 | inc_lighting | The color of the area ambient lighting at this fragment |
lightAreaDiffuse | vec3 | inc_lighting | The color of the area diffuse lighting at this fragment |
lightAreaDiffuseDirection | vec3 | inc_lighting | Effectively the sun angle for the diffuse light from the sun |
materialFrontAmbient | vec4 | inc_lighting | The ambient light color of the fragment based on vertex color |
materialFrontDiffuse | vec4 | inc_lighting | The diffuse light color of the fragment based on vertex color |
materialFrontEmissive | vec4 | inc_lighting | The self illumination color of the fragment based on the self illumination value of the mesh. Added to total light of that fragment. |
frontLightModelProductSceneColor | vec4 | inc_lighting | Used mostly for GUI elements. Used to calculate constant light for those elements. |
keyholeCanDissolve | int | inc_keyhole | Equals 1 if keyholing is enabled and the material can be dissolved |
keyholeDiameterMax | float | inc_keyhole | |
keyholeDiameterMin | float | inc_keyhole | |
sceneCurrentFrame | int |
inc_uniforms | As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
worldtimerTimeOfDay | int |
| This value is the number of ticks since the client was started and does NOT represent anything related to module time. There are 144000 ticks per day divided by moduleMinutesPerHour. There is a potential for time error when the module does not load cleanly, causing a large delay. Setting module time with NWScript or debug functions will also not update this value. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleYear | int |
inc_uniforms | Testing of moduleYear has shown that it does not always get sent to the shader with correct value. Using this value for any purpose can result in counted effects being misrendered. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleMonth | int |
inc_uniforms | Integer value of module month. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleDay | int |
inc_uniforms | Integer value of module day. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleHour | int |
inc_uniforms | Integer value of the module time.
|
windPointSourcesCount | int | inc_water | Number of wind point sources in the scene |
windPointSourcesPosition[] | vec3 | inc_water | Contains the position of all wind sources in the scene |
windPointSourcesRadius[] | float | inc_water | Contains the radius of all wind sources in the scene |
windPointSourcesDuration[] | float | inc_water | Contains the expected duration of each wind source in the scene |
windPointSourcesIntensity[] | float | inc_water | Contains the wind intensity of each wind source in the scene |
windPointSourcesTimeRemaining[] | float | inc_water | Contains the remaining time allowed to each wind source in the scene |
moduleDawnHour | int |
inc_uniforms | The hour at which Dawn-related sky mixing occurs. Sent over to shader from module properties. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleDuskHour | int |
inc_uniforms | The hour at which Dusk-related sky mixing occurs. Sent over to shader from module properties. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleMinutesPerHour | int |
inc_uniforms | Time scale of the module. Also directly related to transition timers. Sent over to shader from module properties. As of preview build v.87.8193.35[dd1322cd], this uniform was removed from inc_water and placed into inc_uniforms |
moduleTimeIntoTransition | float | ??? | This value counts up from the last known transition, such as moduleDuskHour or moduleDawnHour. It also counts up from zero after those transitions end, and so will tick all day long. At these points it resets to 0.0: moduleDawnHour, moduleDawnHour+1, moduleDuskHour, and moduleDuskHour+1.
Otherwise, we can say that the following formula can almost match the module time since the last transition began or ended: |
moduleTransitionTime | float | ??? | The scale of the transition time. For example, 1 hour is 60 units when moduleMinutesPerHour = 1. |
areaGlobalWind | vec3 | inc_water | Contains the global wind vector for the area |
areaWeatherDensity | float | inc_water | Contains the intensity of current weather |
areaFlags | int | inc_water | 1=Interior, 2=Underground, 4=Natural |
areaWeatherType | int | inc_water | 0=Clear/none, 2=Rain, 3=Snow |
m_m | mat4 | various / post processing | Matrix for converting from model to world coordinates |
projectionSource | vec4 | vs_beamvol vs_shadowvol | |
projectionWorldZClip | float | vs_beamvol vs_shadowvol | |
particleSizeMax | float | vsparticle | |
particleSoften | int | vsparticle | Used for non-Mobile version when equals 1. |
DOFAmount | float | inc_postpr_dof | |
DOFDeadZone | float | inc_postpr_dof | |
DOFVignette | float | inc_postpr_dof | edge of screen blur |
DOFFocusType | int | inc_postpr_dof | set to camera pitch by default |
DynamicContrastMidpoint | float | inc_postpr_dyn_c | |
DynamicContrastIntensity | float | inc_postpr_dyn_c | |
Gamma | float | inc_postpr_gam | |
Vibrance | float | inc_postpr_vibr | |
globalColor | vec4 | fs vsfbdof vsfblvls vsfbshrp vsfbvib | The default color when one is otherwise not supplied |
PLTScheme[15] | float | fs_pltgen | The PLT color scheme info PLT based diffuse is a composite of a grayscale value from the PLT red channel and a color by number value from the green channel of the PLT, which is passed via texUnit0. The actual color picked is the XY vector equal to RG color vector, and is picked from the gradient map provided in texUnit1. First step is converting the texUnit0 green value through the PLT scheme info, thereby converting it to the proper Y coordinate (gradient row) in texUnit1. |
AOIntensity | float | fsfbssao | |
scriptableInt<n> {1..16} | Int | inc_scriptable | A global integer value which can be set per-player via nwscript and passed into all shaders run by that player. The data type appears to be signed integer (Int32), with maximum values of −2,147,483,648 (−231) through 2,147,483,647 (231 − 1) As of preview v.87.8193.35[869dfc51] - 15 Jul 2022 there are 16 of these global uniforms. |
scriptableFloat<n> {1..16} | float | inc_scriptable | A global float value which can be set per-player via nwscript and passed into all shaders run by that player. The data type appears to be signed float (Float32), with expected maximum values of 3.402823466e+38 through 1.175494351e-38 As of preview v.87.8193.35[869dfc51] - 15 Jul 2022 there are 16 of these global uniforms. |
scriptableVec<n> {1..16} | vec4 | inc_scriptable | A global vec4 value which can be set per-player via nwscript and passed into all shaders run by that player. vec4 can be read in the shader as an array of Float32 values in the order XYZW, or RGBA. Max values are expected to follow Float32 limits As of preview v.87.8193.35[869dfc51] - 15 Jul 2022 there are 16 of these global uniforms. |
targetObjectType | int | inc_target | Identifies the target type of the object under the cursor. Only available in preview build v.87.8193.35[dd1322cd] or later Value corresponds with TARGET_OBJECT_TYPE_* values in NwScript, added in the same build. |
targetWorldCoords | vec3 | inc_target | Gives the world coordinates of the cursor. Presumably taken from the projection onto the underlying walkmesh. If no walkmesh exists, will possibly give the position of the skybox under the world, if one goes down that far. Only available in preview build v.87.8193.35[dd1322cd] or later |
targetShape | int | inc_target | Identifies the target indicator shape. Only available in preview build v.87.8193.35[dd1322cd] or later Value corresponds with TARGET_SHAPE_* values in NwScript, added in the same build. |
targetShapeHarmsEnemies | int | inc_target | Set to 1 if spell using this shape will harm enemies |
targetShapeHarmsAllies | int | inc_target | Set to 1 if spell using this shape will harm allies |
targetShapeHelpsAllies | int | inc_target | Set to 1 if spell using this shape will help allies |
targetShapeIgnoreSelf | int | inc_target | Set to 1 if spell using this shape will ignore the caster |
targetShapeOriginOnSelf | int | inc_target | Set to 1 if the spell origin is the caster |
targetShapeX | float | inc_target | Specifies the X axis dimensions in meters of the target shape |
targetShapeY | float | inc_target | Specifies the Y axis dimensions in meters of the target shape |
targetShapeSpellID | int | inc_target | Carries the ID of the spell or spell-like effect which is using this target shape |
targetShapeFeatID | int | inc_target | Carries the ID of the feat or feat-like effect which is using this target shape |
targetShapeSpellRange | int | inc_target | Specifies the max range of the spell using this target, allowing the shader to draw a dotted line from caster to the point which they need to move to in order to cast the spell to the cursor position. |
Standard Defines Available
...
Warning |
---|
As of preview build v.87.8193.35[dd1322cd] custom shaders making use of uniforms copied from inc_water/fs_water will give "redefinition" error #198 in the toolset, such as: ERROR: 1:4352: error(#198) Redefinition error: moduleMinutesPerHour To fix that issue, simply remove any line using "uniform <type> <name>" where <name> is defined as a uniform within inc_uniforms As of preview build v.87.8193.35[2070a8b9] an additional subset of uniforms was moved into inc_uniforms. |
Include Files
Filename | Purpose |
---|---|
inc_standard | Contains standard shader application functions, as well as debug modes, and input initialization. Works as an include hub, bringing in code from other important includes. |
inc_lighting | Contains functions for calculating lighting. Also includes the array of lights and their setup. Handles specular and fresnel content. |
inc_material | Sets up standard material maps 0 to 5. Handles environment mapping, initializes specular mapping, and begins height map displacement. |
inc_common | Sets up enumerations and constant color values. Makes sure many switches are at least set to 0 rather than null. Contains uniforms related to screenspace, clipping, and projection matrices. Contains functions related to matrix transforms and color correction. |
inc_config | Short file handling testing switches, such as light softening and specular distribution. |
inc_keyhole | Setup and use of keyholing. |
inc_water | Works like inc_standard for fancy water. |
inc_envmap | Sets up environment maps and cubes. Includes functions for picking from those maps. |
inc_fog | Handles construction and application of fog. If not included, some important fog uniforms will not be available. |
inc_transform | Sets up texture-handedness, handles bones for skins, and manages base transforms. When requested, will also setup world, and projection positions for use in fragment shader. |
inc_uniforms | Contains a bunch of uniforms previously dispersed throughout other files, such as fs_water. |
inc_random | Contains functions for producing random numbers, noise, and gradients. |
inc_displacement | Handles height map displacement |
inc_target | Handles new spell targetning shapes |
inc_tonemap | Contains a bunch of color correction functions previously found in inc_lighting and others. |
inc_framebuffer | Sets up framebuffer for color and depth. Includes functions for convering screenspace to worldspace and back again. |
inc_scriptable | Includes global shader uniforms commandable via nwscript. |
inc_postpr | The hub entrypoint for postprocessing shader. Will include other post processing related files when enabled in client options. |
Include Heirarchy
The current stable structure is:
...
In addition to the uniforms, the following vertex attributes are exposed:
* vec4 vPos
Vertex position in object space. Note: As of 89.8193.37 (which is still in dev test as of the date of this update) vPos was changed to provide vertex position in world space, not object space.
* vec2 vTcIn
Texture coordinates for current texture.
...