HLSL实现反射天空盒

 1 cbuffer cbPerObject
 2 {
 3     float4x4 WVP;
 4     float4x4 World;
 5     float3 cameraPos;
 6 };
 7
 8 SamplerState ObjSamplerState;
 9 TextureCube SkyMap;
10
11 struct REFLECT_VS_OUTPUT
12 {
13     float4 Pos : SV_POSITION;
14     float3 TexCoord : TEXCOORD;
15     float3 normal : NORMAL;
16 };
17
18 REFLECT_VS_OUTPUT REFLECT_VS(float3 inPos : POSITION, float2 inTexCoord : TEXCOORD, float3 normal : NORMAL)
19 {
20     REFLECT_VS_OUTPUT output = (REFLECT_VS_OUTPUT)0;
21     output.Pos = mul(float4(inPos, 1.0f), WVP);
22     output.normal = mul(normal, World);
23     output.TexCoord = inPos;
24
25     return output;
26 }
27
28 float4 REFLECT_PS(REFLECT_VS_OUTPUT input) : SV_Target
29 {
30     input.normal = normalize(input.normal);
31     float3 I = normalize(input.Pos - cameraPos);
32     float3 R = reflect(I, normalize(input.normal));
33     return SkyMap.Sample(ObjSamplerState, R);
34 }

cube-mapping-skybox

效果:

我们基于观察方向向量I和物体的法线向量N计算出反射向量R。我们可以使用GLSL的内建函数reflect来计算这个反射向量。最后向量R作为一个方向向量对cubemap进行索引/采样,返回一个环境的颜色值。最后的效果看起来就像物体反射了天空盒。

反射(reflection)

时间: 2024-10-16 11:51:19

HLSL实现反射天空盒的相关文章

光照——06反射环境

学习笔记适合新手,如有错误请指正.?号处也请各位指点下,谢谢. 在3D开发中,需要模拟很多现实中的效果,例如一颗钢珠会将周围的画面反射,在Unity中,可以通过设置材质的属性来实现 反射天空盒 新建一个场景>创建一个Sphere球体>新建材质并赋予球体 设置材质的两个参数即可反射天空盒>将材质的Metallic设置为1(也就是金属属性为最大)>将Smoothness设置为1,最平滑 反射天空盒及场景 仅仅反射天空盒是不够的,像赛车游戏中赛车的玻璃和车身,如果能反映周围的环境就会大大

Unity5 GI与PBS渲染从用法到着色代码

本文主要介绍Untiy5以后的GI,PBS,以及光源探头,反射探头的用法以及在着色器代码中如何发挥作用,GI是如何影响渲染的,主要分成三个部分,最开始说明PBS需要的材质与相应概念,二是Unity 里相应GI的操作,三是对应着色器代码的理解.如果没有特殊声明,所有操作与代码都是针对Unity5.3. PBS材质与概念 简单来说,PBS的优点不同的照明下获得一致的外观,更容易实现,更直观的参数. PBS材质概念: 1.albedo 反照率 反照率贴图定义漫反射的基本颜色,与原来的漫反射贴图相比,不

Unity 5 中的全局光照技术详解 (转载)

原文链接 本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND RENDERING (文章较长,请耐心阅读)简介全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算. 同一场景里:没有照明(左),只有直接光源(中),和有间接光源的全局光照(右)的表现,注意颜色如何在不同的表面进行光的"反弹",产生更真实的结果. 在本文

Unity 5 中的全局光照技术详解(建议收藏)

2015-07-01 10:43 编辑: cocopeng 分类:游戏开发 来源:Unity全球官方网站 1 47108 Unity 5全局光照技术 招聘信息: 资深软件研发工程师 嵌入式软件工程师 cocos2d-x休闲游戏开发 产品经理 Cocos2d-x游戏客户端开发 Java工程师 Cocos2d-x js高级开发工程师 Mac开发 应用开发工程师(iOS) 技术合伙人-后端工程师 高级iOS开发工程师 本文整理自Unity全球官方网站,原文:UNITY 5 - LIGHTING AND

Unity 5 中的全局光照技术详解

简介 全局光照,简称GI,是一个用来模拟光的互动和反弹等复杂行为的算法,要精确的仿真全局光照非常有挑战性,付出的代价也高,正因为如此,现代游戏会先一定程度的预先处理这些计算,而非游戏执行时实时运算. 同一场景里:没有照明(左),只有直接光源(中),和有间接光源的全局光照(右)的表现,注意颜色如何在不同的表面进行光的"反弹",产生更真实的结果. 在本文中,我们会描述全局光照如何在Unity里运作,带领你通过不同的照明技术解释如何在项目里设定照明,并思考如何透过各种工具帮场景打光. 选择一

在CG/HLSL中访问着色器属性(Properties)

在CG/HLSL中访问着色器属性 Shader在Properties块中访问材质属性.如果你想在一个着色程序中访问一些属性,你需要声明一个Cg/HLSL具有相同的名称和一个匹配的类型的变量. Properties 例如这些材质属性: _MyColor ("Some Color", Color) = (1,1,1,1) _MyVector ("Some Vector", Vector) = (0,0,0,0) _MyFloat ("My float"

DirectX11 With Windows SDK--23 立方体映射:动态天空盒的实现

前言 上一章的静态天空盒已经可以满足绝大部分日常使用了.但对于自带反射/折射属性的物体来说,它需要依赖天空盒进行绘制,但静态天空盒并不会记录周边的物体,更不用说正在其周围运动的物体了.因此我们需要在运行期间构建动态天空盒,将周边物体绘制入当前的动态天空盒. 没了解过静态天空盒的读者请先移步到下面的链接: 章节回顾 22 立方体映射:静态天空盒的读取与实现 DirectX11 With Windows SDK完整目录 Github项目源码 欢迎加入QQ群: 727623616 可以一起探讨DX11

(转)【D3D11游戏编程】学习笔记二十一:Cube Mapping及其应用之一:天空盒的实现

(注:[D3D11游戏编程]学习笔记系列由CSDN作者BonChoix所写,转载请注明出处:http://blog.csdn.net/BonChoix,谢谢~) 这一节讨论有关纹理映射的进阶内容:Cube Mapping. 1. 简介 单从名字上,就大概可以看出点端倪了,翻译成中文为立方体映射,因此肯定跟立方体有关系.确实,Cube Mapping就是使用六张正方形的图片来进行纹理映射的.这六张图片分别对应了一个立方体中的六个面.由于这个立方体是轴对齐的,因此每个面可以用坐标系中的六个轴方向来惟

(转载)(官方)UE4--图像编程----着色器开发----HLSL 交叉编译器

HLSL 交叉编译器 这个库将 高级着色语言 (HLSL) 着色器源代码编译成高级中间表示法,执行独立于设备的优化,并生成 OpenGL 着色语言 (GLSL) 兼容源代码.这个库在很大程度上基于 Mesa 的 GLSL 编译器.前端已进行大量重新编写,以解析 HLSL 并根据 HLSL 抽象语法树 (AST) 生成 Mesa IR.这个库利用 Mesa 的 IR 优化来简化代码,并根据 Mesa IR 最终生成 GLSL 源代码.GLSL 生成是以 GLSL 优化器中的工作为基础. 除了生成