OpenGL基础47:法线贴图

前置:OpenGL基础46:切线空间这章在《OpenGL基础46:切线空间》之后,如果不了解切线空间的话,是没法很好理解法线贴图的五、逐像素光照前文提到过:为了得到正确的光照,需要知道物体每个顶点的法向量,但为了保证效率,一般物体的顶点不会太多,就像一面很长很宽的墙壁,它的表面往往凹凸不平,但事实上它可能单纯的只是一个立方体,每一面给上了一个贴图。这样如果还想要体现出物体“凹凸不平”的效果,就需要用到法线贴图或者高度贴图之前所有的光照都是逐顶点光照:也就是说对于当前片段,它的法向量取决...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础48:高度贴图(上)

前置:OpenGL基础47:法线贴图一、凹凸贴图不少模型都会附带以“bump”为名结尾的贴图,这种帖图统称为凹凸贴图,目的是为了体现出物体的凹凸不平,最经典的例子就是法线贴图,这个在上一章有详细提到过除此之外还有高度贴图、浮雕贴图等,暂时先了解下高度帖图及其最简单的算法高度贴图又称视差贴图,用于直接给予纹理显示上的错觉,视差贴图往往都是黑白图,因为理论上只需要知道每个纹理的深度值,因此RGB三个值都是相等的,就如下:如果对应的像素是黑色的,意味着此纹理的高度为0,也就是默认值,...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础49:高度贴图(下)

接上文:OpenGL基础48:高度贴图(上)四、陡峭视差映射上文计算纹理偏移的方法是最简单的,但问题也比较大:当你斜视贴图的时候可以看到非常明显的错误这里有另一种方法,这种方法类似于找连续函数在特定定义域内与x轴第一次相交:在范围内不停的取x值,直到当前得到的与上一次得到的符号不同,这样就可以确定交点在上一个采样点和这次采样点之间就如上,先将总深度范围分布到同一个深度的多个层中,然后在每个层中沿着观察方向移动采样纹理坐标,直到找到第一个采样深度值 ≤测试深度值的点,以确定...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础50:HDR

一、HDR与LDR由于显示器只能显示值为0.0到1.0间的颜色,因此当数据存储在帧缓冲(Framebuffer)中时,亮度和颜色的值也是默认被限制在0.0到1.0之间的,这个颜色范围即是LDR(Low Dynamic Range)低动态范围如果光源足够的多,越或者某个光源亮度非常的高,那么对当下的环境,就有可能遇到这样的情况:可以看到,当前的纹理已经变得难以分辨了,丢失了特别多的细节:在计算片段亮度的过程中,这些片段中超过1.0的亮度或者颜色值都会被约束在1.0,这样一大段的区域都会是...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础51:泛光

一、泛光(Bloom)如果一个物体的颜色值接近1.0,怎么确定它是否是光源呢?毕竟一张白纸它的颜色也可以是1.0在此之前,分辨光源往往都是靠的经验,例如你知道这个物体它是个路灯,又或者说根据周围的光照来判断光的中心等等,其实只要使用的模型,都没什么大的问题,而很多游戏中为了体现出更真实的光源,都会给光源加上泛光,以体现出光源向四周发散的光芒,提升光照的效果:泛光效果只是一个渲染技巧,本质上就是一个模糊处理,它并不能反映出真实的物理世界,但尽管如此,一个完美的算法依旧可以大幅提升画面的效...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础52:阴影映射(上)

参考于:https://learnopengl.com/#!Advanced-Lighting/Shadows/Shadow-Mapping一、游戏中的阴影阴影是光线被阻挡的结果,当一个光源的光线由于其他物体的阻挡不能够达到一个物体的表面的时候,那么这个物体就在阴影中了。理论上阴影无处不在,但是想要渲染出很好的阴影效果,并不是一件特别容易的事,目前实时渲染领域还没找到一种完美的阴影算法,尽管有不少近似阴影技术,但它们都有自己的弱点和不足minecraft游戏截图目前较多使用的一种技术...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础53:阴影映射(下)

