
Shader
文章平均质量分 75
coffeecato
思从深而行从简
展开
-
Unity 反射从入门到跑偏(BoxProjection 到 Fake Interior)
前言:最近在学习反射相关的内容,从反射的原理到Cube Map的生成及使用,Reflection Probe的原理及使用,重点研究了Box Projection Reflection Probe与Fake Interior(假室内效果)的关系,及其背后的原理。运行环境:Unity 2020.3.18f1Render Pipeline: URP测试场景:Unity 3D Sample Scene(URP)环境映射 Environment Mapping环境映射可以分为静态的(Cube Map)与原创 2022-05-16 20:30:00 · 2314 阅读 · 0 评论 -
[Unity]屏幕空间(视口)坐标(viewport coordinate)的几种计算方法对比分析
前言:本本的主要目的在于对比分析几种计算屏幕空间坐标的方法,顺便梳理了一遍坐标在不同阶段的变换。其中特别对比了SV_Postion语义及TEXCOORD0传递参数的异同,同时分析了ComputeScreenPos这个怪异的函数的本质。运行环境:Unity 2019.4.10f1Graphics API: Direct3D11效果图:代码:本文的说明主要与代码相结合,下面的几种方法都亲测可用。// https://blog.youkuaiyun.com/coffeecato/.原创 2022-03-04 13:42:36 · 2699 阅读 · 0 评论 -
使用stencil test实现UI上的“迷雾”效果
0x00 需求在UI上实现一种类似战争迷雾的效果。0x01分析需求战争迷雾是来自于RTS游戏,[此处可以插入链接]并经由MOBA游戏发扬广大的一种在地图上增加一种不透明的迷雾,造成信息的不对称从而增加游戏的趣味性。那么第一个想法是寻找战争迷雾插件,导入,使用之。0x02实现方案对比从实现原理上分类,战争迷雾有两种实现方法:屏幕后处理, 遮罩擦除法屏幕后处理中,最成熟的当属Fog Of War,在Unity Asset Store中搜索,第一个跳出的就是这个插件,作者:Aseh原创 2021-10-26 09:59:34 · 1390 阅读 · 0 评论 -
【Unity Shader】实现粒子根据到摄像机的距离渐变
0x00需求特效同学需要一个能随着距离摄像机距离变化,而变化(颜色)的特效需求。0x01分析需求原创 2021-06-15 20:14:11 · 1995 阅读 · 2 评论 -
【Unity Shader】半透明特效在RenderTexture上的显示问题
0x00现象下图可见,模型的翅膀部分有黑色的矩形。游戏项目中,需要模型显示在UI上,这里采用了RenderTexture的方案,可以参考使用RenderTexture实现3D模型与UI的组合显示。RenderCamera Background(0,0,0,0)0x01寻找原因首先查看RenderTexture的绘制是否正常由于粒子特效常常会对alpha进...原创 2020-03-21 22:27:37 · 10072 阅读 · 8 评论 -
Unity使用替换shader渲染(Rendering with Replaced Shaders)
作用:在渲染时,通过SetReplacementShader控制实时生效的shader,可以在运行时修改部分or全部object的shader来实现特定的效果。函数说明:Camera.SetReplacementShaderpublic void SetReplacementShader(Shader shader, string replacementTag);Descrip...原创 2019-07-08 10:06:41 · 4048 阅读 · 2 评论 -
【Unity Shader】标准光照模型总结
逐顶点与逐像素光照逐顶点光照[per-vertex lighting] [vertex shader]在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色,由于顶点数目往往远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。逐像素光照[per-pixel lighting][fragment shader]以每个像素为基础,得到它的法线(可以是对顶点法线插值得...原创 2019-05-26 21:46:37 · 6220 阅读 · 0 评论 -
GPU图形绘制管线
图形绘制管线的三个主要阶段##1、应用程序阶段:使用高级编程语言(C、C++、Java)进行开发,主要和CPU、内存打交道。诸如碰撞检测,空间八叉树更新,视锥裁剪等经典算法都在此阶段进行。在该阶段的末端,几何体数据(顶点坐标、法线量、纹理坐标、纹理等)通过数据总线传送到图形硬件。2、几何阶段:主要负责顶点坐标变换、光照、裁剪、投影以及屏幕隐射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换...转载 2018-03-08 14:37:51 · 764 阅读 · 0 评论 -
Unity中Sprite和UI Image的区别
coffeecato写在前面: 本文确实不错,作者用以说明自动生成网格的示图非常具有代表性,从drawcall的生成过程分析性能开销的重点,引出了overdraw和达到GPU像素填充率限制的原因,从中也可以看出作者对这个主题的理解颇有深度。查看作者的个人自述,居然是个2012年毕业的小伙子,后生可畏啊!翻译本文对自己也是个考验。 英文水平捉急,如果错误请多多指正。原文:UNITY SPRITES翻译 2017-11-14 23:41:58 · 25192 阅读 · 2 评论 -
【Unity Shader入门练习】Bloom效果
0x00 序言 本节是在 高斯模糊的基础上进行的,稍加修改即可得到Bloom效果。 0x01 效果图 0x02 基本概念 首先根据一个阈值提取出图像中较亮的区域,把它们存储在一张渲染纹理中,再利用高斯模糊对这张渲染纹理进行模糊处理,模拟光线扩散的效果,最后再将其和原图像进行混合,得到最终的结果。 0x03 脚本代码using System.Collections;using Syst转载 2017-11-13 23:47:09 · 1326 阅读 · 0 评论 -
Unity Shader入门基础
0x00 基本概念 “Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适原创 2017-09-03 23:12:07 · 700 阅读 · 0 评论 -
【Unity Shader实战】利用凹凸纹理和边缘光模拟全息投影的效果
0x00 序言 项目需要模型在展示时,可以拥有类似全息投影的效果,类似一些科幻电影或者是高科技的场景。本文分析了如何利用凹凸纹理和边缘光来近似模拟这种效果。 0x01 效果图 0x02 基本概念 本次的shader部分主要修改了surface shader,其中的一些基本概念:SurfaceOutput是预定义的输出结构:struct SurfaceOutput { half原创 2017-09-02 01:11:02 · 6244 阅读 · 0 评论 -
Unity Shader-渲染队列,ZTest,ZWrite,Early-Z
原文地址:Unity Shader-渲染队列,ZTest,ZWrite,Early-Z简介在渲染阶段,引擎所做的工作是把所有场景中的对象按照一定的策略(顺序)进行渲染。最早的是画家算法,顾名思义,就是像画家画画一样,先画后面的物体,如果前面还有物体,那么就用前面的物体把物体覆盖掉,不过这种方式由于排序是针对物体来排序的,而物体之间也可能有重叠,所以效果并不好。所以目前更加常用的方式是z-buffe转载 2017-08-31 23:43:35 · 3499 阅读 · 9 评论 -
【Unity Shader入门练习】高斯模糊
0x00 序言 本文是《Unity Shader入门精要》读书笔记,最近接触到项目中用到了模糊处理,经过查阅资料,发觉模糊处理是屏幕后处理技术中的一种,就从屏幕后处理技术开始学习。[使用的Unity版本:5.6.1f1] 0x01 效果图 0x02 基本概念 卷积(convolution)操作指的是使用一个卷积核(kernal)对一张图像中的每个像素进行一系列操作。卷积核通常是一个四方转载 2017-08-27 23:59:52 · 1470 阅读 · 0 评论 -
【Unity Shader入门练习】调整屏幕的亮度、饱和度和对比度
0x00 序言 本文是《Unity Shader入门精要》读书笔记,最近接触到项目中用到了模糊处理,经过查阅资料,发觉模糊处理是屏幕后处理技术中的一种,就从屏幕后处理技术开始学习。[使用的Unity版本:5.6.1f1]0x01效果图 0x02 屏幕后处理的定义 屏幕后处理,通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像一系列操作,实现各种屏幕特效。 想要实现屏幕后处理的基础在于得到原创 2017-07-31 23:36:15 · 3640 阅读 · 0 评论 -
【Unity Shader】NGUI中图标的灰化处理
NGUI图片灰化无法通过自带的功能实现。 UIButton的disable状态如下图: 如果想实现整体的灰化效果,需要改写NGUI自带的shader文件,修改后的效果如图: 修改NGUI原生的Unlit - Transparent Colored.shader文件Shader "Unlit/Transparent Colored"{ Properties {原创 2017-03-16 00:30:29 · 1873 阅读 · 0 评论