随笔分类 - Unity
摘要:本来打算自己写一下EarlyZ以及preZ,后来发现网上有讲的很清楚的视频,这里就给个链接看吧~ https://www.bilibili.com/video/BV1XS4y1S7fw 总体来说需要看情况开启,以实测性能为准。
阅读全文
摘要:线框渲染主要使用到的是手游不太常用的GeometryShader。代码如下: Shader "Unlit/GeometryShaderTest" { Properties { _MainTex ("Texture", 2D) = "white" {} [HDR]_Color("Color",Colo
阅读全文
摘要:帮人做了一个圆形遮罩shader,用于新手引导,这里记录一下,方便下次直接拿来用。 直接上代码: Shader "UI/CircleMask" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
阅读全文
摘要:Shader 'Hidden/Universal Render Pipeline/Terrain/Lit (Add Pass)' uses 20 texture parameters, more than the 16 supported by the current graphics device
阅读全文
摘要:高度雾的实现思路非常简单,通过深度图还原出来的世界坐标的y值来做fog的lerp参数。 代码使用之前的体积光代码的基础上做了个加法,方便快速使用。 代码如下: Shader "Unlit/VolumetricLightingShader" { Properties { _MainTex ("Text
阅读全文
摘要:今天一个渲染群群友提出了在URP下无法IndirectDraw的问题,直接使用的官方文档的代码。我们知道DrawMeshInstancedIndirect方法在官方文档上有两个支持的shader,一个是表面着色器,一个是顶点片元着色器。而URP下不支持表面着色器,所以群友把顶点片元着色器拿到了URP
阅读全文
摘要:在制作Unity Editor工具时,调用EditorWindow.GetWindow()这个函数会导致系统焦点锁定至Unity,如果不小心在每帧都调用,就会导致系统的窗体焦点无法切换,无法操作其他软件。 这个问题要注意一下,GetWindow()这个函数谨慎调用。 这里做一个记录……
阅读全文
摘要:最近调试粒子系统时发现一个非常诡异的问题,来这儿记录一下。。。 Unity版本:2019.4.0f1,问题如下: void Update() { if (Input.GetKeyDown(KeyCode.A)) { var main = ps.main; main.startDelayMultipl
阅读全文
摘要:体积光的光源可以是平行光、探照灯、点光源等,我们今天先来看看平行光如何制作体积光。 体积光的原理网上已经有很多了,这里就不赘述了。着重快速实现: Shader "Unlit/VolumetricLightingShader" { Properties { _MainTex ("Texture", 2
阅读全文
摘要:我们今天来模拟一下波纹效果,当一颗石头投入水面时,在水中会形成向外扩散的一圈波纹,本质上就是一个向四周扩散的波。根据我们日常生活的经验可以知道,当一个物体投入水中时,中心的振幅时比较大的,而随着波向边缘运动,振幅越来越小,而波的频率在中心总体时很小的,而在边缘时波频率很大。 那么我们可以先试着用正弦
阅读全文
摘要:这次接着上一篇ComputeShader基础用法系列之三来继续说。上一节说到了要通过Compute Shader进行GPU Culling。 为什么需要GPU Culling呢?使用GPU Culling能带来什么好处? 传统意义上的culling是通过相机的Cull进行的,Camera.Cull所
阅读全文
摘要:最近安卓平台Build Gradle的时候发现出来的apk经常多了许多bundle,bundle我们使用的AddressableSystem build的。后来发现即便将Library中的bundle删除,build出的apk还是会有多出来的bundle。经过仔细的检查,发现工程的Temp目录下有个
阅读全文
摘要:做开放大世界的小伙伴肯定都被过大的世界坐标导致的抖动问题头疼。过大的世界坐标导致浮点精度无法准确的表示位置,在表现上看就是物体的抖动和物体之间的穿插问题。要解决这个问题,首先就要分析问题是怎么来的。 我们的位置信息是在CPU以Vector3的形式存储的,里面全部是float类型的值。float类型在
阅读全文
摘要:这节我们看一下ComputeShader最常用的例子:生成噪波纹理。 首先给出参考链接:https://zhuanlan.zhihu.com/p/68507311 以下代码相当于把此文章的噪声纹理计算方法移植到了compute shader中。 CSMain函数如下: [numthreads(8,8
阅读全文
摘要:上一节我们介绍了如何让一个最简单的ComputeShader跑起来并且使我们看到效果。接下来我们看看如何向ComputeShader中传值以及如何回读到CPU。 ComputeShader类提供了一些传值方法,基础类型如SetFloat,SetInt,SetVector,SetMatrix,集合如S
阅读全文
摘要:首先上效果图: 可以分析到两点:1.武器消失是根据模型坐标算的,因为是和模型坐标轴对齐的 2.边缘发光 那么做到这两点就可以了。shader如下: Shader "Unlit/Display" { Properties { _MainTex ("Texture", 2D) = "white" {}
阅读全文
摘要:Compute Shader是Unity5.0之后推出的功能,主要的作用就是利用GPU的大规模并行计算的特性进行一些适合大规模数据的计算,即SIMD(单指令多数据)模式。 在编写Compute Shader之前,首先要了解Compute Shader的基本原理。 传统的Shader编程基本上都是在渲
阅读全文
摘要:原神中当相机距离角色很近的时候会表现出如下虚化的效果: 经过笔者仔细观察,发现其实就是做了个镂空效果,所以开始动手实现,代码如下: Shader "Unlit/VirtualShader" { Properties { _MainTex ("Texture", 2D) = "white" {} _T
阅读全文
摘要:我们知道Unity默认的StandardShader用的漫反射是DisneyDiffuse,那么DisneyDiffuse和传统的Lambert相比究竟有什么不同呢?今天我们就来看一看: 首先Lambert公式就不多说了(n*l) DisneyDiffuse公式是这样的: fd90 = 0.5 +
阅读全文
摘要:之前一位小伙伴问过我URP没有Projector,要实现decal功能,我后来确实注意到这一点,URP下的Projector有相关的插件实现,各位可自行百度,这里说Decal的另一种实现思路,屏幕空间Decal。 屏幕空间的decal思路就是在屏幕空间采样深度图,然后通过屏幕空间坐标和深度值重建世界
阅读全文

浙公网安备 33010602011771号