接上文:OpenGL基础52:阴影映射(上)五、阴影失真按照上文的计算的结果,一个很明显的问题是:对于参与计算深度贴图的物体,其表面可以看到这样的栅格状的阴影,这种现象也叫做阴影失真(Shadow Acne)出现这种请情况的原因是:在计算深度贴图的时候,分辨率不够高,毕竟这张深度贴图是对于整个场景而言的,想要一一对应到每个模型的每个片段就是个不可能的事,这样对于实际的模型的多个片段,就都会从深度贴图中的同一个坐标去采样,如果这些相邻片段的实际深度值一致那其实不会有什么问题,但由于光照角...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础54:点光源阴影

前置:OpenGL基础53:阴影映射(下)一、万象阴影贴图之前成功实现了平行光阴影,生成阴影贴图时使用的矩阵是正交矩阵,若是想要实现点光源的阴影效果,那么理论上只需要修改投影矩阵为透视矩阵就好了,看上去并不是很难但是要得到点光源阴影贴图要考虑到的是:如何渲染出周围所有的场景,像摄像机它是有一定视角的,而点光源确是360°全面照射,因此对于点光源的阴影贴图一张肯定是不够的,它只能展示出一个方向下图是90°透视投影的视觉范围,朝向为x轴正方向,那么只需要再对剩下的5个方向各来一次投影理论...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础55:文字渲染

