渲染
文章平均质量分 77
VT LI
VTL
展开
-
Unity-URP-基于模板的延迟渲染
URP延迟渲染的差异:在urp的12版本以上支持了延迟渲染,但是这个延迟渲染跟我们之前说的延迟渲染管线会有一些差异。核心是他构建光照这块不太一样。传统的方式是要通过簇的方式创建簇中所有符合的灯光列表,然后最后才根据像素所在的簇给到灯光的颜色叠加。而这个方式的gbuffer部分还是会输出gbuffer0.rgb(漫反射颜色),gbuffer0.a(材质索引),gbuffer1.rgb(高光信息),gbuffer1.a(环境遮蔽),gbuffer2.rgb(世界空间法线),gbuffer2.a(光滑度),g原创 2022-04-05 15:07:56 · 5566 阅读 · 0 评论 -
HDRP-接触阴影ContactShadows
接触阴影是改善场景视觉深度和保真度的有效方法。 因为提供了一个更为准确的阴影近似, 实现其他阴影算法难以达到的波状外形阴影。接触阴影cpu设置:在HDRenderPipeline中的Render下执行ExecuteRenderRequest的时候,是跟ue5的延迟渲染的做法一样,把需要的效果都在这里展现了,其中接触阴影RenderContactShadows就在这里执行。在RenderContactShadows中var parameters = PrepareContactSh..原创 2022-03-27 22:55:06 · 2241 阅读 · 0 评论 -
ue5-Nanite网格体的渲染方式
Nanite网格体的computeshader处理渲染nanite的网格体是在FDeferredShadingSceneRenderer::Render的阶段执行NaniteRender.cpp的AddVisualizationPasses中执行FNaniteVisualizeCSFNaniteVisualizeCS会执行到/Engine/Private/Nanite/Visualize.usf的VisualizeCScomputeshader解析三角形信息VisualizeCS里首先会原创 2022-03-26 17:29:00 · 1375 阅读 · 0 评论 -
HDRP-GTAO
hdrp对ao的做法是gtao(Ground Truth Ambient Occlusion)的做法。通过AmbientOcclusion.cs,执行Render的时候,Dispatch,在里面PrepareRenderAOParameters创建ao的参数,包括执行的computeshader的内核。GTAO获取ao信号RenderAO执行gtao,执行到Runtime/Lighting/ScreenSpaceLighting/GTAO.compute。GTAOMain中通过GetPositi原创 2022-03-24 23:39:23 · 961 阅读 · 0 评论 -
hdrp-延迟渲染-gbuffer
GBufferManagergbuffer在HDRenderPipeline构造的时候会创建GBufferManager,默认会构造指定数量的gbuffer的rt,一般是4张rt加一张深度rt。RenderGBuffer在ExecuteRenderRequest中执行RenderGBuffer,然后执行CoreUtils.SetRenderTarget(cmd, m_GbufferManager.GetBuffersRTI(hdCamera.frameSettings), m_SharedR原创 2022-03-19 17:45:42 · 1485 阅读 · 0 评论 -
hdrp的后处理-颜色映射ColorGradingLUT
hdrp是通过computeshader来处理颜色映射的,让效果能够更生动。执行的computeshader是PostProcessing下的LutBuilder3D.compute的KBuild内核。AlexaLogC色彩空间首先要将颜色值映射到AlexaLogC的空间,主要目的是要一个能到58.85666大小的颜色空间,方便后面计算。这个调色空间可以让色彩生成更明亮的效果。如果_Params.x大于0则执行颜色映射,执行ColorGrade。在ColorGrade里面首.原创 2022-03-15 23:35:58 · 1685 阅读 · 0 评论 -
unity各种形状正确描边方式
描边在卡通渲染中经常会用到,最常见的做法是法线外扩,这种方式有一个问题是如果顶点的两个边的法线变化不连续或者说变化比较大,则会出现分叉,入正方体的法线外扩就会有这个问题。其他解决方式:然后有一些做法可以解决这种问题,比如顶点放大,然后后处理把中间角色的颜色剔除来模拟描边。这种的问题就在于有一个全屏后处理的消耗,对于手机带宽有一定的影响。当然还有卷积处理等等都会增加一定的带宽消耗。而之前有尝试过一种解决方式,能够类似多一个pass描边来解决问题而不需要其他多余的消耗。本方案核心思路:...原创 2021-09-02 10:55:14 · 2004 阅读 · 1 评论 -
computeshader实现全局光照
全局光照介绍全局光照技术本身是一个很复杂的技术,有非常多方式实现。从管线来说有光栅化实现的全局光照,有光线追踪实现的更逼真的行为树。而我们当前主流的或者说更多人讨论的是光栅化下的全局光照。而全局光照又包括了更多的表现,比如天气,环境等都会影响到全局光照,而每一块在引擎中可能都需要单独处理。当前流行的引擎比如unity用的光照贴图、光照探针,反射平面等方式来模拟间接光照。而ue5用的ssgi+体素+有向距离场来做的间接光照。当前也有一些...原创 2021-08-24 18:00:32 · 940 阅读 · 0 评论 -
有号距离场(SDF)
什么是有号距离场(SDF)?有号距离场(SDF)是指建立一个空间场,这个空间场中每个像素或体素记录自己与周围像素或体素的距离,如果在物体内,则距离位负,如果是在外面则记录相差的距离,在边上刚好位0在2D上的演示如下原图:SDF简而言之他是一个记录空间距离的信息。SDF能做什么?1.高清文字(TMP)2.形变动画3.序列帧动画柔和过度4.碰撞检测5.软阴影6.环境遮蔽(AO)TMP:用过TMP的人可能会有印象,..原创 2021-08-09 20:52:03 · 8495 阅读 · 0 评论 -
unity 多视角下的鱼眼效果
比较多的鱼眼效果是用屏幕坐标下的z坐标来做y轴的距离差值。得到的效果如:参考:https://zhuanlan.zhihu.com/p/359178010?ivk_sa=1024320u但是,因为他是屏幕空间下的模拟,所以假如你要转换视角时物体的y轴就会不断改变,因为物体在屏幕中的像素改变了。那么如果要让物体不会因为转视角而改变高度的话,就需要一个统一标准。1.那么可以想象的就是在世界坐标下,大家的坐标都时确定不变的。2.根据物体顶点与摄像机的距离来作为半径,来模拟出摄像机为中心的,原创 2021-06-21 16:13:30 · 1531 阅读 · 0 评论 -
urp下computeshader步进点光源遮蔽
如果点光源不做遮蔽,那么他后面的墙会被照亮现实中是不会这样的,如果不考虑间接光照的话,他后面应该是被遮蔽的,也就是不会照亮的。1.builtin下的遮蔽:在builtin下点光源可以做阴影,而他的阴影的实现方式跟直接光照的实现方式有一些差异。直接光照是直接采样一张(如果有级联则会多张同一方向的)shadowmap,然后根据深度判断遮蔽。而builtin下的点光源是采样6个方向的深度信息存入cubemap中。然后在采样时取cubemap中的点来确定深度是否足够遮蔽。计算深度..原创 2021-06-16 19:18:51 · 534 阅读 · 0 评论 -
平面运算方式的反射渲染
现在的反射的做法有好多,有静态的做法也有动态的做法。其中包括cubemap的方式或者reflectionprobe的方式,这两种方法都是要做预处理的,其中的reflectionprobe可以做实时反射,但是效率就比较低了。另外还有planar reflect的倒影做法,planar reflect是利用另一个摄像机然后用平面几何的方式来计算的,当然需要重新计算裁剪空间的范围,这个方法也比较适合用在手机上,他的消耗相对来说是比较低的,但是他只适用以平直的平面。还有一种就是ssr了,这个效果是在屏幕原创 2021-06-03 16:59:32 · 460 阅读 · 0 评论 -
二维图片做出三维效果
上面这个效果是2D图片实现的3D效果。这个效果是利用2D图片模拟3D的效果,他利用了一张高度图来实现,这种现象叫做视差效果。如果你以前玩过超级马里奥,会发现他根据你移动的不同速度,不同层级的背景的移动速度会不一样,越往后的背景图他的移动速度越慢。这个效果告诉我们的大脑在对视差效果有很严重的依赖,视差效果能让我们感知物体的远近。用线性插值来完成这种效果是比较不理想的,而本方案的做法是用根据高度图的信息等比例的对像素采样进行偏移。能实现的效果是在摄像机角度,根据深度的远近然后简单的偏移像素来..原创 2021-04-22 21:11:28 · 4107 阅读 · 0 评论 -
unity实现太空场景
虚空场景效果显示上的要求是:左右两边是虚空的太空场景 太空和可行走路径间有一个宽度的雾的效果。 中间是可行走路径 地板上的物品一部分是需要被裁剪的,一部分是不能裁剪的。 角色不能越界行走,怪物死亡也只能再区域内。工具的要求是:要能用笔刷方式画出可行走区域 自动生成虚空和边缘区域 边缘区域的透明和范围要可控然后看看生成的场景的节点布局:这里解释下:Ground是地板物品Hollow是虚空效果HollowEdge是虚空边缘效果TerrainMa..原创 2021-01-19 10:12:33 · 1352 阅读 · 0 评论 -
unity实现远视角场景细节
问题:当我们处理一些远视角的,并且物体时细长的(如远方球场的边界)渲染时。会出现一些线段丢失,并且移动视角会法线线段闪烁,感觉整个线段不完整。比如类似下图:我要实现的是把线段填充并且尽量没有锯齿,类似下图:原因:这个问题出现的原因是,远方的物体可以表达的像素会越来越少。无论是透视视角还是正交的,只要在远方的物体可以表现得像素都是很小了。有些位置甚至一个像素都不能表达,所以就会出现像素丢失。实现方式:针对这种问题,我的解决思路是既然他没办法在一个像素表达,我就让..原创 2020-11-25 20:53:23 · 1342 阅读 · 0 评论 -
屏幕空间的动态全局光照(漫反射)
我们知道全局光照是图形学中一项比较难实现的技术,因为真正要得到全局光照是需要一个点跟所有点的关系计算的,而这个计算如果用在计算机那是不太可能实现的。而现代技术利用了一些比如有向距离场,体素,辐照度等方式实现全局光照,还有就是越来越火的光纤追踪技术实现全局光照。但是这些技术的消耗都很大,包括内存,cpu,gpu的运算量。那么自然会有一种ss系列的方式来实现全局光照,这种方式会比前面几种都容易实现并且运算量相对小。屏幕空间的全局光照也叫SSGI,是一个相对来说比较快速得到间接光的一种全局光照技术,是基于屏幕原创 2020-10-30 19:06:01 · 3685 阅读 · 0 评论 -
几何着色器在不增加drawcall的前提下完成假阴影
项目之前想要做一个假阴影,一般有几种做法:第一种是直接把角色的顶点的世界坐标的y坐标映射到地面高度的位置,用另一个pass渲染他,让他的颜色可以控制就好。这样能产生一个顶部灯光的效果,但是角色有多少部件就会有多多少个drawcall。二点顶点数也是翻倍的。第二种是直接用shadowmap,其实本质上也会多一个pass去渲染他的投射阴影,所以dc没减少。第三种是后处理,得到屏幕贴图后...原创 2020-04-02 11:33:51 · 312 阅读 · 0 评论 -
固定视角的特效优化方式(1)
我们有个游戏需要在特定的角度下进行。但游戏的特效非常的多和复杂,例如其中一些小道具的dc就达到6个。其中一个优化方法当然是从源头优化,就是美术制作时就减少,但这样有几个问题,第一是美术可能需要重新做,时间上不可控。第二就是减少也很难,而且可能有些特效是公用的,这个情况下合并多个特效一起也并不是好事。粒子特效的特点就是透明度粒子比较普通,同时发射得比较集中,所以overdraw普遍比较高。...原创 2020-03-26 18:48:22 · 531 阅读 · 0 评论 -
2d短草丛踩踏及idle效果
一般我们用短草丛被角色经过或平常的飘动效果都是用3d实现的,3d实现起来就比较简单,就是对模型上的顶点做与角色距离的相反方向偏移就好了,平常的飘动效果一般是用sin做弧度变化或者甚至就直接uv的来回移动就好。我们是3渲2的画面俯四十五度固定视角的游戏,因为2d就一个面片,所有顶点都在一个面片上,如果一个面片上的点往3d的四周扩散,会让这个效果显得很2d。在这里的话我采取了另一种实现方...原创 2020-03-11 15:11:53 · 1229 阅读 · 0 评论 -
shader 模板的用法
模板测试在我们工作中用得不太多,一般会在做一些遮罩的时候会用到,比如窗户显示物体的效果,还有mmo经常会做的镜头被建筑遮挡就用另一个颜色代替。当然其实还会有其他一些应用,先说下模板测试的原理。模板测试的模式是需要注意的是Comp,Pass,Fail 和ZFail将会应用给背面消隐的几何体(只渲染前面的几何体),除非Cull Front被指定,在这种情况下就是正面消隐的几何体(只渲染...原创 2020-01-30 19:37:04 · 569 阅读 · 0 评论 -
lwrp聚光灯实现方式
聚光灯有许多用途,他们可以用来模拟路灯, 壁灯,或许多创意用法,例如模拟手电筒,因为投射区域能精确的控制,因此很适合用来模拟打在角色身上的光或是模拟舞台灯光效果等等在项目中我们自己实现了一套聚光灯的方法(没有体积光的计算),整体思路是比较像素点与光照原点的位置得到的向量和光照方向的向量点乘,再跟spotAngle的一半的cos做比较。如果大于spot的一半的cos则说明超过了限制,是不属于聚光灯...原创 2020-01-15 11:42:21 · 852 阅读 · 0 评论 -
PBR与Blinnphong解读
我们做光栅化模式的渲染都了解有两种比较常用的渲染方式,一个是blinnphong的渲染,一个是pbr的渲染。blinnphong:blinnphong的渲染模式更多的是一种经验值模拟光照对物体的效果。所以他不是一个正确的能量守恒的渲染方式。blinnphong的渲染公式其中是漫反射的颜色值,也就是我们的贴图乘颜色。是高光图乘高光颜色是顶点法线与光线方向的点积,主要要得到光线...原创 2020-01-04 16:25:05 · 3494 阅读 · 0 评论