GPU编程
文章平均质量分 69
xoyojank
来如流水兮逝如风,不知何处来兮何所终
展开
-
UE4 iOS Metal FrameBufferFetchMRT
最近在手机上尝试了一下把SceneColor改成R11G11B10, 使用FrameBufferFetch来读取深度.Android上可以使用framebuffer_fetch_depth_stencil, 但是iOS上不支持DepthFetch.所以就尝试使用MRT输出一个R16F的Depth, 需要依赖FramebufferFetchMRT的实现.4.26中UE4已经增加了延迟渲染, FramebufferFetchMRT已经实现了vk和metal的, 所以很方便地就合并了过来, 用法是这样的:原创 2020-11-27 18:19:33 · 1933 阅读 · 0 评论 -
踩了个TextureArray的坑
就是做了两层混合的材质, 采样了两TextureArray, 但是因为TextureIndex是动态计算的, 就会出现同一张纹理在不同的Texture2DArraySample里采样的情况, 然后就会出现一条一个像素宽的小缝.实验了一下, 只采样mip0或者两层纹理的UV一样的话, 就不会出现这个问题. 所以推测是采样时相邻像素是另一层纹理的UV, 导致miplevel计算错误, 然后这条线的上像素的mip是错的, 导致跟相邻像素无法连续.目前除了把纹理的UV(Tiling)改成一样的, 还没有想到.原创 2020-06-26 18:42:02 · 1591 阅读 · 2 评论 -
快速LightMap烘焙
什么是烘焙? 简单地说, 就是把物体光照的明暗信息保存到纹理上, 实时绘制时不再进行光照计算, 而是采用预先生成的光照纹理(lightmap)来表示明暗效果. 那么, 这样有什么意义呢?好处:由于省去了光照计算, 可以提高绘制速度对于一些过度复杂的光照(如光线追踪, 辐射度, AO等算法), 实时计算不太现实. 如果预先计算好保存到纹理上, 这样无疑可以大大提高模型的光影效果保原创 2009-07-12 21:30:00 · 25779 阅读 · 15 评论 -
溶解效果
选人界面的角色出现时的效果非常酷, 一直不知道咋做的还是中speedtree在镜头前时的消隐也是这种溶解效果, 跟的圆形透明消隐差不多, 但是这种方法不用alphablend, 效率高些. (当时我形容是被虫子啃了...这机器上没装, 不截图了) 最近研究ShadowMap的Alpha穿透, 用到了clip()函数, 恍然大悟, 原来如此啊~clip (DirectX HLSL原创 2009-07-15 23:15:00 · 5232 阅读 · 0 评论 -
看得让人DT的GLSL
GLES2.0封装到shader和vbo结合的部分, 蒙了vertex layout(或叫vertex declaration)要一个一个element的绑定到一个shader变量上(GL叫attribute), 也就是相当于HLSL的VS_INPUT结构体吧.问题是, GLSL里没有"semantic", 然后问题就来了举个例子:一个简单的顶点结构:struct Vertex原创 2009-10-16 21:15:00 · 4424 阅读 · 4 评论 -
球面环境映射实现高光效果
前段时间在看wow的模型的时候, render flag中有一个很奇怪的渲染状态切换, 而且这个状态在WoWDev上也没有被提及. pass.useEnvMap = (texunitlookup[tex[j].texunit] == -1) && ((rf.flags & 0x10) !=0) && rf.blend>2; //&& rf.blend<5; // Use environmen原创 2009-11-01 20:06:00 · 4543 阅读 · 3 评论 -
《火炬之光》中的“X射线”效果
玩了下《火炬之光》, 没想到能用OGRE做到这么个程度, 很让人惊叹!刚开始玩就注意到人被遮挡时, 并不是像其它游戏那把遮挡物半透明化, 而是把被遮挡的部分处理成一种透视效果:想了想, 其实也挺简单的, 把模型画两遍就成了:1. 先画场景2. 画被遮挡的部分, ZWrite=False; ZFunc=Greater; 开启Alpha混合, 光照亮度做为alpha值输出, 颜色由原创 2009-11-09 21:34:00 · 7936 阅读 · 5 评论 -
Reconstructing Position From Depth
需求: 根据当前像素的Depth计算出其View空间的Position先说一种惯性思维的方法: 既然知道depth是怎么算出来的, 那么进行逆运算回去不就得到position了?先说说depth是怎么出来的:Vertex shader:output.position = mul(input.postion, matWorldViewProject);ou原创 2010-02-06 16:33:00 · 6849 阅读 · 8 评论 -
基于屏幕像素抖动的PCF
PCF无非就是把周围的像素加吧加吧, 然后取个平均值. 结果的平滑程度, 跟Kernel的大小有直接关系.下面来对这个描过边的锯齿茶壶PCF一把:2x2:3x3:4x4:当然, Kernel越大, 效果越好. 但大到一定程度效果就不明显了, 而且还要考虑性能问题, 毕竟多次的纹理采样很慢. 其实呢, 通过抖动也可以使用少量的采样达到近似比较大Kernel的效果.原创 2009-12-16 21:46:00 · 4538 阅读 · 0 评论 -
径向模糊效果
最先在这里看到:http://www.gamerendering.com/2008/12/20/radial-blur-filter/这效果在鬼泣4中切换场景时见过, 极品飞车12的运动模糊也有这种感觉.原理: 确定一个中心点(如0.5, 0.5), 跟当前像素连一条线. 以当前像素为中心, 在线上的附近像素进行采样, 最后取一下平均值.代码翻译成HLSL:// Th原创 2010-01-06 22:28:00 · 14144 阅读 · 2 评论 -
边缘高亮效果(三)
之前的文章: 基于法线的边缘检测Dota2和Diablo3中的描边效果与其它游戏的不一样, 是一种类似边缘发光的效果而这种效果正好与Rimlight描边方式是相反的, 向外扩散暂时能想到的代价最低的做法流程如下:把模型画到RTT上, 用Alpha通道或者模板标记这个模型在屏幕上的原创 2011-08-25 21:48:49 · 7810 阅读 · 15 评论 -
FilmicToneMapping
照葫芦画瓢弄了一个, 正好可以解决一下色彩不够鲜艳的问题见 http://blog.csdn.net/ccanan/article/details/6745207曝光度弄成16铁定过了, 如果是非常暗的场景, 并且是线性颜色空间才有意义(GammaCorrection)LDR其实也可以用, 我上面的没有使用HDR颜色空间原创 2012-04-15 23:26:49 · 3483 阅读 · 0 评论 -
升采样(Upsampling)技术
最近老是想着学习下Upsampling, 因为在做优化时这是一项非常实用的技术参考AMD的PPT: Mixed Resolution Rendering, 有这么几种情况可以应用:把半透明元素(如粒子)单独画到一个小的BlendBuffer上, 再跟原场景混合, 减小填充率的负担SSAO, 一般不会做FullSize的处理, 所以Upsampling基本上是必须的一步屏幕空间的软阴影, 同上间接光原创 2012-09-25 23:23:29 · 18800 阅读 · 1 评论 -
GDC2016: Animating With Math
Unity和UE4的Material Editor中都有类似VertexOffset的功能, 可以在VertexShader中驱动顶点, 做一些程序控制的顶点动画 用顶点动画的原因: 骨架是共享的, 骨骼动画是共享的等, 同时节省了骨骼数和动画师的工作量 使用cos三角函数+Time是基本的技巧, 配合顶点色控制每个部分的权重 材质参数暴露出来能够使用程序逻辑进行动态控制 顶原创 2016-04-21 23:15:21 · 7527 阅读 · 0 评论 -
Unity中使用GPU Instancing优化SkinnedMesh渲染
有这么个需求: 一堆不会动的SkinnedMesh, 通过物理模拟出死亡姿势后, 需要优化性能, 不然才10FPS首先想到的做法是转成StaticMesh. 试了一下直接超出了Unity的顶点Index数量限制, 所以放弃, 再说转换完后也不方便编辑. 另一个思路就是使用Instanced Skinned Mesh Rendering, 找到两个参考:https://github.com/Unit...原创 2018-07-10 10:29:04 · 11996 阅读 · 1 评论 -
UE4 Shader开发的一些东西
http://blog.kiteandlightning.la/ue4-hlsl-shader-development-guide-notes-tips/Ctrl+Shift+.可以编译引擎Shader并重新载入, 但是对Plugins下的无效如果要在RenderDoc里看到Shader代码, 需要打开r.ShaderDevelopmentMode=1, r.Shaders.Optimize...原创 2019-01-12 16:37:58 · 4796 阅读 · 1 评论 -
玻璃效果
其实这可以做为通用的折射物体渲染的一种思路: 1. 把场景画到RTT上, 如果需要后处理正好就有现成的RTT2. 绘制需要折射的物体, 把法线投影后的xy坐标做为纹理坐标的偏移系数3. 把场景的RTT做为物体的纹理, 根据上一步得到的纹理坐标进行寻址, 产生折射效果 虽说这样的计算并不是根据物理定律来进行的, 但是它很高效, 只需要在VS中进行纹理坐标的计算, 可以不使用P原创 2009-03-21 16:21:00 · 3761 阅读 · 4 评论 -
基于法线的边缘检测
在边缘高亮效果中我提到过两种方法, 各有优缺点吧 图像空间域的边缘检测效果比较好, 中间没有多余的线条. 缺点是PS中计算比较慢第二种把模型"放大"(其实是变胖)的做法, 可以在VS中完成, 不需要额外的RenderTarget, 适合低端显卡使用, 适应性好. 不如果模型法线信息不对的话, 会造成画面错乱. 实际使用时可以根据W值(不用Z深度)来画出远近粗细一样的线条 这次提原创 2008-12-01 18:18:00 · 8024 阅读 · 4 评论 -
纹理拼接后的Wrap寻址
拼接后的纹理:正常的草地(不进行WRAP寻址):WRAP = 5时的情况:MinFilter = Linear时的情况:shader实现:sampler2D atlasTexture;float4 texRect; //(left, top, width, height) of uvfloat2 invSize; //(1/width, 1/he原创 2008-11-03 21:17:00 · 3673 阅读 · 1 评论 -
Introduction to RenderMonkey
RenderMokey是ATi发布的一个快速开发着色器程序和效果的工具.它解决了几个问题:1. 着色器程序通常需要一个框架才能运行.这样的一个工具必须可以设置几何和纹理等信息而不用额外的代码2. 传统的着色器程序开发时间消耗太大,而且需要高质量的代码做为依托.这就增加了开发难度,并限制了技术的共享3. 着色器开发工具应该在程序员和美工原创 2007-09-18 03:15:00 · 3123 阅读 · 1 评论 -
写的第一个Shader
第一个茶壶是可以运动的纹理,用时间的正弦值和余弦值加在纹理坐标上产生偏移实现的,可以考虑用来实现水面的各种效果第二个茶壶是颜色和纹理的混合,多层纹理的混合应该也是同样的道理,就是把颜色值相乘就可以了 AniPass原创 2007-09-19 02:47:00 · 3207 阅读 · 0 评论 -
简单的运动模糊效果实现
当一个物体快速移动的时候, 人眼会感觉它变模糊. 同样的现象在电影和照片上也存在. 产生这种现象的原因是人眼并不是无限快地接收信息的, 而是每隔一段很短的时间” 截取” 一幅画面。如果物体移动的速度超过了人眼捕获画面的速度, 那么物体会呈现条纹效果. 了解现实世界中的效果有助于我们用计算机去实现它. 理想的方法是判断每个像素在相邻两帧之间移动的速度, 跟据这个信息再来进行处理. 这个原创 2007-10-02 03:32:00 · 9291 阅读 · 0 评论 -
RenderMonkey在数字图像处理中的应用(续)
空间域图像处理 在空间域图像处理中, 通常都是基于模板的算法. 即通过当前像素周围像素的颜色值来决定当前像素的颜色值. 下面举例说明: 1. 模糊一目了然, 就是把当前像素的颜色用上下左右4个像素的颜色值的和的平均值来代替, 这样就模糊了….那么, 怎么用RenderMonkey来实现呢?从前边我们知道, 可以用texCoord.x, texCoo原创 2007-10-04 02:23:00 · 2835 阅读 · 0 评论 -
RenderMonkey在数字图像处理中的应用
大家可以拿来做>这门课的实验, 呵呵, 这样就不用自己去实现框架了, 而且速度也快^_^ 第一步, 这样来创建一个模板程序:如图我们先来认识一下左边有些什么:base: 这是一个纹理(-_-图形学的术语…), 在这里我们就把它当成我们要处理的图像, 注意图像的长宽都是2的n次幂. 双击可以打对话框更换.Stream Mapping: 不用管它, 保持默认值就好原创 2007-10-02 04:39:00 · 3402 阅读 · 2 评论 -
新一代DirectX10前瞻
作者:Rowan 文章来源:本站原创 点击数:85 更新时间:2007-8-13 编者按:这篇文章成文于2006年8月8日,发表在《大众硬件》杂志上。是一篇非常不错的技术解析文章。DX10的文章,写了好几篇。其实都是说的那么几个进化的特点。现在DX10的游戏已经渐渐浮出水面,这些游戏的画面确实让人惊叹。希望这篇文章能让你更深的体会DircetX10的技转载 2007-10-30 15:06:00 · 2056 阅读 · 0 评论 -
3D技术深入剖析 Shader Model 3.0特色揭密
编者按:这篇文章成文于2004年4月19日,发表在《大众硬件》杂志上。虽然现在Vista已经发布快半年了多了,但是DX10的游戏还一个都没有出来,目前所有新游戏仅仅支持DX9。可见Shader Model 3.0还是在最鼎盛得时期。这篇文章就从深刻的技术层面剖析了Shader Model 3.0的许多先进特性。绝对是一篇充电牛文,推荐大家阅读。 力量源泉——Shader 3.0揭密转载 2007-10-30 15:29:00 · 6128 阅读 · 0 评论 -
景深效果(Depth of Field)
什么是景深效果?景深效果,简称DOF,在人眼跟光学摄像设备上很常见.如下图:简单地来说,就是近处跟远处的景物模糊,而焦点附近的物体则很清晰.至于为什么会产生这样的效果,我就懒得说了:p 那么怎么来实现这种效果呢?看图:从摄像机开始,按距离分成三部分:近距离模糊,焦点范围(清晰),远距离模糊渲染的时候按深度(即距离)进行判断,在焦点范围内则是清晰的,否则原创 2007-11-14 04:07:00 · 19870 阅读 · 5 评论 -
边缘高亮效果
游戏要实现模型的突出显示,最好是边缘高亮的效果.刚听到这个东西时,第一个进入头脑中的就是:边缘检测.于是就写了一个: Pass 0: 渲染模型到一个RenderTarget Model上,并把模型的形状写入Alpha通道. Pass 1:原创 2007-11-19 04:35:00 · 8700 阅读 · 4 评论 -
热浪扭曲效果
热浪扭曲• 每个人都对自然界中的这种大气效果很熟悉• 光线在穿过不同密度的介质时会弯曲 热微光• 热空气密度比冷空气小• 密度影响介质的折射率• 热空气上升的同时会被冷空气替代, 这会改变光射入眼睛的路线 • 渲染场景到RGBA离屏缓存(可渲翻译 2008-01-07 15:45:00 · 11525 阅读 · 3 评论 -
水下效果
这里说的水下效果, 是指在水底下时, 为了增强真实感, 做的一种水的波动效果, 算是post process的一种吧 原理很简单, 就是把渲染好的屏幕场景做为一张纹理输入, 然后对上面的像素按时间进行扰动, 这样感觉好像水在晃动一样, 增强代入感. (想想潜水时^_^) 代码很简单, 没啥好说的原创 2008-04-10 00:46:00 · 5439 阅读 · 3 评论 -
HDR效果
HDR, High Dynamic Range, 高动态范围三项处理:1. Glare, 即Bloom/Glow, 一种发光的效果, 包括曝光处理2. Streaks, 即Star-like glow, 星光效果3. Ghosts, 即Lens Flares, 镜头光晕通常情况下, 只做第一种处理, 这样的HDR效果上并没有差原创 2008-04-28 04:14:00 · 4565 阅读 · 0 评论 -
用可编程渲染管线实现phone光照模型
Ambient Lighting = Ca*[Ga + sum(Atti*Spoti*Lai)] Where: Parameter Default value Type Description原创 2008-05-04 23:09:00 · 3917 阅读 · 0 评论 -
纹理投影测试
对于不规则的几何体的纹理坐标, 差不多都是通过投影来算的吧冒似有个"球状纹理"投影到一个物体上, 就像CubeMap还有一种"圆柱形纹理", 对物体一圈进行投影GPU Gems3里有个不规则地形(X,Y,Z三个方向上都有面), 这时就没法简单地用X,Z坐标来计算UV了对于基于高度图的地形来说, 如果Y方向很高的话, 纹理会有明显的拉伸现象这时就可以换个方向进行投影, 用于制作悬原创 2008-10-12 22:06:00 · 2555 阅读 · 0 评论 -
shader model 2_x
在2002年DirectX 9.0发布的时候,当时新增的shader model包括了shader model 2.0(vertex shader 2.0+pixel shader 2.0)、shader model 2.0a(也被称作shader model 2.0+或者shader model 2_x,即vertex shader 2.0a+pixel shader2.0a)以及shader转载 2008-11-03 15:49:00 · 4029 阅读 · 1 评论 -
Shaders for Game Programmers and Artists(目录)
确定一个目标:实现我们教师的TSM算法,所以学习HLSL先打算用这本书+RenderMonkey来学习,先熟悉一下整本书的内容:Part I 从头开始. . . . . . . . . . . . . . . . . 1Chapter 1 欢迎来到着色器的世界. . . . . . . . . . . . . . . . . . . . 3Chapter 2 3D的艺术.翻译 2007-09-12 03:03:00 · 3645 阅读 · 0 评论