【翻译&转载】shader的导数函数介绍
2017-09-01 11:08
253 查看
原文链接:http://www.aclockworkberry.com/shader-derivative-functions/
他人的翻译:http://blog.sina.com.cn/s/blog_7cb69c550102xvog.html
加上理解,一半照抄上面的博客
偏导函数,是 fragment shader 中使用的指令函数,在HLSL中的是ddx(..)和ddy(..),在GLSL中的是dFdx(..)和dFdy(..)
,分别对应 x,y轴上,在屏幕空间中,像素块中各种变量的变化率。
上面这句话是由于ddx和ddy的重载,可以把偏导函数用于向量和矩阵上。
1.最典型的用法是写出 flat 着色的效果:
在 fragment shader中,我们如果调用ddx(Pos),和ddy(Pos)这个代表求出相邻的2个像素块之间坐标的差值,即下面图中的红色和绿色2个矢量,而这2个矢量都在这个三角形的平面上,那么执行 normalize( cross(ddx(pos), ddy(pos)) ) 就求出的面的法线,但是这里要注意,在HlSL上面,或者Unity上面要写成normalize( cross(ddy(pos), ddx(pos)) ),不然法线是反向的。这个是由于左右手坐标系引起的。
2.其次是使用在纹理采样上:
在Unity里面测试
左边是直接显示图片,右边是在图片上面加上x和y的偏导数。
他人的翻译:http://blog.sina.com.cn/s/blog_7cb69c550102xvog.html
加上理解,一半照抄上面的博客
偏导函数,是 fragment shader 中使用的指令函数,在HLSL中的是ddx(..)和ddy(..),在GLSL中的是dFdx(..)和dFdy(..)
,分别对应 x,y轴上,在屏幕空间中,像素块中各种变量的变化率。
上面这句话是由于ddx和ddy的重载,可以把偏导函数用于向量和矩阵上。
1.最典型的用法是写出 flat 着色的效果:
在 fragment shader中,我们如果调用ddx(Pos),和ddy(Pos)这个代表求出相邻的2个像素块之间坐标的差值,即下面图中的红色和绿色2个矢量,而这2个矢量都在这个三角形的平面上,那么执行 normalize( cross(ddx(pos), ddy(pos)) ) 就求出的面的法线,但是这里要注意,在HlSL上面,或者Unity上面要写成normalize( cross(ddy(pos), ddx(pos)) ),不然法线是反向的。这个是由于左右手坐标系引起的。
2.其次是使用在纹理采样上:
在Unity里面测试
void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D(_MainTex, IN.uv_MainTex); //c += ddx(c)*2 + ddy(c)*2;这行代码开启和关闭的效果 o.Albedo = c.rgb; o.Alpha = c.a; }
左边是直接显示图片,右边是在图片上面加上x和y的偏导数。
相关文章推荐
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing
- 6.3 强大的网络请求第三方框架 Retrofit 的介绍和使用<未完待翻译>
- [转载+翻译]实时数据服务,firebase介绍
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing
- <转载> JavaSript模块规范 - AMD规范与CMD规范介绍
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing
- 【转载】【数据结构&&算法系列】KMP算法介绍及实现(c++ && java)
- 翻译介绍15个经典的MDX查询-06&07
- <转载>Js中Prototype、__proto__、Constructor、Object、Function关系介绍
- Vertex Shader&Pixel Shader介绍
- 考虑翻译oracle 的bbed介绍文档<Disassembling the Oracle Data Block>
- JNDI介绍(转载自-->IT江湖)
- [翻译]Qt, QSqlDatabase类详细介绍 【转载】
- Oracle® Database 2 Day DBA 11.2翻译--第一章 介绍
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing
- 翻译介绍15个经典的MDX查询-04&05
- 【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用
- 翻译介绍15个经典的MDX查询-06&07
- 【转载】Linux core 文件介绍
- Unity3D Shader官方教程翻译(七)----Shader语法:Pass的Culling & Depth Testing