GLSL中环境映射&菲涅尔反射效果

GLSL内置变量和内置函数 shader内置变量: gl_Position: 用于vertex shader, 写顶点位置;被图元收集、裁剪等固定操作功能所使用;其内部声明是:highp vec4 gl_Position; gl_PointSize: 用于vertex shader, 写光栅化后的点大小,像素个数; 其内部声明是:mediump float gl_PointSize; gl_FragColor: 用于Fragment shader,写fragment 阅读详情

立方体贴图纹理与菲涅尔反射效果(Fresnel reflection)简介

环境映射

光滑物体表面的鏡面反射效果及投射效果可以极大提升渲染场景的真实性。然而,为了正确模拟这类效果,需要用到光线追踪等非常耗时的方法。由于影响渲染物体的外在因素只有周围的远景,我们可以直接使用周围环境的远景贴图来实现这种效果。这种方法称为环境映射,一般分为贴在球体上的球形映射(Sphere maping),和贴在立方体上的立方体映射(Cube maping)。下图为立方体贴图纹理示例。

cube_map.jpg

在OpenGL中

GL_TEXTURE_CUBE_MAP

用于声明立方体贴图纹理类型,用以下的设定,可以自动生成立方体贴图纹理用的贴图坐标。

glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);

上述代码指定生成坐标模式为 GL_REFLECTION_MAP 。


下文使用GLSL计算反射折射向量,然后参照立方体贴图纹理实现反射折射效果。

计算反射方向向量

通过以下公式计算反射向量

fresnel.eq1.gif

计算反射向量的shader代码如下.

  1
  2
  3
  4
  5
  6
 
vec3 Reflection(vec3 I, vec3 N)
{
    float cos_theta = dot(-I, N);
    vec3 R = 2*N*cos_theta+I;
    return (cos_theta > 0 ? normalize(R) : vec3(0.0));
}
LearnGL - 15.2 - Refraction - 折射效果 文章目录先看看效果折射现象refract 函数的使用Shader 调整my_lighting.glsl添加材质属性添加了着色器信息结构体添加了计算折射的函数提取了着色器函数外部调用References LearnGL - 学习笔记目录 前一篇:LearnGL - 15.1 - Reflection - 反射效果 - 了解了立方体贴图(环境贴图、天空盒)反射效果 这一篇:实现类似折射的效果 本人才疏学浅,如有什么错误,望不吝指出。 扯一些闲话: 前几天和小舅子玩了玩 PS4: 《Hell Driver》 阅读详情

相关推荐

Vulkan_Shader—环境映射天空盒

环境映射 我们现在将整个环境映射到了一个纹理对象上了,能利用这个信息的不仅仅只有天空盒。通过使用环境的立方体贴图,我们可以给物体反射和折射的属性。这样使用环境立方体贴图的技术叫做环境映射(Environment Mapping),其中最流行的两个是反射(Reflection)和折射(Refraction)。 在介绍这两种之前,我们先把,天空盒的顶点和片元着色器贴出来,很常规: 顶点着色器: #ve...

qq_35312463的博客 1187

【一步步学OpenGL 19】 -《镜面反射光》

教程19镜面反射光原文: http://ogldev.atspace.co.uk/www/tutorial19/tutorial19.htmlCSDN完整版专栏: http://blog.csdn.net/column/details/13062.html背景我们在计算环境光的时候,光的强度是唯一的影响因素。然后处理漫射光的时候公式中加入了光的方向参数。镜面反射包含了上面所有的综合因素并且添加了一个

Mr_厚厚的博客 5747

计算机图形学——GLSL编程

GLSL编程,是直接使用GPU进行图像的渲染,glsl是一个GPU编程的库。 这次作业分为三个部分:1.phong模型,2.水波,3.环境映射(environment mapping) 1.phone模型:

yfdyyy的专栏 1802

Shader编程:环境映射反射效果_2024-07-21_09-50-44.Tex

