# 内置效果和定义

框架内置了一些效果资源。

## 内置效果

目前除去内部效果之外，暴露给开发者会使用的效果有两个：

1. 简单无光照效果 [simple](effect-simple)
2. 标准物理渲染效果 [standard](effect-standard)

在内置的之外，开发者还可能会自定义效果，这里就可能会用到一些内置的uniforms、宏和着色器方法，我们将其列举如下：

## 内置Uniforms和宏

框架内置了一些uniforms和宏，便于开发者使用，它们分为以下几个大类：

### 基础

|类型|宏|说明|
|-|-|-|
|是否为蒙皮网格|`WX_SKINNED`|bool|
|骨骼数量|`WX_BONE_NUM`|int|
|是否使用骨骼数据纹理|`WX_USE_BONE_MATRIX_TEXTURE`|bool|

|类型|uniforms|说明|
|-|-|-|
|视图矩阵|`u_view`|mat4|
|投影矩阵|`u_projection`|mat4|
|世界矩阵|`u_world`|mat4|
|视图投影矩阵|`u_vp`|mat4|
|视图逆矩阵|`u_viewInverse`|mat4|
|游戏时间戳|`u_gameTime`|float|
|骨骼偏移矩阵|`u_boneOffsetMatrix`|mat4[宏决定]|
|骨骼矩阵太大时，转换为的贴图|`u_boneMatrixTexture`|texture2d|

### 图元数据相关

图元数据相关的主要是创建[几何数据](/miniprogram/dev/reference/xr-frame/component/render/geometry)时定义的那些`attributes`，由`usage`决定，每中`usage`对应唯一的宏，比如：

`xrFrameSystem.EVertexLayoutUsage.NORMAL`对应于`WX_USE_NORMAL`。

### 后处理相关

主要是要注意开了后处理时，前置的渲染流程需要保证输出是线性的，可能要视情况`removeGamma`：

```glsl
vec3 removeGammaCorrection(vec3 color) {
  return pow(color, vec3(2.2));
}
```

|类型|宏|说明|
|-|-|-|
|是否开启了后处理|`WX_PP_ACTIVE`|bool|

### 光照和阴影相关

可见[灯光相关部分](../render/light#宏和uniforms)。  

### 环境相关

可见[环境相关部分](../render/env#宏和uniforms)。

## 内置着色器方法

@todo
