- 博客(25)
- 资源 (6)
- 收藏
- 关注
原创 深谈UE4粒子系统对象池的惊人大坑
标题起得很唬人,但一点不唬人。作者在这里告诫大家,不要使用Cascade的对象池,会有bug,并且不起作用!建议大家都转成使用Niagara,Niagara的对象池功能齐全,并且没什么bug。
2022-10-10 22:48:48 1984 2
原创 Unity Build-in管线shader移植到URP管线下
概述目前Build-in管线的shader都是代码形式的,不是shader graph。所以如果想移植到URP管线下,或者HDRP管线下使用,必须修改代码。具体步骤在URP管线下,CGIncludes里的某些接口是失效的。一、灯光模式灯光模式是forward的接口,在URP下不是这么写的。修改步骤如下;LightMode里的值改成UniversalForward。如下:"LightMode"="UniversalForward"删掉以下内容:#define
2021-07-20 14:05:15 5162 7
原创 Unity URP管线下多光源渲染
Unity URP管线下多光源渲染抓手urp管线下,获得其他多光源的方式和内置管线的不一样。本文会阐述具体方法,并给出源码。首先要在pipeline中打开Additional lighting的设置。然后在shader中。#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"int addLightsCount = GetAdditionalLightsCount
2021-07-13 15:05:26 3221 1
原创 Unity URP 获取深度图
抓手可能大家知道build-in管线的深度图如何获取了,但是URP管线下因为api不同了,所以需要移植一下。
2021-04-14 20:25:36 12674 5
原创 Unity Alpha Blend混合的最终解释
抓手:unity官方文档对于alphablend的解释不知是翻译还是什么问题,感觉略深奥呀,感觉不通俗。今天来给自己和大家做一个关于alphablend的终极解释。关于Alpha Blend的定义:shader执行后,计算出来的像素颜色值与已有像素的颜色值的组合方式的 控制命令称为:alphablend!也就是,alphablend是一种控制命令,是一种命令!我自己对于Alpha Blend理解的定义:alpha blend是一个计算公式,和Photoshop的图层...
2021-02-26 17:25:53 2436
原创 Unity的URP的自定义后处理效果(三) 之 毛玻璃效果
抓手本文详说如何在URP管线下做毛玻璃效果。有两种方法,方法一是用URP自带的OpaqueTexture,但是Opaque是不透明的意思,所以它的缺陷是半透明的物体它是不会渲染到OpaqueTexture里去的。方法二是用RendererFeature,本文主要讲第二种方法。实现原理先在一帧里用RendererFeature用某个camera截一帧的图。然后用CommandBuffer做多次高斯模糊,达到这种毛玻璃效果。最后渲染到一个RenderTexture上。具体..
2020-09-16 21:25:52 10999 7
原创 Unity的URP的自定义后处理效果(二)之 自定义扩展Volume
抓手之前写过一篇叫《Unity的URP的自定义后处理效果》的文章,传送门:https://blog.csdn.net/zakerhero/article/details/106793571,但是并不完全是我想要的效果。因为最终我是希望像Unity 自带的Volume一样去扩展自定义的后处理效果,可以随时关闭和打开。最近查看了一些文章,终于知道该怎么做了。本文结构:原理具体实现参考文章源码下载具体实现:...
2020-08-24 16:37:33 6637 5
原创 Unity 3D模型做半透明剪影效果
抓手项目组需要一个类似如下的半透明剪影效果,不过我们是3D模型,那么就需要一些特殊的做法。最终通过使用Stencil Buffer解决了。详解一、刚开始的的自以为是刚做这个需求之前,以为很容易做,不就是在frag shader里return一个半透明的黑色颜色值吗?然后Tags改成透明Tags { "RenderType"="Transparent" "Queue" = "Transparent" }混合模式为Blend SrcAlpha OneMinusSr...
2020-08-04 19:37:11 2032 1
原创 Unity SRP Batcher的工作原理
抓手根据我的理解总结,SRP Batcher就是1、把调用draw call前,一大堆CPU的设置工作给一口气处理了,增加了效率。2、把材质的属性数据直接永久放入到显卡的CBUFFER里,那只要数据不变,CPU就可以不需要把这些数据重新做设置工作。节省了CPU调用,增加了效率。3、用专用的代码将引擎的属性(比如objects transform)直接放入到GPU显存,这个专用的代码是不是更快更强呢,官方是这样么说的,用的词语是quickly,就是快。具体的解释SRP Batc
2020-07-31 16:18:17 5691 3
原创 Unity 性能优化 之 非常酷的SRP Batcher!
概述既然用到了URP管线,那么在做渲染优化的时候,就需要针对URP管线做相应的优化。今天发现了除了动态batching和静态batching以外的一个非常酷炫的batching,那就是SRP Batching。因为动态batching限制较多,包括模型顶点不能超过300个,shader的顶点属性不能超过900个(假如你的vertex shader用到了vertex position,normal,一个uv,那300个顶点*3 = 900,这样计算的),并且材质和贴图得必须一致,还不能用材质的co
2020-07-30 16:10:11 4807 7
原创 Unity URP管线如何截屏,及热扰动(热扭曲)效果的实现
概述URP管线环境下,GrapPass是失效的。那么,有什么替代方法呢。除了RenderTexture以外,今天发现了一个方法。那就是URP自带的OpaqueTexture。在ShaderGraph的节点就是SceneColor。顾名思义,OpaqueTexture就是渲染完不透明物体后截屏的图,我没完全明白为什么Unity不把半透明的物体也截进去。有可能是因为某些设备半透明物体必须在完全渲染完毕后才能输出到屏幕上,而截屏等不到那一个阶段,因为截屏的图片也用于渲染物体呀,这就
2020-07-28 15:15:21 11489 1
原创 Unity Shader如何判断某个属性(或某张贴图)没有赋值
概述因为有时候写shader的时候,如果某张贴图不赋值,其实完全可以不处理它们的。我看unity内置的一些shader可以通过某个关键字或宏来判断。但是之前没研究他们的具体写法。今天发现了可以用ShaderGUI来实现这个功能。具体做法先写一个ShaderGUI,比如说,我要判断某张贴图是否赋值了。using System.Collections;using UnityEngine;using UnityEditor;using System;public class S
2020-07-17 15:27:40 3408 4
原创 Unity Tilemap 添加相应的法线贴图、高光贴图等等(超便捷方法)
概述项目组需要不同的地块用不同的法线贴图和高光、粗糙贴图等等。但是我们用的是集成到unity里的 tile map。它们的代码并非是开源的,重要的渲染方式的代码都写在C++里。拓展性非常不友好。尝试过用MaterialPropertyBlock去修改,但是因为拿不到每种地块渲染前的代码,所以根本不知道怎么去替换法线贴图。终于在查找资料的时候,无意中找到了Unity官方自带的一种方法:Sprite Editor: Secondary Textures !!!!!详细介绍因为t.
2020-07-13 17:51:30 1721
原创 如何把Unity surf shader翻译为vert frag shader(懒人方法)
起因因为Unity URP环境下,surf shader是会失效的。所以必须把surf shader 翻译为vert frag方式的shader。因为不太明白surf里的Lighting 函数是怎么生效的。查阅了一些资料,终于找到了一个懒人方法。以下就是具体的操作:一,选择要翻译的shader,点击Show generated code。这时候就会在IDE中显示已经生成的vert frag shader,但是里面的代码有很多冗余,变体的东西。二、我们只需把里面的surf函数、
2020-06-23 10:50:39 1231 1
原创 Unity的URP的自定义后处理效果
概述本来想写这个很久了,但是一直都在忙别的。最近项目也需要用到URP的后处理,但是不一定有想要的后处理效果。所以有些还是得自己写。但是URP的后处理和之前unity的后处理写法完全不一样了。原来的OnRenderImage、OnPreRender都失效了。本文只探讨如何写URP下的自定义后处理,并非讨论具体的渲染效果,这里我只做了修改对比度的屏幕特效。具体实现首先需要创建一个自定义的c#的ScriptableRendererFeature和ScriptableRenderPass
2020-06-16 20:11:14 13467 4
原创 Unity只在一个面片上实现真实水体渲染
概述因为前一版卡通水体制作人觉得效果一般,所以换成了《海岛纪元》这种风格的水体。这次我使用截帧工具,本来打算复刻一版的,后来发现他们貌似不是用unity做的。代码风格有点不一样。其实是因为我看不懂他们的代码。。这次使用RenderDoc来截帧,效果还不错。具体实现通过截帧工具可以看到:生成浪花的贴图是由lightmap和一个Rays贴图来渲染的。而且浪花是单独一个mesh,这波操作其实我是看不懂的。原本以为通过shader在一个面片上就可以实现类似效果。他们浪花的渲染
2020-06-16 11:44:46 3052 1
原创 Unity只在一个面片上实现卡通水效果
概述因为项目要做广大世界那种水效果。想过用类似九宫格之类的来实现。但是CPU压力比较大。也试过用通过世界坐标采样河流数据贴图的方式,来不断刷新跟随摄像机的一个面片。理论上是可以的,但实际上,会有抖动的效果,初步分析的原因是世界坐标移动的位置要刚好等于偏移整数个采样的像素的距离才不会抖动。但是具体怎么改真是头疼。所以想采用一个最简单,也是有点蠢的方式,就是只使用一个面片。笼罩在整个世界地图上,并通过采样河流数据贴图的数据把整个水体渲染出来。这样一来只用到GPU渲染,CPU压力几乎忽略不
2020-06-09 20:17:11 1691 1
原创 如何在unity的URP下实现阴影
如果你之前是用buildin pipeline写的shader,其中用了SHADOW_ATTENUATION宏的话,在URP下会失效。由于官方文档对自定义shader描述不多,所以自己只能去看URP内建的shader源码去看实现方法。但是URP内建的shader都是用HLSLPROGRAM和ENDHLSL来写的,并且引用文件都是.hlsl。和之前的CGPROGRAM,还有引用文件类型.cginc有所不同。所以,如果想引用URP内建的方法和接口,必须得按照它们现在的方式来写。但经师傅指点,
2020-05-22 10:45:23 15856 14
原创 如何在Unity的URP下使用多pass(multi pass)
Unity的工程如果从内置pipeline工程升级到URP的,多pass的shader,可能第二个pass后都会失效。如果查看URP的源代码DrawObjectsPass.cs会发现using System.Collections.Generic;namespace UnityEngine.Rendering.Universal.Internal{ /// <summary> /// Draw objects into the given color and d
2020-05-21 17:55:33 14376 2
原创 Unity的URP项目开启
Unity在2019.3后的版本开始把SRP更名为URP。此文章仅讲述如何开启URP项目。开启URP项目有两种方法,一在创建项目中可以直接创建URP项目模板。该模板带有一个例子。可以直观看到URP项目和一般项目的变化。除了上述URP项目的创建方法外,还有一种将现在的项目升级为URP项目的方法。就是在package manager里,安装URP的包,如下图:但值得注意的是,如果将你当前的项目升级为URP后,当前的standard的shader将会失效。因为URP的渲染和st
2020-05-16 16:12:18 19807 1
原创 Unity Gerstner Waves(模拟大海波浪)
之前学习了一些Gerstner Waves的知识,看了一些教程,但发现说的略不够通俗,为了便于自己理解,我自己来写一个给自己的教程吧。该教程会有三个步骤,一阐述原理,二给出源码和源码解释,三提供demo下载。这样一来就算文字看不懂,也可以下载demo,运行demo,结合源码一起看,总有一种方式能让你看懂(^_^)。原理解释参考:GPU Gems的官方文档https://deve...
2019-08-30 15:49:31 7179 3
原创 cocos creator 批量替换字体
如果你项目快做完了,或者做到了一半。UI突然叫你换字体,怎么办?完了,有可能成百上千的预设啊。不可能一个个手动替换吧。接下来一个办法可以让你秒替换所有Label的字体。大家都知道cocos creator是仿照Unity来做的。所以它的prefab和Unity的一样存着很多属性的信息。所以只需要替换prefab里的属性即可。以下是具体步骤: 首先把包含全部预设的...
2018-07-23 12:14:50 3966
原创 CocosCreator无尽循环列表,ScrollView优化
之前在u3d里写过,现在用CocosCreator又需要用到,就再写了一个。实现了垂直和水平方向的无限循环功能。用typescript写的,两百行不到的代码,请大家看看。demo在可看链接demo/* * @Author: HuangLang * @Date: 2018-07-13 15:17:37 * @Description :无限循环列表 * @Last M...
2018-07-17 14:46:23 9321 7
原创 Unity项目UI图片压缩格式(UGUI)
UI制作时候使用的是Ps 8位 RGB通道的色彩。但导出的是16位RGBA色彩的图片。压缩格式都要求贴图宽高为2的N次幂,一般的精灵或贴图很难切成2的N次幂。但是打成图集后宽高都是2的N次幂,所以打图集的精灵可以放心使用压缩格式。windows平台上使用Compressed格式。会压缩为DXT5(带透明通道),DXT1 格式。占用内存大小: DXT1 :0.12
2016-11-18 10:21:09 4446
原创 BMfont生成NGUI自定义中文字体
用美术字图片和BMfont生成NGUI自定义中文字体首选,打开BMfont进行软件设置接着设置字体的导出选项。 好了,配置完成,正式开始我们的生成字体工作:1、把自己要打入的字体写在txt文件里:2、将其转成UTF-8编码格式(请务必使用Notepad++软件转码)3、打开bmfont软件,选择Clearall chars in font4、然后
2015-09-11 21:56:03 1725
unity2D卡通水渲染toonwaterSpwan.zip
2020-06-09
用美术字图片和BMfont生成NGUI自定义中文字体
2015-11-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人