位置: 编程技术 - 正文
推荐整理分享学习Unity3D Shader篇 - CG语言入门(学习计划表模板),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:学习名言警句 励志,学习化妆的学校,学习名言警句 励志,学习雷锋好榜样,学习通,学习名言警句 励志,学习化妆的学校,学习化妆的学校,内容如对您有帮助,希望把文章链接给更多的朋友!
其实cg语言与GLSL大同小异,除了有一些语法上的差别,实际核心还是图形学算法。
注意:在使用cg的vertex shader和fragment shader时,必须将代码写到Pass{}块中!
既然是shader,那就看看cg的vertex shader和fragment shader怎么写吧。
1. 与GLSL必须把shader入口都叫做main()不同,cg中是可以自己给shader入口函数起名字的,使用如下方法:
#pragma vertex vertShaderFunc
#pragma fragment fragShaderFunc
那么 vertShaderFunc 与 fragShaderFunc 就是vs和fs的入口函数了。
2. cg中没有所谓的attribute与varying。shader间的数据传递是通过自定义的结构体传送的。结构体中数据的意义由语义单词表示。
如下:
需要注意的是,vertex shader的输入结构体的成员必须为以下这些成员,不可改名。
float4 vertex;
float3 normal;
float4 texcoord;
float4 texcoord1;
float4 tangent;
float4 color;
可以理解为在U3D中已经执行了对这些attribute名字的glBindAttribLocation,所以不能再改名了。不过varying和uniform是可以自己定义的。
struct vertData {
float4 vertex:POSITION;
float4 texcoord:TEXCOORD0;
};
struct v2f {
float4 pos : SV_POSITION;
float4 uv : TEXCOORD0;
}
v2f vertShaderFunc(appdata v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex); // mul用来计算矩阵向量乘法,UNITY_MATRIX_MVP相当于gl_ModelViewProjectionMatrix。
o.uv = float4(v.texcoord.xy, 0.0, 0.0);
return o;
}
// 显然fragment shader只输出颜色。那么返回就是用COLOR标注的一个四维向量。
half4 fragShaderFunc(v2f i) : COLOR {
half4 c = frac(i.uv); // frac:返回每个向量的小数部分。
if(any(saturate(i.uv) - i.uv)) // any:输入参数不为零返回true。 saturate:将截取到[0, 1]。
c.b = 0.5;
return c;
}
那么这个vertData类型的vertex就类于GLSL的gl_Vertex,texcoord相当于gl_MultiTexCoord0。
事实上Unity已经提供了一些预定义的结构体,如appdata_base, appdata_tan,方便开发。它们在UnityCG.cginc中有定义。
传入数据用函数参数,传出数据用返回。
下面是一个例子,将纹理颜色与归一化法线的相乘输出为最终颜色。
最终结果如下图所示:
Unity3D4.6.2介绍 Unity4.6.2现在已经正式发布并且提供下载,这是Unity第一个支持位iOS的正式版本,采用了最新的IL2CPP技术。IL2CPP是Unity内部开发的一款创新型脚本技术。
[置顶] Unity中使用脚本LineRenderer(现行渲染器)画圆 Unity中使用脚本LineRenderer(现行渲染器)画圆C#:publicLineRendererLR;publicintn;publicfloatr;voidStart(){LR=this.GetComponentLineRenderer();//得到组件LR.SetVertexCount(n1);//设置
NGUI之UIGrid UIGrid:这个组件可以轻松的让你排列你的组件,并且在运行或是编辑的时候都可以。更多精彩请关注【狗刨学习网】效果图如下:一:使用步骤1.选择一
标签: 学习计划表模板
本文链接地址:https://www.jiuchutong.com/biancheng/375815.html 转载请保留说明!友情链接: 武汉网站建设