反射探针.

ops/2024/12/27 3:47:57/

一、在unity场景中如何添加反射探针?

可以先添加一个空对象,在空对象的上方添加反射探针组件(Reflection Probe)


反射探针的类型有:Baked、Custom、Realtime

其中“Baked”反射探针类型,可以将场景中的静态对象烘焙到一张立方体纹理中

"Custom"类型的反射探针可以自定义添加立方体纹理

"Realtime"类型的反射探针可以实时的反射场景中的画面,无论对象是否为静态

    

二、在Shader中读取反射探针中所得到的立方体纹理画面

首先利用反射向量R对unity中的存储的立方体纹理进行采样

flixed4 cubeMap = UNITY_SAMPLE_TEXCUBE ( unity_SpecCube0 , R );

然后再对采样后的cubeMap进行解码(注意解码后的为fixed3类型)

fixed3 skyColor = DecodeHRD ( cubeMap , unity_SpecCube0_HDR );

unity_SpecCube0 是由反射探针实现并存储在unity中的立方体纹理贴图

利用 UNITY_SAMPLE_TEXCUBE( ) 对纹理进行采样

利用 DecodeHRD(cubeMap,unity_SpecCube0_HDR) 对采样后的立方体纹理进行解码

Shader"unity/Probe02"
{Properties{}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdate{float4 vertex:POSITION;float3 normal:NORMAL;};struct v2f{float4 pos:SV_POSITION;float3 worldNormal:TEXCOORD;float4 worldPos:TEXCOORD1;};v2f vert(appdate v){v2f o;o.pos=UnityObjectToClipPos(v.vertex);o.worldPos=mul(unity_ObjectToWorld,v.vertex);o.worldNormal=UnityObjectToWorldNormal(v.normal);return o;}float4 frag(v2f i):SV_TARGET{//V是由模型指向摄像机方向的向量,也就是指向视角方向的向量fixed3 V=_WorldSpaceCameraPos-i.worldPos;//法向量fixed3 N=normalize(i.worldNormal);//由视角入射方向向量和法向量求得反射向量fixed3 R=reflect(-V,N);//对unity_SpecCube0进行采样fixed4 cubeMap=UNITY_SAMPLE_TEXCUBE(unity_SpecCube0,R);//解码采样后的cubeMap(注意结果为三维向量)fixed3 skyColor=DecodeHDR(cubeMap,unity_SpecCube0_HDR);return fixed4(skyColor,1);}ENDCG}}}


http://www.ppmy.cn/ops/145279.html

相关文章

图解HTTP-HTTP报文

参考资料:图解HTTP HTTP报文 用于HTTP协议交互的信息被称为HTTP报文。请求端的HTTP请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(CR LF作为换行符)数据行构成的文本。 请求报文及响…

3001. 捕获黑皇后需要的最少移动次数

3001. 捕获黑皇后需要的最少移动次数 题目链接:3001. 捕获黑皇后需要的最少移动次数 代码如下: class Solution { public:int minMovesToCaptureTheQueen(int a, int b, int c, int d, int e, int f){if (a e && (c ! e || !in_between(b, d…

生产力利器,Mac 系统优选,keychron K10Max 三模键盘体验分享

生产力利器,Mac 系统优选,keychron K10Max 三模键盘体验分享 哈喽小伙伴们好,我是Stark-C~ 我在不久前也是跟风入手了Mac mini M4,作为多年的黑苹果用户,我这也算是正式转正了~。 选购理由 不过使用Mac mini的小伙伴…

Element-ui table组件:单元格未溢出,悬浮出现popover提示框

问题视图: 问题定位: 源码中,给开启溢出提示的列单元格都添加了class,并且宽度为实际列宽-1。 若单元格内容宽度100%撑开,则会计算为溢出情况。 处理方法: 单元格内容宽度设置100%-1。

[react]searchParams转普通对象

const [param, setParam] useSearchParams()const params Object.fromEntries(param.entries());console.log(params); 如果是params的话,就是用返回一个对象, const p useParams()console.log(p); 为什么是对象?难道param还能有2个字段? 还真是! 给2个占位符 {path:…

JDBC报错

报错信息 Exception in thread "main" java.sql.SQLException: The server time zone value is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to …

HTML 画布:创意与技术的融合

HTML 画布:创意与技术的融合 HTML 画布(<canvas>)元素是现代网页设计中的一个强大工具,它为开发者提供了一个空白画布,可以在上面通过JavaScript绘制图形、图像和动画。这种技术不仅为网页增添了视觉吸引力,还极大地丰富了用户的交互体验。本文将深入探讨HTML画布…

汽车IVI中控开发入门及进阶(47):CarPlay开发

概述: 车载信息娱乐(IVI)系统已经从仅仅播放音乐的设备发展成为现代车辆的核心部件。除了播放音乐,IVI系统还为驾驶员提供导航、通信、空调、电源配置、油耗性能、剩余行驶里程、节能建议和许多其他功能。 ​ 驾驶座逐渐变成了你家和工作场所之外的额外生活空间。2014年,…