Skip to content

自定义着色器

引擎提供了功能强大的自定义着色器系统,以满足您的自定义着色器需求。

NMaterialShader

NMaterialShader是所有自定义的材质着色器的模板,下面介绍如何创建自定义的材质着色器。

您可以在编辑器的资源区,右键创建材质着色器,会默认创建C++类和一对着色器文件(顶点着色器和片段着色器)。

NMaterialShader脚本模版介绍

材质着色器脚本主要由5个部分声明代码组成,分别为自定义材质着色器声明、Object声明、Technique声明、Uniform声明以及反射声明。

其中自定义材质着色器声明在头文件中完成,Object声明、Technique声明、Uniform声明以及反射声明依次在源文件中完成。

自定义材质着色器声明

  • 宏定义
cpp
#define DECLARE_CUSTOM_MATERIAL_SHADER(className)
  • 参数
参数说明
className类名
  • 描述 在材质着色器的头文件中,通过DECLARE_CUSTOM_MATERIAL_SHADER宏将一些普遍写法定义到一起,以此来减少重复度和升级困难。
cpp
#pragma once
#include "Apis/NMaterialShader.h"
ENGINE_NAMESPACE_BEGIN
DECLARE_CUSTOM_MATERIAL_SHADER(CustomUnlit);
ENGINE_NAMESPACE_END

Object声明

  • 宏定义
cpp
#define IMPLEMENT_CLASS(className)
#define IMPLEMENT_RTTI_CUSTOM_SHADER(className, baseClassName)
  • 参数
参数说明
className类名
baseClassName基类名
  • 描述

您可以通过IMPLEMENT_CLASS和IMPLEMENT_RTTI_CUSTOM_SHADER来声明自定义材质着色器的工厂函数和RTTI信息。 需要注意的是,一般来说这部分都是由模板自动生成,无需更改。

cpp
IMPLEMENT_CLASS(CustomUnlit)
IMPLEMENT_RTTI_CUSTOM_SHADER(CustomUnlit, NMaterialShader)

Technique声明

  • 宏定义
cpp
#define DECLARE_MATERIALSHADER_CATEGORY_PATH(ShaderCategoryPath)
#define DECLARE_TECHNIQUE_BEGIN(className)
#define DECLARE_TECHNIQUE_ENTRY_BEGIN(TechniqueName, TechniqueQuality)
#define DECLARE_TECHNIQUE_ENTRY_DEPENDENCY_GL(GLVersion, Entensions)
#define DECLARE_TECHNIQUE_ENTRY_DEPENDENCY_GLES(ESVersion, Entensions)
#define DECLARE_PASS_SHADER_BEGIN(PassName, LightMode)
#define DECLARE_PASS_SHADER_MACRODEFINES(MacroDefines)
#define DECLARE_PASS_SHADER_VERTEX_PATH(ShaderPath)
#define DECLARE_PASS_SHADER_FRAGMENT_PATH(ShaderPath)
#define DECLARE_PASS_SHADER_GEOMETRY_PATH(ShaderPath)
#define DECLARE_PASS_SHADER_TESS_CONTROL_PATH(ShaderPath)
#define DECLARE_PASS_SHADER_TESS_EVALUATION_PATH(ShaderPath)
#define DELCARE_PASS_SHADER_DEPTH_STATE(DepthVariable, State)
#define DELCARE_PASS_SHADER_STENCIL_STATE(StencilVariable, State)
#define DELCARE_PASS_SHADER_BLEND_STATE(BlendVariable, State)
#define DELCARE_PASS_SHADER_RASTER_STATE(RasterVariable, State)
#define DELCARE_PASS_SHADER_POLYGON_STATE(PolygonVariable, State)
#define DECLARE_PASS_SHADER_END
#define DECLARE_TECHNIQUE_ENTRY_END
#define DECLARE_TECHNIQUE_FALLBACK(materialShaderName)
#define DECLARE_TECHNIQUE_REQUIRED_ATTRIBUTE(Semantic)
#define DECLARE_TECHNIQUE_END
  • 参数
