CG注意事项

本篇博客主要用来记录在编写CG时应该注意的一些特殊情况,方便避免采坑。

1.CG中的数组必须给定明确的初始化大小,否则结果未知。重新打开工程时会出现升级代码。如图所示:
在这里插入图片描述
2.可以将cg中用到的辅助接口整理在同一个任意后缀名的文件中,并放入到unity的CGIncludes目录下。需要用这些接口时,只需要使用include进行包含进来就可以。如图所示:
在这里插入图片描述
3.CG中in参数语义不能存在相同,out参数和return变量也不能存在相同语义,struct中的变量也不能存在相同语义。且在使用时,最好按照源类型和语义进行输入和输出,不能自认为拆解结构体来自动适配。如图所示:
在这里插入图片描述
在片段着色器中接收顶点着色器中的输出v2f类型变量时,只能使用v2f来接收,不能自作聪明和用v2f中的成员来接收。

4.shader是无法对模型原始顶点数据进行修改的,unity只是将顶点数据做了一份拷贝给我们使用,修改的顶点数据也是拷贝后的顶点数据。如图所示:
在这里插入图片描述
5.CG当中的mul接口表示表示第一个参数来影响第二个参数。如果第二个参数是矩阵的话,表示先进行第二个参数的矩阵操作,然后再进行第一个参数的矩阵变换。如果第二个参数是向量的话,就是直接对第二个参数进行第一个参数的矩阵变换。

6.向量B减去向量A会得到一个由A指向B的向量。如图所示:
在这里插入图片描述
7.向量之间的叉乘得到的结果是垂直于向量之间平面的法向量。此时可以采用左手法则,使用左手大拇指朝向我们,其余四指弯曲方向来决定向量叉乘先后顺序时,得到的法向量是朝向我们的。使用左手大拇指朝下远离我们,其余四指弯曲方向来决定向量叉乘先后顺序时,得到的法向量是远离我们的。且法向量朝向我们表示平面正面朝向我们,法向量远离我们表示平面背面朝向我们,所以在计算光照时,我们是希望得到朝向我们的法向量。如图所示:
在这里插入图片描述
8.在光照计算中,通常是使用法向量和光照向量(顶点指向光的方向)之间进行计算。通过将这两个向量归一化后进行点积操作,可以得到两个向量之间的夹角余弦值就等于两者之间的点积值。从而可以得出:法向量和光照向量之间角度越小,光照越强,向量重合时光照最强,向量垂直时光照最弱。如图所示:
在这里插入图片描述
9.在在Forward渲染路径下计算点光源颜色时,可以使用光照模型为Vertex的ShadeVertexLights接口进行计算,也可以使用光照模型为ForwardBase的Shade4PointLights接口进行计算。具体方法的使用参考unitycg.cginc和unityshadervariables.cginc文件中的定义。

10.顶点着色器和片段着色器处理颜色特点:
1>.片元是由顶点所在三角形面细分得到的,所以模型顶点集合数量要远远小于片元集合数量。在处理颜色时,顶点着色器中处理速度会更快些。
2>.顶点着色器只是对模型顶点进行处理,顶点和顶点之间的区域由系统自动进行插值处理。而片段着色器是对模型中所有的像素进行处理,所以片段着色器中处理颜色会更加细腻。
3>.在片段着色器中处理颜色时,需要将光照强度相关计算也放在片段着色器中。因为顶点中进行光照强度计算是针对一个顶点的,当该顶点细分成多个片元时,在片元中用顶点中获取的光照强度是一样的,这样就没有进行插值处理,得到的颜色值也将是一样的,效果看起来就不够平滑。当把光照强度计算放在片元着色器中时,图形硬件会在相同顶点不同片元处做插值计算处理,从而得到的颜色是有插值变化的,效果看起来就更加平滑。

11.由于gpu中逻辑运算单元有限,在顶点或者片段着色器中进行条件判定时性能会十分损耗,此时可以使用lerp插值函数来替换条件判定。因为lerp参数规则为“参数1乘以(1 - 参数3) + 参数2乘以参数3”,所以当参数3为1时,取参数2结果,当参数3为0时,取参数1结果。

12.我们可以对1~4维纹理对象进行采样。其中采样采样接口分别为tex1D,tex2D,tex3D,texCUBE。采样对象分别为:sampler,sampler2D,sampler3D,samplerCUBE。采样坐标分别是x,xy,xyz,xyzw。同时采样坐标等于纹理原始采样坐标乘以缩放系数再加上偏移系数,如果采样坐标在采样坐标空间系中存在的话,就回得到一个有效的像素,否则就是无效未知的像素。而采样坐标对应位置的像素获取又根据纹理过滤模式来获取,当过滤模式为点类型的话,就会获取一个就近的整数像素值,当过滤模式为线性的话,就会获取周围像素按照权重累加的像素值。

13.pass中的colormask指令是用来保留指定颜色分量的命令。如:colormask rgb就是输出颜色的红绿蓝分量值,此时的透明度分量值不被输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值