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(0,1))=0
    }
    SubShader {//子着色器,可以写多个用来适配不同的硬件或平台
        Tags { "RenderType"="Opaque" }//着色器标签【硬件将通过判定这些标签来决定什么时候调用该着色器】
        LOD 200//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

时间: 2024-08-03 02:10:41

Unity3D着色器Shader编程入门(一)的相关文章

着色器(Shader)

着色器(Shader) 顶点着色器(Vertex shader) 片段着色器(Fragment shader) 几何着色器(Geometry Shader) 提供通用计算能力的着色器(Compute Shader) 顶点着色器(Vertex Shader) 每个顶点都要执行一次Vertex Shader. 它的功能就是把每个顶点在虚拟空间中的三维坐标变换为可以在 屏幕上显示的二维坐标,并带有用于z-buffer的深度信息.可操作属性:位置.颜色.纹理坐标,但是不能创建新的顶点. 主要完成以下工作

编写Unity3D着色器的三种方式

不管你会不会写Unity3D的shader,估计你会知道,Unity3D编写shader有三种方式,这篇东西主要就是说一下这三种东西有什么区别,和大概是怎样用的. 先来列一下这三种方式: fixed function shader vertex and fragment shader surface shader 为什么Unity3D要提供三种shader的编写方式呢?那是因为三种方式的编写的难易度有区别,对应着不同的使用人群.其实我觉得这是Uniy3D想得有点多了,着色器不单止是为了实现效果,

shader 编程入门(一)

  本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] [cpp] view plain copy print? //-----------------------------------------------[Shader说明]--

OpenGL播放yuv数据流(着色器SHADER)-android(一)

可以参考:http://blog.csdn.net/ueryueryuery/article/details/17608185这篇文章很有帮助. 这个和windows还有ios略有不同,下面将步骤整理一下以做记录: 1:在avtivity_main.xml中添加用于显示的GLsurfaceView <android.opengl.GLSurfaceView android:id="@+id/lvsPlaySurfaceView" android:layout_width=&quo

【浅墨Unity3D Shader编程】之五 圣诞夜篇: Unity中Shader的三种形态对比&amp;混合操作合辑

本系列文章由@浅墨_毛星云 出品,转载请注明出处.  文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/164.html 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 邮箱: [email protected] QQ交流群:330595914 更多文章尽在:http://www.hpw123.net 本文算是固定功能Shader的最后一篇,下一次更新应该就会开始讲解表面Shader,而

cocos2d-x与着色器设计--入门篇(游云凌天原创)

http://blog.csdn.net/danjinxiangsi/article/details/43949955 着色器(Shader)应用与计算机图形学领域,指一组提供计算机图形资源在渲染时执行的指令. 随着手机应用以及移动端游戏这几年的发展,着色器设计凭借着自身的灵活性以及适应性,越来越多的被移动端开发者所接受. 本人在App Store上发布了一个原创免费开源无广告的关于着色器的教育型软件,以研究着色器在移动端的设计为目的. 可惜由于时间匆忙,并没有做中文的本地化.所以将写几篇博客,

游戏框架其九:网和着色器( Mesh and Shader )

网的重要作用可以导入3DMAX等创建的模型,到游戏中:着色器可以实现特定绚丽的效果.它们的实现如下 1. 网 Mesh的实现: #pragma once //======================================================================== // File: Mesh.h - classes to render meshes in D3D9 and D3D11 // 主要是导入3DMAX等软件生成的模型文件 基于Windows Dir

(转载)(官方)UE4--图像编程----着色器开发

着色器开发 快速入门 处理着色器时,请务必将 r.ShaderDevelopmentMode 设置为 1,以将其启用.最简单的方法是编辑 ConsoleVariables.ini,以便每次加载时都进行启用.这将启用"出错时重试"以及与着色器开发相关的日志和警告. 将更改保存到 .usf 文件之后,使用 Ctrl+Shift+. 可重新编译已更改的着色器. 如果您更改包括在许多着色器中的文件(例如,common.usf),那么此操作可能需要花费一些时间.如果您想对某个材质进行迭代,那么可

OpenGL入门4:着色器 GLSL

本文是个人学习记录,非原创,学习建议看教程 https://learnopengl-cn.github.io/ 非常感谢原作者JoeyDeVries和多为中文翻译者提供的优质教程 近况 在家呆久了真的是咸 前几天检查出下巴骨头出问题了,没什么治疗手段,有点难受,但也想开了 前言 经过之前一段时间的学习(渲染管线简介)我们已经知道了着色器(Shader)是运行在GPU上的小程序,这些小程序为图形渲染管线的某个特定部分而运行,着色器只是一种把输入转化为输出的程序,着色器也是一种非常独立的程序,因为它