shader之cesium内置变量、常量、函数

shader之cesium内置变量、常量、函数

内置uniform

内置uniform主要置于AutomaticUniforms类里面,该类私有未开放文档。

  • czm_backgroundColor

代表当前场景背景颜色的自动GLSL制服。

例:
// GLSL声明
统一vec4 czm_backgroundColor;
//示例:如果给定颜色的RGB与背景颜色匹配,则将其反转。
vec4 AdjustColorForContrast(vec4颜色)
{
    如果(czm_backgroundColor.rgb == color.rgb)
    {
        color.rgb = vec3(1.0)-color.rgb;
    }
    返回颜色;
}
  • czm_brdfLut

包含BRDF查找纹理的自动GLSL制服,用于基于图像的照明计算。

例:
// GLSL声明
统一采样器2D czm_brdfLut;
//示例:对于给定的粗糙度和NdotV值,在红色和绿色通道中找到材料的BRDF信息
浮点粗糙度= 0.5;
float NdotV =点(法线,视图);
vec2 brdfLut = texture2D(czm_brdfLut,vec2(NdotV,1.0-粗糙度))。rg;

包含相机定义的平截头体的近距离(x)和远距离(的自动GLSL制服y这是用于多视锥渲染的单个视锥。

例:
// GLSL声明
统一vec2 czm_currentFrustum;
//示例
浮动frustumLength = czm_currentFrustum.y-czm_currentFrustum.x;

自动GLSL制服,代表模型坐标中摄像机位置的高位。Precisions,Precisions中所述,它用于GPU RTE以消除渲染时的抖动伪影 

例:
// GLSL声明
统一vec3 czm_encodedCameraPositionMCHigh;

自动GLSL制服,表示模型坐标中摄像机位置的低位。Precisions,Precisions中所述,它用于GPU RTE以消除渲染时的抖动伪影 

例:
// GLSL声明
统一vec3 czm_encodedCameraPositionMCLow;

包含相机定义的平截头体的近距离(x)和远距离(的自动GLSL制服y这是可能的最大视锥,而不是用于多视锥渲染的单个视锥。

例:
// GLSL声明
统一vec2 czm_entireFrustum;
//示例
浮动frustumLength = czm_entireFrustum.y-czm_entireFrustum.x;
  • czm_environmentMap

包含场景内使用的环境贴图的自动GLSL制服。

例:
// GLSL声明
统一采样器多维数据集czm_environmentMap;
//示例:在模型上完美映射环​​境图
浮动反射=反射(视图,正常);
vec4 ReflectionColor = textureCube(czm_environmentMap,反映);

自动GLSL制服,其中包含以米为单位的2D场景中眼睛(相机)的高度(x)和高度的平方(y)。

  • czm_fogDensity

自动GLSL均匀标量,用于根据距相机的距离将颜色与雾色混合。

表示帧号的自动GLSL制服。该制服每帧自动增加。

  • czm_frustumPlanes

到视锥平面的距离。顶部,底部,左侧和右侧的距离分别是x,y,z和w分量。

  • czm_geometricToleranceOverMeter

自动GLSL均匀标量,表示每米的几何公差

  • czm_imagerySplitPosition

自动GLSL制服,表示在使用分割器渲染图像图层时要使用的分割器位置。这将是相对于画布的像素坐标。

自动GLSL制服,表示一个4x4投影变换矩阵,其远平面为无穷大,它将眼睛坐标转换为剪辑坐标。剪辑坐标是顶点着色器gl_Position 输出的坐标系 无限远平面用于阴影体积和具有代理几何体的GPU射线投射等算法中,以确保三角形不会被远平面夹住。

例:
// GLSL声明
统一的mat4 czm_infiniteProjection;
//示例
gl_Position = czm_infiniteProjection * eyePosition;

自动GLSL制服,代表将世界坐标转换为模型坐标的4x4模型转换矩阵。

例:
// GLSL声明
统一的mat4 czm_inverseModel;
//示例
vec4 modelPosition = czm_inverseModel * worldPosition;

自动GLSL制服,代表从眼睛坐标转换为模型坐标的4x4转换矩阵。

例:
// GLSL声明
统一的mat4 czm_inverseModelView;
//示例
vec4 modelPosition = czm_inverseModelView * eyePosition;

自动GLSL制服,代表从眼睛坐标转换为3D模型坐标的4x4转换矩阵。在3D模式下,这与czm_inverseModelView相同 ,但是在2D和Columbus View中,它表示模型逆视图矩阵,就好像相机在3D模式下处于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

例:
// GLSL声明
统一的mat4 czm_inverseModelView3D;
//示例
vec4 modelPosition = czm_inverseModelView3D * eyePosition;

自动GLSL制服,表示将剪辑坐标转换为模型坐标的4x4逆模型-视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

例:
// GLSL声明
统一的mat4 czm_inverseModelViewProjection;
//示例
vec4 modelPosition = czm_inverseModelViewProjection * clipPosition;

自动GLSL制服,表示一个3x3法向变换矩阵,该矩阵将眼坐标中的法向矢量变换为模型坐标。这与czm_normal提供的转换相反 

例:
// GLSL声明
统一的mat3 czm_inverseNormal;
//示例
vec3 normalMC = czm_inverseNormal * normalEC;

自动GLSL制服,表示一个3x3法线变换矩阵,该矩阵将眼坐标中的法向矢量变换为3D模型坐标。这与czm_normal提供的转换相反 在3D模式下,这与czm_inverseNormal相同 ,但是在2D和Columbus View中,它表示逆法线变换矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

例:
// GLSL声明
统一的mat3 czm_inverseNormal3D;
//示例
vec3 normalMC = czm_inverseNormal3D * normalEC;

自动GLSL制服,表示从剪辑坐标转换为眼睛坐标的4x4反投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

例:
// GLSL声明
统一的mat4 czm_inverseProjection;
//示例
vec4 eyePosition = czm_inverseProjection * clipPosition;

自动GLSL制服,表示从眼睛坐标转换为世界坐标的4x4转换矩阵。

例:
// GLSL声明
统一的mat4 czm_inverseView;
//示例
vec4 worldPosition = czm_inverseView * eyePosition;

自动GLSL制服,代表从3D眼睛坐标转换为世界坐标的4x4转换矩阵。在3D模式下,这与czm_inverseView相同 ,但是在2D和Columbus View中,它表示反视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

例:
// GLSL声明
统一的mat4 czm_inverseView3D;
//示例
vec4 worldPosition = czm_inverseView3D * eyePosition;

自动GLSL制服,表示将剪辑坐标转换为世界坐标的4x4视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

例:
// GLSL声明
统一的mat4 czm_inverseViewProjection;
//示例
vec4 worldPosition = czm_inverseViewProjection * clipPosition;

表示3x3旋转矩阵的自动GLSL制服,该矩阵将向量从眼睛坐标转换为世界坐标。

例:
// GLSL声明
统一的mat3 czm_inverseViewRotation;
//示例
vec4 worldVector = czm_inverseViewRotation * eyeVector;

表示3x3旋转矩阵的自动GLSL制服,该矩阵将向量从3D眼睛坐标转换为世界坐标。在3D模式下,这与czm_inverseViewRotation相同 ,但是在2D和Columbus View中,它表示反视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

例:
// GLSL声明
统一的mat3 czm_inverseViewRotation3D;
//示例
vec4 worldVector = czm_inverseViewRotation3D * eyeVector;
  • czm_invertClassificationColor

自动GLSL制服,将成为未分类3D瓷砖的突出显示颜色。

  • czm_log2FarPlusOne

自动GLSL制服,包含远距离+ 1.0的log2。在反转对数深度计算时使用。

  • czm_log2NearDistance

包含近距离log2的自动GLSL制服。在片段着色器中写入日志深度时使用。

  • czm_minimumDisableDepthTestDistance

自动GLSL制服,表示到摄像机的距离,在该距离上禁用广告牌,标签和点的深度测试,以例如防止剪切地形。设置为零时,应始终应用深度测试。如果小于零,则永远不要应用深度测试。

自动GLSL制服,表示将模型坐标转换为世界坐标的4x4模型转换矩阵。

例:
// GLSL声明
统一的mat4 czm_model;
//示例
vec4 worldPosition = czm_model * modelPosition;

自动GLSL制服,表示将模型坐标转换为眼睛坐标的4x4模型视图转换矩阵。 

位置应使用转换为眼睛坐标 czm_modelView ,法线应使用czm_normal转换 

例:
// GLSL声明
统一的mat4 czm_modelView;
//示例
vec4 eyePosition = czm_modelView * modelPosition;
//上面的代码等效于,但比以下代码更有效:
vec4 eyePosition = czm_view * czm_model * modelPosition;

自动GLSL制服,表示将3D模型坐标转换为眼睛坐标的4x4模型视图转换矩阵。在3D模式下,这与czm_modelView相同 ,但是在2D和Columbus View中,它表示模型视图矩阵,就好像照相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。 

位置应使用转换为眼睛坐标 czm_modelView3D ,法线应使用czm_normal3D转换 

例:
// GLSL声明
统一的mat4 czm_modelView3D;
//示例
vec4 eyePosition = czm_modelView3D * modelPosition;
//上面的代码等效于,但比以下代码更有效:
vec4 eyePosition = czm_view3D * czm_model * modelPosition;

自动GLSL制服,表示将模型坐标转换为剪辑坐标的4x4模型-视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 投影矩阵将远平面放置在无穷远处。这在诸如阴影体积和具有代理几何体的GPU射线投射之类的算法中很有用,以确保三角形不会被远端平面修剪。

例:
// GLSL声明
统一的mat4 czm_modelViewInfiniteProjection;
//示例
vec4 gl_Position = czm_modelViewInfiniteProjection * modelPosition;
//上面的代码等效于,但比以下代码更有效:
gl_Position = czm_infiniteProjection * czm_view * czm_model * modelPosition;

自动GLSL制服,表示将模型坐标转换为剪辑坐标的4x4模型-视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

例:
// GLSL声明
统一的mat4 czm_modelViewProjection;
//示例
vec4 gl_Position = czm_modelViewProjection * modelPosition;
//上面的代码等效于,但比以下代码更有效:
gl_Position = czm_projection * czm_view * czm_model * modelPosition;

自动GLSL制服,表示4x4模型-视图-投影转换矩阵,该矩阵将相对于眼睛的模型坐标转换为裁剪坐标。剪辑坐标是顶点着色器gl_Position 输出的坐标系 与czm_translateRelativeToEye结合使用。

例:
// GLSL声明
统一的mat4 czm_modelViewProjectionRelativeToEye;
//示例
vec3 positionHigh属性;
属性vec3 positionLow;
无效main()
{
  vec4 p = czm_translateRelativeToEye(positionHigh,positionLow);
  gl_Position = czm_modelViewProjectionRelativeToEye * p;
}

自动GLSL制服,代表4x4模型-视图转换矩阵,该矩阵将相对于眼睛的模型坐标转换为眼睛坐标。与czm_translateRelativeToEye结合使用。

例:
// GLSL声明
统一的mat4 czm_modelViewRelativeToEye;
//示例
vec3 positionHigh属性;
属性vec3 positionLow;
无效main()
{
  vec4 p = czm_translateRelativeToEye(positionHigh,positionLow);
  gl_Position = czm_projection *(czm_modelViewRelativeToEye * p);
}

自动GLSL制服,代表在眼坐标中到达月球的归一化方向。这通常用于定向照明计算。

例:
// GLSL声明
统一vec3 czm_moonDirectionEC;
//示例
浮点数= max(dot(czm_moonDirectionEC,normalEC),0.0);

自动GLSL制服,表示2D / Columbus View和3D之间的当前变形过渡时间,其中0.0是2D或Columbus View,而1.0是3D。

例:
// GLSL声明
统一浮动czm_morphTime;
//示例
vec4 p = czm_columbusViewMorph(position2D,position3D,czm_morphTime);

自动GLSL制服,表示3x3法向变换矩阵,该矩阵将模型坐标中的法向矢量转换为眼睛坐标。 

应使用czm_modelView将位置转换为眼睛坐标,  而应使用转换法线 czm_normal

例:
// GLSL声明
统一的mat3 czm_normal;
//示例
vec3 eyeNormal = czm_normal *正常;

表示3x3法线变换矩阵的自动GLSL制服,该矩阵将3D模型坐标中的法线向量变换为眼睛坐标。在3D模式下,这与czm_normal相同 ,但是在2D和Columbus View中,它代表法线变换矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。 

应使用czm_modelView3D将位置转换为眼睛坐标,  而应使用转换法线 czm_normal3D

例:
// GLSL声明
统一的mat3 czm_normal3D;
//示例
vec3 eyeNormal = czm_normal3D *正常;
  • czm_orthographicIn3D

自动GLSL制服,用于指示当前摄影机是否在3D模式下进行正交投影。

  • czm_pass

表示当前渲染过程的自动GLSL制服。

例:
// GLSL声明
均匀浮动czm_pass;
//示例
如果(((czm_pass == czm_passTranslucent)&& isOpaque())
{
    gl_Position * = 0.0; //在半透明通道中剔除不透明的几何
}

自动GLSL制服,表示将眼睛坐标转换为剪辑坐标的4x4投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

例:
// GLSL声明
统一的mat4 czm_projection;
//示例
gl_Position = czm_projection * eyePosition;
  • czm_resolutionScale

自动GLSL制服,表示画布坐标空间与画布像素空间的比率。

例:
统一浮动czm_resolutionScale;
  • czm_sceneMode

表示当前SceneMode的自动GLSL制服,表示为float。

例:
// GLSL声明
统一浮动czm_sceneMode;
//示例
如果(czm_sceneMode == czm_sceneMode2D)
{
    eyeHeightSq = czm_eyeHeight2D.y;
}

自动GLSL制服,以眼坐标表示太阳的归一化方向。这通常用于定向照明计算。

例:
// GLSL声明
统一vec3 czm_sunDirectionEC;
//示例
浮点数=最大值(点(czm_sunDirectionEC,normalEC),0.0);

自动GLSL制服,代表世界坐标中太阳的归一化方向。这通常用于定向照明计算。

例:
// GLSL声明
统一vec3 czm_sunDirectionWC;

一种自动GLSL制服,用于表示哥伦布视图世界坐标中的太阳位置。

例:
// GLSL声明
统一vec3 czm_sunPositionColumbusView;

自动GLSL制服,表示世界坐标中的太阳位置。

例:
// GLSL声明
统一vec3 czm_sunPositionWC;

表示3x3旋转矩阵的自动GLSL制服,该矩阵在当前场景时间从“真赤道均分(TEME)”轴转换为伪固定轴。

例:
// GLSL声明
统一的mat3 czm_temeToPseudoFixed;
//示例
vec3 pseudoFixed = czm_temeToPseudoFixed * teme;

自动GLSL制服,代表将世界坐标转换为眼睛坐标的4x4视图转换矩阵。

例:
// GLSL声明
统一的mat4 czm_view;
//示例
vec4 eyePosition = czm_view * worldPosition;

自动GLSL制服,表示将3D世界坐标转换为眼睛坐标的4x4视图转换矩阵。在3D模式下,这与czm_view相同 ,但是在2D和Columbus View中,它表示视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

例:
// GLSL声明
统一的mat4 czm_view3D;
//示例
vec4 eyePosition3D = czm_view3D * worldPosition3D;

自动GLSL制服,代表世界坐标系中观察者(摄像机)的位置。

含有视口的自动GLSL均匀 x,  y,  width,和 height 性质在 vec4的 x,  y,  z,和 w 分量。

例:
// GLSL声明
统一vec4 czm_viewport;
//通过除法将窗口坐标分量缩放为[0,1]
//通过视口的宽度和高度。
vec2 v = gl_FragCoord.xy / czm_viewport.zw;

自动GLSL制服,表示将窗口坐标转换为剪辑坐标的4x4正投影矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 。 

当顶点着色器输入或操作BillboardCollection完成的窗口坐标时,此转换很有用。 

不要将czm_viewportTransformation 与 混淆 czm_viewportOrthographic前者从规范化的设备坐标转换为窗口坐标。后者从窗口坐标转换为剪辑坐标,通常用于分配给 gl_Position

例:
// GLSL声明
统一的mat4 czm_viewportOrthographic;
//示例
gl_Position = czm_viewportOrthographic * vec4(windowPosition,0.0,1.0);

表示4x4转换矩阵的自动GLSL制服,它将转换后的设备坐标转换为窗口坐标。使用上下文的完整视口,并且深度范围假定为 near = 0 和 far = 1。 

当需要像BillboardCollection那样操作顶点着色器中的窗口坐标时,此转换很有用。在许多情况下,将不会直接使用此矩阵。而是使用czm_modelToWindowCoordinates直接将模型坐标转换为窗口坐标。 

不要czm_viewportTransformation 与 czm_viewportOrthographic混淆 前者从规范化的设备坐标转换为窗口坐标。后者从窗口坐标转换为剪辑坐标,通常用于分配给 gl_Position

例:
// GLSL声明
统一的mat4 czm_viewportTransformation;
//将czm_viewportTransformation用作
//从模型坐标转换为窗口坐标。
vec4 q = czm_modelViewProjection * positionMC; //裁剪坐标模型
q.xyz / = qw; //裁剪到规范化的设备坐标(ndc)
q.xyz =(czm_viewportTransformation * vec4(q.xyz,1.0))。xyz; // ndc到窗口坐标

自动GLSL制服,表示将世界坐标转换为剪辑坐标的4x4视图-投影转换矩阵。剪辑坐标是顶点着色器gl_Position 输出的坐标系 

例:
// GLSL声明
统一的mat4 czm_viewProjection;
//示例
vec4 gl_Position = czm_viewProjection * czm_model * modelPosition;
//上面的代码等效于,但比以下代码更有效:
gl_Position = czm_projection * czm_view * czm_model * modelPosition;

代表3x3视图旋转矩阵的自动GLSL制服,该矩阵将世界坐标中的矢量转换为眼睛坐标。

例:
// GLSL声明
统一的mat3 czm_viewRotation;
//示例
vec3 eyeVector = czm_viewRotation * worldVector;

表示3x3视图旋转矩阵的自动GLSL制服,该矩阵将3D世界坐标中的矢量转换为眼睛坐标。在3D模式下,这与czm_viewRotation相同 ,但是在2D和Columbus View中,它表示视图矩阵,就好像相机在3D模式下位于等效位置一样。这与以3D照亮的相同方式照亮2D和Columbus View很有用。

例:
// GLSL声明
统一的mat3 czm_viewRotation3D;
//示例
vec3 eyeVector = czm_viewRotation3D * worldVector;

内置常量

这里常量和函数的定义,在cesium官网的一个历史文档里有描述,后来版本的文档里没有了。

https://cesiumjs.org/releases/b28/Documentation/index.html

点击glsl,可以看到。

  • czm_epsilon6
  • czm_epsilon7
  • czm_infinity
  • czm_oneOverPi
  • czm_oneOverTwoPi
  • czm_passCesium3DTile
  • czm_passCesium3DTileClassification
  • czm_passCesium3DTileClassificationIgnoreShow
  • czm_pass分类
  • czm_passCompute
  • czm_pass环境
  • czm_passGlobe
  • czm_pass不透明
  • czm_passOverlay
  • czm_passTerrain分类
  • czm_passTranslucent
  • czm_pi
  • czm_piOverFour
  • czm_piOverSix
  • czm_piOverThree
  • czm_piOverTwo
  • czm_radiansPerDegree
  • czm_sceneMode
  • czm_sceneMode2D

内置结构体定义

内置函数

czm_alpha重量

原文:https://www.cnblogs.com/mazhenyu/p/11438990.html

原文地址:https://www.cnblogs.com/s313139232/p/14317366.html