Unity Shader
文章平均质量分 81
Unity Shader学习与实践
长生但酒狂
热爱游戏开发、图形学、Shader
展开
-
Unity Shader - PBR相关公式及代码
简单记录一下PBR相关的公式及实现代码,方便后面自己复制粘贴 -。当然这些公式都是在各个文章和引擎源码复制粘贴而来的,仅供参考。ヾ(•ω•`。)PBRPBR 由直接光照和间接光照组成。判断一种PBR光照模型是否是基于物理的,必须满足以下三个条件:基于微平面(Microfacet)的表面模型。能量守恒。应用基于物理的BRDF。渲染方程(The Rendering Equation):L0=Le+∫Ωfr⋅Li⋅(wi⋅n)⋅dwiL _ { 0 } = L _ { e } + \int原创 2022-03-06 16:47:58 · 7323 阅读 · 0 评论 -
Unity Shader - 水体交互
水体交互效果在游戏中是一个很常见的需求,这里简单实现一个可交互的水体。本篇文章主要是介绍水体交互的实现思路,水体的渲染这里就不再详细介绍,网上很多关于水体的渲染方法很多,可以自己百度、Google了解一下,这里不会过多提及。效果图。先放一张最终的GIF效果图!实现思路原理其实非常简单,就是通过粒子系统不断发射带有波纹法线贴图的面片,然后把这些法线渲染一张RenderTexture传输到Water Shader中,然后和Water Normal 叠加即可形成水波效果。实现步骤可以简单分为:简原创 2021-12-19 17:29:53 · 7032 阅读 · 0 评论 -
Unity Shader - 屏幕空间次表面散射
屏幕空间次表面散射前言在上篇文章中我们简单实现了一个伪次表面散射模拟效果,这次我们就基于屏幕空间模糊的方式来模拟皮肤的次表面渲染。实现大致流程:提取次表面散射对象Mask遮罩。高斯模糊处理 + Mask遮罩。最后和原图叠加。1.提取皮肤遮罩这里为了简单方便,直接采用Command Buffer提取需要次表面散射的对象Mask遮罩。注意这里用了一个纯色Shader处理C# 代码:// 纯色ShaderShader purecolorShader = Shader.Find("l原创 2021-10-01 11:31:29 · 1585 阅读 · 0 评论 -
Unity Shader - 伪次表面散射模拟
前言感觉好久没更新博客了,这段时间决定重新把写博客的习惯捡起来!前段时间学习研究了一下次表面散射相关的知识,这次我们就在Unity中简单实现一下该效果。如果哪里有错误的地方,希望大家能够指出,多多讨论。次表面散射(Subsurface scattering)次表面散射是光在传播时的一种现象,表现为光在穿过透明物体表面后,与材料之间发生交互作用而导致光被散射开来,光路也在其他的位置穿出物体。光一般会穿透物体的表面,在物体内部在不同的角度被反射若干次,最终穿出物体。次表面散射在三维计算机图形中十分重要,.原创 2021-09-11 17:35:18 · 2545 阅读 · 0 评论 -
Unity Shader - Shader常用属性标签(材质属性面板标签)
记录分享一下一些Shader常用的属性标签(材质属性面板标签)如图:代码:Shader "lcl/ShaderPropertyDrawer/ShaderEnum"{ // 材质属性面常见类型 Properties { [Header(Custom)] // 自定义枚举 [Enum(CustomEnum1,1,CustomEnum2,2)] _CustomEnum ("CustomEnum", Float) = 1原创 2021-08-13 13:10:28 · 3215 阅读 · 0 评论 -
Unity 内置渲染管线转URP
一、CG 替换 HLSL未使用光照计算的shader升级后不做修改仍然可以使用,但是可能会不兼容SRP Batcher,所以仍然需要修改,使用了光照计算的shader必须要修改。SubShader的Tags中增加 “RenderPipeline”="UniversalPipeline"声明要保证多pass物体正确绘制,需要确保有个pass打上 UniversalForward 的tag,其余pass有 SRPDefaultUnlit的tag也行,没有也行。HLSLPROGRAM 替原创 2021-05-18 19:32:06 · 5970 阅读 · 7 评论 -
Unity Shader - Bloom(光晕、泛光)
前言Bloom(光晕)是一种计算机图形效果,用于视频游戏,演示和高动态范围渲染(HDRR)中,以再现真实相机的成像伪像。该效果会产生从图像中明亮区域的边界延伸的条纹(或羽毛),从而造成超亮的光使摄像机或眼睛捕捉场景的幻觉。效果对比如下:左边是原图, 右边Bloom处理后的原理:Bloom的实现原理非常简单,大致分为三步:对需要处理的图像经过亮度提取, 并且通过一个阙值来控制亮度对经过亮度提取后的图像进行模糊处理(这里是采用高斯模糊)最后再叠加原图和模糊处理后的图像,输出即可实现下面原创 2020-05-14 10:02:10 · 5402 阅读 · 0 评论 -
Unity Shader - 放大镜
前言今天闲来无事,实现了一个简单的放大镜特效。效果图如下:思路思路其实很简单,大致分为两个步骤:先实现整体放大效果;最后在一定范围内放大(这里是圆)既然是放大镜,那也就是对图像的处理, 这里我们就需要用到后期处理了,在Camera上面挂一个c#脚本来捕获需要渲染的图像,然后通过shader处理后渲染。实现1.首先我们来实现一下整体放大的效果:思路非常简单:沿着 中心点到...原创 2020-04-08 17:55:17 · 3938 阅读 · 4 评论 -
Unity Shader - HSV 和 RGB 的相互转换
前言对于颜色值,RGB 可能是我们接触最多的颜色模型,图像中的任何颜色都是由红色(R)、绿色(G)、蓝色(B) 这三个通道合成的,这三种颜色可以组合成几乎所有的颜色。然而,它并不直观,比如我随便说一个rgb值,你能猜到他是什么颜色吗?几乎不可能,所以,后面引入了HSV、HSL等颜色模型。HSV 相对于 RGB 来说 是一种更加直观的颜色模型,HSV更加符合我们人类视觉。HSL和HSV 概念...原创 2020-03-25 18:33:48 · 3422 阅读 · 0 评论 -
Unity Shader - 径向模糊
前言Hello!大家好,这里先说一个题外话哈,话说有没有公司现在招U3D游戏开发的呢?哈哈,最近我也开始重新找工作了,有没有小伙伴推荐一下呀?坐标 深圳 ,感谢!( 我的微信:Li1076984375)径向模糊言归正传,前面我们实现了边缘检测,模糊处理等后期效果,今天我们就来实现一下径向模糊!径向模糊是一种从中心向外呈幅射状的逐渐模糊的效果。如果经常玩游戏的小伙伴都知道径向模糊其实在游戏...原创 2020-03-21 16:49:04 · 1570 阅读 · 0 评论 -
ShaderToy 转换到 Unity中(超级方便的一个工具)
ShaderToy 转换到Unity中ShaderToy 我们都知道它是一个神奇的网站,在上面有着许多炫酷的特效,各路大神集聚。但是里面shader都是GLSL写的。如果我们想把ShaderToy上的特效移植到Unity中就需要我们手动去修改代码,修改方法无非就是:定义一系列宏来和ShaderToy中的GLSL衔接,如下模板:Shader "Shadertoy/Template" { ...原创 2020-03-16 14:51:30 · 4306 阅读 · 7 评论 -
Unity Shader - 边缘检测
边缘检测(英语:Edge detection)是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征检测中的一个研究领域。原理边缘检测实质上就是通过对图像的卷积的结...原创 2020-03-04 16:34:43 · 1555 阅读 · 0 评论 -
Unity Shader -描边(后期处理)
上一篇文章中我们通过两种方式分别实现了描边效果,他们各有优缺点,也比较简单,今天我们来通过后期处理这种方式来实现描边效果,相对于之前两种实现方式要稍微复杂一点。最终效果图如下:该思路主要还是参考实现思路:...原创 2020-01-17 00:33:23 · 3820 阅读 · 2 评论 -
Unity Shader - 均值模糊和高斯模糊
说到模糊处理我们一般就会想到多种模糊处理方法,如均值模糊,高斯模糊等等方式。通常用它们来减少图像噪声以及降低细节层次。这种模糊技术生成的图像,其视觉效果就像是经过一个半透明屏幕在观察图像,这与镜头焦外成像效果散景以及普通照明阴影中的效果都明显不同。均值模糊和高斯模糊它们各有各的优势,均值模糊处理速度更快,实现也相对简单一些,高斯模糊处理效果更好,性能差点,实现相对复杂点。我们先来实现一下相对...原创 2020-01-15 00:17:32 · 3498 阅读 · 1 评论 -
Unity Shader - 描边
我们都知道描边效果在游戏中很常见,比如选中某个角色时需要凸显该模型,就会采用描边效果,今天我们就来实现一下该效果。描边的效果实现方式有很多种,就以目前我知道的就有三种方式。一:模型扩张大致思路:需要两个pass,一个pass渲染背面并且沿着法线方向扩张,用来作为轮廓,一个pass渲染正面,正常渲染。核心:主要在第一个pass的顶点着色器中对顶点的偏移,偏移方向为法线方向。话不多说直接上代...原创 2019-12-31 22:58:43 · 948 阅读 · 1 评论 -
Unity Shader - 遮罩效果
已经有二十天没有更新博客了,这段时间也一直在学习WebGL shader,后续可能也会更新一些WebGL相关的博客。转入正题,我们来说说今天要实现的一个shader效果 - 遮罩。其实遮罩原理非常简单,把源像素和遮罩图形像素相乘就行了。大致效果如下:准备工作1.创建一个场景和一些物体(cube,sphere等)。2.创建一个新的C#脚本和一个Shader,命名为Mask。3.把Ma...原创 2019-12-24 19:41:42 · 5407 阅读 · 5 评论 -
Unity Shader - 基础光照之高光反射(Specular)
镜面高光上节学习了漫反射,这节我们来探索下镜面反射(高光),这里的高光反射是一种经验模型,也就是说,它并不完全符合真实世界中的高光反射现象它可用于计算那些沿着完全镜面反射方向被反射的光线,这可以让物体看起来是有光泽的,例如金属材质。...原创 2019-12-06 23:03:40 · 1288 阅读 · 0 评论 -
Unity Shader - 基础光照之漫反射
在shader中,光照是一个非常基础并且重要的知识点,下面我们就来学习一下shader中的基础光照。在现实中的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此我们在渲染中基本上都是使用一个简化的模型来模拟真实的光照环境。来达到我们想要的效果,看起来差不多就行。计算机图形学第一定律:如果它看起来是对的,那么它就是对的。——————《3D数学基础:图形与游戏开...原创 2019-12-01 18:25:17 · 714 阅读 · 0 评论 -
Unity Shader - 翻书效果
今天实现一个简单的翻书的效果,话不多说,先上一张效果图:这里就随便用的一张纹理了,我们还是称为“翻木板”吧,哈哈。实现过程:其实这个效果实现起来还是挺简单的,大概思路其实就是 让所有顶点都绕Z轴旋转,并且通过正余弦使之带有一点弧度。下面开始让我们一步一步的实现该效果。首先打开Unity新建一个工程,场景,并且创建一个名为openBookEffect的Shader文件,删掉原本多余的代码...原创 2019-11-27 01:49:15 · 3198 阅读 · 8 评论 -
unity-shader 2D - Sprite 影子
最终效果:准备工作:打开unity新建一个2D场景,导入一张2D人物图片和一张透明的图片(用来接收影子),修改图片Texture Type为 Sprite 类型,拖入2D人物精灵图到场景,然后拖拽透明图到人物精灵图节点下,命名为shadow,用来接收影子然后新建一个材质球,拖拽到 shadow 节点上,shader选择我们将要新建的shadow.shader。场景如下:实现思路...原创 2019-11-13 18:49:38 · 2855 阅读 · 1 评论 -
unity-shader 2D精灵图描边效果
今天我们来实现一个简单的2D精灵图描边效果,效果图如下:准备工作:首先我们先打开unity新建一个场景,导入一个图片,并把该图片设置为Sprite类型,如图:...原创 2019-11-05 23:47:30 · 3267 阅读 · 3 评论 -
unity shader - 点击屏幕水波纹特效
一直以来我都非常崇拜那些能写出特别炫酷的特效的大神,每当看到游戏中一些炫酷的特效时,我都在想这些是怎么实现的,希望自己有一天也能亲自写出这些特效,一直都想去学习图形学相关的知识,说来惭愧由于自己的拖延症加上懒,一直拖在了最近才开始学习一些shader相关的知识,前段时间刚看完《unity shader入门精要》这本书,在这当中也学到了许多shader的一些知识,当我知道这本书的作者是一个女生时我非...原创 2019-11-03 16:54:27 · 7463 阅读 · 8 评论 -
凹凸贴图和法线贴图
凹凸映射纹理的一种常见的应用:凹凸映射。我们知道,一般情况下,模型面数越高,可以表现的细节越多,效果也越好。但是,由于面数多了,顶点多了,计算量就大了。为了解决该问题就出现了凹凸映射。凹凸映射的目的是用来修改模型表面的法线。,效果永远是和性能成反比的。怎么样用尽可能简单模型来做出更好的效果就成了大家研究的方向之一。纹理映射是最早的一种,通过纹理直接贴在模型表面,提供了一些细节,但是普通的纹...原创 2019-10-31 21:11:38 · 1424 阅读 · 0 评论 -
CG常用函数
原文地址:http://blog.163.com/lee_shutong/blog/static/129435356200910224658750/函数功能abs(x)返回输入参数的绝对值acos(x)反余切函数,输入参数范围为 [-1,1] , 返回 区间的角度值all(x)如果输入参数均不为 0 ,则返回 ture ;否则返回 flase 。 &...转载 2019-10-30 01:27:30 · 1008 阅读 · 0 评论