- 博客(11)
- 收藏
- 关注
原创 深度写入Depth Write深度测试Depth Test 黑洞效果
深度写入:深度写入的功能是判断该材质是否会剔除后面的像素,所以只要开启的Depth Write不管是否为透明物体,都会根据Z来遮挡后面的物体。深度测试:是通过比较深度值,判断该材质如何去被剔除像素。虽然透明的材质不会开启Depth Write,但深度值Z不管是否为透明材质都会有,所以透明物体才会被前面开启了深度写入的材质给挡住。通过深度写入和ColorMask的功能可以实现一些特殊的效果,比如:黑洞的效果Depth Write On 写入深度并在地面上,这样可以遮挡地面...
2022-02-05 22:26:26
5562
原创 Unity 计算屏幕视口UV坐标的几种方法
屏幕坐标三种获取方式,得到的坐标可以用来采样图片。1.使用unity自动将顶点着色器中齐次裁剪空间下的posCS,转换到片段着色器中时得到的屏幕空间。struct v2f{ float4 pos:SV_POSITION;}v2f vert (adddata v){ o.pos = UnityObjectToClipPos(v.vertex);}fixed frag (v2f i):SV_Target{ //这里传入的i.pos必须是SV_POSITION
2022-01-04 19:00:01
5124
原创 Unity 模型上绘制贴图融合
首先功能是在Unity中能在任意的模型上实现类似unity自带的地形系统里的贴图绘制功能。能够支持最多4张自定义贴图的融合。源码是在微元素论坛上大佬写的,可以在论坛搜索下E3D MeshPainter这个插件。我稍微改了下并且融合到了自己的Shader中,这里记录下学习的过程。 主要原理是利用一张贴图(SplatMap)的RGBA通道,分别指定不同的模型区域。一个通道对应一套需要融合的贴图。为了优化效果,一套贴图只有两张图,第一张图的RGB通道存放固有色,A通道存放高度信息,A通道...
2021-10-12 18:45:06
3398
原创 DOTS支持的shader
最近项目需要用到DOTS的技术,发现除了程序部分需要做代码调整外,Shader的编写也需要进行一些调整,不然运行的时候会出些各种奇怪的现象,比如不显示模型,模型位置错乱等等。由于也在慢慢摸索,可能有部分写的不对的地方,请各位大佬指教。。。支持DOTS的Shader分为带骨骼的SkinnedMeshedRender和普通的MeshedRender,普通的MeshedRender实现的方式和普通的GPUInstancing类似,注意是必须增加Instance。增加变体:#pragma mult
2021-08-21 14:07:05
1946
原创 各项异性高光 Kajiya-Kay TDir or BDir
在做Kajiya-Kay各项异性高光的时候,我们会使用半角向量(hDir)和模型的切线方向进行点积。但有时候用切线方向的效果不正确,用副切线方向确有正确的效果。那么什么时候改用切线,什么时候用副切线方向?关键适合展UV的方向有关系。做个实验:首先我们建一个球体,并展UV,UV方向如下:选中黄色区域的面,对应的是模型上的这些面。一般切线方向为UV的U方向,所以这个球型的切线方向就是水平的,就应该用垂直的副切线方向作计算。如果我们将模型的UV旋转90°,则切线方向就是垂直..
2021-07-24 22:17:55
790
1
原创 Early-Z和Z-prepass
首先Early-Z和Z-prepass不一定会提高性能。但如果场景有很多半透明物体造成Overdraw或者很多物体没办法进行深度排序时,可以使用Z-prepass提高性能。Early-Z是在渲染管线内新增一个提前深度测试在片段着色器之前。(也可以加上模板测试的功能)Early-Z的一些限制:开启AlphaTest或者Clip/discard失效 手动修改GPU深度值也会失效 开启AlphaBlend失效(因为关闭了深度写入) 不能关闭DepthTestZ-prepass:额外
2021-07-19 22:49:32
509
原创 NDC空间(归一化的设备坐标空间)整理记录
- 在齐次裁剪空间的基础上进行透视除法(perspective division)或称齐次除法(homogeneous division),得到的坐标叫做NDC空间坐标。补充渲染流水线:模型数据-顶点着色 - 曲面细分 - 几何着色器- 裁剪 - NDC空间 - 屏幕空间- 光栅阶段 - 帧缓存其中曲面细分和几何着色器是可选项,而从裁剪空间---NDC空间---屏幕空间一般由底层帮我们自动完成。我们的顶点着色器只需要把顶点转换到齐次裁剪空间就可(就是一般所说的输出的positionCS)空间..
2021-06-27 12:37:34
15646
2
原创 Unity自带的Skybox增加旋转轴
Unity自带的Skybox增加旋转轴项目有个需求需要在自带的skybox只能Y轴旋转的基础上增加另外两个轴向的旋转。首先找到unityCG库中的默认skybox的Shader------“Skybox/6 Sided”看到其中关于Y轴旋转的关键代码 float3 RotateAroundYInDegrees (float3 vertex, float degrees) { float alpha = degrees * UNITY_PI / 180.0;
2021-05-25 18:28:14
353
原创 Unity URP渲染管线中的SRP Batcher合批
Unity URP渲染管线中的SRP Batcher合批Unity的URP管线中不同于之前的Building-In管线,提供了额外的一种性能优化方式:SRP Batcher合批。SRP Batcher的优势是,不需像静态、动态合批那种,必须使用相同的材质球,但相对于的Shader中也做了些改变,增加了CBuffer。我们可以选择自己的Shader文件查看此Shader是否已支持SRP Batcher。要使用SRPBatcher时,必须将定义的变量放在CBUFFER_START(UnityPerMa
2021-05-14 18:33:52
3300
原创 3Dmax Retopology最新自动拓扑插件
3Dmax Retopology最新自动拓扑插件3dmax新的自动拓扑工具Retopology,此工具可以配合Max自带的Subdivide修改器,使其发挥更加强大的作用。下面是使用此工具和Subdivide修改器的一次测试:1.新建5个简单布尔后的Box2.为5个box分别增加Subdivide修改器使用不同的细分方法3.分别增加Retopology修改器可以看到直接使用Retopology修改器的第一个布线还不是非常理想,会有扭曲等情况,最后一种使用过Variable Carvatur
2021-04-07 17:43:11
11110
3
原创 Unity 内置空间变化矩阵的使用
Unity 内置空间变化矩阵的使用Unity 内置矩阵:矩阵说明UNITY_MATRIX_Munity_ObjectToWorld模型变换矩阵:通常用于把顶点/方向矢量从模型空间转换到世界空间UNITY_MATRIX_I_Munity_WorldToObject模型变换逆矩阵:通常用于把顶点/方向矢量从世界空间转换到模型空间UNITY_MATRIX_Vunity_MatrixV视图变换矩阵:通常用于把顶点/方向矢量从世界空间转换到视角(相机)空间UNI
2021-02-27 23:09:13
2720
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人