环境映射技术,无论是通过立方体贴图还是球面映射,都是在实时渲染中模拟反射效果的有效手段。通过预渲染环境图像并将其存储在纹理中,可以在着色器中快速计算反射颜色,从而大大提高了渲染效率。选择合适的环境映射方式,可以平衡视觉效果和性能需求,为用户提供更加真实和沉浸的视觉体验。预计算反射纹理(Precomputed Reflection Texture):在游戏加载时或场景变化时,预先计算反射纹理,减少实时计算的需要。屏幕空间反射(Screen Space Reflections)

742

openGL GLSL GLSL.Refract & Reflect & Diffraction 反射、折射、衍射Fresnel Effect

一、Refract & Reflect Snell定律描述了光线从一个介质传播到另外一个介质时,入射角、折射角以及介质折射率的关系。通过snell定律,可以根据入射光的方向向量求取折射光的方向向量。 Fresnel定律完善了光的衍射理论,当光线到达材质交界面时,一部分光被反射,另外一部分发生折射,这个现象被称为Fresnel Effect。尔现象混合了反射与折射,使得物体更加真实,理论物理中的Fresnel公式很复杂,因而在实时计算机图形学中,只要在最终效果上满足人们的视觉感受就可以了。在C.

aoxuestudy的专栏 2168

OPENGL ES 2.0 知识串讲 (6)——GLSL 语法(IV)

上面两节,主要讲解了 GLSL 中变量和函数的定义语法和使用语法,现在我们可以在 shader 中自定义一些我们所需要用到的变量和函数。但是在 shader 中, 还存在着一些内置的变量和函数。这些变量主要是用于将 Shader 计算得到的值传给 GPU,完成 Shader 在 Pipeline 中的功能。由于我们使用 shader 的目的就是为了把所需要的值传给 GPU,所以这些变量对我们非常重要。Shader 中内置的函数也非常重要,就好比 C 语言中的 printf 一样,把我们想要使用到的功能用一个

一个码农的博客 2125

GLSL环境映射Shader:为你的3D场景带来真实质感

GLSL环境映射Shader:为你的3D场景带来真实质感 项目基础介绍 matcap 是一个开源项目,它提供了使用GLSL(OpenGL Shading Language)编写的Shader程序,用于计算和渲染球形环境映射,也被称为“matcaps”。本项目由GitHub用户hughsk创建并维护,主要使用JavaScript和GLSL两种编程语言。 项目核心功能 项目的核心功能是生成和渲染球形环...

gitblog_00889的博客 489

探索Matcap:高效渲染球面环境映射GLSL着色器

探索Matcap:高效渲染球面环境映射GLSL着色器 项目介绍 Matcap(Material Capture)是一个用于计算和渲染球面环境映射(Spherical Environment Maps)的GLSL着色器库。球面环境映射是一种用于模拟物体表面反射环境的技术,常用于游戏和3D渲染中,以增强物体的真实感。Matcap项目通过提供高效的GLSL着色器,简化了这一复杂过程,使得开发者能够轻松...

gitblog_00094的博客 574

opengl环境映射反射贴图

注意完整的mesh与shader文件: mesh增加了法线与高度贴图: // render the mesh void Draw(Shader shader) { // bind appropriate textures unsigned int diffuseNr = 1; unsigned int specularNr = 1; unsigned int normalNr = 1; unsigne

wqdqwass的博客 1103

高级OpenGL特效实现:法线贴图、环境映射和粒子系统深度解析

OpenGL作为强大的跨平台图形API,为开发者提供了实现逼真视觉效果的无限可能。本文将深入探讨三种能显著提升图形表现力的高级技术——法线贴图、环境映射和粒子系统,通过GitHub加速计划/op/OpenGL项目中的实例,展示如何从零开始构建这些令人惊叹的视觉效果。 ## 一、法线贴图:让平面拥有立体细节的终极技巧 🚀 法线贴图技术通过修改表面法线方向,能在不增加多边形数量的情况下为物体赋予

gitblog_00509的博客 1095

Vulkan_片元着色器特效2(反射、折射、色散)

