![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Unity Shader
文章平均质量分 78
程序乔
码畜一个 没啥介绍的
展开
-
OpenGL学习(二)深度测试与模板测试
首先,再次上一下这个图深度测试在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值(后面会讲),用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。(混合我们之后再说)OpenGL存储它的所有深度信息于一个Z缓冲(Z-buffer)中,也被称为深度缓冲(Depth Buffer)。GLFW会自动为你生成这样一个缓冲(就像它也有一个颜色缓冲来存储输出图像的颜色)原创 2021-03-03 16:57:29 · 630 阅读 · 2 评论 -
OpenGL学习(一)VAO,VBO,EBO
下面,你会看到一个图形渲染管线的每个阶段的抽象展示。要注意蓝色部分代表的是我们可以注入自定义的着色器的部分。渲染管线的东西我就不详细说了,首先我们在openGL绘制图形前,必须先输入一些顶点数据(在OpenGL中我们必须输入NDC坐标,才能可见),然后我们会把它作为输入发送给图形渲染管线的第一个阶段:顶点着色器。它会在GPU创建内存用与储存这些数据,还要要配置OpenGL如何解释这些内存,并且指定其如何发送给显卡,然后顶点着色器就可以处理我们指定的数据了。那么我们如何管理这个内存呢,这里引出这原创 2021-03-02 12:26:34 · 445 阅读 · 0 评论 -
几何着色器描绘模型线框
基本原理就是判断当前像素位置处于三角面里的位置 这个距离小于某个系数就画颜色,然后可以和另一个颜色插值下面是核心代码// Geometry Shader [maxvertexcount(3)] void UCLAGL_geom(triangle UCLAGL_v2g p[3], inout TriangleStream<UCLAGL_g2f> triStream) { //视口坐标 float2 p0 = _ScreenParams.xy * p[原创 2020-10-22 15:53:31 · 392 阅读 · 0 评论 -
Unity Shader 描边加颜色插值实现流光扫描效果
有个项目需要一个人体扫描的效果,我的方法是内部做颜色渐变 外部做一个描边判断 大概效果就是上图这样不停在扫描下面是全部代码// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/XLight" { Properties {原创 2020-09-05 15:25:39 · 803 阅读 · 1 评论 -
通过深度纹理重建像素的世界坐标,生成全局雾效
posteffectBase的代码我没有上传 其实就是封装了几个方法 有兴趣自己实现吧重要地方都有注释有什么问题欢迎评论区提问using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Rendering;public class FogWithDepthTexture : PostEffectsBase{ public Shader fogShader;原创 2020-09-05 15:12:27 · 334 阅读 · 0 评论 -
通过深度纹理计算运动模糊
学shader也有一段时间了 好久没有发博了后面会把中间学习的一些成果 包括效果和源码整理一下发出来 不是很喜欢解释很多 我会写很多注释 有什么问题欢迎评论区讨论具体思路计算深度值 然后得出每个顶点的ndc坐标通过视角,投影的逆矩阵计算出每个顶点的世界坐标计算上一帧和当前帧的顶点位置通过视角投影矩阵得出ndc坐标下的位置差位置差相当于速度对它的相邻像素采样,去平均后得到一个模糊的效果C#代码直接挂摄像机上 所以只有摄像机运动时才会有用 如果是物体运动就会出错using System.Coll原创 2020-08-30 18:35:10 · 344 阅读 · 0 评论 -
外发光Shader里 渲染轮廓的Pass里要用视角方向的相反方向
最近看很多网上外发光shader都是用两个pass的方法做的 但是我发现渲染轮廓的pass用来点乘的视角向量其实是和真正的视角向量是相反的 下面是Unity定义的UnityWorldSpaceViewDir函数中的实现但是外放光中的ViewDir是这样定义的当然上面可以直接用-normalize(UnityWorldSpaceViewDir(i.worldPos))前面加负号就行 表示反方向 但是为什么呢 原因很简单 是因为外发光pass里写的Cull Front 这里表示剔除外表面 所以看到外发光原创 2020-07-23 12:02:15 · 285 阅读 · 0 评论 -
Phong光照模型下的逐顶点和逐像素与Blinn-Phong光照模型的对比
Phong光照模型下的逐顶点逐像素对比Phong和Blinn-Phong光照模型高光对比可以看出逐像素明显要比逐顶点顺滑很多(顶点之间的高光计算是通过线性插值计算的,而实际上高光反射部分的计算是非线性的)Blinn模型比Phong的高光区域要更大亮一点 在实际中一般都用Blinn-Phong光照Blinn光照模型计算高光反射公式//求向量h (视角方向和光照方向相加归一化)fixed3 HalfDir = normalize(viewDir+worldLight);//_LightColor原创 2020-07-12 23:01:03 · 378 阅读 · 0 评论 -
基础shader 画圆
首先画圆需要中心点,半径,我们要做的就是判断像素点和中心点距离是否等于半径 直接上代码frag函数的核心代码//i.vertex是裁剪空间下的顶点坐标.xy就就是屏幕坐标//_MousePos中xy是原点,z是半径if (length(i.vertex.xy- _MousePos.xy) < _MousePos.z) { return col* _PointColor; } else {原创 2020-07-03 17:50:47 · 1403 阅读 · 0 评论 -
shader入门知识
Shader的语言分类:1.GLSL OpenGL语言2.HLSL DirectX语言3.CG 夸平台语言4.ShaderLab Unity中对上述语言的通用封装关于Shader中的属性代码:Shader"Mocha/01 myshader"{//这里制定Shader的名字,不要求与文件名保持一致 Properties{ //属性 _Color("Color",Color)=(1,1,1,1) //颜色float4 _Vector("Vector原创 2020-07-01 15:23:47 · 222 阅读 · 0 评论 -
UnityShader去除像素点的两个方法(溶解)
discard和clip函数float4 frag(v2f i) : COLOR { //_Time.y%_DissolveSpeed始终小于_DissolveSpeed 保证可以循环溶解(值始终在0到1) float DissolveFactor = saturate(_Time.y%_DissolveSpeed/_DissolveSpeed); float noiseValue =原创 2020-06-30 16:07:56 · 1123 阅读 · 0 评论 -
Unity Shader之简单的溶解效果(clip函数的使用)
最近在学Unityshader 发现这个clip函数真是好用clip函数会将参数小于0的像素点直接丢弃掉 比如说我们要做溶解效果 除了mainTexture可以在里面放入一张用于溶解的图 判断这张图的alpha小于某个数的像素点 可以设置一个从0到1的变量用来控制 下面是关键代码主要是fragment函数里 col是主贴图 secondTex是用于溶解判断的图片_CutOutTex是一个0到...原创 2020-03-29 19:22:03 · 15130 阅读 · 1 评论 -
unity 渲染流水线
最近买了一本有关shader的书,总结了以下渲染管线的基本流程原创 2019-10-08 10:55:51 · 211 阅读 · 0 评论