一、FreeType库FreeType是一个能够提供多种字体相关的操作的软件开发库,往往使用它来做最简单的文字渲染:OpenGL环境配置(超全整合版)FreeType库可以从这篇文章中的链接中下载到,也可以直接去他们的官方网站上获取和其它环境配置方法一样,编译其builds文件夹的对应版本,并将include文件夹里面的所有文件全部放入老位置(C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\M...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

OpenGL基础56:OpenGL简单调试

图形编程想要调试并不是一件容易的事,有的时候渲染出全黑的结果基本上只能凭经验来查错,特别是对于着色器,断点日志都是无效的,因此想办法掌握一些调试方法还是有必要的,不然找错误的源头可能真的会非常困难一、glGetError()可以在程序的任意地方调用glGetError方法,它会返回之前所有的错误标记,常见的错误如下:标记 代码 描述 GL_NO_ERROR 0 自上次调用glGetError以来没有错误 GL_INVALID_ENUM 1280 ...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader1:渲染流水线

前置专栏:Unity3D基础 前置专栏:OpenGL 前置:基础线代公式汇总一、渲染流水线三个阶段:应用阶段 → 几何阶段 → 光栅化阶段应用阶段(起点为CPU,目标为GPU):把数据加载到显存中:显卡对于显存的访问速度更快,而且大多数显卡对于 RAM 没有直接的访问权利,加载到显存后对于原先在 RAM 中的数据可以选择性的移除 设置渲染状态:确定使用的着色器,材质等 调用 Draw Call:Draw Call 是 CPU 发送给 GPU 的一个命令,告诉 GPU 可以开始绘制...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader2:Shader与材质

前置:Unity3D基础3:贴图与材质球一、Shader 与材质贴图 +着色器(Shader)= 材质球同一张贴图使用不同的着色器,可以展现出不同的效果:在这个地方设置你的 Shader,默认的 Standard Shader 是一种基于物理渲染的着色器,自带一些光照效果下面是可视化面板,可以直接调整 Shader 里的各个参数,可调整的参数当然由对应的 Shader 决定二、创建一个 Shader先提前了解下 Unity Shader 的三种编写形式:...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader3:ShaderLab

一、UnityShader 的语言:ShaderLabShaderLab:专门为 UnityShader 服务的语言,在 Unity 中所有的 UnityShader 都是使用 ShaderLab 来编写的对于之前OpenGL 的学习需要考虑很多事情,包括但不限于模型和资源的加载、着色器的选择与输入、渲染状态的设置等,现在对于 Unity3D 还再多一个跨平台。这样要考虑的事情实在是太多了,而有了 UnityShader 这一抽象层后,开发者只需要使用 ShaderLab 来编写 Unity...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader4:UnityShader的形式

前置:UnityShader2:Shader与材质一、Standard Surface Shader 代码解析在前置中已经了解了什么是表面着色器,下面这是Standard Surface Shader,也是创建 Shader 时的默认代码之一Shader "Custom/NewSurfaceShader"{ Properties { _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo ...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader5:基本内置变量

一、前置基础无论是用哪种图形接口,又或是游戏引擎,入门的数学公式和逻辑就是那一套:基础线代公式汇总:https://blog.csdn.net/Jaihk662/article/details/103811465 欧拉角:https://blog.csdn.net/Jaihk662/article/details/106519595 基本空间:https://blog.csdn.net/Jaihk662/article/details/106237306 法向量/切线空间:https:/...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader6:最简单的顶点/片元着色器

一、顶点/片元着色器基本结构直接上代码:这个着色器可以得到蓝色的纯色输出,如果顶点着色器得出了错误的裁剪空间坐标,那么会出现很明显表现错误Shader "Jaihk662/NewSurfaceShader"{ Properties { } SubShader { Tags { "RenderType" = "Opaque" } LOD 200 PASS { ...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

中芯国际在上海建设 12 英寸芯片项目,中国内地第一条 FinFET 工艺生产线

2 月 8 日消息,据上海市发改委近日公布的 2021 年上海市重大建设项目清单,中芯国际的的 12 英寸芯片 SN1 项目入选,目前已处于在建状态。据了解,12 英寸芯片 SN1 项目的载体是中芯国际旗下公司中芯南方,总投资额 90.59 亿美元,其中生产设备购置及安装费达 73 亿美元;项目规划月产能 3.5 万片,已建设月产能 6000 片,是中国大陆第一条 Fi...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader7:内置包含文件UnityCG.cginc与GG/HLSL语义

一、包含文件 .cginc类似于头文件,cginc 可以理解为 GC include,用 #include 指令包括进来后,就可以使用其中的变量和帮助函数,在上一章:UnityShader6:最简单的顶点/片元着色器中,我们直接通过UnityObjectToClipPos(v) 这个方法来得到顶点在裁剪空间中的坐标,这个UnityObjectToClipPos() 方法就实现在对应的 .cginc 文件里Unity 自带一些非常基础的 .cginc 文件,例如UnityCG.cginc,...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

严禁 App 等传播,三部门联合部署开展集中行动,严厉打击春节档院线电影盗录传播...

作者 2 月 8 日消息国家版权局等今日宣布,中宣部版权管理局、中宣部电影局、公安部食品药品犯罪侦查局联合部署开展院线电影版权保护集中行动,严厉打击春节档院线电影盗录传播等违法犯罪行为,规范电影市场版权秩序。作者了解到,此次行动将联动配合院线、影院、网络服务商、行业协会共同完成。此外,三部门还联合发布了一些院线电影盗录传播典型案例,包括包括在影院盗录传播、通过运营网站...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0

UnityShader8:编写Shader时需要注意的细节和可能需要的意外/BUG

此文章实时更新一、FrameDebug 帧调试器Window → Frame Debugger → 打开后如下:帧调试器可以在游戏运行时冻结当前帧,以查看当前图像是怎么一步步渲染出来的开启帧调试 目前已执行到的对应渲染事件,可以从 Game 视图看到其对应渲染效果 当前帧所有渲染事件渲染事件非常的全面,其中 Draw 开头的就是 DrawCall,可以确定其对应的 GameObject,对应的渲染纹理也会显示在 Game 视图中一、注意事项1):平台渲染差异:...
分类: 其他 发布时间: 02-11 10:18 阅读次数: 0