可通过unity_SpecCube0将其作为立方体贴图纹理使用。这次使用TEXTURECUBE宏在GI中声明其采样器状态。 然后添加带有世界空间表面参数的SampleEnvironment函数,对纹理进行采样,并返回其RGB分量。我们通过SAMPLE_TEXTURECUBE_LOD宏对立方体贴图进行采样,该宏将贴图,采样器状态,UVW坐标和mip级别作为
可通过unity_SpecCube0将其作为立方体贴图纹理使用。这次使用TEXTURECUBE宏在GI中声明其采样器状态。 然后添加带有世界空间表面参数的SampleEnvironment函数,对纹理进行采样,并返回其RGB分量。我们通过SAMPLE_TEXTURECUBE_LOD宏对立方体贴图进行采样,该宏将贴图,采样器状态,UVW坐标和mip级别作为参数。由于它是立方体贴图,因此...
float3 posWS=TransformObjectToWorld(v.vertex.xyz);//建筑物向下位置偏移_ReflectDepthposWS.y-=_ReflectDepth; 通过加入cubemap来增加建筑的光影关系: float mip=PerceptualRoughnessToMipmapLevel(_Roughness,UNITY_SPECCUBE_LOD_STEPS);//采样cubemap模拟间接光float cubeIntensity=SAMPLE_TEXTURECUBE_LOD(_LightCu...
float MidLevel=roughness*6;//把粗糙度remap到0-6 7个阶级 然后进行lod采样 float4 speColor=SAMPLE_TEXTURECUBE_LOD(unity_SpecCube0, samplerunity_SpecCube0,reflectDirWS,MidLevel);//根据不同的等级进行采样 #if !defined(UNITY_USE_NATIVE_HDR) return DecodeHDREnvironment(speColor,unity_SpecCube0_HDR...
此外,间接光镜面反射计算思路也不变,变了的只是一些函数的写法和用法,比如采样Cubemap的函数成了: SAMPLE_TEXTURECUBE_LOD(),以及URP下没有自定义的FresnelLerp()函数了,需要自己给定(我不确定是没有了还是更换了函数名称)。 解码HDR函数成了:DecodeHDREnvironment() ...
我们可以把视线方向取个负,然后根据法线把它镜像一下,去取cubemap.可以使用UNITY_SAMPLE_TEXCUBE_LOD函数。其中,unity_SpecCube0是unity内部维护的cubemap,我们可以直接取它,reflectVec就是视线方向的法线镜像,mip就是我们根据光滑度算出的mip层级。 half mip = mip_roughness * UNITY_SPECCUBE_LOD_STEPS;//得出...
第三个黑体:这个Sampler2D,可以理解为引用一个2D Texture。因为下面的Tex2D函数需要这种类型。所以说这个后面的名字要与Properties里的对应一样才行。 第四个黑体:Tex2D,这玩意就是根据对应材质上所有的点找指定 2DSample上的Texture信息,此处需要其RGB信息,就打出来赋给了其反射值。所以对有材质图的情况下,要显...
Unity中Shader LOD控制 这一部分算是比较简单的内容,与其说是技术相关,不如说是新项目美术前期规划方面的准备。前期地基打的越牢,后面的工作越轻松。 Shader Level of Detail (LOD),翻译过来是什么“着色器的细节层次效果”。听着好高端的样子,这种夸张的翻译也就只能放在那些作者自己都不知道写的是什么的软文里面...
Cube - 即Cube map texture(立方体纹理),简单说就是6张有联系的2D贴图的组合,主要用来做反射效果(比如天空盒和动态反射),也会被转换为对应点的采样; Range(min, max) - 一个介于最小值和最大值之间的浮点数,一般用来当作调整Shader某些特性的参数(比如透明度渲染的截止值可以是从0至1的值等); ...
sample = SAMPLE_TEXTURECUBE_LOD( unity_SpecCube1, samplerunity_SpecCube0, uvw, mip ); color = lerp(sample.rgb, color, blend); } return color; } 4.3 HDR 解码 我们现在支持反射探头,但前提是它们的纹理包含未编码的光数据。这是通常的情况,但是当HDR编码或探测器的强度发生变化时,情况就不一样了...