参数说明
ShaderCategoryPath材质着色器类别路径
className类名
TechniqueNameTechnique的名称
TechniqueQualityTechnique的质量
GLVersionTechnique的GL的版本依赖
ESVersionTechnique的GLES的版本依赖
EntensionsTechnique的拓展需求
PassNamePass的名称
LightModePass的光照模式
MacroDefinesPass插入的宏定义
ShaderPath着色器路径
DepthVariable深度状态
StencilVariable模板状态
BlendVariable混合状态
RasterVariable光栅状态
PolygonVariable多边形状态
materialShaderName当当前材质着色器没有Technique可用时,递归查找可用Technique
Semantic材质着色器所需的顶点属性
  • 描述

在DECLARE_TECHNIQUE_BEGIN和DECLARE_TECHNIQUE_END内,您可以声明材质着色器的类别路径,设置材质着色器的FallBack的材质着色器,以及指定材质着色器的顶点属性,同时您也可以在这里写多个TechniqueEntry来创建Technique。

您可以通过设置Technique的质量和GL、GLES、拓展依赖,来组合控制当前的Technique能否在当前平台正确运行。 您可以在DECLARE_TECHNIQUE_ENTRY_BEGIN和DECLARE_TECHNIQUE_ENTRY_END之间创建多个Pass,以实现多Pass逻辑。 您可以在DECLARE_PASS_SHADER_BEGIN和DECLARE_PASS_SHADER_END中间创建您的Pass,指定您的Pass的光照模式、宏定义、着色器、渲染状态等信息。

需要注意的是,您需要避免materialShaderName为当前材质着色器名,以免存在着色器错误或者没有Technique可用时产生无限递归错误。

cpp
/* ------------- TECHNIQUE ---------------- */
DECLARE_TECHNIQUE_BEGIN(CustomUnlit)
DECLARE_MATERIALSHADER_CATEGORY_PATH("Custom/CustomUnlit")
// 声明TechniqueEntry,用于创建Technique
// 第0个Technique
DECLARE_TECHNIQUE_ENTRY_BEGIN("DefaultTechnique", EMaterialQuality::EMQ_Medium)
// 第一个参数为Technique的GL版本依赖,第二个参数为Technique的GL拓展依赖
DECLARE_TECHNIQUE_ENTRY_DEPENDENCY_GL(430, "")
// 第一个参数为Technique的GLES版本依赖,第二个参数为Technique的GLES拓展依赖
DECLARE_TECHNIQUE_ENTRY_DEPENDENCY_GLES(320, "")
// 第一个Pass,声明PassName、光照模式
DECLARE_PASS_SHADER_BEGIN("DefaultPass", EPassLightMode::EPLM_ForwardBase)
// 声明Pass使用时的宏,不同的宏通过|分割
DECLARE_PASS_SHADER_MACRODEFINES("")
// 声明着色器路径,Assets、Shaders开头的的相对路径使用自定义着色器,以EngineAssets开头的相对路径使用引擎内置的着色器
// 声明Pass的顶点着色器路径
DECLARE_PASS_SHADER_VERTEX_PATH("Shaders/CustomUnlit.vs")
// 声明Pass的片段着色器路径
DECLARE_PASS_SHADER_FRAGMENT_PATH("Shaders/CustomUnlit.fs")
// 声明Pass的几何着色器路径
DECLARE_PASS_SHADER_GEOMETRY_PATH("")
// 声明Pass的细分控制着色器路径
DECLARE_PASS_SHADER_TESS_CONTROL_PATH("")
// 声明Pass的细分评估着色器路径
DECLARE_PASS_SHADER_TESS_EVALUATION_PATH("")
// 声明Pass的状态机,[BLEND/DEPTH/RASTER/STENCIL/POLYGON]Variable为状态机种的变量,State为相应的值
DELCARE_PASS_SHADER_BLEND_STATE(enableBlending, false)
DELCARE_PASS_SHADER_DEPTH_STATE(depthTest, true)
DELCARE_PASS_SHADER_DEPTH_STATE(depthWrite, true)
DELCARE_PASS_SHADER_RASTER_STATE(cullMode, ECullMode::CM_BackFace)
DECLARE_PASS_SHADER_END

