UnityShader
leileilcy
The better you understand what you are doing, the better you will do it.
展开
-
Unity Shader 从未入门到已放弃(十八)--高级 亮度、饱和度、对比度
调整亮度、饱和度和对比度屏幕后处理效果:指在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列的操作,实现各种屏幕特效。因此首先需要得到渲染后的屏幕图像,Unity提供了一个方便的接口——OnRenderImage。但在进行屏幕后处理之前,我们需要检测一切条件是否满足,例如当前平台是否支持渲染纹理和屏幕特效,是否支持当前使用的UnityShader等。因此先创建一个基类用于检测条件:...原创 2019-07-02 11:02:19 · 337 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(九)--中级
更复杂的光照(一)一个融合了光源、阴影和光照等得标准光照着色器,使用了Phong模型。Shader "My/BumpedDiffuse" { Properties { _Color("Color Tint", Color) = (1,1,1,1) _MainTex("Main Tex", 2D) = "White" {} _BumpMap("Normal Map", 2D)...原创 2019-06-19 16:39:07 · 146 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十)--中级
更复杂的光照(二)使用Blinn-Phong模型Shader "My/Bumped Specular" { Properties{ _Color("Color Tint", Color) = (1, 1, 1, 1) _MainTex("Main Tex", 2D) = "white" {} _BumpMap("Normal Map", 2D) = "bump" {} ...原创 2019-06-20 09:47:20 · 272 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十一)--中级
反射Shader "myShader/Reflection"{ Properties { _Color("Color Tint", Color) = (1,1,1,1) _ReflectColor("Reflection Color",Color) = (1,1,1,1) _ReflectAmount("Reflect Amount", Range(0,1)) = 1 ...原创 2019-06-26 16:30:40 · 118 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十二)--中级
菲涅尔反射菲涅尔反射描述了一种光学现象,即当光线照射到物体表面上时,一部分发生反射,一部分进入物体内部,发生折射或者散射。被反射的光和入射光之间存在一定的比例关系,这个关系可以通过菲涅尔等式进行计算。Shader "myShader/Fresnel"{ Properties { _Color("Color Tint", Color) = (1,1,1,1) _Fresn...原创 2019-06-27 10:39:00 · 152 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十三)--中级
镜子效果使用一个摄像机,使得它显示的图像是镜子图像,但需要它显示的图像用于渲染纹理,因此需要一个rendertexture来接收其图像。显示时需要在水平方向上翻转。Shader "myshader/Mirror"{ Properties { _MainTex("Main Tex", 2D) = "White"{} } SubShader { Tags{"Render...原创 2019-06-27 11:39:16 · 126 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十四)--中级
玻璃效果当我们在shader中定义了一个GrabPass后,unity会把当前屏幕的图像绘制在一张纹理中,以便我们在后续的pass中可以访问它。我们可以使用GrabPass来对物体后面的图像进行更复杂的处理,但需要额外小心物体的渲染队列设置。尽管代码不包含混合指令,但仍需要把渲染队列设置成透明队列。Shader "myShader/GlassRefraction"{ Properti...原创 2019-06-29 10:26:51 · 159 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十五)--中级
简单的程序纹理程序纹理是指那些由计算机生成的图像,我们通常使用一些特定的算法来创建个性化的图案或者非常真实的自然元素。使用的shader是之前用到过得一个纹理光照计算,然后创建一个cs代码,并赋给立方体来生成纹理:using System.Collections;using System.Collections.Generic;using UnityEngine;[Execu...原创 2019-06-29 11:45:00 · 292 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十六)--中级 纹理动画
纹理动画 序列帧在各种资源都比较局限的平台上,我们往往会使用纹理动画来代替复杂的粒子系统。我们需要一张包含关键帧图像的图像。Shader "myShader/ImageSequenceAnimation"{ Properties { _Color("Color Tint",Color) = (1,1,1,1) _MainTex ("Main Tex", 2D) = "w...原创 2019-06-29 15:10:52 · 145 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(八)--初级
双面渲染的透明效果在之前实现的透明效果中,都无法观察到正方体的内部以及背面情况。这是因为默认情况下引擎剔除了物体背面的渲染图元。如果我们想得到双面的渲染效果,可以使用Cull指令来控制需要剔除哪个面的图元。透明度测试的双面渲染只需要在之前的Pass中,添加上Cull Off,直接关闭剔除功能。得到如图效果:透明度混合的双面渲染因为透明度混合关闭了深度写入,所以会更复杂一...原创 2019-06-18 10:23:56 · 159 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(七)--初级
透明效果渲染顺序Unity为了解决渲染顺序的问题提供了渲染队列这一解决方案。我们可以使用SubShader的Queue标签来决定我们的模型将归于哪个渲染队列。透明度测试AlphaTest,透明度混合Transparent。透明度测试 SubShader{ Tags{"Queue" = "AlphaTest" "IgnoreProjector" = "True" "R...原创 2019-06-17 11:26:33 · 185 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(六)--总结
基础知识总结篇数学函数相关normalize(<Vector v>): 归一化向量,返回一个和参数方向相同但长度为1的向量。dot(<Vector v1>,<Vector v2>):向量点积,返回一个标量,用于求出一个向量到在另一个向量上的投影值、判断两个向量是否垂直、以及两个向量间加载的余弦值(使用两个归一化向量做点积)。cross(<...原创 2019-06-15 10:57:11 · 622 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十九)--高级 边缘检测
卷积常见的边缘检测算子边是如何形成的:如果相邻像素之间存在明显差别的颜色、亮度、纹理等属性,我们会认为他们之间存在一条边界。这种相邻像素之间的差值可以用梯度来表示,边缘处的梯度值通常较大。我们需要对每个像素进行一次卷积计算,得到两个方向上的梯度值,再计算得到整体梯度值:实现首先还是需要OnRenderImage函数来进行真正的特效处理:[Range(0.0f, 1...原创 2019-07-02 14:27:42 · 498 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(二十一)--高级 Bloom效果
Bloom.cs:private void OnRenderImage(RenderTexture source, RenderTexture destination) { if (material != null) { material.SetFloat("_LuminanceThreshold", luminanceThre...原创 2019-07-09 13:49:08 · 1175 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(二十)--高级 高斯模糊
高斯滤波高斯模糊使用了卷积计算,它使用的卷积核叫高斯核。高斯核的维数越高,模糊程度越大。实现首先创建cs脚本,利用两个临时缓存在迭代之间进行交替。private void OnRenderImage(RenderTexture source, RenderTexture destination) { if (material != null) ...原创 2019-07-04 11:10:03 · 342 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(一)--基础
以此开始记录和总结一下学习仙德尔的情况。数学篇矩阵是非常重要的一项数学知识,我们需要通过矩阵来计算平移、缩放、旋转等变换,更需要通过矩阵在不同的坐标空间中进行变换。为何又需要那么多的坐标空间呢?因为我们需要在不同的情况下使用不同的坐标,因为一些特定的概念只有在特定的空间坐标系下才有意义,才更容易理解。比如,你描述门的位置,是将坐标放在房间里,你描述你耳朵的位置,就需要将坐标放在脸上。因...原创 2019-06-11 16:01:00 · 292 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(二)--初级
第一个顶点/片元着色器Shader "Unity Shaders/SimpleShader" { Properties{ _Color ("Color Tint",Color) = (1.0,1.0,1.0,1.0) } SubShader{ Pass{ CGPROGRAM //包含文件 使我们可以使用unity提供的一些很有用的变量和帮助...原创 2019-06-12 10:35:49 · 163 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(三)--初级
漫反射与高光反射1.漫反射(逐顶点光照、逐像素光照、半兰伯特模型)逐顶点光照中,漫反射部分的计算都在顶点着色器中进行 v2f vert(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;...原创 2019-06-13 11:17:29 · 525 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(四)--初级
纹理基础之凹凸映射这种方法并不会真正的改变模型的顶点,而是让模型看起来好像是凹凸不平的1.高度纹理高度图中存储了强度值,可以非常直观的看到一个模型表面的凹凸情况,但是计算更加的复杂,在实时计算的时候不能直接得到表面法线,而需要由像素的灰度值计算而得,因此消耗更多性能。 高度图: 2.法线...原创 2019-06-14 11:54:56 · 178 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(五)--初级
遮罩纹理遮罩允许我们保护某些区域,使他们免于某些修改。为了得到更加细腻的效果,我们使用遮罩,使得某些地方反光强烈一些,某些地方弱一些。使用遮罩纹理的一般流程是:通过采样得到遮罩纹理的纹素值,然后使用其中某个或某几个通道的值来与某种表面属性相乘,这样,当该通道的值为0时,可以保护该表面不受该属性的影响。实践: v2f vert(a2v ...原创 2019-06-15 10:08:52 · 176 阅读 · 0 评论 -
Unity Shader 从未入门到已放弃(十七)--中级 顶点动画
2D水流其原理通常是使用正弦函数来模拟水流的波动效果。Shader "myShader/Water"{ Properties { _MainTex("Main Tex", 2D) = "white" {} _Color("Color Tint", Color) = (1, 1, 1, 1) _Magnitude("Distortion Magnitude", Float...原创 2019-07-01 11:31:22 · 246 阅读 · 0 评论