【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)
学习资料:http://www.sikiedu.com/course/37/task/433/show
本节学习目标:
- 学习Shader中结构体struct的使用。
- 学习在片元函数(vertex)和顶点函数(fragment)之间传递数据。
- 学习从应用程序传递到顶点函数(a2v)、从顶点函数传递到片元函数(v2f)、从片元函数传递回系统(f2a)时,各个阶段中可以使用的语义。
Shader "Custom/02" {
SubShader{
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct a2v // 命名表示从应用程序传递到顶点函数,application to vertex
{
float4 vertex : POSITION; // 告诉Unity把模型空间下的顶点坐标填充给vertex属性
float3 normal : NORMAL; // 告诉Unity把模型空间下的法线方向填充给normal属性
float4 texcoord : TEXCOORD0; // 告诉Unity把第一套纹理坐标填充给texcoord属性
};
struct v2f // 命名表示从顶点函数传递到片元函数,vertex to fragment
{
float4 position : SV_POSITION;
float3 temp : COLOR0; // 属性必须指定语义。该语意可以由用户自定义,一般用于存储颜色
};
// 计算顶点坐标从模型坐标系转换到裁剪面坐标系
v2f vert(a2v v)
{
v2f f;
f.position = mul(UNITY_MATRIX_MVP, v.vertex);
f.temp = v.normal;
return f; // 使用结构体struct就可以一次返回多个数据
}
// 计算每个像素点的颜色值
fixed4 frag(v2f f) : SV_Target
{
return fixed4(f.temp, ); // f.temp是float3已经包含了三个数值
}
ENDCG
}
}
FallBack "Diffuse"
}
最终显示的颜色值是每个像素点的法线方向的颜色值。参考右上角的世界坐标。

从应用程序传递到顶点函数(a2v)时,可以使用的语义:
- POSITION 顶点坐标(模型空间)
- NORMAL 法线(模型空间)
- TANGENT 切线(模型空间)
- TEXCOORD(0~n) 纹理坐标。x、y从0到1
- COLOR 顶点颜色
从顶点函数传递给片元函数(v2f)时,可以使用的语义:
- SV_POSITION 顶点坐标(剪裁空间),一般是系统直接使用
- COLOR0 可以传递一组值(4个)
- COLOR1 可以传递一组值(4个)
- TEXCOORD(0~7) 传递纹理坐标
从片元函数传递回系统(f2a)时,可以使用的语义:
- SV_TARGET 颜色值,显示到屏幕上的颜色
【Unity Shader】二、顶点函数(vertex)和片元函数(fragment)传递数据,及各阶段可使用的语义(semantic)的更多相关文章
- [Unity Shader] 逐顶点光照和逐片元漫反射光照
书中的6.4节讲的是漫反射的逐顶点光照和逐片元光照. 前一种算法是根据漫反射公式计算顶点颜色(顶点着色器),对颜色插值(光栅化过程)返回每个像素的颜色值(片元着色器). 第二种算法是获得顶点的法线(顶 ...
- 【Unity Shader】一、顶点函数(vertex)和片元函数(fragment)
学习资料:http://www.sikiedu.com/course/37/task/430/show 学习Shader中顶点函数(vertex)和片元函数(fragment)的基本用法. Shade ...
- 【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现
[Unity Shader](三) ---------------- 光照模型原理及漫反射和高光反射的实现 [Unity Shader](四) ------ 纹理之法线纹理.单张纹理及遮罩纹理的实现 ...
- Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达 ...
- unity shader入门(二)语义,结构体,逐顶点光照
下为一个逐顶点漫反射光照shader Shader "study/Chapter6/vertexShader"{ Properties{_Diffuse("Diffuse ...
- Unity Shader 知识点总结(二)
紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图.透明度混合.顶点动画.后期特效处理等操作.如果有什么地方有错,请指出更正,谢谢.本文的代码主要来自开源书:unity ...
- 【Unity Shader】---常用帮助函数、结构体和全局变量
[Unity Shader]---常用帮助函数.结构体和全局变量 一.内置包含文件 Unity中有类似于C++的包含文件.cginc,在编写Shader时我们可以使用#include指令把这些文件包含 ...
- Vertex And Fragment Shader(顶点和片段着色器)
Vertex And Fragment Shader(顶点和片段着色器) Shader "Unlit/ Vertex_And_Fragment_Shader " { Proper ...
- Unity Shader (四)顶点程序示例
1.在顶点函数中实现凸起效果 Shader "Custom/Example" { properties { _R(,))= //圆的半径,也是凸起的范围 _OX(,))= //x轴 ...
随机推荐
- Shell脚本:向磁盘中批量写入数据
一.关于本文 工作要做的监控系统需要监控磁盘空间的使用率并报警.在测试这个功能的时候需要模拟两个场景:一是磁盘空间不断增长超过设定的阈值时,需要触发报警机制:二是磁盘空间降落到低于报警阈值的时候,不再 ...
- Android 如何添加一个apk使模拟器和真机都编译进去 m
添加一个apk都需要将LOCAL_PACKAGE_NAME的值添加到PRODUCT_PACKAGES才行.而PRODUCT_PACKAGES一般在build/target/product/目录下的文件 ...
- Map和JSON的互相转换
JSON-Lib方式 /** * 函数注释:parseJSON2Map()<br> * 用途:该方法用于json数据转换为<Map<String, Object> ...
- SQL Server中关于跟踪(Trace)那点事(转载)
前言 一提到跟踪俩字,很多人想到警匪片中的场景,同样在我们的SQL Server数据库中“跟踪”也是无处不在的,如果我们利用好了跟踪技巧,就可以针对某些特定的场景做定向分析,找出充足的证据来破案. 简 ...
- BT5配置网络
root@bt:~# vi /etc/network/interfaces 编辑IP地址auto eth0#iface eth0 inet dhcpiface eth0 inet staticaddr ...
- 微信小程序图片宽100%显示并且不变形
<view class="meiti" style="background-color:red;"> <image src="htt ...
- 【OfficeWebViewer】在线预览Word,Excel~
今天有个需求, 直接支持web端预览word,excel等文件, 查了一下很多写的比较麻烦, 这里找到一种简单的方式: http://view.officeapps.live.com/op/view. ...
- opencv之haar特征+AdaBoos分类器算法流程(三)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...
- 关于如果从SQLSERVER中获取 数据库信息 或者 表信息
1.首先呢.要明确一点.SQLSERVER中的系统信息一般都无从table中找到的.通常都在View中找到 这是重点. 2.接着我们打开算起来SQLSERVER,展开你某一数据库.看到类似 3.然后展 ...
- APACHE LOG4J™ 2
最近服务端开发需要用Log系统,于是研究了下APACHE下的Log框架. 目前日志系统,支持的语言有C++,PHP,.NET,JAVA.当然我是用Java服务端,选择用log4j吧.但突然发现log4 ...