本文主要是介绍UnityShader源码2017---学习笔记与自我拓展046,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
源自Internal-Flare,Internal-DepthNormalsTexture,Internal-ConvertTexture
忽略Internal-Flare,着实忽略
Internal-DepthNormalsTexture中
是各种RenderType的SubShader
COMPUTE_VIEW_NORMAL 在UnitCG.cginc里找到了定义
#define COMPUTE_VIEW_NORMAL normalize(mul((float3x3)UNITY_MATRIX_IT_MV, v.normal))
COMPUTE_DEPTH_01在UnityCG.cginc里找到了定义
#define COMPUTE_DEPTH_01 -(UnityObjectToViewPos( v.vertex ).z * _ProjectionParams.w)
关于EncodeDepthNormal的算法,google搜索一下Stereographic Projection
Internal-ConvertTexture
根据这个shader的注释,可看着这是shader是unity用来把Cubemap转行成6张图的shader
uv = uv * 2 - 1;
int idx = (int)_faceIndex;
float3 transformU = faceU[idx];
float3 transformV = faceV[idx];
float3 n = cross(transformV, transformU);
o.texcoord = n + uv.x * transformU + uv.y * transformV;
看一下这个图,看不太懂就算了吧,自己画画
O与法向量n这个平面中,
uv.x * transformU + uv.y * transformV表示的就是这个平面上、从原点O出发的的任意一个向量。
向量n与平面中任何一个向量相加,得到的向量的标准化的向量都是单位球的北半球的方向。
我们在sample cubemap的时候,需要的是方向,所以这个向量的长度不影响采样结果,所以就有了上面的码。。
附加:
https://en.wikipedia.org/wiki/Cube_mapping
https://en.wikipedia.org/wiki/Equirectangular_projection
https://stackoverflow.com/questions/29678510/convert-21-equirectangular-panorama-to-cube-map
http://paulbourke.net/miscellaneous/sphericalpano/
这篇关于UnityShader源码2017---学习笔记与自我拓展046的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!