本篇参考B站视频
“技术美术百人计划”·霜狼_may
《Shader入门精要》·冯乐乐女神著;
本篇主要用于自我复习,如有疑问或发现有什么错误,请多指教~
一.CG/HLSL/GLSL
1.CG
Unity shader的入门时,不管是《入门精要》还是庄老师的课,都是从CG语言开始学习的。它是由NVIDIA公司所开发的,基于C语言同时被OpenGL和Direct3D所支持的开发语言,其语法和HLSL类似。在《GPU编程与CG语言之阳春白雪》中虽然曾认为CG会越来越受欢迎,但遗憾的是,NVIDIA还是抛弃了CG,目前CG的最终版本是3.1。虽然在一些简单的shader编写上还是可以使用,但是在新的硬件环境下还是可能不支持,且对一些新功能的支持较差。
2.GLSL
GLSL是基于OpenGL的接口,其语法体系自成一家。闫老师的Games课程,以及学校的图形学教学中,一般还是使用GLSL。但是它不支持DirectX,就不得不放弃仅支持DirectX的Xbox等平台。
3.HLSL
HLSL是由微软开发的,在Windows平台上一家独大,多用于游戏领域。语法类似CG语言,在Unity中CG和HLSL等价。
二.HLSL常用函数
分为以下几类:
1.基本数学运算
函数 | 说明 |
---|---|
max(a,b) | 返回较大的 |
min(a,b) | 返回较小的 |
mul(a,b) | 两变量相乘,用于矩阵运算 |
abs(a) | 返回a的 绝对值 |
round(a) | 返回与a最接近的整数(取整) |
sqrt(a) | 返回a的平方根 |
rsqrt(a) | 返回a的平方根的倒数 |
degress(a) | 弧度值转换为角度值 |
redians(a) | 角度值转换为弧度值 |
noise(a) | 噪声函数,在每个像素点上输出0/1可形成噪波图 |
可以试验数学函数效果的网站:https://graphtoy.com/
2.幂指对函数
函数 | 说明 |
---|---|
pow(a,b) | a的b次幂,ab |
exp(a) | 返回以e为底的指数函数,ea |
exp2(value a) | 返回以2为底,a为指数的幂2a |