22.Shader | 您所在的位置:网站首页 › asset的复数 › 22.Shader |
目录 1.生成Cubemap 2.环境映射 2.1反射 2.2折射 2.3菲涅尔反射 1.生成Cubemap官方的文档中的生成CubeMap代码, Copy就行 https://docs.unity3d.com/cn/2023.1/ScriptReference/Camera.RenderToCubemap.html 生成步骤: 1.在Assets目录中, 右键 Create/Legacy/Cubemap 得到一张空白CubeMap 2.打开菜单栏GameObject/Render into Cubemap 拖拽填上拍摄位置和CubeMap, 渲染,即可生成 这个CubeMap在后面的步骤会用到 2.1CubeMap反射随视角变换看到不同的图形 反射方向:Reflect(- 视角方向,法线方向)使用 texCUBE(_CubeMap,反射方向), 对_CubeMap采样 与漫反射混合 理解 CubeMap将相机在球位置上的各个方向看到结果都保存起来 texCUBE()函数可以由方向反推得到颜色 于是, 球的表面顶点的反射结果为, 视角反射方向, 对应在CubeMap上的颜色 核心代码(Texture_uv.shader上修改) 完整代码Texture_uv_cubeMap.shader 2.2折射斯涅尔定律 η1sinθ1=η2sinθ2 透射比 η2/η1 (出射/入射) 而在Unity中, 使用Refact计算即可 折射方向 Refact(-viewDir,worldNormalDir,_RefractRatio) 核心代码 使用refract代替reflect, 将反射改为折射 折射2.3菲涅尔反射入射角大,反射效果强而清晰,入射角小,反射效果弱而模糊的现象 引用: https://www.cnblogs.com/AEMShana/p/16837367.html理论 当光线照射到物体表面时,一部分反射或者折射,一部分进入了物体内部。被反射的光和入射光之间存在一定的比率关系,这个比率和你观察物体表面的角度有关。 主要使用的近似公式有两种 Schlick菲涅尔反射公式 Fs = F0 + (1-F0)(1-v· n)^5 F0是反射系数(反射强度),v是视角方向,n是表面法线。 Empricial菲涅尔反射公式 Fe = saturate( bias+scale*(1-v· n)^power ) 其中bias,scale,power是控制项。 两个公式不需要理解, 是根据现实材质反射模拟的近似函数, 现实的各种材质的反射规律又各有不同。 核心代码 完整代码 Texture_cubeMap_schlick.shader 在工程中效果不明显 左菲涅尔反射, 右普通反射当_ReflectAmount调为0时,边缘会有反射 完整代码: https://github.com/smartgrass/MyCodes/tree/main/ShaderLearning 下一篇: 渲染纹理 和 玻璃效果和GrabPass |
CopyRight 2018-2019 实验室设备网 版权所有 |