公司做网站能抵扣进项税吗,wordpress 显示大图,凡科网站建设教程,域名备案做电影网站前言这次呢#xff0c;继续再来看一个iq大神的简单作品#xff0c;作品虽简单#xff0c;但是却包含了很多知识点#xff0c;先放上最终效果#xff1a;ShaderToy地址#xff1a;https://www.shadertoy.com/view/MsS3Wc不过本篇改动较大#xff0c;最终效果与ShaderToy上…前言这次呢继续再来看一个iq大神的简单作品作品虽简单但是却包含了很多知识点先放上最终效果ShaderToy地址https://www.shadertoy.com/view/MsS3Wc不过本篇改动较大最终效果与ShaderToy上的已不太一致这点请注意不要因此产生困扰本篇的核心主要在于探讨几种不同的HSV转换到RGB的方法。色彩模式色彩模式有很多种每一种都有各自的用途比如RGB用于计算机显示器的显示CMYK用于纸张的印刷等等。RGBRGB色彩模式是工业界的一种颜色标准是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的RGB即是代表红、绿、蓝三个通道的颜色这个标准几乎包括了人类视力所能感知的所有颜色是目前运用最广的颜色系统之一。HSV/HSL但是RGB的方式对于人类来说并不友好比如我问你R104G185B166是个什么颜色可能你需要想很久甚至最后也不一定能正确回答出来这不怪你都是RGB的错〜于是呢计算机图形学研究人员在20世纪70年代设计出了一种更符合人类感知的色彩模式这就是HSV与HSL这两者类似但又有些区别。HSV有时也被叫做HSB其中的V与B表示的是亮度的意思。共同点两者的色彩模型都可以用一个圆柱体来表示每个色调的颜色色相被排列在圆柱中呈放射状的圆形横截面上以圆柱中心为轴从下到上为黑色到白色的过渡不同点HSV表示法模拟了不同颜色混合在一起的方式Saturation饱和度类似于当前颜色纯度与最大纯度的比值范围[0,1]0时为灰色Value亮度则是表示颜色与不同数量的黑色或白色的混合物。HSL模型尝试类似于更感性的颜色模型例如Natural Color SystemNCS或Munsell color system颜色系统将完全饱和的颜色置于亮度值为1/2的圆周围其中亮度值0或1分别为完全黑色或白色。本文的重点HSV即Hhue色相Ssaturation饱和度Vvalue亮度通过定义一个颜色的色相然后饱和度多少最后亮度又是多少即可得到我们所想要的颜色值。有人问了那既然HSV更符合人类感知那为什么还要用RGB呢能不能把RGB去掉呢那肯定是不能啦因为显示器本身的硬件是通过RGB红绿蓝三色发光极来生成色彩的HSV就相当于为了使我们人类更易懂而产生的一种中间语言效果实现顶点着色器顶点着色器一始既往没什么好说的仅仅正确显示模型以及获取UV值即可。v2f 片断着色器fixed4 这个实例的片断着色器还是比较清晰易懂的大体分析如下通过uv定义出hsv分别利用此hsv实现三种HSV2RGB的效果注释了前面两个仅显示最后一个效果HSV UV大致理清思路后我们来看细节实现fixed3 定义三维向量hsv返回的值是由屏幕uv坐标组合而来HSVHi.uv.xS1Vi.uv.y也就是说屏幕的横向坐标表示的是色相H垂直坐标表示的是亮度V,而饱和度S假设都是1的情况。这个我们可以打开Unity中的拾色器将色板切换到HSV模式下就可以直观的感受到这样分UV的用途了。HSV2RGB(标准版)fixed3 根据我们上面的大体分析这里主要是将我们的hsv通过自定义的函数hsv2rgb_01来转换成RGB颜色后的效果。Wiki上的公式https://en.wikipedia.org/wiki/HSL_and_HSV首先需先满足条件:H ∈ [0º,360º]S ∈ [0,1]V ∈ [0,1]然后直接上公式翻译后的Shader代码如下fixed3 注公式中的h/60在代码中变成了h*6,原因是因为我们传进来的h并不是[0º,360º]而是[0,1]所以才需要*6来限定最终的结果在[0,5]之间.注switch仅支持#pragma target 3.5及以上hsv2rgb_01返回的结果如下效果刚好与我们上面在拾色器中看到的一样横向表示色相竖向表示亮度而饱合度是1的情况。HSV2RGB(替代版)以上的版本虽然效果实现上没有问题但是会产生一些性能与兼容性的问题于是在Wiki上还有一种替代方案公式如下:套用公式翻译成js语言:function 转换成shader后的代码fixed3 返回的效果如下与hsv2rgb_01效果一致但是运算量更少支持更低的SM版本。HSV2RGB优化版然而我在ASE中发现了一版更优的版本效果同样一致运算量更少代码如下float3 总结那么HSV转换RGB功能我们可以用在什么地方呢比如我们可以用在后处理上暴露HSV参数来方便直观的调节然后内部转换成RGB同样也可以用在一些角色材质的换色上等等。最后欢迎大家关注更多干货的公众号Unity技术美术 ( ID:gh_8b69cca044dc )Unity技术美术QQ交流分享群19470667(1群已满763506271