Shader
自学Shader的笔记
爱摸鱼的隔壁老王
做最好的自己
展开
-
SurfaceShader-参数传递
在SurfaceShader中,我们还可以自定义我们的vertex的输出,并将其作为surf的输入来进行一些操作。下面是实例代码,注释写的比较详细,而且博主也不善多言,这里直接上代码:Shader "Custom/ParameterPassDemo" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Al...原创 2018-11-15 12:39:02 · 505 阅读 · 0 评论 -
SurfaceShader-复杂结构
前面我们解释了SurfaceShader的简单的结构,其实那种结构是在Unity5.x以后才有的,unity对其做了大幅度的封装,在那之前是一种比较复杂但是比较灵活的结构,这篇博文我们来看一下:Shader "Custom/NewSurfaceShader" { Properties {//这里是一些属性定义,跟Shader1.0和2.0完全一样 _Color ("Color", Co...原创 2018-10-20 16:34:40 · 197 阅读 · 0 评论 -
SurfaceShader-基本结构
SurfaceShader是一种经过Unity封装的非常方便的Shader,它既可以不用写代码就能实现一些很好的效果,又可以满足一些非常复杂的需求,是一种很强大的Shader,那么不多说,我们先来新建一个SurfaceShader,发现其结构是这样的:Shader "Custom/NewSurfaceShader" { Properties {//这里是一些属性定义,跟Shader1.0和...原创 2018-10-20 16:06:35 · 472 阅读 · 0 评论 -
Shader-RendererQuene
设想,一个游戏物体A的深度是20(相对于相机的距离),另一个游戏物体B的深度是30,而恰好它们与相机的视角在一条线上,这样,游戏物体A会盖住游戏物体B,然而我们有时候可以需要做一些特殊效果,让比较远的物体优先显示出来,诸如这样的问题,我们就可以用RendererQueue来结局,在Shader中,RendererQueue可以用Tag来结局,官方一共提供了以下几种渲染队列Tag来供我们选择,这里因...原创 2018-08-26 09:54:00 · 473 阅读 · 0 评论 -
Shader-属性定义
shader的属性类型总共有Int,Float,Color,Range,Vector,2D,Cube,3D总共8中类型,下面按类型来介绍:Int属性定义的格式:name ("display name", Int) = numberFloat属性定义的格式:name ("display name", Float) = numberRange属性定义的格式:name (...原创 2018-08-22 08:30:56 · 3356 阅读 · 0 评论 -
Shader1.0-灯光设置
shader1.0中的灯光设置有Diffuse(漫反射),Ambient(环境光),Specular(镜面反射),Emission(自发光)四中,其计算公式为:Ambient * Lighting Window’s Ambient Intensity setting(Unity中灯光设置的Environment Lighting中的Source属性) + (Light Color * Diff...原创 2018-08-22 08:46:39 · 607 阅读 · 0 评论 -
Shader1.0-纹理设置
Shader1.0的纹理设置极为简单,我就直接上代码了,代码里注释写的很详细Shader "Hidden/TestTexture"{ Properties { _MainTex ("Texture", 2D) = "white" {} _NextTex("NextTexture",2D) = "whitr"{} _ConstantColor("Constant Color"...原创 2018-08-22 10:44:09 · 451 阅读 · 0 评论 -
Shader2.0-结构和语义
直接上代码,以后不多说了,代码写的很详细Shader "Hidden/TestStruct"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Pass { CGPROGRAM //使用CG语法 #pragma vertex vert //定义定点着色器的入口函数 ...原创 2018-08-22 11:38:38 · 574 阅读 · 0 评论 -
Shader2.0-顶点着色器应用:波浪的实现
Shader中波浪的实现主要在于根据时间改变顶点着色器的顶点信息,根据三角函数t=asin(bx+c)即可实现,具体见代码:Shader "Hidden/TestStruct"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Range("WaveNumber",float)=1 _Frency("Frency",f...原创 2018-08-22 12:15:55 · 779 阅读 · 0 评论 -
Shader2.0-一个简单的uv动画:平移
Shader "Hidden/TestStruct"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Range("WaveNumber",float)=1 _Frency("Frency",float)=0.5 _Speed("Speed",float)=1 } SubShader { Pass {...原创 2018-08-22 12:44:42 · 1289 阅读 · 0 评论 -
Shader2.0-一个简单的uv动画:旋转
旋转公式为矩阵的旋转公式,具体可以自行百度,这里博主不在详细解释。Shader "Hidden/TestStruct"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Speed("Speed",float)=1 } SubShader { Pass { CGPROGRAM #pragma...原创 2018-08-22 15:49:13 · 746 阅读 · 2 评论 -
Shader2.0-简单的边框的实现
Shader "Hidden/TestStruct"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Width("Width",float)=1.2 _Color("Color",Color)=(1,0,0,1) } SubShader { Pass { CGPROGRAM #pragm...原创 2018-08-22 16:47:11 · 653 阅读 · 0 评论 -
Shader2.0-高斯模糊的实现
要实现高斯模糊,大致的思路是,当某个游戏物体渲染完成后,将该游戏物体交给Shader进行二次渲染,从而实现高斯模糊,C#中有一个回调函数OnRenderImage,这个函数会在渲染完成后调用,我们可以在这个函数中调用Graphics.Blit方法会把传进来的图片与第三个参数中的材质进行二次计算,然后将二次计算的结果赋值给第二个参数。恰好OnRenderImage的第一个参数和第二个参数分别是Gra...原创 2018-08-22 17:51:14 · 811 阅读 · 1 评论 -
Shader2.0-Blood闪烁效果
分别新建一个材质,一个Shader和一个用于挂在到MainCamera上的C#脚本,将Shader设置到材质球上,然后编写C#脚本,C#代码如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class Blood : MonoBehaviour { pub...原创 2018-08-22 19:38:52 · 623 阅读 · 0 评论 -
Shader-AlphaTest(1.0和2.0)
所谓Alpha测试,就是指测试像素点的a值,只有当该像素点的a值符合要求时,才渲染该像素,否则不渲染该像素.首先来看1.0版本:Shader "Custom/AlphaTest"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { //Greater 只有当a值大于指定值时才渲染该像素...原创 2018-08-23 11:34:29 · 432 阅读 · 0 评论 -
Shader-StencilTest(模版测试)
模版测试较为复杂,它不像Alpha测试一样,单单通过简单的大于小于等运算符来比较,但是和Alpha测试一样,都是测试像素点,符合要求的就渲染,不符合要求的就不渲染。了解模版测试,需要理解较多术语:1.GBuffer:几何缓冲,相当于一个容器2.RefenceValue:模版值,Guffer中的像素点就是与这个值按位与后进行比较3.stencilOperation:比较后进行的操作4...原创 2018-08-23 13:31:09 · 2650 阅读 · 0 评论 -
Shader-ZTest(深度测试)
直接上代码了,至于什么效果,读者一测便知。Shader "Custom/Red"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { //ZWrite表示是否将深度写入GBuffer //ZTest表示是否将颜色写入GBuffer ZWrite On //与前面Alpha测试和模...原创 2018-08-23 18:59:59 · 1200 阅读 · 0 评论 -
Shader-Blend
前面a测试时用到过Blend命令,这里博主解释一下,Blend的意思是说如果要渲染的像素在GBuffer中已经有缓存,那么应该渲染哪一个像素?是GBuffer中的像素?还是原游戏物体的像素?还是说两个做一些操作后再去渲染?这里就要用到Blend。Blend共分为两个指令,Blend scr(原像素)*factor dst(GBuffer中的像素)*factor,和BlendOp Operati...原创 2018-08-24 10:46:08 · 1693 阅读 · 0 评论 -
Shader-BlendOp
上一篇文章博主把Shader的Blend指令介绍完了,这一篇我们来看一下BlendOp。BlendOp是指把原像素与Gbuffer中的像素进行某些运算后再渲染出来。这里博主也像上篇那样,把所有的运算指令全部列出来一一说明。(ps:毕竟博主写的是二手资料,建议英语基础好的去读官方文档)(这里博主把原像素称为src,GBuffer中的像素称为dst)Add src + dst Sub ...原创 2018-08-24 11:15:05 · 2558 阅读 · 0 评论