- 博客(101)
- 资源 (1)
- 收藏
- 关注
原创 从线性代数到unity mvp矩阵
三维空间中的 x、y、z 轴正方向单位向量 [1, 0, 0]'、[0, 1, 0]'、[0, 0, 1]' 分别映射到四维空间中的 [1, 0, 0, 0]'、 [0, 1, 0, 0]'、 [0, 0, 1, 0]' 向量;因为一开始的点(0.5, 0.5)是模型空间的坐标,而平移的坐标是世界空间下的坐标,两者并不在一个空间维度下,直接平移是不匹配的。注意:三维空间中的原点 [0, 0, 0]' 并没有映射到四维空间中的原点 [0, 0, 0, 0]‘,而是映射到 [0, 0, 0, 1]’。
2024-10-29 21:06:40
1607
1
原创 为什么正交矩阵的转置矩阵是其逆矩阵
所以p1·p1 = |p1|^2 = 1。而p1与其他基底是垂直的,所以点积为0。其实就是p1向量与自己的点积,又因为p1是单位向量,正交矩阵的基底两两互相垂直的单位向量(点积为0)。有推论:正交矩阵的转置矩阵等于其逆矩阵。,所以得出正交矩阵的转置是其逆矩阵。
2024-10-25 15:57:06
920
原创 如何用PS把roughness贴图转换成Smoothness,并放入Metallic贴图的a通道。
3:新建一个大小相等的psd文件,或者打开Metallic贴图。7:把之前转换出来的Smoothness贴图粘贴到蒙版中。4:如果没有金属度贴图,就把新建的图画成纯黑色。2:选择反相,装换成Smoothness贴图。6:按住alt键,选中蒙版,从而编辑蒙版内容。1:用PS打开Roughness贴图。5:选择图层蒙版->显示全部。8:导出成PNG文件即可。
2023-09-01 00:13:44
1469
原创 C#正则表达式总结
例子1:”ac“用"a|b"匹配可以匹配出”a“, ”bc“用"a|b"匹配可以匹配出”b“,而“cd”用"a|b"匹配,则无法匹配成功。例子:"a&1_"用 \w 匹配,可以匹配出”a"和“1“和“_”,"a&1_"用 \W 匹配,可以匹配出”&"例子:"a&1_"用 \d 匹配,可以匹配出“1“,"a&1_"用 \D 匹配,可以匹配出"a"和”&"和”_"例子:"a c"用 \s 匹配,可以匹配出“ “,"a c"用 \S 匹配,可以匹配出"a"和”c"b)”匹配可以匹配到"a","ab"用"a(?
2022-11-30 22:05:38
2600
原创 Unity光照探头总结
作用:PBR流程中,光照探头用于给动态物体提供间接光的漫反射信息。整个流程:1:在烘培的时候,光照探头需要记录周围360度的颜色信息。类似反射探头的cubemap,但是由于光照探头非常多,而且cubemap占用内存太多,所以实际储存不可能用cubemap,而是储存着球谐函数某几个基函数的系数。当实际渲染进行采样的时候,用这几个系数和球谐函数基函数来还原周围的颜色信息。这里的思想和傅里叶变换是一样的,也是用几个简单的信息基函数,通过不同的系数来还原一个复杂的信号, 如下图。c1是第一个基函
2022-04-01 17:47:41
5421
原创 EditorGUI.showMixedValue有什么用?
当EditorGUI.showMixedValue = true的时候,下面的layout则会显示一条横线一般情况下配合MaterialProperty.hasMixedValue使用。当同时选中多个材质球的时候,同一个属性的属性值如果不一样,MaterialProperty.hasMixedValue的值就是true。 void DoAlphaCutoff() { MaterialProperty slider = FindProperty("_C.
2022-03-03 20:04:50
1767
原创 URP下SRPBatcher,GPUInstancing,动态合批,静态合批
SRPBatcher:适用前提:需要是同一个shader,可以是不同的材质球,Shader代码必须兼容SRP Batcher。但是不支持用材质球属性块(MaterialPropertyBlock) 渲染的物体必须是一个mesh或者skinnedmesh。不能是粒子。效果: 可以有效降低SetPassCall的数目,数据CPU性能优化优化原理:1.在过去的渲染架构中,Unity采取对一个材质分配一个C...............
2022-01-26 16:35:50
12436
4
转载 AB包内存图
Addressable Asset System(进阶版AB)和AssetBundle(以下简称AB)制作的资源管理系统的对比 - 简书
2021-12-30 16:16:01
1264
转载 行列式的几何意义
行列式的定义:行列式是由一些数据排列成的方阵经过规定的计算方法而得到的一个数。当然,如果行列式中含有未知数,那么行列式就是一个多项式。它本质上代表一个数值,这点请与矩阵区别开来。矩阵只是一个数表,行列式还要对这个数表按照规则进一步计算,最终得到一个实数、复数或者多项式。一阶行列式(注意不是绝对值)二阶行列式三阶行列式N阶行列式行列式的几何意义是什么呢?概括说来有两个解释:一个解释是行列式就是行列式中的行或列向量所构成的超平行多面体的有向面积或有向体积;
2021-12-15 19:55:34
2963
转载 从零开始学RecastNavMesh目录
洗脑篇 从零开始学习导航网格#9 recast代码分析之solomesh(下) - 简书编译RecastNavigation 从零开始学习导航网格#2 编译RecastNavigation - 简书recast基础概念 从零开始学习导航网格#3 recast基础概念 - 简书recast代码分析之solomesh(上) 从零开始学习导航网格#4 recast代码分析之solomesh(上) - 简书recast代码分析之solomesh(中上) 从零开始学习导航网格#6 recast代码分析之sol
2021-12-01 11:16:31
1631
转载 KDTree
引子在一张地图上,有600多个单位,每个单位之间都需要独立寻路,检测碰撞和寻找最近的敌方目标。当这一切需要在手机上流畅运行并尽可能快的在服务器进行模拟时,最简单的平方算法5,4已经不能满足需求。怎样减少计算的复杂度呢?通过观察,可以发现,在地图左上角的单位根本无需和地图右下角的单位进行碰撞检测,因为它们离的太远了。所以,通过对战场进行空间划分,可以避免大量的无效计算。一种简单的划分方法是,将战场沿着横纵坐标划分为7,2的格子,只对在相同格子内的战斗单元做碰撞检测。这种方法在大部分情况
2021-09-02 15:32:26
1725
转载 github启用 personal access token后,历史项目如何进行认证变更
按照github的官方说法,github于2020年11月13日起逐步的推行使用token认证代替原来的用户名密码认证,该项工作于2021年年中左右推行完毕。所以一些历史上我们使用用户名+密码拉取的github仓库在进行git pull \ push \ fetch等操作时,会报如下错误:remote: Password authentication is temporarily disabled as part of a brownout. Please use a personal access..
2021-08-15 18:32:30
1516
转载 Unity四元数
Unity3D中的Quaternion(四元数)四元数的概念四元数,这是一个图形学的概念,一般没怎么见过,图形学中比较常见的角位移的表示方法有“矩阵”、“欧拉角”、“四元数”这三种。可以说各有各的优点和不足,不同的场合用不同的方法。其中四元数的优点有:平滑插值、快速连接、角位移求逆、可以与矩阵形式快速转换、仅用四个数表示。不过,它也有一些缺点:比欧拉角多一个数表示、可能不合法(如:坏的输入数据或者浮点数累计都可能使四元数不合法,不过可以通过四元数标准化来解决这个问题)、晦涩难懂。那为啥四元数是四
2021-06-17 17:38:34
2250
转载 Command Buffers In Unity
Command Buffers In Unity1、参考文档:1、Unity官方文档:https://docs.unity3d.com/Manual/GraphicsCommandBuffers.html2、Unity官方API:https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.html3、优快云 博客:http://blog.youkuaiyun.com/puppet_master/article/details/726699772
2021-05-20 20:08:18
1409
2
原创 UnityShader12-半透明总结
一般用到的渲染模式有以下四种:不透明、裁剪半透明(CutOut)、半透明(Fade)、漫反射半透明(Transparent)代码设置如下:// 各个渲染模式的设置,和枚举RenderingMode对应 public static RenderingSettings[] modes = { new RenderingSettings(){ queue = RenderQueue.Geometry, // 不透明
2021-05-04 15:44:40
2046
转载 unity ddx/ddy
转自:https://unity.cn/projects/unity-hdrp-custom-pass-post-processing-hou-chu-li-te-xiao-xue-xi-er-zong-jieddx/ddyddx返回指定值相对于屏幕空间x坐标的偏导数。ddy返回指定值相对于屏幕空间y座标的偏导数。计算方法在三角形光栅化过程中,GPU一次运行许多片段着色器的实例,将它们组织成2×2像素的块。dFdx是将块中像素值的差值减去块左侧的像素值和右侧的像素值,dFdy是将
2021-03-12 17:07:27
1965
1
原创 UnityApplyDitherCrossFade(float2 vpos) -- 淡入淡出操作
作用:淡入淡出操作, 根据淡出程度unity_LODFade和屏幕坐标来对抖动贴图进行采样,并裁剪掉的透明度低于0.5的片元,从而实现半透明源码:unity_LODFade :https://blog.youkuaiyun.com/zengjunjie59/article/details/114295455unity_LODFade.y一共有十六个取值:0/16, 1/16 .... 15/16 的值frac函数的作用:取一个数字的小数部分,例如frac(1.23) = 0.23_Dith.
2021-03-02 22:27:28
1893
原创 unity_LODFade -- 淡化程度
unity_LODFade向量,可以传达淡化对象的程度。它的X分量包含渐变因子[0, 1]。它的Y分量包含相同的因子,但量化为16步,范围也是[0, 0.9375],十六个取值分别是: 0/16, 1/16, 2/16 .... 15/16
2021-03-02 21:48:28
1570
原创 Unity Meta Pass里面用到的UnityMetaVertexPosition函数
作用:根据顶点的光照贴图纹理映射坐标,求得顶点在模型空间中的x、y值,然后变换到裁剪空间中并返回源码:float4 UnityMetaVertexPosition( float4 vertex, float2 uv1, float2 uv2, float4 lightmapST, float4 dynlightmapST){ // 判断是否烘焙静态光照贴图 if (unity_MetaVertexControl.x) {
2021-02-23 17:13:59
1735
2
原创 unity shader里的_LightShadowData
_LightShadowData.x = 1.0 - shadow_strength //shadow_strength就是灯光组件里面的阴影强度,Strength(0~1)_LightShadowData.y = max(camera_far_clip / shadow_distance, 1.0) // 但未在当前内置着色器代码库中使用_...
2021-02-22 11:41:02
1627
转载 如何理解Unity中的MixedLighting
转载自:https://actrpg.wordpress.com/2020/09/28/%E5%A6%82%E4%BD%95%E7%90%86%E8%A7%A3unity%E4%B8%AD%E7%9A%84mixedlighting/Unity中一共有三种MixedLight模式:Baked Indirect,Shadow Mask, Subtractive。另外在Shadow Mask模式之下,还有一个Distance Shadow Mask的子模式。这些模式有什么差异呢?官方给出的对比可以归结到一张
2021-02-20 15:07:57
2425
1
原创 SHADOWS_SHADOWMASK与LIGHTMAP_SHADOW_MIXING
SHADOWS_SHADOWMASK对应设置:Window -> Lighting Settings -> Mixed Lighting -> Lighting Mode -> Shadowmask ,要勾选了上面的Baked Global Illumination才会有这个选项。该宏在混合光照的时候以及选中的上述选项之后才会为真LIGHTMAP_SHADOW_MIXING对应设置:Project Settings -> Quality -> Shad..
2021-02-19 17:24:08
2042
原创 UnityGetRawBakedOcclusions -- 对阴影遮罩(即静态阴影贴图)采样,一般在延迟渲染中用到
作用:对阴影遮罩采样,返回一个fixed4,四个分量对应前四个灯光的阴影遮罩值作用与UnitySampleBakedOcclusion类似,区别是这个方法返回一个四分量的阴影遮罩值,而UnitySampleBakedOcclusion只返回当前灯光的遮罩值UnitySampleBakedOcclusion解析:https://blog.youkuaiyun.com/zengjunjie59/article/details/113865055源码:fixed4 UnityGetRawBakedOcc
2021-02-19 16:30:20
581
原创 UnitySampleBakedOcclusion -- 对阴影遮罩(即静态阴影贴图)采样
作用:阴影蒙版取样,阴影蒙版可以在Window - Rendering - Lighting - Mixed Lightinig - Lighting Mode - Shadowmask启用源码:// 对阴影蒙版取样// 需要光照贴图的UV坐标和世界位置作为输入参数fixed UnitySampleBakedOcclusion (float2 lightmapUV, float3 worldPos){ // 判断是否启用了阴影遮罩 #if defined (SHADOWS
2021-02-19 15:47:59
696
原创 unity的纹理与采样器,各种宏的用法:UNITY_DECLARE_TEX2D,UNITY_DECLARE_TEX2D_NOSAMPLER,UNITY_SAMPLE_TEX2D_SAMPLER
有时在Shader编写过程中,我们可能会用到非常多纹理,如果每个纹理都采用类似uniform sampler2D _Mask;的方式进行声明,编辑器在编译shader的时候就会报错:Shader error in 'CloudShaow/MaskBlend': maximum ps_4_0 sampler register index (16) exceeded at line 69 (on d3d11)报错显示sampler采样器的数量超过了限制数量。这时可以把成对耦合的纹理和采样器分离...
2021-02-19 15:10:13
2851
2
原创 unity_OcclusionMaskSelector - 用于根据当前灯光index选择阴影遮罩贴图对应的通道
作用:根据当前灯光index选择阴影遮罩贴图对应的通道原理:unity_OcclusionMaskSelector是一个四维向量,四个维度分别对应阴影遮罩贴图里面的四个通道,第一个分量就是第一个灯光,总共支持四个灯光。用法:// 延迟渲染中的小例子float GetShadowMaskAttenuation(float2 uv){ float attenuation = 1; // 检查是否启用阴影遮罩 #if defined(SHADOWS_SHADOWMA
2021-02-19 12:04:40
420
原创 UnityMixRealtimeAndBakedShadows,合并阴影距离衰减与阴影遮罩到光线衰减中
作用:把阴影衰减与阴影遮罩叠加到光线衰减中阴影衰减是什么?实时阴影衰减距离对应设置Edit - Project Setting - Quality - Shadows - Shadow Distance。当片元与摄像机距离超过这个设置的距离的时候,阴影会衰减到看不见。在距离边缘会出现阴影渐变。这个渐变的值就是阴影衰减。范围从0~1,0表示不衰减,1表示阴影全衰减(即没有阴影)阴影遮罩是什么?灯管开启混合光照的时候才有用, 对应设置Window - Rendering - Lighting
2021-02-17 15:57:16
594
原创 SHADOWS_SHADOWMASK -- 阴影蒙版关键字
SHADOWS_SHADOWMASK是否烘焙阴影蒙版贴图,对应Light->Mixed Lighting->Lighting Mode->Shadowmask选项,勾选选项后对光照进行烘焙之后会烘焙出阴影遮罩。
2021-02-13 21:48:24
681
原创 UNITY_INITIALIZE_OUTPUT宏
UNITY_INITIALIZE_OUTPUT(type, name) –此宏用于把所给结构体里的各个变量初始化为0。在使用旧版标准所写的Shader时,经常会报错“Try adding UNITY_INITIALIZE_OUTPUT(Input,o); like this in your vertfunction.”之类的错误,加上这句就不会报错了。源码:#if defined(UNITY_COMPILER_HLSL) || defined(SHADER_API_PSSL) || defin
2021-02-11 15:13:49
1933
1
原创 DecodeDirectionalLightmap -- 解码光照方向贴图
作用:根据光照方向贴图中采样到的光照方向,用半兰伯特光照模型进行光照计算。半兰伯特:https://www.jianshu.com/p/646986399395源码:inline half3 DecodeDirectionalLightmap (half3 color, fixed4 dirTex, half3 normalWorld){ // In directional (non-specular) mode Enlighten bakes dominant light di
2021-02-04 20:45:56
1336
原创 unity烘焙静态光照贴图里的UnityMetaFragment方法
作用:决定片元着色器要返回的是主纹理还是自发光颜色,以及如何编码输出结果。源码和解析:half4 UnityMetaFragment (UnityMetaInput IN){ half4 res = 0;#if !defined(EDITOR_VISUALIZATION) // x分量代表的是:烘焙表面漫反射对其他物体的影响,也就是让物体表面漫反射的颜色,参与gi。 if (unity_MetaFragmentControl.x) { res
2021-02-03 12:00:17
839
原创 unity_WorldToShadow矩阵
作用:把世界坐标转换到阴影空间中。例如:unityShadowCoord4 shadowCoord = mul(unity_WorldToShadow[0], unityShadowCoord4(worldPos, 1));// 其中unityShadowCoord4 就是 float4// 通过透视除法可以得到阴影贴图的uv:float3 uv = shadowCoord.xyz / shadowCoord.w// 如果是平行光,则相当于正交投影,不需要透视除法...
2021-01-30 11:38:58
892
原创 延迟渲染里为什么i.ray = lerp(UnityObjectToViewPos(v.vertex)) * float(-1, -1, 1)里要乘 float3(-1, -1, 1)
下面是built-in着色器的源码:为什么i.ray = lerp(UnityObjectToViewPos(v.vertex)) * float(-1, -1, 1)里要乘 float3(-1, -1, 1)?请看代码下面的注释#pragma vertex vert_deferred#pragma fragment fragstruct unity_v2f_deferred { float4 pos : SV_POSITION; float4 uv : TEXCOOR.
2021-01-23 12:01:32
940
原创 unity shader 里的unity_CameraToWorld矩阵
作用:把坐标从视口坐标空间转换到世界空间,但是要注意,这里的坐标不是真的视口坐标,而是z值反转的视口坐标,相当于左手坐标系里的视口坐标(正常视口坐标是右手坐标系)详细解析:https://blog.youkuaiyun.com/qq_35817700/article/details/94863234?ops_request_misc=&request_id=&biz_id=102&utm_term=unity_CameraToWorld&utm_medium=distribute
2021-01-23 11:14:35
1817
原创 tex2Dbias--偏移mipmap级别后对贴图进行采样
作用:在偏移mipmap级别后对贴图进行采样用法:float3 color = tex2Dbias(_LightTexture0, float4(uv, 0, -8)); // 这里的-8就是偏移量文档:https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-tex2dbias...
2021-01-22 11:07:05
1495
原创 阴影渐变衰减UnityComputeShadowFadeDistance与UnityComputeShadowFade
这两个方法用于计算阴影渐变衰减1,UnityComputeShadowFadeDistance:源码:float UnityComputeShadowFadeDistance(float3 wpos, float z){ float sphereDist = distance(wpos, unity_ShadowFadeCenterAndType.xyz); return lerp(z, sphereDist, unity_ShadowFadeCenterAndType.w)
2021-01-21 17:05:00
1119
原创 UNITY_Z_0_FAR_FROM_CLIPSPACE--把裁剪空间下的z值转换到[0, 1]
官方文档:https://docs.unity3d.com/560/Documentation/Manual/SL-PlatformDifferences.html作用:把不同平台下的裁剪空间下的z值映射到[0, 1]的范围用法:float clipSpaceRange01 = UNITY_Z_0_FAR_FROM_CLIPSPACE(rawClipSpace);源码:#if defined(UNITY_REVERSED_Z) #if UNITY_REVERSED_Z ==
2021-01-12 14:52:26
1401
原创 unity3d 的 UNITY_CALC_FOG_FACTOR_RAW 宏 -- 雾效果计算
作用:根据片元到摄像机的距离得到雾的浓度用法:定义关键字,#pragma multi_compile_fog相当于#pragma multi_compile FOG_LINEAR FOG_EXP FOG_EXP2 ,三个分别对于对应Lighting Window - Other Setting - Fog - Mode里面的三个选项(线性、指数、指数平方)。// 得到和雾效混合后的颜色float4 ApplyFog(float4 color, Interpolators i)
2021-01-08 10:33:26
466
1
原创 Unity3D buildin shader源码下载地址
https://unity3d.com/get-unity/download/archive
2021-01-07 16:33:16
1200
BehaviorDesigner行为树插件 适用于Unity5.6 ~ Unity2018.3.7
2019-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人