Vertex&Frag

Vertex&Frag 类型的Shader采用的是顶点计算和像素计算的着色器方式。

如下图:先通过顶点着色器,计算模型的坐标和纹理,再传入像素着色器计算颜色值。

*注意

_MainTex_ST 和 TransForm_Tex 是对应关系,计算纹理坐标的偏移和平铺。

裁剪空间的范围是[-1,1],也就是在经过MVP矩阵后,o.pos.x/ o.pos.w 以及o.pos.y/ o.pos.w 的范围都是[-1,1] 故可以将裁剪空间坐标转换为 相对屏幕位置的uv坐标,如下o.uv = float2(( o.pos.x/o.pos.w+1)*0.5,(o.pos.y/o.pos.w+1)*0.5);

源代码:

 1 Shader "JQM/VertexAndFrag"                                            //文件名和路径
 2 {
 3     Properties                                                                        //属性
 4     {
 5         _MainTex ("Texture", 2D) = "white" {}
 6     }
 7     SubShader
 8     {
 9
10         Pass
11         {
12             CGPROGRAM                                                        //Vertex&Frag 类型的shader 采用Cg语言
13             #pragma vertex vert
14             #pragma fragment frag
15
16             #include "UnityCG.cginc"
17
18             sampler2D _MainTex;                                            //属性声明
19             float4 _MainTex_ST;
20
21             struct appdata
22             {
23                 float4 vertex : POSITION;
24                 float2 uv : TEXCOORD0;
25             };
26
27             struct v2f
28             {
29                 float4 pos:SV_POSITION;
30                 float2 uv : TEXCOORD0;
31             };
32
33
34             v2f vert (appdata v)                                                //顶点程序
35             {
36                 v2f o;
37                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);        //模型视图投影矩阵,将模型坐标转到摄像机坐标,在投影到屏幕的坐标
38                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);            //计算UV和贴图之间的值
39                 return o;
40             }
41
42             fixed4 frag (v2f i) : COLOR                                        //片段程序,强制返回Color类型的颜色值
43             {
44                 // sample the texture
45                 fixed4 col = tex2D(_MainTex, i.uv);                    //纹理采样
46                 return col;
47             }
48             ENDCG
49         }
50     }
51 }

时间: 2024-10-02 21:16:56

Vertex&Frag的相关文章

Unity3d 实时折射与反射

这里只贴出了实时折射与反射的脚本与shader, 关于NGUI部分则请大家自行下载. 这个版本主要缺点是折射部分平面的Layer必须是water层,如果有哪位高手能把这一块去掉,请记得把代码回复到这篇文章下,谢谢! Water.cs using UnityEngine; using System.Collections; using System; using System.Collections.Generic; /// <summary> /// 水面 /// </summary&g

Unity3d 镜面折射 vertex and frag Shader源码

Unity3d 镜面折射 网上能找到的基本上是固定管道或表面渲染的shader, 特此翻译为顶点.片段渲染的Shader, 本源码只涉及shader与cs部分, 请自行下载NGUI unity3d 版本:v4.3.1 RefractionMirror.cs using UnityEngine; using System.Collections; using System; /// <summary> /// 镜面折射效果 /// </summary> [AddComponentMe

Unity3d 镜面反射 vertex and frag Shader源码

Unity3d 镜面反射 网上能找到的基本上是固定管道或表面渲染的shader, 特此翻译为顶点.片段渲染的Shader, 本源码只涉及shader与cs部分, Editor部分使用NGUI绘制的, 请自行下载NGUI unity3d 版本:v4.3.1 ReflectionEffect.cs using UnityEngine; using System.Collections; using System; /// <summary> /// 反射效果 /// </summary>

Unity3d 镜面反射 vertex and frag Shader源代码

Unity3d 镜面反射 网上能找到的基本上是固定管道或表面渲染的shader. 特此翻译为顶点.片段渲染的Shader, 本源代码仅仅涉及shader与cs部分. Editor部分使用NGUI绘制的, 请自行下载NGUI unity3d 版本号:v4.3.1 ReflectionMirror.cs using UnityEngine; using System.Collections; using System; /// <summary> /// 反射效果 /// </summary

Vertex中实现每顶点光照的镜面高光效果

1,基础知识讲解 一个物体在自然界会收到三种光的影响,周围的环境光.漫反射和镜面反射.那么对于计算机要想模拟现实中的光照,就应该也会实现这三种基本光照->环境光.漫反射.镜面高光.对于这三种光照,都存在着一定的影响因素,这就需要去追究其光照模型的公式了. (1),环境光强影响因素  ,由此可看出环境光照的效果取决于一般环境光的强度  和漫反射的材质颜色  (2),漫反射光强影响因素 由此可看出,漫反射的反射光取决于入射光强度  和材质常数,对于黑色表面,材质常数  的值是 0,对于白色表面,材质

Cg入门14:Vertex Shader - 几何变换 —顶点扭曲

mul (UNITY_MATRIX_MVP,upPos): 参数说明 由第一个参数UNITY_MATRIX_MVP 矩阵去影响第二个参数upPos向量(或者矩阵) Shader "Sbin/vf35" { SubShader { pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f{ float4 pos : POSITION; fl

Cg入门15:Vertex Shader - 几何变换 —波

Shader "Sbin/vf36" { SubShader { pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f{ float4 pos : POSITION; float4 col : COLOR; }; v2f vert(appdata_base v){ //v.vertex.y += sin(-length(v.verte

Unity cg vertex and fragment shaders(一)

cg片段 Cg程序片段写CGPROGRAM和ENDCG之间 开始时的片段可以作为#pragma语句编译指令 Pass { // ... the usual pass state setup ... CGPROGRAM // compilation directives for this snippet, e.g.: #pragma vertex vert #pragma fragment frag // the Cg/HLSL code itself ENDCG // ... the rest

Vertex and FragmentShader顶点与片段着色器

一.顶点与片段着色器简介 Vertex and FragmentShader:最强大的Shader类型,也是本系列的重点,下文中简称V&FShader,属于可编程渲染管线.使用的是CG/HLSL语法.分为2个部分vertex顶点部分和Fragment像素部分.下面依然通过写几个简单的Shader来学习. 二. CG语言一些关键词和常用函数解释 1.Cg顶点程序必须在结构中传递顶点数据.几种常用的顶点结构定义在文件UnityCG.cginc中.在大部分情况下仅仅使用它们就够了.结构如下: 1.ap