VS目前默认是不支持shader语法高亮的,但支持通过安装三方扩展来助攻。实现步骤如下:
1在VS的顶部菜单栏中,依次找到=>扩展-管理扩展,打开扩展管理界面。
2在扩展管理的搜索栏中输入:ShaderLabVS进行搜索,并下载,关闭VS窗口后开始安装。
3安装SubLimeVS,用于支持换行自动缩进,同样搜索,下载,安装。
白平衡(white balance),字面意义上是白色的平衡,由于显示器的三元色红绿蓝混合后是白色,因此白平衡是描述其白色精确度的一个指标,通过它可以解决色彩还原和色调处理的一系列问题。
使用数码摄像机拍照时可能会出现一些问题,如日光灯的房间里拍摄的影像会显得发绿,在室内钨丝灯光下拍摄的影像会偏黄,日光灯阴影处拍摄到的照片则偏蓝,这些都是因为白平衡设置不当。
白平衡修正图像的方法是将白色物体还原为白色,对于偏色情况,加强对应的补色来补偿。
了解白平衡的话还需要了解色温。色温是用开尔文温度来表示色彩。假设一个黑体物质,能够将落在其上的所有热量吸收,没有损失,同时将热量生成的能量以光的形式释放出来,便会因受到热力的高低而变成不同的颜色。如黑体受到的热力相当于500-550℃,就会变成暗红色,达到1050-1150℃时,就会变成**,温度继续升高就会变成蓝色。任何光线的色温相当于黑体散发出同样颜色时所受到的温度。色温越高,光色越偏蓝,色温越低则偏红。某一种色光比其它的色光的色温高,说明该色光比其它色光偏蓝,反之偏红。同样,当一种色光比其它色光偏蓝时说明该色光的色温偏高。
由于人眼拥有适应性,所以有时不能发现色温变化,不过在光源改变时会感觉到一会儿,之后就会适应。白平衡就是针对不同的色温条件,抵消偏色,使其更接近人眼的视觉习惯,使白色物体仍是白色。
在Unity中,我们可以看一下shader graph 内置的白平衡节点的实现:
函数通过一个色温和偏移值来改变颜色,并输出颜色。
函数第一二行,将色温和偏移映射到[-167,167],据说这样效果最好。
之后的三行,使获取CIE测量的白平衡点的色度(颜色的色调和饱和度)坐标,何为白点?维基百科上的解释如下:
其中色度坐标的计算由CIE色度图标完成。
之后一行计算LMS空间的系数。LMS是由人眼的三种锥体的响应表示的颜色空间,以其在长波长,中波长和短波长处的响应度(灵敏度)峰命名。在执行色适应时估计样本在不同光源下的外观时,通常使用LMS色彩空间。
之后的7行是将CIE的xy坐标转换到LMS空间。
之后使用计算的因数来计算白平衡系数。
之后的两个矩阵是在线性颜色空间和LMS颜色空间之间的转换。
最后将线性空间颜色转换为LMS空间,然后乘以白平衡系数,之后转换回线性空间然后输出颜色。
在shader的两个文件中,有的变量定义了 lowp 这个属性,那么就需要知道,这个属性到底是做什么用的。
它是修饰变量的精度的,代表着低精度。那么肯定就有高精度和中精度。这些精度被称作精度限定符。
没有精度修饰符的类型:字符常量,布尔型。
当浮点数和整数构造器不含有带精度修饰符的参数时,也不需要精度修饰符。
对于整型精度来说,高精度和中精度整型范围都可以转化相同精度修饰符表示的float型。例如: highp int 可以换成 highp float , mediump int 也可以换成 mediump float ,但是低精度不行,因为浮点型的低精度范围没有整型范围大。
精度修饰符要放在类型的前面。例如:
如果要在着色器中设定默认的精度,则一定要写在源码的起始位置。
指定默认的精度修饰符的方法如下:
其中,
例如:
VertexShader 也就是顶点着色器中的 float 和 int 都是有默认的精度修饰符 highp 的。如果不想修改,也是可以的。
但是, FragmentShader 片元着色器, float 类型是没有默认精度的,所以必须为 FragmentShader 中的 float 类型的指定一个默认的精度修饰符。或者在每一个 float 前面都添加精度修饰符。
在 VertexShader 顶点着色器中,有如下的预定义的全局默认精度修饰符:
在 FragmentShader 片元着色器中,有如下的预定义全局默认精度修饰符
所以从预设中也可以看出,为什么 FragmentShader 中浮点型需要设置全局默认或者每个都要设置精度了,着色器默认预设中没有 float 类型的精度。
以上就是关于写shader用vs20全部的内容,包括:写shader用vs20、Unity Shader:白平衡、第十一节—关于着色器程序中的精度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)