/*
// 此处可以声明当前Technique的更多Pass
// 例如:声明PreDepthPass
DECLARE_PASS_SHADER_BEGIN("PreDepthPass", EPassLightMode::EPLM_DepthOnly)
DECLARE_PASS_SHADER_END
// 例如:声明ShadowCasterPass
DECLARE_PASS_SHADER_BEGIN("ShadowCasterPass", EPassLightMode::EPLM_ShadowCaster)
DECLARE_PASS_SHADER_END
*/

DECLARE_TECHNIQUE_ENTRY_END
/*
// 此处声明更多的TechniqueEntry,以创建其他的Technique
DECLARE_TECHNIQUE_ENTRY_BEGIN("DefaultTechnique", EMaterialQuality::EMQ_Low)
DECLARE_TECHNIQUE_ENTRY_DEPENDENCY_GL(330, "")
DECLARE_TECHNIQUE_ENTRY_DEPENDENCY_ES(320, "")
// 此处创建相应的Pass
DECLARE_TECHNIQUE_ENTRY_END
*/

// 没有Technique可用时,材质着色器FallBack的材质着色器名称,注意不要循环FallBack
DECLARE_TECHNIQUE_FALLBACK("BlinnPhong")
DECLARE_TECHNIQUE_END

Uniform声明

  • 宏定义
cpp
#define DECLARE_SHADER_UNIFORMS_BEGIN(className)
#define DECLARE_SHADER_UNIFORMS_STRUCT_BEGIN(structName)
#define DECLARE_SHADER_UNIFORM_STRUCT_VARIABLE(variableName, variableType, initValue)
#define DECLARE_SHADER_UNIFORM_STRUCT_VARIABLE_ARRAY(variableName, variableType, arraySize, initValue)
#define DECLARE_SHADER_UNIFORM_STRUCT_STRUCT_VARIABLE(variableName, _structName)
#define DECLARE_SHADER_UNIFORM_STRUCT_STRUCT_VARIABLE_ARRAY(variableName, _structName, arraySize)
#define DECLARE_SHADER_UNIFORMS_STRUCT_END()
#define DECLARE_SHADER_UNIFORM_FIELD_BEGIN(fieldName)
#define DECLARE_SHADER_UNIFORM_FIELD_VARIABLE(variableName, variableType, initValue)
#define DECLARE_SHADER_UNIFORM_FIELD_VARIABLE_ARRAY(variableName, variableType, arraySize, initValue)
#define DECLARE_SHADER_UNIFORM_FIELD_STRUCT_VARIABLE(variableName, _structName)
#define DECLARE_SHADER_UNIFORM_FIELD_STRUCT_VARIABLE_ARRAY(variableName, _structName, arraySize)
#define DECLARE_SHADER_UNIFORM_FIELD_END(UsageType)
#define DECLARE_SHADER_UNIFORMS_END
  • 参数
参数说明
className类名
structName结构体名
variableName变量名
variableType变量类型
initValue初始化值
_structName结构体名
arraySize数组大小
fieldName缓冲域名
UsageType缓冲用法类型
  • 描述

您可以通过在DECLARE_SHADER_UNIFORMS_BEGIN和DECLARE_SHADER_UNIFORMS_END中间声明UniformField来创建UniformBuffer。

您可以通过DECLARE_SHADER_UNIFORM_FIELD_VARIABLE来声明您的普通变量,通过DECLARE_SHADER_UNIFORM_FIELD_STRUCT_VARIABLE来声明结构体变量。

您可以通过DECLARE_SHADER_UNIFORMS_STRUCT_BEGIN和DECLARE_SHADER_UNIFORMS_STRUCT_END来声明自定义的结构体。

cpp
/* ----------- UNIFORMS ------------- */
DECLARE_SHADER_UNIFORMS_BEGIN(CustomUnlit)
DECLARE_SHADER_UNIFORMS_SHARED
DECLARE_SHADER_UNIFORM_FIELD_BEGIN("CustomUnlitUniforms")
DECLARE_SHADER_UNIFORM_FIELD_VARIABLE("mainTexture", EBufferFieldType::EBFT_SAMPLER, nullptr)
DECLARE_SHADER_UNIFORM_FIELD_END(EBufferUsageType::EBUT_Instanced)
DECLARE_SHADER_UNIFORMS_END

