unityshader专题

UnityShader源码2017---学习笔记与自我拓展046

源自Internal-Flare,Internal-DepthNormalsTexture,Internal-ConvertTexture 忽略Internal-Flare,着实忽略 Internal-DepthNormalsTexture中 是各种RenderType的SubShader COMPUTE_VIEW_NORMAL  在UnitCG.cginc里找到了定义 #define

UnityShader源码2017---学习笔记与自我拓展045

源自Internal-BlitCopy,Internal-BlitCopyDepth,Internal-CombineDepthNormals 讲一下unity的潜规则 Shader "Hidden/Internal-CombineDepthNormals" {} 只有以Hidden/开头的shader,都会在shader列表中隐藏起来。   BlitCopy从名字上看应该是Blit()

UnityShader源码2017---学习笔记与自我拓展044

源自 Particle Anim Alpha Blend   这是一个伟大的shader。这里不讲原理,请移步这里,这里,这里,和这里。   假设已经看懂了上面的那4篇。 我们看一下这个shader的用法。 struct appdata_t {float4 vertex : POSITION;fixed4 color : COLOR;float4 texcoords : TEXCOOR

UnityShader源码2017---学习笔记与自我拓展043

源自Particle Add , Particle Alpha Blend,Particle AddMultiply,Particle AddSmooth,Particle Blend,Particle VertexLit Blended 这几个shader的不同点基本上就在blend和alpha的计算上。   好多东西一直都不愿意去写,但是群里好多人,每隔一段时间就会问一次。。。o(︶︿︶

UnityShader源码2017---学习笔记与自我拓展042

源自Skybox,Skybox-Cubed,Skybox-Procedural 先看一下SkyBox这个shader里的一个方法 float3 RotateAroundYInDegrees (float3 vertex, float degrees){float alpha = degrees * UNITY_PI / 180.0;float sina, cosa;sincos(alpha,

UnityShader源码2017---学习笔记与自我拓展041

源自Lightmap-Bumped,Lightmap-BumpSpec,Lightmap-Diffuse,Lightmap-Glossy,Lightmap-VertexLit _LightMap ("Lightmap (RGB)", 2D) = "lightmap" { LightmapMode } 很扎眼的LightmapMode。。。但是unity就是没有说明这个。。。。或许我查找的方式不

UnityShader源码2017---学习笔记与自我拓展039

源自 Illumin-Bumped,Illumin-BumpSpec,Illumin-Diffuse,Illumin-Glossy,Illumin-Parallax,Illumin-ParallaxSpec,Illumin-VertexLit 记得很久很久以前。。。。long long ago 那还是4.x的年底,shader中如果这么写 Shader "Self-Illumin/New U

UnityShader源码2017---学习笔记与自我拓展038

源自Flare 这个,就是一个ZTest Always Blend One One的一个普通的shader 简单写点别的把, 试一下Unity的len Fare吧 新建一个Asset-------Lens Fare,各参数的意义看API吧 简单的设置一下       然后把这个flare扔个一个not important 的point light上 结果就是这样的 其实

UnityShader源码2017---学习笔记与自我拓展037

源自Decal 只是单独这个shader,其实没有什么特别的,就是用DecalTex的A通道,去线性插值maintex和decaltex的rgb。   这里重点说一下这篇文章里的思路 这里先不说NormalCopy的由来,等写CB的时候在一起说吧。 先来推算一下computescreenpos的吧。权当给自己捋一遍。 inline float4 ComputeScreenPos(flo

UnityShader源码2017---学习笔记与自我拓展036

源自Normal-Bumped,Normal-BumpSpec,Normal-Diffuse,Normal-DiffuseDetail,Normal-DiffuseFast,Normal-Glossy,Normal-Parallax,Normal-ParallaxSpec,Normal-VertexLit 一下可以忽略这么多shader有点高兴,简单的看一下个别shader里藏着的个别新鲜toy

UnityShader参数语法总结

[Space()] 作用:在Inspector面板中的字段或字段组之间增加垂直空间。 数值参数:[Space()]中的参数指定了要添加的像素单位(或Unity的GUI单位)的空间量。如果不指定数值,默认是8个像素。 放置位置:它直接放置在要影响的变量或属性的上方。 public class ExampleScript : MonoBehaviour{[Header("设置")]public f

【UnityShader入门精要学习笔记】第十六章 Unity中的渲染优化技术 (上)

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 移动平台上的优化影响性能的因素渲染统计窗口性能分析器帧调试器减少DrawCall的数量关于渲染相关数据结构的说明批处理动态批处理 静态

UnityShader实例18:火焰材质

火焰材质 概述        3D游戏中,火焰特效是一种3D游戏中的一种常见特效,通常是使用粒子播放器播放序列帧或者直接使用粒子模拟,在本文中将实现一个区别于这两种方法的火焰效果(如下图),这个火焰的效果来源于一个朋友推荐给我的文章,是一个老外的作品(演示效果和源代码),效果非常不错,还模拟了风的效果,美中不足的是这个shader只支持target 3.0以上,鉴于此我做一些修

UnityShader实例16:屏幕特效之径向模糊(Radial Blur)

径向模糊(Radial Blur) 概述        径向模糊,是一种从中心向外呈幅射状的逐渐模糊的效果(如下图),在图形处理软件photoshop里面也有这个模糊滤镜。而在游戏中常常用来模拟一些动感的效果,如鬼泣4中的场景切换特效,和一些技能打击特效;赛车游戏也尝用来模拟动感模糊,如狂野飙车,极品飞车等。本例将实现一个类似效果适用于手机平台的径向模糊效果,将开放模糊

UnityShader实例15:屏幕特效之Bloom

Bloom特效 概述        Bloom,又称“全屏泛光”,是游戏中常用的一种镜头效果,是一种比较廉价的“伪HDR”效果(如下右图);使用了Bloom效果后,画面的对比会得到增强,亮的地方曝光也会得到加强,画面也会呈现一种朦胧,梦幻的效果,婚纱摄影中照片处理经常用到这种类似处理效果。Bloom效果一般用来近似模拟HDR效果,效果也比较相向,但实现原理却

UnityShader实例13:屏幕特效之均值模糊(Box Blur)

均值模糊(Box Blur) 概述 由于公司手游项目需求,需要一个适合手机平台的模糊效果,同时需要开放一个参数便于调节模糊值。我首先想到的就是ps里面的均值模糊。查资料可以知道均值模糊是一种快速的图像模糊技术,相比与传统的卷积模糊(如高斯模糊),均值模糊可以更加有效率的完成对图像模糊。在unity官方自带imageeffect包也有一个blur的屏幕特

UnityShader实例12:屏幕特效之马赛克(Mosaic)材质

马赛克(Mosaic)材质 概述 马赛克(Mosaic),估计是大伙平时很常见最讨厌的图片处理手段,嘿嘿,没错我说的就是"打码"。好了,正经点,马赛克指现行广为使用的一种图像(视频)处理手段,此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊看上去有一个个的小格子组成,便形象的称这种画面为马赛克。其目的通常是让图像大规模的降低图像()视频分辨率,

UnityShader实例11:积雪材质

积雪材质 概述 积雪材质是我自己给这个材质取的名字,既然是积雪,那顾名思义,雪是从天而降的,因此积雪都是在物体朝上的表面;不管你的模型怎么摆放 ,雪都保证是积在物体朝上(在unity里就是y轴正方向)的表面,如下图所示: 实现原理 要保证向上的面有积雪,其实就是模型表面的法线方向与世界坐标空间的Y轴正方

UnityShader实例07:在shader调用unity内置lightmap和light Probes

在shader调用unity内置lightmap和Light Probes 在编写unity shader的时候,有时候会有需求,希望写的shader能支持unity内置lightmap或者light probe (灯光探测器)。如果是用surface 编写的话,这些自然不用考虑,unity会自动编译支持,但如果是用vert&frag编写shader,这些需要自己添加相关代码调用了 。

UnityShader实例06:UV动画

UV动画 UV动画,顾名思义,就是针对UV做的动画。在游戏中,一些动态水面,飞流直下的瀑布,流动的岩浆,跳动的火焰等等,很多都是通过操作UV做的动画。在unity中我可以实用挂载脚本或者直接针对UV key动画帧做动画操作,而在本文中将通过shader编写实现三个比较常见的UV动画方式: 1.UV位移动画 2.UV序列帧动画 3.UV旋转动画 先从UV位移动画开始 我

【UnityShader】图片圆角

1.需求         我们在开发的时候,有时候一些按钮或者菜单栏的边角是直角的需要改成圆角,但是让美术重新绘制耽误时间不说也确实没必要,这个时候我们不妨使用一个简单的shader去解决这个问题,下面我们就讲讲这个shader要如何实现。 需求1:可以将图片四角任意一角从直角变为圆角,可控制圆角大小 需求2:在需求一的基础上可以选择是否给图片加上边框,颜色可变 附加小需求:可更改图片透明

【UnityShader入门精要学习笔记】第十章 高级纹理(2)渲染纹理

本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注项目源码一堆新手会犯的错误潜在的太监断更,有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 渲染纹理镜子效果玻璃效果渲染纹理 vs GrabPass 程序纹理在Unity中实现简单的程序纹理Unity的程序纹理

UnityShader实现百叶窗效果,主要通过shader实现C#只是做开关控制

shader实现以上百叶窗效果 看到一篇文章弄的比较复杂,觉得可以都通过shader来实现,就动手了。 shader定义了2张texture,自己随便找2张图片拖进去就行。   Shader "Unlit/NewUnlitShader"{Properties{_MainTex ("Texture", 2D) = "white" {}_MainTex2 ("Texture2", 2D)

UnityShader(十七)透明效果

前言: 在实时渲染中实现透明效果,通常会在渲染模型时控制它的透明通道(Alpha Channel)。当开启透明混合后,一个物体被渲染到屏幕上时每个片元除了颜色值和深度值外,还有一个透明值,1表示像素完全不透明,0表示完全透明。 Unity中通常有两种方法实现透明效果: 1.使用透明测试(Aplha Test),这种方法其实无法实现真正的半透明效果 2.透明度混合(Alpha Blendin

UnityShader(十六)凹凸映射

前言: 纹理的一种常见应用就是凹凸映射(bump mapping)。凹凸映射目的就是用一张纹理图来修改模型表面的法线,让模型看起来更加细节,这种方法不会改变模型原本的顶点位置(也就是不会修改模型的形状),只是让模型看起来凹凸不平而已。 有两种主要的方法可以用来进行凹凸映射: 1.用一张高度纹理(height map)来模拟表面位移,然后得到修改后的法线值,也被称为高度映射(height ma

UnityShader 从入门到盖棺(二)

前言  这是我入门学习笔记的第二篇。这篇开始,我们会逐渐做一些更贴近实际的效果。而不是和上周那个球体球体,随便输出点莫名其妙,妙不可言的颜色(✿◕‿◕✿)。  另外,本章节可能还会稍微提及上一章的代码,但是后续可能会逐渐跳过大量的代码来篇幅。毕竟我想让读者关注到本章更核心的内容,而不是一直重复某些事情。如果读者想要获取完整代码甚至整个场景,可以到我的github上面去下载。 贴图和lam