自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木马人

大事必作于细,难事必作于易

  • 博客(120)
  • 资源 (1)
  • 收藏
  • 关注

原创 SubstancePainter关联unity

SubstancePainter 和Unity, 关于在sp中生成 pbr所需贴图流程有助于生动理解PBR

2022-08-20 14:47:43 1110 1

原创 URP管线理解(二)ScriptableRenderPass类 和 ScriptableRenderer类

一. scriptableRenderPass类我认为此类是最重要的类, 它的生命周期函数不多,如下图所示:重要的是图中每个函数的调用时机和位置。如果调用时机和位置搞清除明白了,那么URP管线的宏观调用逻辑主线就把握住了!!其实在源码中,ScriptableRenderPass类中已经有很详细的说明了它的注释都是英文版的,但是说的很中肯(看不懂的词,用翻译工具翻一下(我用的有道词典)),这里拷贝的源码:二.ScriptableRenderer类在URP中,ForwardRenderer类继承

2022-01-31 08:30:00 7395

原创 URP管线理解(一)宏观入口

(1)对于URP的渲染管线,之前看过其它大佬的分析,尤其是在catlikecoding教程的跟着教程一步一步从0到1抄写理解的过程非常nice,感觉收获良多,加深了对管线的流程和理解(2)本篇理解只是单纯的说明ScriptableRenderPass是如何调用的有许多的管线相关的其它细节未涉及到,后面再补充吧~~------之所以选择将入口选为 ScriptableRenderPass处:是因为(3) ScriptableRenderPass 我将其称为”最基础的渲染单元“(4) 因为URP内

2022-01-26 15:38:24 2277

原创 ComputeShder和DrawMeshInstancedIndirect相关小注

在做草海剔除的时候,需要用到computeShader,此处先记录一下,后面整个分析使用DrawInstanceIndirect(1)ComputeBuffer 的初始化:var size = sizeof(float) * 10上图中的 IndirectArguments的buffer类型, 在使用Graphics.DrawMeshInstancedIndirect这个接口时 必须声明为ComputeBufferType.IndirectArguments(2)Dispatch先numthre

2022-01-11 21:02:56 1749 1

原创 多相机和自定义粒子shader

(2)这里重点说明 DepthOnly:Depth 这里指的是相机的深度:(实际就是只清除深度)这时我希望,球能无论什么情况都要被渲染出来,这时就Depth only就可以了,这里深度指的摄像机深度。首先给球和立方体建立不同Layer,然后我们再新建一个摄像机,选择Depth only。摄像机Depth数值大于刚刚主摄像机,设置Culling Mask单 单是球的layer。这样球就会出现在立方体的前面。这就是Depth only的功能了。再看小效果如下图:(3)Dont Clear: 不清空..

2021-12-15 22:41:27 521

原创 unity后处理Bloom与HDR和ColorGrade,ToneMapping

(1)HDR的格式: 在unity中是 RGBA 每个通道16位非HDR: 每个通道8位(2)逐步执行DrawCall时,你会注意到场景看起来比最终结果要暗。发生这种情况是因为这些步骤存储在HDR纹理中。由于线性颜色数据按原样显示,因此看起来很暗,它错误地解释为sRGB。(3)Luminance函数: 客观测量发光体的亮度,是个客观值函数: luminance = 0.2125 * Red + 0.7154 * Green + 0.0721 * Blue;...

2021-11-24 21:12:15 4427

原创 URP管线中自定义Bloom