反射声明

  • 宏定义
cpp
#define DECLARE_SHADER_REFLECTION_BEGIN(className)
#define DECLARE_SHADER_REFLECTION_VARIABLE(reflectName, variableName, variableType)
#define DECLARE_SHADER_REFLECTION_KEYWORD(reflectName, keywordName, variableType)
#define DECLARE_SHADER_REFLECTION_END
  • 参数
参数说明
className类名
reflectName反射名
variableName变量名
keywordName关键字名
variableType反射类型
  • 描述

您可以通过DECLARE_SHADER_REFLECTION_VARIABLE和DECLARE_SHADER_REFLECTION_KEYWORD来声明需要反射的变量和关键字,需要反射的关键字会根据反射状态自动插入到着色器代码中。

cpp
/* ---------------- REFLECTION ------------------ */
DECLARE_SHADER_REFLECTION_BEGIN(CustomUnlit)
DECLARE_SHADER_REFLECTION_VARIABLE("Main Color", "mainColor", MATERIAL_SHADER_REFLECTION_DEFAULT)
DECLARE_SHADER_REFLECTION_VARIABLE("Offset", "Offset", MATERIAL_SHADER_REFLECTION_DEFAULT)
DECLARE_SHADER_REFLECTION_VARIABLE("Tiling", "Tiling", MATERIAL_SHADER_REFLECTION_DEFAULT)
DECLARE_SHADER_REFLECTION_VARIABLE("Main Texture", "mainTexture", MATERIAL_SHADER_REFLECTION_DEFAULT)
DECLARE_SHADER_REFLECTION_END

着色器模板介绍

内置声明

  • 声明
声明说明
#NS_DECLARE_VERSION声明GLSL版本,引擎自动替换
#NS_DECLARE_MULTIVIEW声明MultiView支持
#NS_DECLARE_MULTIVIEW_NUM声明MultiView的视图数量
  • 属性声明
声明说明
#NS_DATA_POSITION(变量名);声明位置变量
#NS_DATA_TEXCOORD0(变量名);声明纹理坐标变量
#NS_DATA_VERTEXCOLOR(变量名);声明顶点颜色变量
#NS_DATA_NORMAL(变量名);声明法线变量
#NS_DATA_TANGENT(变量名);声明切线变量
#NS_DATA_BINORMAL(变量名);声明副切线变量
#NS_DATA_TEXCOORD1(变量名);声明第二套纹理坐标变量

文件引用

  • 引擎内着色器引用 对于引擎内部的着色器引用使用 #NS_INCLUDE(文件名); 的方式引用。

  • 自定义着色器引用 对于自定义的着色器引用使用 #include “文件名” 的方式引用。

cpp
#NS_INCLUDE(Common.glsl);
#include "MaterialUniforms/CustomUnlit.glsl"

材质着色器自动生成的GLSL

引擎编辑器会根据材质着色器声明的Uniform声明,自动生成对应的GLSL文件,并被顶点/片段着色器引用。

自动生成的GLSL包括预防重复引用的宏控制、共享uniforms的引用、纹理声明、缓冲声明以及InitUniforms函数声明。

需要注意的是,在材质着色器声明的变量无需在着色器中再度声明,直接使用即可。

此外,应该避免修改该文件,该文件是自动生成的,以防自定义代码被自动覆盖。

cpp
//Note: This GLSL file is generated by NibiruStudioIDE automatically, >>> DO NOT MODIFY IT <<< Create Custom GLSL File if want to add custom shader code.
#ifndef NS_MATERIAL_UNIFORMS_CustomUnlit_GLSL
#define NS_MATERIAL_UNIFORMS_CustomUnlit_GLSL
#NS_INCLUDE(MaterialUniforms/SharedUniforms.glsl);
uniform sampler2D mainTexture;
void InitUniforms()
{
	#ifdef NS_ENABLE_MATERIAL_INSTANCE
    InitSharedUniforms();
	#endif
}
#endif // NS_MATERIAL_UNIFORMS_CustomUnlit_GLSL

