Vertex And Fragment Shader(顶点和片段着色器)
Vertex And Fragment Shader(顶点和片段着色器)
Shader "Unlit/ Vertex_And_Fragment_Shader "
{
Properties
{
_MainColor("主颜色", color) = (1, 1, 1, 1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
//固定的一些格式
Tags{"LightModel" = "ForwardBase"}
CGPROGRAM
//声明为顶点着色器 vertex 关键字 vert是顶点着色器渲染时执行的函数
#pragma vertex vert
//声明为片段着色器 fragment 为关键字 frag是片段着色器渲染时执行的函数
#pragma fragment frag
//调用的unity中的指令(标签)
#include "UnityCG.cginc"
#include "Lighting.cginc"
//应用阶段数据 获取应用阶段的数据 模型的顶点颜色 法线 切线之类的数据
struct appdata
{
//float4 变量的属性 vertex是变量名 POSITION是一个语义 作用:把模型空间的顶点位置放入前面的变量中 这个语义可以自动填充
float4 vertex : POSITION;
float3 normal : NORMAL;//获取模型的顶点法线
};
//V To F 顶点着色器的数据传递给片段着色器
struct v2f
{
//SV_POSITION 也是一个语义 规定变量只能接收投影空间下的顶点位置
float4 vertex : SV_POSITION;
fixed3 col:Color0; //得到颜色传到片段着色器
};
float4 _MainColor; //声明主颜色
v2f vert (appdata v)
{
v2f o; //得到v2f数据
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); //获得position
//归一化后的光照方向向量
float3 LiaghtDir = normalize(ObjSpaceLightDir(v.vertex));
//对顶点的法线方向向量和光照方向向量进行点积
float Ndotl =saturate(dot(normalize(v.normal), LiaghtDir));
//环境光、unity自带光线、主颜色叠加
fixed3 diffus = Ndotl*_LightColor0.rgb + UNITY_LIGHTMODEL_AMBIENT.rgb+_MainColor.rgb;
o.col = diffus; //赋值
return o;
}
fixed4 frag (v2f i) : SV_Target //SV_Target 缓冲区
{
return fixed4 (i.col, 1); //渲染到窗口
}
ENDCG
}
}
}
注:POSITION、SV_POSITION等是Unity为了方便对模型数据的传输,进行了特别的含义规定。语义就是一个赋给Shader输入和输出的字符串,表达了一些参数的含义,也就是让Shader知道从哪里读取数据,并把数据输出到哪里。
Vertex And Fragment Shader(顶点和片段着色器)的更多相关文章
- Vertex and FragmentShader顶点与片段着色器
一.顶点与片段着色器简介 Vertex and FragmentShader:最强大的Shader类型,也是本系列的重点,下文中简称V&FShader,属于可编程渲染管线.使用的是CG/HLS ...
- 片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但
片元着色器(Fragment Shader)被称为像素着色器(Pixel Shader),但片元着色器是一个更合适的名字, 因为此时的片元并不是一个真正意义上的像素.
- stage3D基础二-----顶点和片段着色器(转)
来源:http://www.adobe.com/cn/devnet/flashplayer/articles/vertex-fragment-shaders.html 本教程将介绍着色器.着色器是 S ...
- (译)Minimal Shader(最小的着色器)
(原文:https://en.wikibooks.org/wiki/Cg_Programming/Unity/Minimal_Shader) This tutorial covers the basi ...
- UnityShader之顶点片段着色器Vertex and Fragment Shader【Shader资料】
顶点片段着色器 V&F Shader:英文全称Vertex and Fragment Shader,最强大的Shader类型,也是我们在使用ShaderLab中的重点部分,属于可编程管线,使用 ...
- Unity3D学习笔记(三十五):Shader着色器(2)- 顶点片元着色器
Alpha测试 AlphaTest Great:大于 AlphaTest Less:小于 AlphaTest Equal:等于 AlphaTest GEqual:大于等于 AlphaTest LEqu ...
- Opengl_入门学习分享和记录_02_渲染管线(一)顶点着色器&片段着色器
写在前面的废话:今天俺又来了哈哈,真的好棒棒! 今天的内容:之前我们大概描述了,我们自己定义的顶点坐标是如何被加载到GPU之中,并且介绍了顶点缓冲对象VBO用于管理这一块内存.今天开始详细分析它的具体 ...
- android学习10——对顶点着器和片段着色器的理解
图形都是点,线,面组成的.顶点着器指定了顶点的位置,大小和颜色. 看一个顶点着色器的代码 attribute vec4 a_Position; attribute float a_PointSize; ...
- Unity3d之Shader编程:子着色器、通道与标签的写法 & 纹理混合
一.子着色器 Unity中的每一个着色器都包含一个subshader的列表,当Unity需要显示一个网格时,它能发现使用的着色器,并提取第一个能运行在当前用户的显示卡上的子着色器. 我们知道,子着色器 ...
随机推荐
- Socket编程--TCP服务端注意事项
僵尸进程处理 僵尸进程和孤儿进程: 基本概念:我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程.子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预 ...
- 国内物联网平台(5):机智云IoT物联网云服务平台及智能硬件自助开发平台
国内物联网平台(5)——机智云IoT物联网云服务平台及智能硬件自助开发平台 马智 平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运 ...
- 在OnRowDataBound或OnItemDataBound事件中获取字段值
不管是在GridView,DataList还是Repeater控件中,其中Repeater控件,没有DataKeyNames或是DataKeyField属性,想获取记录的主键值,只好用Label或是H ...
- linux文件链接
我的github,欢迎关注,分享知识与技术 链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法. Linux中包括两种链接:硬链接(HardLink)和软链接(Soft Link), ...
- 安装SSH,配置SSH无密码登陆
环境:ubuntu16.04 Ubuntu 默认已安装了 SSH client,所以我们还需要安装 SSH server: sudo apt-get install openssh-server 安装 ...
- 【谁知道C#字段为什么用属性封装?】
源地址:https://zhidao.baidu.com/question/1174413218458798139.html 我们知道,类成员包括变量和方法.如果希望其他类能够访问成员变量的值,就必须 ...
- Mysql 别名
一.列别名 1.要给列添加别名,可以使用AS关键词后跟别名,例:SELECT [column_1 | expression] AS descriptive_name FROM table_name; ...
- P4841 城市规划 FFT+生成函数
\(\color{#0066ff}{ 题目描述 }\) 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了. 刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使 ...
- 缩点【洛谷P2860】 [USACO06JAN]冗余路径Redundant Paths
P2860 [USACO06JAN]冗余路径Redundant Paths 为了从F(1≤F≤5000)个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了 ...
- kuangbin专题十二 HDU1176 免费馅饼 (dp)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...