Unity Shader (二)
Shader_七彩球
0x00 准备工作
如上篇文章中所说创建shader,赋给材质球,把材质球赋给物体。下面我会简单再说一下,详细可看上一篇文章Unity Shader(一)_初识Shader
- 创建一个Unity Shader,并且命名为RGBSphere。(自己可以随意啊,我暂时是这么起的)
- 创建一个材质,把它命名为RGBSphereMat,并把步骤1中的shader赋给该材质。
- 创建一个球体,位置调整好以便在Game窗口处能看到,并把步骤2中的材质赋给该球体。
打开刚刚创建的shader,并且把里面的代码删掉改为下面的代码:
Shader "Aiting_Cg/RGBSphere" {SubShader{Pass{CGPROGRAM#pragma vertex vert //编译 顶点 vert(vert 功能顶点着色器)#pragma fragment frag //编译 片段 frag(frag功能片段着色器)//对于多个顶点输出参数。//定义一个输出参数结构体struct vertexOutput{float4 pos : SV_POSITION;float4 col : TEXCOORDO;};vertexOutput vert(float4 vertexPos:POSITION)//顶点着色器{vertexOutput output; //不需要再这里输入结构体output.pos=UnityObjectToClipPos(vertexPos);output.col=vertexPos+float4(0.5,0.5,0.5,0.0);/* 这里顶点着色器将输出数据* 写入输出结构体。在x,y,z坐标上加0.5,因为立方体的坐标介于-0.5和0.5之间 * 我们需要介于0.0~1.0之间*/return output;} float4 frag (vertexOutput input):COLOR //frag功能片段着色器{return input.col;/* 这里片段着色器返回带有语义TEXTCOOROO的“col”* 输入参数作为无名* 输出参数和语义COLOR.*/ } ENDCG}} }
实现效果如下:
结构体的格式如下: struct StructName{TypeName : Semantic; (自起):(语义)TypeName : Semantic; ...};
0x01 Out限定符
可以使用顶点着色器函数的参数和out限定符来替代输出结构的方法,如下:
void vert(float4 vertexPos:POSITION,out float4 pos:SV_POSITION,out float4 col :TEXCOORDO){pos=UnityObjectToClipPos(vertexPos);col=vertexPos+float4(0.5,0.5,0.5,0.0);return;}float4 frag(float4 pos:SV_POSITION,float4 col:TEXCOORDO):COLOR{return col;}
但是,输出结构的使用在实践中更常见,更好确保顶点输出参数和片段输入参数具有匹配的语义。
0x02 顶点输出参数的插值
关于顶点输出参数和片段输入参数的还没有完全结束。如果选择立方体游戏对象,在“场景视图”中看到它仅包含12个三角形和8个顶点。因此,顶点着色器可能仅被调用八次,并且只有八个不同的输出被写入顶点输出参数。但是,立方体上还有更多颜色。那是怎么发生的?
实际上,只为每个三角形的每个顶点调用顶点着色器。但是,不同顶点的顶点输出参数的不同值在三角形内插。然后,对于由三角形覆盖的每个像素调用片段着色器,并接收顶点输出参数的内插值作为片段输入参数。
如果要确保片段着色器通过顶点着色器接收一个精确的非插值值,您可以确保顶点着色器将相同的值写入三角形的所有顶点的顶点输出参数,或者您可以使用HLSL存储类修饰符nointerpolation。
0x03 摘要
在这一篇中主要给出了一个小例子,用到的就是顶点与片元之间的通信,顶点输出参数的插值这些知识。理论不是太会讲述,有什么意见随时欢迎各位大佬提出!!!小例子有需要的就拿去使用吧。共同学习共同进步!!!☺☺☺
网站推荐:
- Microsoft
- Unity
本作品由A_AiTing采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。
Unity Shader (二)相关推荐
- 二、Unity Shader顶点变换总结
<Unity Shader入门精要>读书笔记 之 二 做这个总结的目的是为了加深了解一个模型上的顶点是如何从模型上一步步变换到屏幕上的,搞明白Unity到底做了些啥? 1.顶点变换的目的: ...
- unity shader入门精要_Unity Shader 入门(二):shader 基础
一.参考与说明(需要写在开始东西): 1.1 Unity Shader 入门精要学习 https://github.com/candycat1992/Unity_Shaders_Book/tree/u ...
- (二)unity shader基础之——————shader一些专业术语的解释(OpenGL/DirectX、HLSL/GLSL/Cg、Draw Call、固定管线渲染等)
一.什么是OpenGL/DirectX 我们直接访问GPU是一件非常麻烦的事情,可能需要各自寄存器.显存打交道而图像编程接口在这些硬件的基础上实现了一层抽象. OpenGL和DirectX就是这些图像 ...
- Unity渲染(二):Shader着色器基础入门之渲染Image图片
Unity渲染(二):图片渲染 通过这里,你会学习到怎么将一张图片渲染到UI的Image组件或者SpriteRenderer上,以及透明物体的渲染. 上一章:Unity渲染(一):着色器基础入门之纯色 ...
- Unity Shader知识点(二)写一个基础漫反射Shader
前言 我们刚学习Shader时,往往会被计算机图形学相关复杂的数学.物理知识所困扰,并在学习过程中丧失兴趣.个人以为,在代码以外,学习Shader应当有本科线性代数课程基础的概念框架,在这一基础上,完 ...
- unity shader学习---光照模型(二)
更复杂的光照 效果图 理论 unity的光源类型 unity的渲染路径 在这里插入图片描述 实验 多光源 阴影 不透明物体的阴影 让物体接收阴影 统-管理光照衰减和阴影 透明度物体的阴影 代码 多光源 ...
- 【Unity Shader实例】 水体WaterEffect(二) 用贴图和uv动画模拟水效
Unity Shader实现简单水体效果 效果展示 原理 用贴图和uv动画模拟水效实现"假"水. 设计 找一张水波的贴图,处理它的uv值,让贴图流动起来.这样就用静态纹理和uv动画 ...
- Unity Shader着色器优化
对游戏开发者而言,着色器长久以来就是游戏开发中的重要部分,在Unity中编写并实现着色器的过程直观且高效,优秀的着色器还可以创造非常精美的游戏画面,同时保证极高的性能.今天将由Unity的技术工程师张 ...
- Unity Shader 之 透明效果
本文引用 Unity Shader入门精要 开启透明混合后,一个物体被渲染到屏幕上时,每个片元除了颜色值和深度值外,还有--透明度.透明度为1,则完全不透明,透明度为0,则完全不会显示. 在Unity ...
- unity shader入门精要_Unity Shader 入门(一):渲染流水线
一.参考与说明(需要写在开始东西): 1.1 Unity Shader 入门紧要学习 candycat1992/Unity_Shaders_Bookgithub.com 1.2 还有一些图形学的历史 ...
最新文章
- APK 签名中应该注意的一些点 (未完待续)
- 4. Brackets 前端编辑器试用
- VS2013中使用git发布解决方案master分支的时候出现错误
- CCNP之IS-IS实验
- C/C++语言中联合体union的妙用
- Nocatalog 下的RMAN 增量备份 shell脚本
- C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP),多多宜善
- 数据结构期末复习之散列表的查找
- TransH:将知识嵌入到超平面(知识图谱嵌入)2014 AAAI
- 传闻称马斯克从创始人手中偷走了特斯拉公司,马斯克回击...
- 安卓三维展示源码_谷歌也翻车了?全球数亿安卓设备难逃一“劫”,用户隐私数据库被利用长达10年!...
- 《编译原理》学习笔记 ·001【第一章:总论】
- 5、RH850 F1 定时器TAUJ功能和配置
- 百度地图怎么不显示服务器地址,百度地图使用指南
- 360度全景效果图制作步骤是什么?
- 泵站和水闸无人值守系统
- 如何选择企业级数据存储DAS、NAS和SAN
- fiddler手机抓包抖音无网问题
- 7、全国天气查询API接口,免费好用
- 计算机软件添加信任,瑞星杀毒怎么添加信任软件 添加方法介绍
热门文章
- 统计学知识系列:一篇搞懂假设检验
- php 判断微信浏览器支付宝,PHP判断是手机端-PC端-微信浏览器
- R语言混合线性模型包代码演示
- 为酒店设计一套计算机网络管理系统,酒店管理系统设计方案(9页)-原创力文档...
- Android蓝牙完全学习手册
- Python办公自动化——8行代码实现文件去重
- ImageJ Nikon_ImageJ使用教程之自动细胞计数篇
- Microsoft SQL server Management Studio工具报错“应用程序的组件中发生了无法处理的异常”...
- snakeyaml操作yml文件中注释的处理
- Blender建模与3D打印