内置glsl介绍

Common.glsl

  • 常量
常量描述
near近截面
far远截面
  • NSOrthoUniforms(UniformBuffer)
变量描述
_ViewMatrix正交视图矩阵
_ProjMatrix正交投影矩阵
_VPMatrix正交视图投影矩阵
  • 接口
接口说明
Linear2GammaLinear转Gamma颜色
Gamma2LinearGamma转Linear颜色
LinearizeDepth深度线性化
DepthToColor深度转颜色输出
NSObjectToClipPos高效模型空间转投影空间坐标
BlendSrcOneMinusSrcAlpha软件实现的颜色混合

MathCommon.glsl

  • 常量
常量描述
NS_PI圆周率
  • 宏定义
宏定义描述
INFINITYINF非法值
EPSILON误差值
M_DEG_2_RAD角度转弧度(变量)
M_TO_RADIAN角度转弧度(宏定义计算公式)
  • 接口
接口说明
Square平方
mul乘法
saturate截断到0-1
Pow4四次方
Pow5五次方
BlendNormals法线混合
NS_Dot2点乘
NS_NDot对应相乘相减
NS_IsNearlyEqual判断两个变量是否近似相等
NS_QuaternionFromEulerAngle欧拉角转四元数
NS_MatrixFromQuaternion四元数转旋转矩阵
NS_MatrixScale矩阵缩放
NS_MatrixTranslation矩阵平移
NS_MatrixFromTRS从平移、旋转、缩放创建矩阵
NS_Max3三个数的最大值
NS_Min3三个数的最小值
NS_Median3三个数的中间值

BRDF.glsl

  • 结构体——LightingIntermediateData
变量描述
N、H、L、V法线、半角向量、光照方向、视线方向
distToLight到光源距离
distToCamera到相机距离
NoV、NoL、NoH、VoH法线与视线方向点乘等
roughness粗糙度
metallic金属度
albedo反照率
F0菲涅尔项
radiance辐照率
  • 结构体——NS_BRDFData
变量描述
albedo反照率
diffuse漫反射
specular镜面反射
reflectivity反射率
perceptualRoughness感知粗糙度
roughness粗糙度
roughness2平方粗糙度
grazingTerm掠射角项
normalizationTerm四方粗糙度+2
roughness2MinusOne平方粗糙度-1
clearCoat清漆
clearCoatPerceptualRoughness清漆感知粗糙度
clearCoatRoughness清漆粗糙度
roughnessT各向异性
roughnessB各向异性
  • 结构体——NS_BRDFResult
变量描述
diffuse漫反射
specular镜面反射
  • 接口
接口说明
LightingPhysicallyBasedPBR光照计算
DirectBRDFSpecular直接光BRDF
clearCoatBRDF清漆BRDF
standardBRDF标准BRDF
anisotropyBRDF各向异性BRDF
NS_InitializeBRDFData初始化BRDF数据
NS_InitializeClearCoatBRDFData初始化清漆BRDF数据
NS_InitializeBRDFDataAniso初始化各向异性BRDF数据

SH.glsl

  • 结构体——NSSHData
变量描述
ShData球谐系数数据
  • NSSHDataUniforms(UniformBuffer)
变量描述
_NSSHData球谐系数数据
  • 常量
常量描述
c0Y00
c1Y1-1, Y10, Y11
c2Y2-2, Y2-1, Y21, Y22
c3Y20
c4Y3-3, Y3-2, Y3-1, Y31, Y32, Y33
  • 接口
接口说明
Y[n]法线处理函数,共有9个
SHEvaluate球谐系数评估函数

HDR.glsl

  • 接口
接口描述
ReinhardToneMappingReinhard色调映射函数
FFilmic色调映射辅助函数
Uncharted2ToneMappingFilmic色调映射函数

PostProcessing.glsl

  • 纹理
变量描述
SceneDepthSurface场景深度纹理
DepthSurface_TexelSize场景深度纹理的纹素大小
  • NSPostProcessingUniforms(UniformBuffer)