反射与折射的效果我们可以参照之前Vulkan_Shader—环境映射天空盒查看,之前也有简述过两者原理,今天除了上述两种效果外,我们主要来看一下色散的效果: ,在此之前我们首先来简单的回顾一下反射与折射,首先我们得理解立方体贴图: 立方图纹理是一种特殊的纹理映射技术,主要包括如下两个要点。 立方图纹理的单位是套,一套立方图纹理包括 6 幅尺寸相同的正方形纹理图。与构造天空盒的思路相同,这 6 幅图正好包含了周天360º全部的场景内容。 对立方图纹理进行采样时,需要给出的不再是 S、 T两个轴的纹理坐

qq_35312463的博客 836

GLSL-PathTracer实战案例:创建惊艳的实时渲染效果

GLSL-PathTracer是一款基于物理的路径追踪器,通过GLSL片段着色器实现实时渲染。它为开发者和设计爱好者提供了一个强大的工具,能够创建出照片级别的视觉效果,从金属质感的汽车到透明的龙形雕塑,都能通过这个开源项目轻松实现。 ## 🌟 项目核心功能亮点 GLSL-PathTracer之所以能成为开发者的得力助手,源于其丰富的特性集: - **先进的渲染技术**:采用单向路径追踪算法

gitblog_00741的博客 587

QT+OpenGL反射与折射

本篇完整工程见gitee:[QtOpenGL](https://gitee.com/turbolove/qtopengl.git) 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主

turbolove的博客 622

【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)

LearnOpenGL学习笔记 - Cubemap、Skybox、环境映射(反射、折射)

Duo1J的随笔 1253

Unity3D镜面反射效果的实现与优化

在现代3D游戏和虚拟现实应用中,逼真的视觉效果是提升用户沉浸感的关键因素之一。Unity3D作为流行的跨平台游戏引擎,提供了多种工具和方法来实现高质量的视觉渲染。镜面反射,作为其中的一种重要技术,能够在游戏场景中创造出物体表面反光的效果,增强场景的真实感和深度感。本章将从概念层面介绍Unity3D中镜面反射的基本概念及其在游戏开发中的重要性,为后续章节深入技术细节打下基础。在Unity3D中,镜面反射效果通常由Shader程序实现,通过精确模拟光线在光滑表面上的反射行为,渲染出逼真的光照和阴影。

weixin_42589700的博客 1079

OpenSceneGraph高级渲染技术:阴影、反射与后处理效果实现

OpenSceneGraph(OSG)作为一款强大的开源3D渲染引擎,提供了丰富的高级渲染特性,帮助开发者实现逼真的视觉效果。本文将详细介绍如何在OSG中实现阴影、反射和后处理效果,为你的3D应用增添专业级视觉体验。 ## 一、阴影技术:打造真实光影效果 阴影是提升3D场景真实感的关键要素。OSG提供了多种阴影实现方案,满足不同场景需求。 ### 1.1 阴影技术选型 OSG支持多种阴影算

gitblog_00272的博客 470

3Dshader之球形环境映射(sphere environment mapping)

尼玛等了135天,终于第二个shader出炉了,哥,汗颜啊,真TM扯蛋,不过这几个月都在看一些基础图形的数学知识以及RTR,看了几本过后还是感觉实践才能真正理解所学的东西.好了废话不多说了,这个shader花了我三天的时间(准备的说是三个晚上)国际惯例,先上图:     换个角度

十年磨一剑 6854

10.23

小结 时隔几天我又复活了,今天把用Unity时碰到的一个小BUG解决了,不知道是什么原因,之前在对Cubemap的参数调整的时候老是会突然死掉。我还以为是使用脚本生成函数有问题,但是看了一遍代码,感觉好像也没有什么毛病。但是就是不能将获得的贴图赋予给Cubemap。后来在Cubemap的debug地方勾选了Readable 才能够显示。虽然解决了问题,但是还是不能理解原因。在normal的情况下 ...

qq_38022564的博客 222
上一篇: GLSL中创建贴图
下一篇: 【CG物理模拟】风筝模拟
Tako小8君
博客等级 码龄15年 129粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值