首先申明,本人也是初学,有很多不懂的地方,图形学的基础也不是很好,还希望大家共同指点学习。
在shaderlab 中基本了解了渲染流程以后,就开始尝试一些基本的shader练习
第一开始挑选了镜面反射的例子
shaderlab 是高级的渲染语言,在cg里的矩阵除了下述找到的,还有一些没有发现
-
UNITY_MATRIX_MVP
- Current model*view*projection matrix UNITY_MATRIX_MV
- Current model*view matrix UNITY_MATRIX_P
- Current projection matrix UNITY_MATRIX_T_MV
- Transpose of model*view matrix UNITY_MATRIX_IT_MV
- Inverse transpose of model*view matrix UNITY_MATRIX_TEXTURE0 to UNITY_MATRIX_TEXTURE3
- Texture transformation matrices
Built-in vectors
Vectors (float4) supported:
-
UNITY_LIGHTMODEL_AMBIENT
- Current ambient color.
之后的试点矩阵有两种解决方案
1WorldSpaceViewDir( v.vertex );
2 通过摄像机的代码将摄像机的矩阵传入。 但是至今也不知道对于两种方式的区别。
对于基本的矩阵没有完全熟悉,但是不敢停留,继续看了渲染流程后开始熟悉顶点渲染和片段渲染,功能就不一一概述
shaderlab 是通过
#pragma vertex vert
#pragma fragment frag
来定义两个过程的函数得。
在顶点模式中计算的顶点坐标,纹理坐标,光照坐标...直接通过在片段渲染函数的参数传递到片段渲染中。
值得注意的是在顶点渲染的函数中返回的是顶点的结构体,而在片段渲染中则返回half4值。
由于很多问题没有解决,最后通过计算视点的方向写了一个很简单的镜面模型。
如图
还希望大家共同指点,共同学习。