变量描述
_NSWorldProj后处理世界投影矩阵
  • 接口
接口描述
GetCurrentDepth获取当前纹理坐标深度
ComputeWorldSpacePosition计算当前纹理坐标的世界位置

Common/LogDepth.glsl

  • 接口
接口说明
NS_HandleDepth_VS计算对数深度下的gl_Position
NS_HandleDepth_GS传递对数深度
NS_HandleDepth_FS对数深度值写入gl_FragDepth
NS_HandleDepth_Reverse还原对数深度

Common/MultiView.glsl

采样器描述
NS_SCENE_SAMPLER2D多视图场景纹理采样器
NS_SHADOW_SAMPLER2D多视图阴影纹理采样器
NS_DEPTH_SAMPLER2D多视图深度纹理采样器
NS_MULTIVIEW_INDEX多视图序号
NS_SKYBOX_MVP多视图天空盒MVP矩阵
NS_SCENE_TEXTURE多视图时采样场景纹理
NS_SHADOW_TEXTURE多视图时采样阴影纹理
NS_DEPTH_TEXTURE多视图时采样深度纹理
NS_INV_PROJ_MATRIX多视图屏幕空间阴影计算使用的逆投影矩阵
NS_INV_VIEW_MATRIX多视图屏幕空间阴影计算使用的逆视图矩阵
NS_FXAA_TEX_LOD_OFFSET多视图快速近似抗锯齿纹理细节层次采样偏移
NS_FXAA_TEX_LOD多视图快速近似抗锯齿纹理细节层次采样
NS_SCENE_SHADOW_LAYER多视图场景阴影层

Common/PerCamera.glsl

  • 结构体——NSCameraData
变量描述
NS_WorldCameraPosition相机世界空间位置
NS_WorldCameraDirection相机世界空间方向
NS_CameraNearAndFarDistance相机远近截面
NS_CameraViewMatrix相机视图矩阵
NS_CameraProjMatrix相机投影矩阵
NS_CameraVPMatrix相机视图投影矩阵
NS_CameraInvVPMatrix相机视图投影逆矩阵
NS_CameraViewMatrixInLastFrame相机上一帧视图矩阵
NS_CameraProjMatrixInLastFrame相机上一帧投影矩阵
NS_CameraVPMatrixInLastFrame相机上一帧视图投影矩阵
NS_CameraInvVPMatrixInLastFrame相机上一帧视图投影逆矩阵
NS_CameraViewportSize相机视口大小
NS_IsStereoCamera相机是否是立体相机
NS_StereoCameraIndex相机的立体相机序号
  • NSCameraUniforms(UniformBuffer)
变量描述
_NSCameraData相机数据
_NSCurrentCameraIndex当前相机序号
  • 宏定义
宏定义描述
NS_MATRIX_V当前相机视图矩阵
NS_MATRIX_P当前相机投影矩阵
NS_MATRIX_VP当前相机视图投影矩阵
NS_MATRIX_InvVP当前相机视图投影逆矩阵
NS_MATRIX_PREV_V当前相机上一帧视图矩阵
NS_MATRIX_PREV_P当前相机上一帧投影矩阵
NS_MATRIX_PREV_VP当前相机上一帧视图投影矩阵
NS_MATRIX_PREV_InvVP当前相机上一帧视图投影逆矩阵
NS_CAMERA_POSITION当前相机位置
NS_CAMERA_DIRECTION当前相机方向
NS_CAMERA_NEAR_DISTANCE当前相机近截面
NS_CAMERA_FAR_DISTANCE当前相机远截面
NS_CAMERA_ONE_OVER_LOG2_FAR

_DEPTH_FROM_NEAR_PLUS_ONE
当前相机对数深度系数
NS_CAMERA_VIEWPORT_SIZE当前相机视口大小
NS_IsStereoCamera当前相机是否是立体相机
NS_StereoCameraIndex当前相机的立体相机序号

Common/PerFrame.glsl

  • NSFrameUniforms(UniformBuffer)
