shader

Unity 精灵图集Shader渲染错乱

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-03 16:12:45
原因 在使用 Unity 开发游戏过程中,UI 界面上的表现有着举足轻重的地位,优秀的表现效果可以让游戏增色不少。要让 UI 精灵图片有独特的表现效果,需要给图片加上特定的 Shader 着色器,这样一来就能让这个图片表现出独特的效果,比如:溶解、消失等等。然而,在使用中,因为精灵被打包到图集里面,运行起来的效果大相径庭,Shader 里面 uv 坐标不再是单个图片的坐标了,而是图集里面该图片的坐标,使得 Shader 计算错误,最终渲染错乱。 例子 当前测试版本:Unity 5.3.0 测试工程地址: https://github.com/akof1314/uGUISpriteInAtlasShader 正确的表现: 错误的表现: 包含该图片的图集: 图片位于图集的左下角,进行扭曲效果计算时,使用了图集的中心位置,导致出错。 解决 将单个图片的纹理坐标保存到 UV1 中,传递单个图片的纹理坐标和在图集中纹理坐标的比例关系。 纹理坐标 单个图片的纹理基本是(0,0),(0,1),(1,1),(1,0),UGUI 中图片控件只使用了 UV0,那么就可以将单个图片的纹理保存到 UV1 中。 继承 BaseMeshEffect ,重载 ModifyMesh 方法,代码如下: using UnityEngine; using UnityEngine.UI; public class

【每日一记】unity3d 图片置灰shader

