23.9多光源


## 23.9 多光源 前面介绍了方向光、点光源,游戏里一般是有环境光+1个方向光+多个点光源,这一节就来介绍如何添加多个光源。 提起多个,就想到用数组,那么首先要解决的问题就是,如何在片段Shader里,创建点光源的数组? 在Shader中使用数组 在Shader中定义数组和C语言很相似,也是用中括号。 下面代码在Uniform Block中,定义了长度为128的点光源数组 。 访问数组元素也和C语言相似。 下面代码访问了点光源数组 的第0个元素。 灯光的效果是叠加的,所以在片段着色器中,对每一类型的灯光,要进行遍历,然后计算,然后叠加。 不用关注具体的光照计算,只需要记住:每一个点光源都要计算一次,然后叠加。 1.1 实际灯光数量 这里定义了长度为128的点光源数组 ,那么就是说会循环...

## 23.9 多光源 前面介绍了方向光、点光源,游戏里一般是有环境光+1个方向光+多个点光源,这一节就来介绍如何添加多个光源。 提起多个,就想到用数组,那么首先要解决的问题就是,如何在片段Shader里,创建点光源的数组? 在Shader中使用数组 在Shader中定义数组和C语言很相似,也是用中括号。 下面代码在Uniform Block中,定义了长度为128的点光源数组 。 访问数组元素也和C语言相似。 下面代码访问了点光源数组 的第0个元素。 灯光的效果是叠加的,所以在片段着色器中,对每一类型的灯光,要进行遍历,然后计算,然后叠加。 不用关注具体的光照计算,只需要记住:每一个点光源都要计算一次,然后叠加。 1.1 实际灯光数量 这里定义了长度为128的点光源数组 ,那么就是说会循环128次计算点光源效果。 那游戏场景里没有灯怎么办,岂不是浪费性能! 所以在点光源的Uniform Block里加上实际创建的灯光数量。 遍历总数就只有实际创建的灯光数量。 设置灯光数组参数 2.1 访问数组元素 要从逻辑代码中去设置Shader数组的值,需要对每一个元素进行设置。 怎么理解 每一个...

发布者: 作者: 转发
评论区 (0)
U