变量描述
_NSFrameTime每帧更新的系统时间
_NSIsXR是否是XR模式
_NSHASIBL是否有IBL图
_NSSHArIBL生成的SH系数
_NSSHAgIBL生成的SH系数
_NSSHAbIBL生成的SH系数

Common/PerRenderable.glsl

  • NSRenderableUniforms(UniformBuffer)
变量描述
_NSRenderableData渲染对象数据
  • 宏定义
宏定义描述
NS_MATRIX_M当前的模型矩阵
NS_MATRIX_InvM当前的模型逆矩阵
NS_MATRIX_PREV_M上一帧的模型矩阵
NS_MATRIX_PREV_InvM上一帧的模型逆矩阵
NS_RECEIVE_SHADOWS是否接收阴影
NS_SH_INDEX当前的SH系数序号

Common/RenderableData.glsl

  • 结构体——NSRenderableData
变量描述
NS_RenderableModelMatrixModel矩阵
NS_RenderableInvModelMatrix逆Model矩阵
NS_RenderableModelMatrixInLastFrame上一帧Model矩阵
NS_RenderableInvModelMatrixInLastFrame上一帧逆Model矩阵
NS_RenderablePositionWS世界空间位置
NS_ParticipateCulling是否参与剔除
NS_RenderMask渲染遮罩
NS_LodLevelLod级别
NS_LODGroupIndexLod组序号
NS_ReceiveShadow是否接收阴影
NS_SHIndexSH系数序号
NS_CastShadow是否投射阴影
  • 结构体——NSRenderObjectData
变量描述
meshIndex网格数据序号
renderabelIndex渲染对象序号
instanceCount实例化个数
isValid是否有效
isActive是否激活
queueIndex渲染队列序号

Light/LightCommon.glsl

  • 宏定义
宏定义描述
MAX_Direct_LIGHTS最大平行光数量
MAX_Point_LIGHTS最大点光源数量
MAX_SPOT_LIGHTS最大聚光灯数量
MAX_AREA_LIGHTS最大区域光数量
  • 结构体——DirectionalLight
变量描述
direction光照方向
intensity光照强度
color光照颜色
specularShininess高光强度
specularColor高光颜色
indexInShadowArray阴影序号
bCalSpecular是否计算高光
  • 结构体——PointLight
变量描述
position光照位置
intensity光照强度
color光照颜色
specularShininess高光强度
attenuation衰减系数
indexInShadowArray阴影序号
bCalSpecular是否计算高光
specularColor高光颜色
range点光宇范围
  • 结构体——SpotLight
变量描述
position光照位置
intensity光照强度
color光照颜色
specularShininess高光强度
attenuation衰减系数
indexInShadowArray阴影序号
bCalSpecular是否计算高光
specularColor高光颜色
range点光宇范围
direction光照方向
cutOff聚光灯内圆锥角度
outerCutOff聚光灯外圆锥角度
  • 结构体——AreaLight
变量描述
color光照颜色
intensity光照强度
points区域光角点
position光照位置
twoSided区域光是否双面渲染
indexInShadowArray阴影序号
range点光宇范围
  • 结构体——NS_Light
变量描述
direction光照方向
position光照位置
color光照颜色
distanceAttenuation距离衰减系数
shadowAttenuation阴影衰减系数
  • 结构体——PBRLigth
变量描述
diffuse漫反射
specular镜面反射
Lo所有光照
  • NS_Light_UBO(UniformBuffer)
变量描述
NS_DirectionalLights所有平行光
NS_PointLights所有点光源
NS_SpotLights所有聚光灯
NS_AreaLights所有区域光
NS_Ambient环境光颜色
NS_DirectionalLightCount平行光个数
NS_PointLightCount点光源个数
NS_SpotLightCount聚光灯个数
NS_AreaRectLightCount区域光个数

Light/ BlinnPhongLighting.glsl

  • 接口
接口描述
NS_BlinnPhong_CalculateDirectionalLightBlinnPhong计算平行光
NS_BlinnPhong_CalculatePointLightBlinnPhong计算点光源
NS_BlinnPhong_CalculateSpotLightBlinnPhong计算聚光灯
NS_CalculateLightsBlinnPhong计算所有光照