▼魔方 西西 提交于 2019-12-03 16:09:45
项目需要,参考了一下网上的资料,写了一个shader,给按钮置灰。 shader具体实现如下: 2016.07.25补充,支持mask剪裁 Shader "Transparent Colored Gray" { Properties { _MainTex ("Base (RGB), Alpha (A)", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) _StencilComp ("Stencil Comparison", Float) = 8 _Stencil ("Stencil ID", Float) = 0 _StencilOp ("Stencil Operation", Float) = 0 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 } SubShader { Tags { "Queue"="Transparent"

Unity 利用shader将图片设置为灰色不可点击的状态

那年仲夏 提交于 2019-12-03 16:08:50
Shader "UI/GrayTexture"{ Properties { _MainTex("MainTex", 2D) = "black" {} } SubShader { LOD 200 Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } Pass { Cull Off Lighting Off ZWrite Off Fog{ Mode Off } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; fixed4 color : COLOR; }; struct v2f { float4 vertex : SV_POSITION; half2 texcoord : TEXCOORD0; fixed4 color : COLOR; }; v2f o; v2f vert

Unity Shader 基础教程

耗尽温柔 提交于 2019-12-03 16:08:27
Unity-Shader-基础教程 在Github上看到一篇关于Unity-Shader的教程,感觉还不错,作者写的很好,很适合Unity-Shader的基础入门,我在这里翻译一下,分享给大家,英文水平很烂,大致能明白Unity-Shader是什么,渲染管线的工作流程,以及Unity Shader的一些类型和怎样编写Unity Shader。 ( 原文链接 ) 第一部分:什么是Shader? Shader是计算机图形渲染管线的一部分,它是一小段应用程序,告诉计算机在场景中怎样对物体渲染和着色。这个过程包括计算颜色和光照值,并将其给予对象,以至于对象被显示在屏幕上。和上面一样,Shader也被用来创建游戏中的一些特殊的和后期处理效果。 在现代游戏引擎中(包括Unity),Shader运行在可编程的GPU渲染管道中,在GPU中允许并行运行,并且能够很快速的进行许多着色计算。 第二部分:渲染管道 为了学习Shader,我们将简单的了解渲染管道,我们将在本教程中讨论下面这张图片: 我更加倾向把Shader看做是由一种信息类型(模型数据、颜色等等)到另外一种信息类型(像素/片元)的变换,对象数据继承与对象本身,例如模型中的点、法线、三角形、UV坐标等等。我们可以把自定义数据/传递到shader中使用,颜色、纹理、数字等等这些。 着色器流水线的第一步是顶点函数。正如你所知的,顶点就是一些点

UGUI-图片黑白Shader

三世轮回 提交于 2019-12-03 16:08:14
Shader: // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "UI/Default Grey" { Properties { [PerRendererData] _MainTex ( "Sprite Texture" , 2 D) = "white" {} _Color ( "Tint" , Color) = ( 1 , 1 , 1 , 1 ) } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" "CanUseSpriteAtlas" = "True" } // 源rgba*源a + 背景rgba*(1-源A值) Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata_t { float4 vertex : POSITION; float4 color

unity shader 图片置灰

China☆狼群 提交于 2019-12-03 16:07:55
Shader "Unlit/Gray" { Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} _Color("Tint", Color) = (1,1,1,1) _StencilComp("Stencil Comparison", Float) = 8 _Stencil("Stencil ID", Float) = 0 _StencilOp("Stencil Operation", Float) = 0 _StencilWriteMask("Stencil Write Mask", Float) = 255 _StencilReadMask("Stencil Read Mask", Float) = 255 _ColorMask("Color Mask", Float) = 15 [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0 } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane"

unity Shader 内置函数

家住魔仙堡 提交于 2019-12-03 16:06:51
一、数学内置函数 1、Step(a,x):如果x<a返回0;如果x>或=a返回1 2、Clamp(x,a,b):如果x<a返回a;如果x>b返回b;如果在a和b之间就返回x 3、smoothstep(min,max,x):返回的值为–2*(( x – min )/( max – min ))3 +3*(( x – min )/( max – min ))2 4、lerp(a,b,f):线性插值函数,返回值为(1-f)*a+b*f 5、三角函数sin、cos 6、saturate(x): clamp x to range [0,1]。将x裁剪到0和1之间,大于1取1,小于0取0。在half-lambert中会经常用到 7、normalize(x): return a normalized vector。返回一个归一化的向量。通常在fragment shader中使用 8、dot(x, y): 两个向量的点乘结果。|a||b|cos(a)。光照计算中经常用到 9、mul(x, y): 矩阵乘法,结果依然为一个矩阵。[m, n] [n, q]=>[m,q],前行乘后列。坐标空间转换中经常使用 10、reflect(i, n): 得到反射光线的方向 11、refract(i, n, R): 得到折射光线的方向。需要注意的是入射光线和法线都需要归一化,R为折射率

Unity Ugui Image置灰Shader,支持Mask裁剪

时间秒杀一切 提交于 2019-12-03 16:05:59
Shader "UI/ImageGreyShader" { Properties { [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} _Color("Tint", Color) = (1,1,1,1) //MASK SUPPORT ADD _StencilComp ("Stencil Comparison", Float) = 8 _Stencil ("Stencil ID", Float) = 0 _StencilOp ("Stencil Operation", Float) = 0 _StencilWriteMask ("Stencil Write Mask", Float) = 255 _StencilReadMask ("Stencil Read Mask", Float) = 255 _ColorMask ("Color Mask", Float) = 15 //MASK SUPPORT END } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" "CanUseSpriteAtlas" = "True"

Shader自学笔记 3.2.2用世界空间计算法线纹理

一个人想着一个人 提交于 2019-12-03 15:48:19
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld' Shader "Custom/texture/test3" { // 定义纹理属性 增加法线纹理 Properties { _Color ( "Color" , Color) = ( 1 , 1 , 1 , 1 ) _MainTex ( "Main Tex" , 2 D) = "white" {} _BumpMap( "Normal Map" , 2 D)= "bump" {} _BumpScale( "Bump Scale" ,Float)= 1.0 _Specular( "Specular" ,Color)=( 1 , 1 , 1 ) _Gloss ( "Gloss" , Range( 8.0 , 256 )) = 20 } SubShader { Pass{ Tags { "LightMode" = "ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag #include "Lighting.cginc" fixed4 _Color; sampler2D _MainTex; // 纹理缩放平移属性 float4 _MainTex_ST; sampler2D

Shader自学笔记 3.4.1 shader实现photoshop 中颜色混合模式

可紊 提交于 2019-12-03 15:48:07
photoshop中的功能其实是封装了图形学算法,所以理论上其中的功能都可以用unity shader实现,下面模拟一下photoshop颜色混合模式中著名的加色模式和减色模式,也就是模拟自发光物体显像原理和反射光显像原理。 下面是一些常见混合模式计算公式: 上面的计算Unity已经封装,但是看看计算方法更有助于理解。 Shader "Unity Shaders/BlendShader/Blend Operations" { Properties { _Color ( "Color Tint" , Color) = ( 1 , 1 , 1 , 1 ) _MainTex ( "Main Tex" , 2 D) = "white" {} _AlphaScale ( "Alpha Scale" , Range( 0 , 1 )) = 1 } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" } Pass { Tags { "LightMode" = "ForwardBase" } ZWrite Off // 正常,透明度混合 // // Normal // Blend SrcAlpha OneMinusSrcAlpha // 柔和叠加 //