Esfog_UnityShader教程_前言
很多人在学习Unity的时候对Shader都是一知半解,作为刚入职半年的新人接触Shader的时间也并不长,正因为是新人才能体会到学习Shader时候所遇到的困难和迷茫,无奈于资料不好找,网上难得的几篇教程讲的又不够完善或者太浅太短,所以我一直以来就想写一系列UnityShader的学习教程,现在终于快过年公司放假了, 抽空准备开始着手写这个系列的教程了,在Unity这个圈子里我还是一只很菜很菜的菜鸟,感谢这半年来一路上帮助过我的人,书,以及在网上无私奉献宝贵知识的前辈们,仅以此系列向他们致敬.
这个系列的教程会不定期的更新,由于笔者工作繁忙,有时可能会一段时间不更新,还望各位谅解,本人才疏学浅,可能在大神们面前班门弄斧了,写这系列教程一来是想帮助那些准备接触Shader却不知如何入门的同学们分享自己的经验,二来是借由自己写教程来锻炼自己写技术文章的文笔和巩固自己学习的知识,查缺补漏,只有你能把你学到的知识透彻的讲给别人听的时候,你才完全掌握了它.由于我接触Unity时间并不长,接触Shader时间更短,难免会有所纰漏和错误,还望各位看官不吝赐教,批评指正.
前言
前言部分主要是讲述一下个人对学习UnityShader的一些建议,以及描述一下图形渲染的大概模型和UnityShader的工作方式.
首先要说明一点,要想学好Shader而不只是停留在会用几个简单语法的层面,那你就一定不可避免的需要接触数学,主要是线性代数,深入研究可能会用到微积分和空间几何,要做好心理准备,总之要学习Shader不难,但要想学好,你真的要花一番功夫.再有一点就是编写Shader来说目前只有一些有限功能的带代码提示的编辑器,还没有可以调试的工具,一旦Shader出错Unity给出的提示经常是非常不明确的,这时候你只能耐心的一行行分析了.
先说明的一下什么是Shader,Shader一般被翻译为"着色器",他并不是指某一种具体语言,他是一种技术,可以让程序员去通过编写代码去参与到GPU渲染图形的具体流程中去,去制作一些精美的特效和动画甚至是让模型发生奇怪的形变,简单点就是可以把它理解成一种对呈现到屏幕上画面的一种美化工具,想一想是不是很酷,你竟然可以去参与显卡的工作.以前写一辈子Hello world一直和CPU打交道.
而编写Shader目前比较知名的是基于DirectX的HLSL和基于OpenGL的GLSL,而我们Unity用的ShaderLab是基于Nvida和Microsoft一同开发的CG(C for Graphic)语言,从名字上我们就能知道,只是一门类C的语言,如果你接触过C语言或者C++,甚至是JAVA,C#那对他的基本语法一定不会陌生,CG语言他是跨平台的,他可以基于OpenGL也可以DirectX来运行,也就是说他是工作在DX和OpenGL上层的抽象语言,这三种语言在某些具体方面可能有性能和扩展性上的区别,但是对于背后的实质技术并无过大区别,我对GLSL和HLSL接触的不多,HLSL由于是基于DX的可能现在很多高端引擎都是用HLSL,GLSL的话优势可能在于跨平台吧.
好吧我们只要关注我们的CG就可以了,有兴趣的同学可以自己去了解一下另外两种语言,说明一下由于CG是Nvida和微软共同开发的,所以CG上的很多标准和HLSL是兼容的,学起来有很多互通的地方.Unity 使用的并不是完完全全的CG语言,如果你看官方的API你会发现他的Shader分为三大类:
在上面我简略的说了一下GPU渲染3D物体的大概流程,那我们的Shader是怎么参与进来的呢,开篇已经说过了,这个系列的文章只以Vertex and Fragment Shader来进行距离,这是Unity中最复杂和最强大的Shader,另外两种大家自己跟着官方文档了解一下吧.
Esfog_UnityShader教程_前言的更多相关文章
- Esfog_UnityShader教程_镜面反射SpecularReflection
系列教程第四篇,本来打算昨天写的,有些小偷懒就今天写了,这一期我们来讨论一下关于镜面反射的基本原理和具体代码.这一篇是承接着上一篇<Esfog_UnityShader教程_漫反射DiffuseR ...
- Esfog_UnityShader教程_漫反射DiffuseReflection
这篇是系列教程的第三篇,最近工作比较紧,所以这个周六周日就自觉去加了刚回来就打开电脑补上这篇,这个系列的教程我会尽量至少保证一周写一篇的.如果大家看过我的上一篇教程<Esfog_UnitySha ...
- Esfog_UnityShader教程_遮挡描边(实现篇)
在上一篇中,我们基本上说明了遮挡描边实现的一种基本原理.这一篇中我们将了解一下基于这种原理的具体实现代码.本篇中的内容和前几篇教程相比,相对比较难一些,建议先有一些基本的Unity的C#脚本编程经验 ...
- Esfog_UnityShader教程_遮挡描边(原理篇)
咳咳,有段时间没有更新了,最近有点懒!把不少精力都放在C++身上了.闲言少叙,今天要讲的可和之前的几篇有所不同了,这次是一个次综合应用.这篇内容中与之前不同主要体现在下面几点上. 1.之前我们写的都是 ...
- Esfog_UnityShader教程_逐帧动画
有段日子没出这个系列的新文章了,今天就拿一个比较常见也比较基础的利用改变Shader来改变不断调整UV实现播放逐帧动画的小功能.很久没写了就当练练手了.在新版本的Unity中早就已经集成了Sprite ...
- Python笔记_第五篇_Python数据分析基础教程_前言
1. 前言: 本部分会讲解在Python环境下进行数值运算.以NumPy为核心,并讲解其他相关库的使用,诸如Matplotlib等绘图工具等. C.C++和Forttran等变成语言各有各的优势,但是 ...
- Esfog_UnityShader教程_溶解效果Dissolve
溶解效果在游戏中是很常见的,比如在一些神话或者魔法世界中,一些NPC角色在剧情需要时候会身体会渐渐的消失掉.甚至有一些更炫的,比如用火焰喷射器把目标燃尽.这些都可以用到溶解效果.这篇文章主要是讲解一下 ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- C#读写文件的方法汇总_C#教程_脚本之家
C#读写文件的方法汇总_C#教程_脚本之家 http://www.jb51.net/article/34936.htm
随机推荐
- SqlServer 行转列(统计某年一到十二个月数据总和)
select * from( select sum(case MONTH(purchase_date) when '1' then SumMoney else 0 end) as January ...
- 在 2016 年学 JavaScript 是一种什么样的体验?
转 译者:方应杭 嘿,我最近接到一个 Web 项目,不过老实说,我这两年没怎么接触 Web 编程,听说 Web 技术已经发生了一些变化.听说你是这里对新技术最了解的 Web 开发工程师? 准确地说,我 ...
- Default Title
測試的標誌 代表意義 1. 關於某個檔名的『檔案類型』判斷,如 test -e filename 表示存在否 -e 該『檔名』是否存在?(常用) -f 該『檔名』是否存在且為檔案(file)?(常用) ...
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- 修改oracle实例名orcl为demo
修改oracle实例名有六步: 1.sqlplus username/password as sysdba登陆,然后从spfile文件创建pfile文件 :create pfile from spfi ...
- SPI
SPI的通信原理以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,有4根线,单向传输时只要3根线. (1)MOSI(SDO) – 主设备数据输出,从设备数据输入(Master Out Sla ...
- ZTOOLS HTTP®EXTEST&JSONS 工具包
下载地址:点击下载
- php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别
关于这个问题,搜索引擎上搜到一大片的文章,有很多问题,在这找到一篇正确的说法:http://mimiz.cn/index.php/php/php-http_host-server_name-diffe ...
- JavaScript 的循环语句语法摘要
if条件语句语法: if(condition){ statements; } 理解:圆括号里的是条件参数 ,花括号里的为执行的语句. 示例代码:if(1>2){ alert("Th ...
- 安装第三方Python模块,增加InfoPi的健壮性
这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet 自动检测文本编码 2.lxml 用于解析 ...