非HDR开启bloom的效果主要是URP作者的教程工程源码在我的git中:我的git工程网址using System.Collections;using System.Collections.Generic;using System.IO;using UnityEditor;using UnityEngine;using UnityEngine.Rendering;partial class PostFXStack{ private const string bufferNa

2021-11-19 21:52:36 3667

原创 PBR流程介绍和模型规范

(1)基本流程:(1)制作中模:基础模型: 指的是中模!!中模导出为.obj 格式(跟.fbx格式相比:不会出现模型大小的缩放)高模:将中模导入 在Zbush中制作为高模(2)高模 到 低模:为的就是减少面数,并且需要一个UV(减少面数:其实就是拓扑)模型面数少了才好展uv,(卡边的信息一定要在,不然烘焙出的东西也会丢失细节)(3)烘焙(展UV结束后导出用“八猴”烘焙)将高模和低模 导入烘焙。(4)将烘焙后的资源导入在SP中进行材质绘制(5)将SP处理后的结果导入unity引擎中看

2021-11-13 16:39:05 31693

原创 阴影衰减和计算

(1)阴影痤疮和渗透这是产生阴影渗透和痤疮的根本原因:(2)软阴影的实现: PCSS 相关的逻辑

2021-11-11 11:00:24 1044

原创 自定义光照烘焙和采样

一: 光照烘焙:1.静态光照烘焙: 静态物体 烘焙 lightMap所以需要对lightMap 采样// 采样烘焙LightMap光照float3 SampleLightMap(float2 lightMapUV){ #if defined(LIGHTMAP_ON) return SampleSingleLightmap(TEXTURE2D_ARGS(unity_Lightmap,samplerunity_Lightmap),lightMapUV,float4(1.0,

2021-10-29 18:37:10 1946

原创 对BRDF模型的自我理解

主要是参考毛星云大佬对BRDF的解释隐式遮蔽函数:隐式遮蔽函数 (The Implicit Masking Function)可以和Specular的分母校正因子4(n·l)(n·v)相消为1,虽然不是严格基于物理,但具有非常好的性价比。重要:这样在计算的时候,就通了!!!!!在计算高光项的时候,最后的公式就变成 : f(I,V) = F * V * D...

2021-10-12 16:48:00 1468

原创 BRDF公式的详细解析

PBR中用到的不同的数学模型:(1)BRDF的回顾:(2)Fresnal 项:(3)NDF 法线分布高斯函数:在高斯模糊中用到过,上图中分母的作用: 半球变成单位圆的积分空间内,积分为1即 分母是为了保证归一化的性质Beckmann: 这个公式深入的推导在离线渲染中用到的更深入,此处只是简单的解释(3)阴影-遮蔽函数(Shadowing-Masking)(5)做到这一步 会出现的问题:OpenGL中的PBR的说明...

2021-10-09 17:47:09 3867 2

原创 渲染方程解析应用(四)蒙特卡洛积分解“Path Tracing”

(1)光线追踪:Path Tracing 也是率属于 Ray Tracing的一种路径追踪 也是光线追踪的一种表现方式(这节课88分钟: 我用了两天才完整的整理写完这篇日志)前置知识(1)前置知识2前置知识3(2)用蒙特卡洛积分解渲染方程: 求直接光照(4)蒙特卡洛解渲染方程:求间接光至此 积分的问题已经解决!!!上面还有递归的问题: 递归没有停下!!!!!(5)解决递归问题:弹射次数的数学期望: = p / (1-p) 次(6)转换

2021-10-06 20:00:18 367

原创 蒙特卡洛积分(三)

(1)概率和期望(2)概率密度函数和期望(PDF)(3)蒙特卡洛积分:

2021-10-06 11:50:17 149

原创 BRDF解释(二)渲染方程

本质: 光线和物体是如何作用的(1)单位面积接收到某个方向上立体角的光照 转换成power,吸收之后再向某个方向辐射, 形成Radiance(2)已知入射光和受光点 求反射光分布的函数 反之亦然 所以叫双向分布函数(3)已知反射光方向和受光点 求入射光的分布 : 是不是双向的??!!!!!哈哈哈出射的任一方向上的 Radiance / 入射点上的 Irradiance 就是 BRDF 。。。( 把表面吸收到的能量反射到任一方向的的分布情况 )

2021-10-05 14:14:17 347

原创 BRDF前置条件(一)辐射度量学: 主要事三个名词的解释和联系

光的能量: 流明(1)Radiant intensity

2021-09-30 16:47:39 177

原创 光线追踪(一)

第42分钟

2021-09-27 21:14:03 116

原创 unity 物理更新速率控制

GUP帧率控制(1)proect setting 中Time的设置Fixed TimeStep : 此值控制fixedUpdate 的时间间隔 目标帧率30fps : 0.03 目标帧率50fps : 0.02 作用: 如果帧率在运行时下降,也就是unity 每帧都多次调用FixedUpdate ,可能会因为物理内容过多而造成CPU性能问题因此:设置 FixedTimeStep的值 随着帧率的变化而变化, 尤其是在低帧率情况下 降低CPU无畏的开销Maximum Allowed T.

2021-09-18 10:44:43 1174

原创 移动GPU多线程基础基本知识总结

先吐槽一下自己的理解路程:(1)自己先看过移动GPU相关的术语和解释,只get到了多线程和并行等之类的名词,至于多线程是怎么一步一步来产生使用优化的???!!!!! 还是稀里糊涂的(2)后来看《Real-time rendering 4th》 中文版,由于自己对名词的混淆,感觉自己全乱了,我擦!!!!!!!(3)怎么办 ?看原著!!!!!!! 抱着有道词典,开始啃相关的内容,有了新的感悟,将书中的知识摘抄整理如上图,总算是把知识点串起来了!!!!!!线程的定义:每个fragment的 pixed

2021-09-09 15:31:55 388

原创 图形学中走样(Aliasing)和反走样(Antialiasing)

Artficts共有三种表现形式:1.锯齿:2.摩尔纹:例如 相机拍摄电脑显示器(像素的 奇数行和奇数列去掉,结果就产生摩尔纹)3.车轮效应: 高速转动的车轮根本原因: 信号变化太快,采样的速度跟不上信号的速度!!!!!!!!!!!!!!!!!!!!(1)走样:用像素的中心 采样三角形: 有些像素中心点在三角形内 有些像素的中心点在三角形外走样: 像素的中心点 不在三角形内 则被舍弃,所以产生了走样(1)反走样: 先模糊,后采样:离模糊近 显示白色; 离模糊远,显示原色为什么: 采样速度

2021-09-07 19:21:57 2330 4

原创 ShaderLaber的组成使用和分析

1.ShaderLaber的构成:由四个部分组成:shader Text; ShaderCompiler; ShaderLabAsset; Shader Runtime上面的四个部分组成了ShaderLab, 我们说的 ShaderLab 大 是 上面的四个部分大。2.ShaderLab Asset::shader Bundle 或者是 AlwaysIncludeShaders 这两个常见的地方其中 AlwaysIncludeShaders 下

2021-09-03 21:27:44 547

原创 shader基于高度的权重混合

效果图:基于高度的权重混合 , 效果描述:(1)混合:三层混合, 例如 第一层是草,第二层是石头,第三层是沙子,三者混合显示(2)权重: 三层的权重的和 为1, 三者是此消彼长的关系(3)高度:高度会限制或者说是 束缚 着 效果关于混合,再多说几句:(1)基于权重的混合:权重 ,跟顺序没有关系 只跟权重的大小有关系(在一层一层界限不清晰的地方,特别适用!!效果极好!!!!)(2)基于叠加的混合: 叠加 就是 一层一层的往上加。。。。 所以顺序特别重要(在雪地等效果中使用:因为

2021-08-26 22:38:35 654 2

原创 再谈water效果

先上效果图,一步一步拆解开:(1)焦散(2)水的颜色深浅的插值

2021-08-20 23:08:00 419

原创 移动GPU相关解释

(一)硬件: GPU 相关:GPU 拥有更多的算术运算单元(ALU),更适合做连续的同质的运算(1)ALU : 连续的 同质的运算(二) 其它(1)IMR(2)TBDR ( Tiled basd Deferred rendering) 基于片上的延迟渲染:TBDR 的产生节省就是 降低能耗 省电和不发热,Deferred: 这里的意思是 : 等待 + 批处理(3) early-z:(1).prepass 先写入深度(2)然后各自画各自的东西(3)多一层pass 就是多一次dr

2021-08-07 12:13:19 1080 1

原创 shader效果之 水天相接

(1)效果图:(录屏效果惨不忍睹)(2)思路图:代码逻辑如下:注释在代码中Shader "Water_Code"{ Properties { _WaterNormal ("_WaterNormal", 2D) = "white" {} _ReflectionTex("ReflectionTex",2D) = "white"{} _NormalTilling("_NormalTilling",float) = 8 _NoiseIntensity("_NoiseInten

2021-08-05 22:10:49 441

原创 shader眼球效果

(1)眼睛,眼球,相关介绍:眼睛介绍效果图:其中用到的知识点: 视差,漫反射,环境反射直接贴上代码:里面有注释:Shader "Eye"{ Properties { _BaseMap ("_BaseMap", 2D) = "white" {} _NormalMap ("_NormalMap", 2D) = "bump" {} _Parallax("_Parallax",float) = -0.1 _DecalMap ("_DecalMap", 2D) = "whit

2021-08-01 16:01:47 891 2

原创 shader卡通渲染

(1)效果 : 果然开启bloom 录屏就是会有问题没啥好说的,直接上代码:Shader "Unlit/MaLi"{ Properties { _BaseMap ("_BaseMap", 2D) = "white" {} _SSSMap ("_SSSMap", 2D) = "white" {} _ILM ("_ILM", 2D) = "white" {} _DetailMap ("_DetailMap", 2D) = "white" {} _ToonTheshold("_T

2021-07-29 22:35:40 409

原创 shader力场ForceFiled冲击波效果

力场效果(本来就渣,录屏效果是更渣~~)(1)这里冲击波,主要是利用粒子particle系统,每次点击交互 发射一个粒子,(2)每个粒子在自己的生命周期中大小都是可以控制的: 由小变大 或者 由大变小 , 总之就是曲线可控。(3)每个冲击波的大小 和 每个粒子的大小 同步, 粒子决定冲击波效果中用到知识点 在前面的章节中已经详细介绍了水波纹三平面映射溶解流光原理下面直接贴上代码:Shader "Unlit/ForceFiled_first_HitWave"{ Prop

2021-07-24 17:32:42 587

原创 shader水波纹扩散至消解的过程

(1)效果如下:(感觉录屏效果总是怪怪的~~)不多解释了,代码中注释的很详细了~~Shader "Unlit/ForceFiled_first"{ Properties { _NoiseTex ("_NoiseTex", 2D) = "white" {} _RampTex ("_RampTex", 2D) = "white" {} _HitPos("HitPos",vector) = (0,0,0,0) _HitSize("_HitSize",float) = 1 _HitS

2021-07-16 22:32:58 737

原创 shader简单的mesh光束效果

效果不是如下 比图中要真实清晰==Shader "Unlit/LightBean_Code"{ Properties { _MainTex ("Texture", 2D) = "white" {} _EmissColor("_EmissColor",color) = (1,1,1,1) _EmissIntensity("_EmissIntensity",float) = 0.75 _FadeOffset("_FadeOffset",float) = 0 _FadePower(

2021-07-13 21:48:15 645

原创 shader科技感传送效果

(1)

2021-07-10 11:13:42 731

原创 三平面映射TriPlanar

shader效果中存在“缝隙”:(最后的代码中已经注释的很清楚了)出现缝隙的原因:因为UV坐标是不连续的,所以会有缝隙。。。(法线的T,B,是根据U和V生成的,所以用法线也会有裂缝,这里的法线和下面用作mask的用法是不一样的)三平面映射的效果:图中的边界是有过渡和缓冲,如下图基本展示:世界空间XY平面效果:世界空间XZ展示:存在的问题(不可避免的问题):!!!!!!!!!宏观思路 :(1)(2)法线遮罩效果 和 思路:(3)换成noise图看不出缝隙!!!!Shade

2021-07-03 22:23:52 2234 5

原创 shader利用UV坐标裁切透明过渡效果

翅膀效果分析:(1)半透效果, 翅膀的边缘能够裁剪(2)流动效果,UV流动(3)从翅膀根部 到 翅膀梢 流动效果 从稳 到 凌乱 越来越不规则主要原理: 利用UV坐标轴向上的 值的变化 。。 进行裁切 或者透明度过渡代码很简单 , 但是思路爽歪歪,所以此处标记一下。。。。代码如下:Shader "Unlit/Nebular_code"{ Properties { _MainTex ("MainTex", 2D) = "white" {} _FlowSpeed ("F..

2021-06-30 21:44:55 460

原创 unity 渲染帧率优化-OnDemandRendering

OnDemandRendering 相关的API:(1)OnDemandRendering.renderFrameInterval = 3;解释说明:在一些静态UI的时候把OnDemandRendering.renderFrameInterval设置为3,表示渲染频率降为1/3。假设正常是30fps,那么渲染帧率就是10fps。但是在iOS手机上测试后发现一个问题,画面表现为透明的UI在一层层地叠加。(2)垂直同步 开启和不开启 帧率的计算是不一样的:(2.1)开启了垂直同步:If Q

2021-06-26 15:08:04 3524 3

原创 unity效果之——晶体渲染

效果图:(立方体是自传,另一个是不动的。同时转动了一下相机,技术有限,外加美术资源匮乏,效果粗鄙~~,但是技术和知识点是没有问题的)(一)晶体效果分析:1.外围是自发光( fresnal 效果)2.中间是要显示的图像效果( 依然是用fresnal因子裁剪的效果)3.随着相机视角的变动。。。 看到的中间的效果始终是面向相机的(利用相机空间中的xy作为uv 对纹理采样,) 其中调整uv的缩放和拉伸 实现最终的效果。注释:在frag中的向量: normal viewDir 等 都要归一化后

2021-06-26 11:48:03 657

原创 Unity优化批处理Static Batch,GpuInstancing,SRP

(一)一次Drawcall 的产生都经历了哪些过程:(二)Static Batching(三)SRP Batching(四) GPU Instancing

2021-06-19 15:22:46 700 5

原创 VAF顶点动画和FlowMap 的原理介绍

VAF顶点动画: 将动画信息存储在图片中()图片大小:2687 * 100:顶点数量 :2687动画总帧数:100在动画播放的时候:每一帧读取一行信息(2687个顶点的偏移值)。

2021-06-05 17:57:02 336 2

原创 shader中的if和else的耗费的深层解析:

(一)if 和 else 条件判断用来实现代码按条件跳转执行:(1)正常的if else 语句使用 bool 来进行判定操作,该bool 值可以通过使用逻辑和比较运算符来生成。。(2)但是 : 向量运算的bool 结果不能直接使用,因为这些运算结果是一个向量值,而不是bool值(二)基于“ 执行代码后才产生的值” 去进行判定的条件分支,当编译成汇编指令后,用两种方法中的一种来表达:(1)预侦测编译器会对 if-else 条件表达式两部分都执行并求值然后执行一个比较指令,去选择使用 if-

2021-06-03 20:40:50 2202

原创 StandardSurface shader 基础学习(一)

开启此篇章的原因: 现在都已经更新到 URP了,并且日常工作中也不会使用到Standard shader(工作中的shader都是自己人写的),之前了解过,也翻看过基本的standard shader 代码逻辑(尤其是PBR相关)。。。。(1)之前在B站听大佬说:我认识的TA大佬,都把unity 内置的shader源码搂过一遍了。。。。。。 于是乎 我也想跟随大佬的脚步,认认真真的学习整理一遍,加深自己的记忆,也为以后忘记 迅速查找留下痕迹。。。(2)最近由于工作需要,美术同学使用ASE 使用stand

2021-05-29 18:04:49 813

原创 Shader燃烧溶解效果(二)

前面的一篇介绍了最基础的溶解效果本篇会在第一篇的基础上优化:(1)添加溶解方向(2)溶解边缘颜色过度效果(3)可在此下效果中调试理解_Spread 的作用采样Ramp渐变图: Wrap Mode设置为 : Clamp代码如下:Shader "Unlit/Dissolve_Easy_Double"{ Properties { _MainTex ("Texture", 2D) = "white" {} _Gradient("Gradient"

2021-05-23 17:09:08 794

力场效果.unitypackage

力场冲击波交互

2021-07-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除