关于ShaderLab For Unity3D语法,简单讲解
SubShader{Pass{CGPROGRAM#pragmavertexvert#pragmafragmentfrag#include"UnityCG.cginc"sa...
SubShader{ Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; struct v2f{ float4 pos : SV_POSITION; float2 uv : TEXCOORD; }; v2f vert(appdata_base v){ v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); return o; } float4 frag(v2f i) : COLOR{ float4 texCol = tex2D(_MainTex, i.uv); float4 outp = texCol; return outp; } ENDCG } }
小弟最近刚开始学习Shader,希望得到大侠解答,有如下问题:
float4 pos : SV_POSITION;
变量声明的时候,float4为基本数据类型,pos为名称,这个SV_POSITION东西是什么?
为什么代码中float4 _MainTex_ST;变量声明的时候,没有SV_POSITION呢?
2. 代码中声明了一个#pragma vertex vert函数;
在v2f vert(appdata_base v){...}时候进行了使用(即实现方法体);可是这个函数为什么会有参数呢?
(appdata_base v---这个参数是从UnityCG.cginc文件中得到的)
还有,vert函数凭什么返回的是v2f类型的对象呢?
3. mul(UNITY_MATRIX_MVP, v.vertex); mul函数是从哪里得到呢?UnityCG.cginc文件中没有这个函数啊?
谢谢大侠们,呵呵 展开
小弟最近刚开始学习Shader,希望得到大侠解答,有如下问题:
float4 pos : SV_POSITION;
变量声明的时候,float4为基本数据类型,pos为名称,这个SV_POSITION东西是什么?
为什么代码中float4 _MainTex_ST;变量声明的时候,没有SV_POSITION呢?
2. 代码中声明了一个#pragma vertex vert函数;
在v2f vert(appdata_base v){...}时候进行了使用(即实现方法体);可是这个函数为什么会有参数呢?
(appdata_base v---这个参数是从UnityCG.cginc文件中得到的)
还有,vert函数凭什么返回的是v2f类型的对象呢?
3. mul(UNITY_MATRIX_MVP, v.vertex); mul函数是从哪里得到呢?UnityCG.cginc文件中没有这个函数啊?
谢谢大侠们,呵呵 展开
展开全部
同样是刚刚接触Shader的小菜鸟,表示刚开始学这个真是一头雾水,才有一点头绪,以下是一些自己的理解,不知道能不能帮助到你
1.这里的SV_POSITION叫做输出语义,语义是GPU编程里提出的一个概念,对于这个的定义可能比较长,我怕我说不清楚误导你,你可以百度一下一个文章——cg的输入/输出与语义绑定
2.#pragma vertex vert是一个预处理指令,表明一个以vert为名字的函数的顶点程序,这写法是固定的,详细可以参考Unity圣典组件参考手册里编写的顶点和片段着色器那部分
3.在 CGPROGRAM后面的都是cg程序,mul函数是cg标准库函数
p.s.推荐看shader前稍微学一下cg语言,会少绕不少远路
1.这里的SV_POSITION叫做输出语义,语义是GPU编程里提出的一个概念,对于这个的定义可能比较长,我怕我说不清楚误导你,你可以百度一下一个文章——cg的输入/输出与语义绑定
2.#pragma vertex vert是一个预处理指令,表明一个以vert为名字的函数的顶点程序,这写法是固定的,详细可以参考Unity圣典组件参考手册里编写的顶点和片段着色器那部分
3.在 CGPROGRAM后面的都是cg程序,mul函数是cg标准库函数
p.s.推荐看shader前稍微学一下cg语言,会少绕不少远路
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询