描述:
unityShaderCG
新手,最近在看shader这章,有几点疑惑1.shader编程到底使用的是那种语言,GLSL?HLSL?CG?这三种语言来历什么的不需要解释,看了好多遍了,只是想知道unity中使用的是哪种。
2.几个术语之间的关系不懂,shaderLab到底是什么,有的书上说是语言,但真正将语法的时候却在将CG,那么CG和shaderLab到底是怎么回事?
3.cg语言最新版本为3.1,当前已不再被积极开发与支持是什么意思?这门语言完蛋了?那还有必要学么?
解决方案1:
unity 用CG 来写的,你不用纠结这个
平时我们写着色器都是 顶点着色器 + 片段着色器 这种直接方式 我假设叫做原生CG着色器,着色器书本上也都是这么介绍的,但是问题,这两种方式实现一些效果例如反光,例如模糊都还可以 ,而且在UNITY 完全可以使用,但问题来了,你自己写的一个着色器举例来说,一个红色的盒子,你写好了没问题可以用,但是你放到场景中不会有阴影,不会受到灯光影响 ,这些你也完全可以继续写,但是很复杂,特别是阴影,即使你觉得复杂也没问题,你也可以写,你写的阴影算法能用,也就是说你的红色的盒子有投射阴影的功能了,但你放到场景中还是没有阴影,为什么,因为你的地面的着色器是unity自带的,不是你写的,他是接收阴影的物体,也就是说unity 自带的默认着色器,和你的着色器之间不能相互投影 ,而且还没法解决,至少简单的方式没有,除非你整个场景全部都用你自己写的 所以就有了surf 着色器 也就是 shardLab ,说白了他会自动生成和unity 默认着色器一样的阴影算法,你写的红色盒子就能和unity 自带的东西进行投影了,而且还有光照可以直接选择,漫反射等等. 如果你有兴趣去了解的话你就会知道 shardLab 写出来的东西,会被自动转成CG着色器 就相当于封装了一层东西,让你更方便使用罢了 也就是说说到底着色器还是 CG原生的着色器再工作,只是写的时候用unity的方式去写(表面着色器),它自动帮你增加其余繁琐的部分,具体细节你自己去研究,我也只知道这么多了
第三个问题我不知道,但是我想说的是,稍微学一段时间你就会知道了,这个东西用什么语言真不重要, 但是你学CG,或是其他语言 学的再好,没有经验没有算法什么都没有,你要是个数学家或者是图形学专家,你随便学两天就能写出好东西,因为CG其实语言上包含的东西很少,又不像C++什么的,只要会逻辑,剩下的全部是你绞尽脑汁用数学公式来达成效果了