
图形算法
文章平均质量分 52
wang371372
这个作者很懒,什么都没留下…
展开
-
2021-01-07
HDR效果就是超亮的光照与超暗的黑暗的某种结合,这个效果是光照产生的,强度、颜色等方面是游戏程序可动态控制的;bloom效果则是物体本身发出的光照,仅仅是将光照范围调高到过饱和,是游戏程序无法动态控制的。HDR特效是这样:bloom特效左:实现方式:1.渲染场景高亮部分,阈值颜色为02.步骤1生成的图形高斯模糊3.生成场景图片和步骤2图片加权融合。...原创 2021-01-07 11:26:25 · 197 阅读 · 0 评论 -
Gamma空间精简讲解
在查找相关资料的过程中,看到了很多人争论,出现Gamma Correction到底是人对自然亮度的感知原因,还是由于早期的 CRT 显示器存在非线性输出的问题。在研究了一些Gamma Correction资料后,个人认为早期Gamma Correction的出现是由于原来的 CRT 显示器存在非线性输出的问题,而在显示器完全可以解决非线性输出的问题的今天,Gamma Correction的存在更多的是由于人对自然亮度的感知。人眼对环境光的不是随着光的强度线性增加的,越暗的地方,变化感受越明显,设1为白色原创 2021-01-07 11:24:20 · 790 阅读 · 1 评论 -
Filament在C++中创建渲简单染体
为查找新引擎锯齿严重的问题,在C++端重写了简单DEMO,摸索阶段有点费事,记录下,以免后续需要。int floatSize = 4;int shortSize = 2;int vertexCount = 4;int byteStride = 7*4;auto vertexBuffer = VertexBuffer::Builder().vertexCount(vertexCount).bufferCount(1).attribute(VertexAttribute::POSITION,原创 2021-01-07 11:21:35 · 598 阅读 · 0 评论 -
关于深度冲突(Z-Finghting or Depth Fighting)的解决
OpenGL,或者D3D 的深度缓存都存在精度问题,在最新的Nvidia GF8 系列显卡中已经开始应用float point depth buffer. 而在此之间,深度缓存其实只有位平面的概念. 这随API的不同,都需要指定后缓存深度缓存精度, Depth ,我一般使用24位,也就是D3D中常见的 D24S8. 但除非你是用浮点,否则都会有精度损失的问题,这种情况总是发生在2个几乎共面的片面,转载 2015-01-10 00:08:52 · 900 阅读 · 0 评论 -
OPENGL矩阵表示
OPENGL中点(矩阵)表示采用列主序,而DIRECT采用行主序(a,b,c,d),虽然 使用二维数组表示时,行列不同,但在使用一维 数组时代表意义相同。,对DX和OGL来讲,同一个变换,存储的矩阵元素序列是一样的.比如:都是第13,14,15个元素存储了平移变化量deltaZ,deltaY,deltaZ.原创 2015-01-05 14:44:53 · 423 阅读 · 0 评论 -
体积阴影(Shadow Volumes)生成算法
下面以最快的速度简单谈谈阴影生成技术,目前普遍采用的一般有三种:Planar Shadow、Shadow Mapping和Shadow Volume,前者类似投影,计算最简单,缺点只能绘制抛射在平面上的阴影;Shadow mapping利用站在光源处所沿光源法线看去所生成的深度图来检测场景中的体象素是否处于阴影中,缺点是光源与物体位置相对固定、且在极端情况下计算精度差,不太适合精确到象素的动态光阴转载 2014-11-13 20:13:02 · 2123 阅读 · 0 评论 -
cocos渲染引擎分析(七)-----shader渲染流程之StateBlock
cocos引擎底层渲染场景时,会根据状态设置(混合函数,深度写入,深度测试,背面裁剪,透明)渲染场景,StateBlock就是控制整个场景状态变换的类。cocos设计的为每个材质保持一个StateBlock,通过_pMaterial->getStateBlock()获取,状态设置包括以下:enum{ RS_BLEND = (1 << 0)...原创 2019-05-16 13:51:01 · 745 阅读 · 0 评论 -
cocos的物理碰撞系统使用方式,适应用2D,3D捕鱼
首先设置整体场景的物体世界 self =display.newScene("MainScene",{physics=true})--创建物体世界 local physicsWord = self:getPhysicsWorld() physicsWord:setGravity(cc.p(0, 0)) physicsWord:setUpdateRate(3);--设置频率 if ...原创 2019-04-23 15:46:13 · 956 阅读 · 0 评论 -
cocos渲染引擎分析(五)-----FBO实现多分辨率渲染
上章讲了RenderTexture的流程,然而有些需求cocos提供的并不能实现。在PC上玩游戏的时候,我们可以在设置选项里设置游戏分辨率,模糊,清晰,高清,然而cocos引擎只支持一种渲染分辨率,手机分辨率多少,就会渲染出同样分辨率的图片,这样对某些消耗大3D游戏,在低端手机就会很卡。因此,本章主要讲怎么实现基于FBO的多分辨率渲染。多分辨率渲染的思路如下:首先创建FBO,然后渲染场景时,设...原创 2019-04-03 17:08:04 · 849 阅读 · 0 评论 -
cocos渲染引擎分析(四)-----渲染到纹理(RenderTexture)分析和渲染3D 错乱问题
渲染到纹理,顾名思义就是将原本需要渲染到系统屏幕上的图像渲染到纹理,cocos引擎也提供了渲染到纹理(Render Texture)的功能。当然,跟其他3D功能一样,它的渲染到纹理一样有自己的局限性,只能等比例渲染,场景为1280*720,你如果想要渲染全景,只能渲染1280*720的纹理上,如果创建的纹理是640*360,渲染出来的纹理就是原来场景的一半,下一章写出自己的自适应渲染。渲染到纹...原创 2019-04-03 16:52:40 · 2491 阅读 · 0 评论 -
cocos渲染引擎分析(三)-----渲染命令之MeshCommand
cocos的3D部分是在2D部分的基础上加上去,虽然经历很多版本迭代,然而3D部分,只是一个简单架子搭了起来,如果想要譬如高光,阴影,批次渲染等功能,都是需要自己添加的。这里简单讲下3D渲染命令MeshCommand,MeshCommand主要用于渲染Sprite3D 和3D粒子,这里以Sprite3D 的绘制流程为例,记录MeshCommand的渲染流程。引擎渲染3D场景时,首先遍历场景节点...原创 2019-04-03 16:18:56 · 747 阅读 · 4 评论 -
cocos渲染引擎分析(二)-----渲染命令之TrianglesCommand批次合并渲染
从上一章cocos启动流程中知道,cocos的渲染队列中,总共有TRIANGLES_COMMAND,GROUP _COMMAND等七种,其中GROUP_COMMAND是命令集合,QUAD_COMMAND是TRIANGLES_COMMAND的扩展类,真正的渲染命令只有5种:CUSTOM_COMMAND用于自定义绘制,BATCH_COMMAND批次渲染图集,MESH_COMMAND网格渲染,主要用于...原创 2019-04-03 14:20:29 · 1545 阅读 · 0 评论 -
各种Soft Shadow Mapping算法及推导过程
Shadow Mapping已经成为当前3D游戏的标配。传统SM+PCF可以很好地实现日光环境下的Hard Shadow,但如果要实现由昏暗灯光所产生的Soft Shadow,则要么效果过于生硬(sample次数少)要么效率低下(sample次数多)。因此,越来越多的游戏开始使用能够充分利用硬件特性的软阴影算法。这里主要总结各种Soft Shadow Mapping的算法思想和推导过程,不提及转载 2015-01-10 12:31:47 · 1077 阅读 · 0 评论 -
译Variance Shadow Maps
发现这个阴影技术几乎没有中文版的详细讲解,姑且完整翻译一遍论文。 Variance Shadow MapsWilliamDonnelly Andrew LauritzenWaterloo大学,计算机科学,图形实验室Winger_w译水平有限,错误指出欢迎指出QQ:379404629Figure1:各向异性过滤对比转载 2015-01-10 10:59:38 · 674 阅读 · 0 评论 -
RAGE的megatexture介绍
有图的PDF在这里 http://files.cnblogs.com/puzzy3d/RAGE来了-Megatexture信息更新.pdf 没图的发这里: RAGE来了---关于 ID TECH 5 MEGATEXTURE 的一些技术信息更新H3D 姚勇信息 1介绍 2一,目的 2二,实现 21,预处理 31.1贴图预处理 3转载 2015-01-10 14:00:39 · 496 阅读 · 0 评论 -
全新的PRT技术
Tahiti构架全面引入了一种新的超大尺寸材质处理技术,这便是全新出现的PRT(Partially Resident Textures)。PRT技术细节 PRT技术类似之前在ID Tech5中出现过的MegaTexture技术,他们都是将整块大尺寸材质分割成小块,然后按照材质的使用概率对其进行不同位置的存放。在预处理mipmaps的过程中,GPU会根据mipmaps的状况来对转载 2015-01-10 14:03:41 · 1491 阅读 · 0 评论 -
图形学中的各种矩阵变换:模型视图矩阵,投影矩阵,切线空间矩阵
图形学中,场景模型渲染到屏幕主要包括以下流程:首先通过模型矩阵变换模型位位置朝向和大小,确定模型在世界坐标中的位置,然后通过视图矩阵将模型的世界坐标位置转换到视点坐标下,接着通过投影矩阵将视点坐标下的模型转换视口空间,最后将视口位置变换到屏幕位置上。此外,对于使用法线贴图的模型,还需要一个法线空间矩阵,来变换法线的朝向。模型视图矩阵 模型视图矩阵包括模型矩阵...原创 2015-11-12 10:02:22 · 2496 阅读 · 0 评论 -
OPEnGLES使用GLROTATE()旋转失真问题的解决
在OPENGL ES的几乎大部分教程里,如果你稍微仔细一点会发现一个一直隐藏的问题:他们的选择都是基于GlRotate()这个函数来实现的,当你控制鼠标或者触屏来旋转物体的时候,初始时如果只绕一个方向旋转是正确的,但是如果你水平方向旋转90度以上,再次向上旋转时,物体会向下旋转。 这涉及到图形里一个基本问题,万向头死锁问题,这是使用旋转矩阵的缺陷,参考https://bl...原创 2013-10-18 08:45:16 · 2764 阅读 · 4 评论 -
OPENGL深度缓存精度问题及解决
前段时间做的小项目需要读取场景的深度图,本打算使用OPENGL自带函数glReadPiexles()去实现此功能,但OPENGL中只提供读取单个像素处的深度信息,不支持读取整个深度缓存的功能。且当时感觉读取到深度是个单字节的,也看到网上有人说深度缓冲和模板缓冲共用4个字节,就自己使用GLSL改写了渲染管道,将深度信息直接渲染出来,这种方法可生成32位精度的深度图。这段时间又翻阅了OPENG...原创 2015-11-09 22:24:32 · 6112 阅读 · 0 评论 -
cocos渲染引擎分析(六)-----shader渲染流程之内置shader构建
u单纯使用OPENGl写一个场景渲染时,可以很容易的看出OEPNGL整个渲染流程,cocos引擎将整个渲染流程进行了封装分类,各司其职。虽然很多人说cocos渲染底层是学生写的,不少问题,然而cocos这个小巧的引擎,确是一个很好的学习引擎渲染架构的方式,本篇主要讲,引擎底层怎么组织shader,读取模型,材质,创建生成渲染指令的过程进行剖析,本章记录内置shader的构建过程。内置shade...原创 2019-04-12 10:06:53 · 993 阅读 · 0 评论 -
MipMap(纹理过滤)
MipMap首先从MIPMAP的原理说起,它是把一张贴图按照2的倍数进行缩小。直到1X1。把缩小的图都存储起来。在渲染时,根据一个像素离眼睛为之的距离,来判断从一个合适的图层中取出texel颜色赋值给像素。在D3D和OGL都有相对应的API控制接口透过它的工作原理我们可以发现,硬件总是根据眼睛到目标的距离,来玄奇最适合当前屏幕像素分辨率的图层。假设一张32768x32768的mip转载 2015-01-10 12:00:41 · 3974 阅读 · 0 评论