Unity3D着色器Shader编程入门(一)
自学Unity3D也有大半年了,对Shader一直不敢入坑,最近看了些资料,以及通过自己的实践,对Shader还是有一点了解了,分享下仅作入门参考。
因Shader是对图像图像渲染的,学习前可以去了解下图形图像学及GPU编程相关的知识。强烈推荐《GPU 编程与CG 语言之阳春白雪下里巴人》,这本书网上有电子版。
还有一本是关于Unity3D的Shader开发的《Unity着色器和屏幕特效开发秘笈》该书是《Unity Shaders and Effects Cookbook》翻译过来的。
首先来看下Shader实现的效果:
1、新建一个球体Sphere,然后再Project中创建一个材质球Material。
2、将新建的材质球赋值给该球体对象的Mesh Renderer组件的Materials中
选择不同的Shader,并调节参数,就可以看到不同的效果了。
3、在Project中新建一个Shader,打开后会默认一个写好的Shader
Shader "Custom/testShader" { //Shader【关键字开头】"Custom/testShader"【Shader的名字,分好用来分组】
Properties { //里面包含了Unity中进行赋值的属性
_MainTex ("Base (RGB)", 2D) = "white" {}//_MainTex【属性名】"Base (RGB)"【属性描述,将会在Unity面板中出现】2D【属性类型】"white"【默认值】
_Alpha("透明度",Range(,))=
}
SubShader {//子着色器,可以写多个用来适配不同的硬件或平台
Tags { "RenderType"="Opaque" }//着色器标签【硬件将通过判定这些标签来决定什么时候调用该着色器】
LOD //Level of Detail CGPROGRAM//CG语言开始
//申明程序使用surface【表面着色器】处理方法为下面的surf,使用Lambert光照模型
#pragma surface surf Lambert sampler2D _MainTex;//sampler2D类型的变量,名字和属性中的名字一致,用来接收Unity传入的参数
half _Alpha; struct Input {//结构体,用于输入数据
float2 uv_MainTex;//uv_开头用于取传入的贴图的UV
}; void surf (Input IN, inout SurfaceOutput o) {//表面着色器的方法
half4 c = tex2D (_MainTex, IN.uv_MainTex);//tex2D方法 对贴图中一个点进行采样
o.Albedo = c.rgb;//对输出的rgb颜色进行赋值
o.Alpha = c.a;//透明度赋值
}
ENDCG//CG语言结束
}
FallBack "Diffuse"//回滚
}
相关资料:
candycat的博客:http://blog.csdn.net/candycat1992/article/category/1782159
Unity3D着色器Shader编程入门(一)的更多相关文章
- 着色器(Shader)
着色器(Shader) 顶点着色器(Vertex shader) 片段着色器(Fragment shader) 几何着色器(Geometry Shader) 提供通用计算能力的着色器(Compute ...
- 分形的奥秘!分形着色器!shader 编程入门实战 ! Cocos Creator!
极致的数学之美! 什么是分形? "一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状" 简单来说,分形(fractal)就像这个doge表情包 ...
- Unity3d 着色器语法(Shader)
Shader "name" { [Properties] Subshaders [Fallback] } 定义了一个着色器.着色器拥有一个 Properties 的列表.着色器包含 ...
- 编写Unity3D着色器的三种方式
不管你会不会写Unity3D的shader,估计你会知道,Unity3D编写shader有三种方式,这篇东西主要就是说一下这三种东西有什么区别,和大概是怎样用的. 先来列一下这三种方式: fixed ...
- shader 编程入门(一)
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 着色器语言GLSL入门
着色器语言 GLSL (opengl-shader-language)入门大全 -- 转载自: https://github.com/wshxbqq/GLSL-Card
- cocos2d-x与着色器设计--入门篇(游云凌天原创)
http://blog.csdn.net/danjinxiangsi/article/details/43949955 着色器(Shader)应用与计算机图形学领域,指一组提供计算机图形资源在渲染时执 ...
- OpenGL之shader着色器的应用,三色渐变的三角形
学习自: https://learnopengl-cn.github.io/01%20Getting%20started/05%20Shaders/#_7 首先放一张效果图: 本次教程,将着色器单独定 ...
- OpenGL入门1.3:着色器 GLSL
前言 经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化为输出的程序,着色器也是一 ...
随机推荐
- vim 分屏功能
分屏启动Vim 使用大写的O参数来垂直分屏. vim -On file1 file2 ... 使用小写的o参数来水平分屏. vim -on file1 file2 ... 注释: n是数字,表示分成几 ...
- Eclipse如何替换android应用图标
打开你的项目 我们看到项目里有 res这个文件夹里有以下文件夹. drawable-hdpi -------高分辨率 drawable-ldpi -------中分辨率 drawab ...
- 03 Javascript初识
Javascript语言(★★★★★) Javascript是基于对象和事件驱动的脚本语言,作用在客户端. 特点: * 交互性 * 安全性(不能访问本地的硬盘) ...
- Codeforces Round #343 (Div. 2)
居然补完了 组合 A - Far Relative’s Birthday Cake import java.util.*; import java.io.*; public class Main { ...
- HDU4307 Matrix(最小割)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4307 Description Let A be a 1*N matrix, and each ...
- WPF Datagrid multiple selecteditems in MVVM
I can assure you: SelectedItems is indeed bindable as a XAML CommandParameter After a lot of digging ...
- linux查看和修改当前系统时间
一.查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 : "tzselect" ...
- BZOJ1481 : Navigation Game
设$f[i][j][k]$表示从最后一行某个$H$走到$(i,j)$且在第$i$行只经过了$(i,j)$,途中经过了$k$次$F$的最小代价. $A[i][j][k]$表示从下一行$\leq i$的某 ...
- 移动前端头部标签(HTML5 head meta)
移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析html代码,更好地将移动web前端页面表现出来.本文整理一些常用的meta标签. <!DOCTYPE html&g ...
- Codeforces Round #353 (Div. 2)Restoring Painting
Vasya works as a watchman in the gallery. Unfortunately, one of the most expensive paintings was sto ...