1-1
焦散是一种光学现象,是指当光线穿过不规则的透明物体时,发生折射,在投影表面产生或聚拢或分散的光子分布。如图1-1。
在游戏中,一般是用贴图来模拟焦散,如果你想知道的是有关于实时焦散计算,那么这篇文章不适合你。
UnityCG.cginc中原函数如下:
// Z buffer to linear 0..1 depth (0 at eye, 1 at far
plane)
inline float Linear01Depth( float z )
{
return 1.0 / (_ZBufferParams.x * z + _ZBufferParams.y);
}
// Z buffer to linear depth
inline float LinearEyeDepth( float z )
{
return 1.0 / (_ZBufferParams.z * z + _ZBufferParams.w);
}
其中_ZBufferParams的定义如下:
double zc0,
zc1;
UnityCG.cginc中的原函数代码如下:
inline float4 EncodeFloatRGBA( float v )
{
float4 kEncodeMul = float4(1.0, 255.0, 65025.0,
160581375.0);
float kEncodeBit = 1.0/255.0;
float4 enc = kEncodeMul * v;
enc = frac (enc);
enc -= enc.yzww * kEncodeBit;
return enc;
}
inline float DecodeFloatRGBA( float4 enc )
{
float4 kDecodeDot = float4(1.0, 1/255.0, 1/65025.0,
1/160581375.0);
return dot( enc, kDecodeDot );
}
单单看代码实在让人摸不着头脑,展开后可得EncodeFloatRGBA的最终结果为:
x = 1/v - 1/(v*255^2);//R
y = 1/(v*255) - 1/(v*255^3);//G
z = 1/(v*255^2) - 1/(v*255^4);//B
w = 1/(v*255^3) - 1/(v*255^4);//A
感觉抓到了一点东西,但是还是不是很清楚,再看Decode函数计算结果:
[1/v-1/(v*255^2)] + [1/(v*255^2)-1/(v*255^4)]
亲爱的朋友:
欢迎您在新浪博客安家,您的博客地址是:http://blog.sina.com.cn/u/1895393961
您可以用文字、图片、视频记录和展示最真实的自我,与网友交流,与线上好友聊天,还能通过手机发表博文和上传图片,随时随地记录心情和身边趣闻。
我们为您提供了丰富的炫酷模板来装点您在网上的家园,强大的音乐播放功能更能陪伴您的网络生活。准备好了吗?现在就开始精彩的博客之旅!