Skip to content

CustomShader

用于为3dtiles模型添加自定义shader

顶点着色

glsl
void vertexMain(VertexInput vsInput, inout czm_modelVertexOutput vsOutput) {
  // code goes here. An empty body is a no-op.
  v_normalMC = vsInput.attributes.normalMC;
}
  • VertexInput
    • Attributes attributes
      • 含义:读取每个模型中的可用的property加载到attributes上,例如:如果模型上存在TEXCOORD_0字段,那么可以通过vsInput.attributes.TEXCOORD_0读取
        • 如果读取失败,那么cesium则会自动提供一个可能的默认值使编译器继续运行,如果提供了默认值之后仍不能运行,那么则禁用传入的shader
      • 内置的属性:Attributes内置属性列表
    • FeatureIds featureIds;
    • Metadata metadata;
    • MetadataClass metadataClass;
    • MetadataStatistics metadataStatistics;
  • czm_modelVertexOutput
    • 含义:包含顶点着色的输出,如果需要修改顶点着色,则需要将结果赋值给vsOutput带出
    • 属性:
      • positionMC:模型坐标系下的位置信息
      • pointSize:点的大小,将会传值给gl_PointSize

片元着色

glsl
void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {
  material.diffuse = vec3(1.0, 1.0, 1.0);
}
  • FragmentInput
    • Attributes attributes;
    • FeatureIds featureIds;
    • Metadata metadata;
    • MetadataClass metadataClass;
    • MetadataStatistics metadataStatistics;
  • czm_modelMaterial
    • 含义:作为片元着色的输入和输出,和旧fabric系统中的czm_material相似,但是它支持PBR光照
    • 功能:
      • 在material阶段生成material
      • 在光照阶段,混合处理material、光照并且将计算结果存入material.diffuse

Attributes内置属性列表

  • POSITION:位置信息
  • NORMAL:法线
模型中的相关attribute在shader中的attribute类型顶点着色可用片元着色可用Description
POSITIONpositionMCvec3YesYes模型坐标系中的坐标信息
POSITIONpositionWCvec3NoYes世界坐标系中的坐标信息 (WGS84 ECEF (x, y, z)). Low precision.
POSITIONpositionECvec3NoYes眼睛坐标系中的坐标信息
NORMALnormalMCvec3YesNo模型坐标系中单位长度的法线向量(过模型中每个点,并且垂直与模型表面的法线?)。只在顶点着色中可读
NORMALnormalECvec3NoYes眼睛坐标系中单位长度的法线向量。只在片元着色中可读
TANGENTtangentMCvec3YesNoUnit-length tangent vector in model coordinates. This is always a vec3. For models that provide a w component, that is removed after computing the bitangent vector.
TANGENTtangentECvec3NoYesUnit-length tangent vector in eye coordinates. This is always a vec3. For models that provide a w component, that is removed after computing the bitangent vector.
NORMAL & TANGENTbitangentMCvec3YesNoUnit-length bitangent vector in model coordinates. Only available when both normal and tangent vectors are available.
NORMAL & TANGENTbitangentECvec3NoYesUnit-length bitangent vector in eye coordinates. Only available when both normal and tangent vectors are available.
TEXCOORD_NtexCoord_Nvec2YesYestexture中的第n个坐标
COLOR_Ncolor_Nvec4YesYesN-th set of vertex colors. This is always a vec4; if the model does not specify an alpha value, it is assumed to be 1.
JOINTS_Njoints_Nivec4YesYesN-th set of joint indices
WEIGHTS_Nweights_Nvec4YesYesN-th set of weights