- 博客(354)
- 收藏
- 关注
转载 Unity AsyncGPUReadback 接口测试
Unity2018新加入了该接口,可以做到异步RenderTexture->像素数据和异步的ComputeBuffer.GetData那么写了几个例子来测试下。1.RenderTexture->Texture2D异步:IEnumerator Start(){ var rt = new RenderTexture(512, 512, 0)...
2019-08-14 12:55:00 1584
转载 Shadowmap简易实现
之前一直没有自己实现过阴影,只是概念上有所了解,这次通过Demo进行实际编写操作。总的来说没有什么可以优化的,倒是对于窗户这种可用面片代替的物体似乎能优化到贴图上,之前arm有个象棋屋的demo做过这个来说回Shadowmap,主要思想是通过深度图可得到世界坐标位置,所以光源位置渲染一张场景深度图以得到光源位置像素点的世界坐标,再对比主相机的像素点世界坐标,如果两个世界...
2019-07-23 21:26:00 428
转载 游戏编程精粹学习 - 衰减图
灯光衰减图可以模拟3D贴图的效果,但也有一定的局限性。给灯光使用衰减图可以一定程度的控制灯光形状。应该也是某种程度的灯光cookie。使用衰减图与翻页动画制作的灯火效果:优点:一定程度上的3D Texture可以拿来做摇曳灯火等缺点:定制性比较高,真正使用可能要借助CB相比3D Texture可控程度有限原文先从泛光灯公...
2019-06-08 13:53:00 332
转载 Unity PhysicsScene测试
应该是unity 2018.3中加入的功能,对象可以放置于不同的物理场景中。一个Scene对应一个物理场景(PhysicsScene),若想放入独立的物理场景测试创建一个Scene即可。见下图gif。若测试模拟功能,须在Physics中关闭自动模拟。脚本如下:using System.Collections;using System.Collections....
2019-06-02 09:33:00 709
转载 游戏编程精粹学习 - 使用定点颜色插值模拟实时光照
终于有空看点新东西,这一篇在《游戏编程精粹1》的5.3节中,主要讲通过烘焙前后左右4个方向光照并插值,来代替顶点光照的做法看了下原文例程的代码,似乎是放在cpu部分处理的顶点色,或可能只是参考用的脚本这种烘焙4个方向的做法或许优于顶点光照,但缺点是光线角度较为固定,原文描述早期的足球游戏有使用到或许改成贴图的话可以烘焙进一些法线效果,或是做成粒子光照。。优点:...
2019-05-18 23:09:00 223
转载 Unity StreamingMipmaps 简单测试
StreamingMipmaps是Unity2018.2中加入的新功能,意指通过CPU控制,只加载部分Mipmap图片以节省更多的内存及显存空间。我测试时遇到了问题,后来发现必须打包出来测才有效(注:最新版unity追加了编辑器内生效功能)。官方文档里写给维京村落demo使用该功能后节省了25%-30%材质内存。开启该功能的好处是可以节省关卡加载时间。另外从玩家角度来说...
2019-03-08 13:30:00 1959
转载 稀疏贴图 SparseTexture
官方文档:https://docs.unity3d.com/Manual/SparseTextures.html是一种虚拟贴图,可以动态的加载或卸载某一块tile。从而实现超大尺寸贴图的加载。更新tile:void UpdateTileRaw(int tileX, int tileY, int miplevel, byte[] data);卸载tile...
2019-03-05 17:23:00 527
转载 ComputeShader中Counter类型的使用
接上一篇:https://www.cnblogs.com/hont/p/10122129.html除了Append类型对应的Consume/AppendStructuredBuffer还有一个Counter类型可以进行计数操作。那么测试一下:using System.Collections;using System.Collections.Generic;...
2018-12-16 11:00:00 372
转载 ComputeShader中Consume与AppendStructuredBuffer的使用
上个月写了一篇使用像素shader返回累加信息的Trick:https://www.cnblogs.com/hont/p/9977401.html后来无意中发现DX11/Compute shader有一类Append/Consume数据格式更适合这类操作。c sharp脚本:using System.Collections;using System.Collec...
2018-12-14 22:51:00 714
转载 通过一个小Trick实现shader的像素识别/统计操作
2018/12/14日补充:后来发现compute shader里用AppendStructuredBuffer可以解决这类问题,请看这里:https://www.cnblogs.com/hont/p/10122129.html1.简介在日常开发中会遇到诸如判断某张图的某颜色像素百分比占多少的问题,由于gpu运算并行的原因并不能对其进行累加操作。网上一些针对此类问题的做...
2018-11-18 12:03:00 347
转载 Unty中通过镜像优化HDRI全景图体积
全景图即HDRI贴图,可以代替6面cubemap,传统3D软件运用较为广泛。一般反射探针,天空盒等都会用到。但是体积过大是个问题,特别是移动端会对包体大小进行控制,虽说可以通过球面贴图替换掉部分环境类贴图,但适用范围依然有限。这里通过镜像的方式来做贴图大小的优化,可将贴图优化到原先的一半大小。原图如下(网络收集):最终效果(左右上下镜像):...
2018-10-12 23:20:00 425
转载 Unity3D修改LWRP,HDRP的几项小问题及解决
最近在看BookoftheDead的demo,其中对HDPR进行修改以构建自己的SRP,于是自己尝试了下。。一般直接去Github下载对应unity版本的SRP工程:https://github.com/Unity-Technologies/ScriptableRenderPipeline将com.unity.render-pipelines.core和你需...
2018-09-04 22:42:00 1719
转载 2D空间的OBB碰撞实现
OBB全称Oriented bounding box,方向包围盒算法。其表现效果和Unity的BoxCollider并无二致。由于3D空间的OBB需要多考虑一些情况这里仅关注2D空间下的OBB。实现效果:网上有许多OBB的讲解,其具体步骤也未必一样,我是这么做的在两个凸多边形中找到一根轴,凸多边形所有在这根轴上的投影点不产生相交,则这两个凸多边形不相...
2018-08-19 14:21:00 600
转载 胶囊体边界点的计算及获取
(注意 取的是中心点位置来计算边界点,而非投影点位置。可以自行修改为投影点)之前想做一些体积碰撞的效果但是遇到点问题,胶囊边界点检测这个涉及到球体的交点检测以及圆柱的交点检测觉得可以放上来,相交检测的代码逻辑来源于网络。using System.Collections;using System.Collections.Generic;using...
2018-08-13 20:43:00 337
转载 Unity3D中录制和输出wav文件
近期在做视频录制方面的事情,看了下音频的录制和输出。主要参考官方的FrameCapturer:https://github.com/unity3d-jp/FrameCapturerwav文件结构较为简单,文件头格式网上有很多,数据这块可以直接采用未压缩的数据。这里需要注意一点,C#在用StreamWriter写入时,并不会填充所有字节。例如int型数据占4个字节,而...
2018-06-24 17:01:00 383
转载 游戏编程精粹学习 - 使用Bloom过滤来提高计算性能(BloomFilter)
原文在《游戏编程精粹2》的1.2中,BloomFilter是一种可以快速检测是否存在集合包含关系的数据结构,但有一定的误识别率。该结构的优点判断包含关系时效率较高,粗略测试了下比List快一倍(不拆分哈希)由于内部是位数组BitArray,做交集并集几乎不产生开销该结构的缺点有一定的误识别率使用情境有限我在Github找...
2018-05-05 10:07:00 198
转载 2D空间中求两圆的交点
出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-collision-points修改(加入包含和不相交情况的判断):using System.Collections;using System.Collectio...
2018-05-04 20:03:00 213
转载 2D空间中求线段与圆的交点
出处:https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html测试脚本(返回值为交点数量):using System.Collections;using System.Collections.Generic;using UnityEn...
2018-05-04 20:03:00 570
转载 Unity CommandBuffer的一些学习整理
1.前言近期在整理CommandBuffer这块资料,之前的了解一直较为混乱。算不上新东西了,但个人觉得有些时候要比加一个摄像机再转RT廉价一些,至少省了深度排序这些操作。本文使用两个例子讲解CommandBuffer如何使用,但在此之前稍稍总结一下官方CommandBuffer的案例。2.官方案例案例地址如下:https://blogs.u...
2018-04-28 20:20:00 1653
转载 Unity中使用射线查询MeshCollider背面的方法
之前遇到一个问题要从MeshCollider背面方向发出射线,直至检测到该射线与MeshCollider的相交点为止。后来我用双面MeshCollider的方法解决了http://www.cnblogs.com/hont/p/6628841.html但是这样又会导致许多其他问题,因为构建出来的双面MeshCollider是非临时性的。后来我发现unity提供了一个接口P...
2018-04-16 09:35:00 808
转载 游戏编程精粹学习 - 计算到区域内部的距离
在《游戏编程精粹1》的4.7中,原文主要解决赛车游戏的路程确定问题和光照插值问题。但原文中没有提及如何判断四边形区域是否包含的问题,只有提到point-in-sector这个函数名称实现是T和L两部分做向量投影,但是不乘以最终方向矢量,而是以两边的点乘结果求得比例。那么我对其做了一些修改,改成了横向和纵向二维的单位距离计算,这样可以顺手解决是否包含的判断问题。...
2018-04-15 16:24:00 155
转载 游戏编程精粹学习 - 一种快速的圆柱棱台相交测试算法
在Unity中挂载Renderer的对象可以使用OnBecameVisible/OnBecameInvisible来接收剔除事件。但是非Renderer对象则要自己处理相交检测。文中的方法测试结果比Unity的GeometryUtility效率要高一倍左右,且没有GC。不过只支持圆柱下面是直接从书上C++版本转换的C#实现using Syst...
2018-04-06 13:08:00 164
转载 游戏编程精粹学习 - 可预测随机数
这是一种避免一次性生成所有内容的可预测随机数实现原文使用了简易的随机数生成算法来生成,可以支持的最大数字是uint型的最大值4294967295。文中提到的宏无限分解和微无限分解指的是用种子生成的随机结果再作为种子继续生成,细化到具体星球,植被等等。这样当玩家在任意坐标区域内,只需要生成附近一小块的随机内容。这种做法也可以衍生到宝藏藏匿之类的实现上去。这里...
2018-04-04 12:23:00 258
转载 游戏编程精粹学习 - 位数组/位锁
在《游戏编程精粹1》里的1.10处讲解了位数组的应用,原文意把位操作变为类似数组的形式,从而更加直观。(注意C#中已经内置这种数据结构,叫做BitArray)不过我联想到是否可以设计一个位锁的概念。我遇到过这样一个问题,游戏中有一些模块的参数必须在所有使用者都结束后才可以被释放。例如时间系统的暂停,当你在进行某些特殊任务时需要调用时间暂停,而在这个特殊任务的过...
2018-03-28 09:23:00 193
转载 看来博客要停一阵子
近期忙成狗,看来博客要停一阵子。可能几个月,回来会继续写一些游戏编程精粹的相关学习内容。转载于:https://www.cnblogs.com/hont/p/7745447.html
2017-10-27 22:20:00 81
转载 游戏编程精粹学习 - 路径/线段平滑
来自《游戏编程精粹1》寻路部分文章,使用CatmullRom插值来达到平滑,算是对书中内容的练习。在寻路上经常会用到此功能。using UnityEngine;using System.Collections;public class Practice : MonoBehaviour{ public Transform[] point...
2017-09-02 20:25:00 264
转载 游戏编程精粹学习 - 线段与非无限平面相交检测
参考自《游戏编程精粹1》多边形相交部分,用该方法除了知道是否相交以外还可以得到相交点,从而用于其他判断。原文用到了平面方程Ax+By+Cz+D=0,通过三角形求出平面,然后用方程求出线段交点这里直接使用平面,然后再拿相交点和平面所占区域进行判断,以下为Unity中的实现代码:using UnityEngine;public class Practi...
2017-09-02 20:12:00 97
转载 实现一个涂抹擦除效果
涂抹还是满常见的效果。要做涂抹,首先要存一张中间贴图作为mask。然后需要两个shader,一个做mask一个做混合。MaskShader:Shader "Unlit/MaskShader"{ Properties { _MainTex ("Texture", 2D) = "white" {} ...
2017-08-03 23:15:00 1002
转载 一个里表世界切换的shader效果
之前GGJ实现了一个,但是实现方式上有很多冗余。今天正好在做一个类似的东西,重新做了一个版本还是当时美术画的素材:由于里表世界是不同的内容,是两张材质。所以拆分成不同Layer之后,里世界单独渲染一次最后用Graphics做一下混合的屏幕处理即可。脚本:using System.Collections;using System.Colle...
2017-08-01 01:08:00 175
转载 一些新东西学习 - Texture3D,Texture2DArray
Texture3DTexture3D需要先在脚本中创建3D材质,然后赋予shader。需要DX11支持,和材质采样一样,3D维度上可以被repleat和插值参考文章:http://blog.csdn.net/wolf96/article/details/46239557脚本:using UnityEngine;public class Texture...
2017-07-30 11:24:00 288
转载 Unity5 BakeGI(Mixed Lighting)小记
1.模型需勾选Generate Lightmap UVs,否则烘培图像撕裂。2.关于为何新版的改叫Mixed Lighting,猜测是之前属于全部烘培,现在算是部分烘培,实时阴影和烘培阴影可以混用,等等,Unity的未来方向。3.关于shadow mask。旧版本(5.4或者之前),烘培出的贴图是没有shadow mask的,而且烘培阴影和实时阴影没法很好的融合,两种...
2017-07-13 01:16:00 149
转载 Unity GPU Instancing的使用尝试
似乎是在Unity5.4中开始支持GPU Instacing,但如果要比较好的使用推荐用unity5.6版本,因为这几个版本一直在改。这里测试也是使用unity5.6.2进行测试在5.6的版本里,Instancing不再是一个单独的shader,而是一个开关。如果使用Instancing功能需要开启,否则调用相关接口时会报错默认情况下,多个一样的模型会被动态批次...
2017-07-09 23:17:00 522
转载 临摹一个像素风格高楼shader
原始效果地址:http://glslsandbox.com/e#40050.0是一个的城市高楼感的shader,比较像素风可以拿来做游戏背景,或者基于这个思路做一些别的效果这个是我后来找的版本,因为最早那个版本没存,所以大体上有些区别。下面开始分解这个的做法大体思路是用一种噪波作为因子,可以是sin,cos或者别的。然后用floor把他转成int形。...
2017-06-25 23:55:00 150
转载 一种3D空间的柱状多边形检测实现
最近无意中拓展出这个东西,基于之前写的2D多边形检测:http://www.cnblogs.com/hont/p/6105997.html而判断两条线相交的方法替换成了我后来写的差乘判断:http://www.cnblogs.com/hont/p/6106043.html应用还是比较广泛的,特别是多边形选区和地形处理上代码实现:us...
2017-05-28 11:15:00 144
转载 两种屏幕HUD区域限制的做法(矩形,弧形)
HUD区域限制算是比较常用到的功能,方形的HUD区域限制多见于小地图,弧形或者椭圆多见于屏幕范围约束。我没有研究倒角矩形做法,而是将椭圆和矩形进行插值得到一个弧度比较高的形状:当插值为0时限制范围是椭圆,插值为1限制范围是矩形矩形的判断使用了线段相交函数,函数来自网络收集线段相交:http://www.cnblogs.com/h...
2017-05-16 00:35:00 192
转载 看了一下unity5.6的新功能 以及Timeline
3月31日unity5.6发布,然而timeline(前sequence模块)被delay到unity 2017。上个星期官方又发布了unity 2017的beta版本抽空看了下(unity5.6 官方介绍链接:https://blogs.unity3d.com/cn/2017/03/31/5-6-is-now-available-and-completes-the-unity-...
2017-04-21 01:15:00 163
转载 摄像机旋转约束问题及解决
去年2月份写过一个旋转约束的解决方法,不过是硬算的,今天无意中在论坛发现了一个解决方法if (euler.x > 180) euler.x -= 360;if (euler.x < -180) euler.x += 360;这样就可以保证旋转区间可比较具体代码如下:using System.Collections;usi...
2017-04-01 23:54:00 261
转载 MeshCollider双面化脚本
由于MeshCollider组件可以挂载多个,所以不需要Mesh重新合并了。除了反转法线还需要反转所有三角面的顺序脚本如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class DoubleSideMeshCollider : ...
2017-03-27 21:16:00 266
转载 PreviewRenderUtility的Example
用PreviewRenderUtility就不用自己再去创建摄像机来做模型在Editor下的预览了需要注意,默认是用场景天空盒和场景灯光。参考ShaderForge编辑器的做法,配置自定义灯光这些Unity都有提供接口,不用自己再去创建using UnityEngine;using System.Collections;using UnityEditor;...
2017-03-25 21:16:00 250
转载 GDC2017资料整理
GDC2017的资料最近放出来了,我筛选了一下特别是Horizon放出很多干货,也有一些去年的末班车。Vulkan有一堆,但不是很感兴趣感谢王同学的搬运和分类(包含以下链接pdf和视频):http://pan.baidu.com/s/1bI9vRoHorizon:Zero Dawnhttp://www.gdcvault.com/play/102459...
2017-03-20 01:17:00 330
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人