挑战UnityShader手写代码之九_基本公式

下面为,公式和代码之快问快答

噪点Mask图的作用是?

2贴图融合的公式是?

取决于混色方式。例如按最常用的不透明度计算,每个通道的计算公式是α*A+(1-α)*B,其中A、B分别是两个色层同一通道的灰度值,A层在B层之上。α是A色层的不透明度。

α*A+(1-α)*B

公式怎么来的?

这又一个链接可以参考一下,关于混色的原理,1984年提出

http://ddrv.cn/a/316684

在很多Shader代码里,你会看到大量的(1-a),为什么要用1减去透明度?得到的是什么呢?实际上在做这些算法的时候,研究人员尽量模拟光线的特性来设计,例如,光线穿透一些具有透明度的物体,一部分光会投射过去,剩下一部分反射回来,被我们看到。

假设有两块有颜色的玻璃,一块红色,一块绿色,红色的玻璃透明度alpha = 0.2 ,则这块玻璃的透光率为80%,因为有80%的光透过去了,只有20%能被我们的眼睛接收,所以透明度为0.2,若alpha = 0,则透光率为100%,所有光线都透过去了,我们就看不到了,另一块绿色玻璃的透明度是0.6,则透光率是40%。现在,将两块玻璃叠放到一起,用一束太阳光照射后,光线先穿过红色玻璃,有80%的光透过去了,再经过绿色玻璃,有 80 * 40% = 32%的光透过去了,也就是两块玻璃叠加后,总的透光率为32%,所以透明度为0.68.

举个例子:

如上图,A== 圆 ; B==方;A在B上面

所以(alpha和A容易混淆,不能死背公式,需要理解)

c = A*\alpha + B*(1-\alpha )

当然,万幸的时,这时很简单的,最简单的加减乘除公式,真的草履虫都要懂的公式

要做2贴图融合,除了公式外,2贴图前后顺序必须先搞清楚,因为公式也是基于贴图的tex2D()取值

 

Mask 高光 Specular 的应用场景有??

 

Shader RenderMode Cutout原理

很多时候,Shader理论一堆,但是一上真机测试,完全没效果,可能缺的并不是代码,首先缺是反而一个有用的贴图,能用的贴图,(Unity Shader算不错了,起码不缺环境,不缺编译)

这里假定你有多年的Unity的经验,而且有一点编程经验,而不是找本宣读的大学生

不缺代码,不缺贴图,但缺了一行

        Pass {

             Tags { "LightMode" = "ForwardBase"}
                CGPROGRAM

总之剔除透明部分,就一行代码

//bu不知道有无卵用        
SubShader{
            Tags { "Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout"}

//写在片元 Frag 着色器
clip(col.a - _Cutoff);

//_Cutoff这参数,需要另外补充

参考:Unity3d同时支持半透、Cutout、阴影三种属性Shader

https://www.it610.com/article/1229590936779067392.htm

颜色十六进制转换

官方有提供不少方法,虽然名字有些怪,但很多三维的运算方法真的很多,要是全部学习,够你学几年了,其中的一个颜色转换方法:

Color nowColor;

ColorUtility.TryParseHtmlString("#FECEE1", out nowColor);
input16Color.text = ColorUtility.ToHtmlStringRGB(nowColor);

外发光Shader的调试

放大

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值