
Shader
LoveMollyWendy
这个作者很懒,什么都没留下…
展开
-
Unity平行光源方向_WorldSpaceLightPos0自定义
概述最近美术这边有个需求,角色光照不受场景的影响。就是说,调整场景主光源的方向,强度,颜色,角色不能跟着调整。于是研究了一番,颜色和强度好实现,主要就是光源的方向,最后实现效果截图。光源方向:自定义光源方向材质面板可以看到自定义光源方向跟主光源方向是一致的。具体实现Unity 内置光源方向 _WorldSpaceLightPos一个普通的光照shader,ambient+ d...原创 2020-02-10 18:48:57 · 6482 阅读 · 4 评论 -
GPU渲染流水线
Gpu的渲染流水线用下面一张图来描述:备忘原创 2017-04-27 16:15:43 · 1521 阅读 · 0 评论 -
Unity内置变换矩阵
Shader中内置的常用矩阵:UNITY_MATRIX_MVP 当前的模型观察投影矩阵,用于将顶点/方向矢量从模型空间变换到裁剪空间 UNITY_MATRIX_MV 当前的模型观察矩阵,用于将顶点/方向矢量从模型空间变换到观察空间 UNITY_MATRIX_V 当前的观察矩阵,用于将顶点/方向矢量从世界空间变换到观察空间 UNITY_MATRIX_P 当前的投影矩阵,用原创 2017-04-27 16:18:14 · 1798 阅读 · 0 评论 -
Unity内置的摄像机和屏幕参数
Unity shader中访问当前正在渲染摄像机的参数;如下:_WorldSpaceCameraPos float3 该摄像机在世界空间中的位置_ProjectionParams float4 x=1.0(或-1.0,如果正在使用一个翻转的投影矩阵进行渲染),y=Near, z=Far, w=1.0+1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面离摄像机的距离。_Sc原创 2017-04-27 16:21:36 · 6676 阅读 · 0 评论 -
Shader代码重复利用
有时候一段代码,我们可能在不同的地方调用,如果每个地方复制一份,一方面不美观,代码冗余,另一方面,如果这段代码出问题了就gg了,你得找到所有使用的地方,改吧。Shader中的代码也可以模块化的,主要使用define指令。例子如下:创建.cginc文件创建一个myinclude.cginc文件,在该文件中写入如下代码:#ifndef MY_CG_INCLUDE#define MY_CG_INCLUD原创 2017-04-27 16:47:20 · 1607 阅读 · 0 评论 -
cg输入输出匹配规则
最近论坛看到有人提出这样的问题:Shader "Unlit/testinout"{ SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag void vert(in fl原创 2017-05-22 15:31:03 · 1146 阅读 · 0 评论 -
Unity 水波纹Shader
今天来个炫酷的点击屏幕实现水波纹的特效,先上两张效果图。放大下看下细节,当然还有好多效果,自己发挥了。。。直接上代码,注释已经写了哦 Shader "Custom/ClickStyle" { Properties { [PerRendererData]_MainTex("Sprite Texture",2D)="white"{}原创 2017-09-08 17:16:35 · 9454 阅读 · 2 评论 -
Compute Shaders
介绍CPU在面对大规模个体时计算能力就显的不足了,我们知道GPU天生的并行架构给它带了强大的计算能力,那么我们能否用GPU去分担CPU的压力呢,从而摆脱计算的瓶颈。答案是肯定的。官方链接:https://docs.unity3d.com/Manual/ComputeShaders.html看下官网给的定义:Compute shaders: Compute shaders are progra原创 2017-09-18 18:32:39 · 1075 阅读 · 0 评论 -
用Standard核心自定义PBR Shader
上个MMO项目结束有段时间了 ,最近开始新的沙盒项目了,把自己这段时间遇到的问题都整理整理,分享出来。本文主要讲解如何用Unity Standard核心来快速的实现自定义PBR Shader,给大家一些简单的参考意见。话不多说,直接上代码:Shader "Custom/SimplePBRTest"{ Properties { _AlbedoMap("AlbedoMap"...原创 2019-09-23 20:18:50 · 1170 阅读 · 0 评论 -
Shader中表达式和控制语句
新手写Shader时经常困惑在Shader那些语法能用,那些不能用,很纠结,下面就对Shader中表达式和控制语句进行一些总结:关系操作符CG中有6种关系操作符:“<”、“<=”、“!=”、“==”、“>=”、“>”,这个就不用说明含义了吧。CG语言表达式允许对向量使用关系操作,例如:float3 A=float3(0.5,0.1,0.9);float3 B=float3(0.6,-0.1,2.0原创 2017-04-27 13:37:01 · 6633 阅读 · 0 评论 -
Shader中的结构体
描述用法CG语言中支持结构体(structure),Unity中的shader当然也支持了,实际上Shader中的结构体声明、使用和C++非常的类似,但是还是不同的。用法:1. 结构体的声明以关键字 struct 开始,然后紧跟结构体的名字,接下来是一个大括号,并以分号结尾(不要忘了分号)。2.使用“.”引用结构体中的成员变量和成员函数。那么为什么要用结构体呢?其实很简单,方便呀,一次把要用原创 2017-04-27 11:51:37 · 4014 阅读 · 1 评论 -
幽灵着色器
如果人物模型变成鬼片中的幽灵是不是很酷,想想就很激动,下面代码具体的讲解,先上一张图 对,就类似于这种效果的,代码如下:Shader "Custom/MyGhostShader" { Properties { _MainTex ("Main Tex", 2D) = "white" {} //主纹理 _BumpMap("Bump Map",2D)= "b原创 2017-05-03 13:56:19 · 1109 阅读 · 0 评论 -
Hologram Shader
全息图Shader效果图如下: 全息图是啥,自己百度下吧,(单一光照射。 传统的照片呈现的是真实的物理图像,而全息图则包含了被记录物体的尺寸、形状、亮度和对比度等信息。这些信息储存在一个很微小但却很复杂的干涉模式中。这个干涉模式是由激光产生的)Shader代码如下:Shader "Custom/MyHologram" { Properties {原创 2017-05-03 17:37:28 · 2709 阅读 · 0 评论 -
模型各部位自定义颜色Shader
模型的各个部位可以更加需要更换不同的颜色。 大体思路:一张遮罩图,这张图中的rgb颜色各代表不同的部位。然后 把遮罩颜色和主纹理颜色混合。具体Shader代码如下:Shader "Custom/MyCustomColors" { Properties { _MainTex ("Texture", 2D) = "white" {} //主纹理 _原创 2017-05-03 18:10:15 · 2630 阅读 · 5 评论 -
图层颜色叠加
整理了下图层叠加的计算公式都在下面这些教程里:http://www.cgspread.com/3551.htmlhttp://www.68ps.com/zt/CS5/hh_zhengchang.htmhttp://www.jb51.net/photoshop/249182_2.htmlhttps://en.wikipedia.org/wiki/Alpha_compositing比方说两个图层正常叠加原创 2017-05-25 15:51:25 · 1141 阅读 · 0 评论 -
Blend详解
先上一张官方图,看下流程:FragmentShader之后会进行AlphaTest,最后会经过Blending,才会写入缓冲区。Blend 指令默认是关闭的。 Blend OffBlend操作公式:Blend SrcFactor DstFactor这里的SrcFactor和DstFactor参数参见官网:https://docs.unity3d.com/Manual/SL-Blend.html当使用原创 2017-05-25 15:53:41 · 6153 阅读 · 0 评论 -
CG类型
CG类型CG支持7种数据类型:float 32位浮点数half 16位浮点数int 32位整形数fixed 12位定点数bool 布尔数据sampler 纹理对象的句柄 共有:sampler、sampler1D、sampler2D、sampler3D、samplerCUBE、和samplerRECT六种。string 字符串,其实没有必要在CG中用到字符串此外,CG还支持矩阵数据原创 2017-04-26 18:39:23 · 1669 阅读 · 0 评论 -
Shader中用到的各种空间概念
Shader中用到的各种空间概念模型空间每一个物体都有一个以它自己的Pivot为原点的欧几里德三维坐标空间在Unity的脚本中,可以通过tranform.worldToLocalMatrix这个矩阵的MultiplyPoint()或者MultiplyVector()方法,把世界坐标表达的矢量转换为此物体的模型空间表达的矢量。在Shader中,可以通过左乘 _World2Object 这个矩阵来原创 2017-04-26 18:41:40 · 1743 阅读 · 0 评论 -
Unity语义 semantics
刚开始接触Shader时可能对TEXCOORD0、SV_Target、SV_POSITION等等感到困惑,这些字段表示啥意思,下面就细细聊聊它的前生今世。“语义”,顾名思义,诠释某个东西的含义,如果之前接触过CG、HLSL编程的话,就可能很熟悉了。说白了,语义能够让Shader知道从哪里获取数据,并且还知道把输出的数据放到哪里,是不是很聪明。那么在Unity中,用TEXCOORD0来修饰texcoo原创 2017-04-27 11:27:31 · 2703 阅读 · 0 评论 -
模型分解(瓦解、溶解...)Shader
五一放假有事,没有更新blog了,放假回来继续更新,今天带了模型分解、瓦解、溶解的Shader,直接上代码洛,如下:Shader "Custom/Disintegrate"{ Properties { _MainTex ("Texture(RGB)", 2D) = "white" {} //主纹理 _Bumpmap("Bump Texture(R原创 2017-05-03 11:40:30 · 2534 阅读 · 0 评论