Light/ PBRLighting.glsl

  • 结构体——NS_GI
变量描述
Diffuse漫反射
Specular镜面反射
  • 接口
接口说明
DistributionGGX法线分布函数
GeometrySchlickGGX几何函数
GeometrySmith环境遮蔽和光线遮蔽
fresnelSchlick菲涅尔函数
FresnelSchlickRoughness菲涅尔函数:Fresnel-Schlick
DisneyDiffuse迪士尼漫反射计算
NS_PBRCalculateSpotLightPBR计算聚光灯
NS_PBRCalculateSpotLightMetallicPBR计算聚光灯金属度流
GetMainLight获取主光
GetAdditionalDirectionalLightsCount获取额外平行光数量
GetAdditionalDirectionalLights获取其他平行光
GetAdditionalPointLightsCount获取额外点光源数量
GetAdditionalPointLights获取其他点光源
GetAdditionalSpotLightsCount获取额外聚光灯数量
GetAdditionalSpotLights获取其他聚光灯
PhysicallyBaseDirectLightingPBR计算直接光照
PhysicallyBaseAreaLightsLightingPBR计算区域光照
CalculateFinalColor获取最终颜色
EnvironmentBRDF计算环境光BRDF
GlobalIllumination计算全局光照
NS_UniversalFragmentPBRPBR片段通用函数
NS_PBR_AnisotropicLitPBR计算各向异性光照

Shadow/ShdowCommon.glsl

  • 纹理
纹理描述
NS_Shadow_ScreenShadowTexArray屏幕空间阴影纹理
  • 接口
接口说明
NS_GetDirectionalLightShadowAttenuation获取平行光的阴影衰减系数
NS_GetPointLightShadowAttenuation获取点光源的阴影衰减系数
NS_GetSpotLightShadowAttenuation获取聚光灯的阴影衰减系数
NS_GetAreaLightShadowAttenuation获取区域光的阴影衰减系数

GPUDrive.glsl

  • 属性
变量描述
aBoneWeight骨骼的权重
aBoneIndex骨骼的顺序
  • 常量
常量描述
MAX_BONES最大骨骼数量
MAX_BONE_INFLUENCE最大骨骼影响数量
  • 结构体——NSGpuDriveData
变量描述
finalBonesMatrices最终骨骼矩阵
finalBonesInvMatrices最终骨骼逆矩阵
  • NSGpuDriveUniforms(StorageBuffer)
变量描述
_NSGpuDriveDataGPU驱动骨骼动画数据
  • 接口
接口说明
NSGetVertexPosInObjectSpace骨骼模型顶点位置转模型空间位置
NSGetNormalInObjectSpace骨骼模型顶点法线转模型空间法线

ShaderLibrary/InputData.glsl

  • 结构体——NS_InputData
变量描述
positionWS世界空间位置
positionCS裁剪空间位置
normalWS世界空间法线
viewDirectionWS世界空间视线方向
TexCoord纹理坐标
shadowCoord阴影坐标
fogCoord雾坐标
vertexLighting顶点光照
bakedGI烘焙的全局光照
normalizedScreenSpaceUV归一化的屏幕空间纹理坐标
shadowMask阴影遮罩
tangentToWorld切线空间转世界空间矩阵

ShaderLibrary/SurfaceData.glsl

  • 结构体——NS_SurfaceData
变量描述
albedo反照率颜色
specular高光颜色
emission自发光颜色
alpha透明度
metallic金属度
roughness粗糙度
smoothness平滑度
ao环境光遮蔽系数
ambientColor环境光颜色
normalTS切线空间法线
normalWS世界空间法线
tangentWS世界空间切线
bitangentWS世界空间副切线

ShaderLibrary/SurfaceInput.glsl

  • 接口
接口说明
Alpha处理alpha值并处理透明度剔除
SampleMetallicSpecGloss采样金属度或者高光值
InitializeStandardLitSurfaceData初始化光照标准表面数据

SDF/SDFCommon.glsl

  • 接口
接口说明
NS_SDF_SDFSphereSDF球
NS_SDF_SDFTriangleSDF三角形