开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

蛮牛译馆

关注:596

当前位置:游戏蛮牛 技术专区 蛮牛译馆

查看: 2150|回复: 9

[Unity教程] Unity改进彩虹【3】——程序化彩虹方法的优化

[复制链接]  [移动端链接]
排名
8202
昨日变化
7

263

主题

301

帖子

1534

积分

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

UID
159865
好友
9
蛮牛币
3979
威望
0
注册时间
2016-8-1
在线时间
626 小时
最后登录
2017-11-19

蛮牛译员

发表于 2017-8-11 11:41:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 manew_JR 于 2017-8-11 11:42 编辑

改进彩虹——程序化彩虹方法的优化
在本教程的前一篇文章中,我们已经看到了改进彩虹的方法,我们已经看到了不同的技术,可以在程序上再现彩虹的颜色。有效地解决这个问题将使我们能够以更高的逼真度来模拟基于物理的反射。

这篇文章的目的是介绍一种新的方法,它比以前的任何解决方案都能产生更好的结果,而不需要使用任何分支。
01.png


你可以在这里找到完整的系列:

Part 1. The Nature of Light
Part 2. Improving the Rainbow (Part 1)
Part 3. Improving the Rainbow (Part 2)
Part 4. Understanding Diffraction Grating
Part 5. The Mathematics of Diffraction Grating
Part 6. CD-ROM Shader: Diffraction Grating (Part 1)
Part 7. CD-ROM Shader: Diffraction Grating (Part 2)
Part 8. Iridescence on Mobile
Part 9. The Mathematics of Thin-Film Interference
Part 10. Car Paint Shader: Thin-Film Interference
教程结束会有程序包供下载



介绍
在前一篇文章中,我们分析了四种不同的技术,将电磁波的可见光范围(400 - 700纳米)的波长转换为各自的颜色。

其中三种解决方案(JET,Bruton和Spektre)严重依赖于if语句。虽然这是c#的标准实践,但在着色器中分支是出了名的坏。GPU Gems书中讨论的方法是唯一没有使用任何分支的方法。尽管如此,它并没有提供可见光谱中颜色的最佳近似。

Name
Gradient
GPU Gems
Visible

这篇文章将展示在GPU Gems书中首次描述的优化版本的色彩方案。


“Bump”的颜色方案
在GPU Gems书中引入的原始配色方案使用了三个抛物线(被作者称为“凹凸”)来复制彩虹中R、G和B的分布。

02.png

每个凹凸都由以下方程描述:

1 \\ 1-x^2 & \mathit{otherwise} \end{matrix}\right.\]">


在范围[40,700]中,每个波长w都与范围[0,1]中的标准值x相关联。然后,给出了可见光谱的R、G和B分量:



所有数值都是由作者在实验中选择的。然而,你可以看到它们在颜色的实际分布上有多糟糕。

03.png



优化质量

我个人提出的第一个解决方案,完全使用了GPU Gems颜色方案的相同公式。然而,我已经优化了所有的数值,使颜色的最终范围尽可能地与可见光的颜色相匹配。

结果收敛于以下的解:

04.png

然后得出一个更实际的结果:

Name
Gradient
GPU Gems
Zucconi
Visible


与原始的解决方案一样,这种新方法是无分支的。因此,它适合于着色器。这是代码:

[C#] 纯文本查看 复制代码
// Based on GPU Gems
// Optimised by Alan Zucconi
inline fixed3 bump3y (fixed3 x, fixed3 yoffset)
{
        float3 y = 1 - x * x;
        y = saturate(y-yoffset);
        return y;
}
fixed3 spectral_zucconi (float w)
{
    // w: [400, 700]
        // x: [0,   1]
        fixed x = saturate((w - 400.0)/ 300.0);

        const float3 cs = float3(3.54541723, 2.86670055, 2.29421995);
        const float3 xs = float3(0.69548916, 0.49416934, 0.28269708);
        const float3 ys = float3(0.02320775, 0.15936245, 0.53520021);

        return bump3y (        cs * (x - xs), ys);
}



告诉我更多关于这个解决方案!



改进彩虹

如果我们仔细观察可见光谱中颜色的分布,我们就会发现抛物线不能真正地捕捉到R、G和B的颜色曲线。一个稍微好一点的方法是使用六个抛物线,而不是三个。为每个主组件安装两个bumps,我们可以得到一个更好的近似。这种差异在光谱的紫色部分是可见的。
05.png


这种差异在光谱中的紫色和橙色部分是可见的:
Name
Gradient
Zucconi
Zucconi6
Visible

下面是代码:

[C#] 纯文本查看 复制代码
// Based on GPU Gems
// Optimised by Alan Zucconi
fixed3 spectral_zucconi6 (float w)
{
        // w: [400, 700]
        // x: [0,   1]
        fixed x = saturate((w - 400.0)/ 300.0);

        const float3 c1 = float3(3.54585104, 2.93225262, 2.41593945);
        const float3 x1 = float3(0.69549072, 0.49228336, 0.27699880);
        const float3 y1 = float3(0.02312639, 0.15225084, 0.52607955);

        const float3 c2 = float3(3.90307140, 3.21182957, 3.96587128);
        const float3 x2 = float3(0.11748627, 0.86755042, 0.66077860);
        const float3 y2 = float3(0.84897130, 0.88445281, 0.73949448);

        return
                bump3y(c1 * (x - x1), y1) +
                bump3y(c2 * (x - x2), y2) ;
}



毫无疑问,光谱- zucconi6提供了最好的颜色近似,没有引入任何分支。如果性能是一个问题,您可以依赖它的简化版本的光谱- zucconi。


结语

本文提供了一些最常用的技术,以在着色器中生成类似彩虹的模式。此外,还介绍了一种新颖的方法。
Name
Gradient
JET
Bruton
GPU Gems
Spektre
Zucconi
Zucconi6
Visible

你可以在这个Shadertoy页面上找到这些色彩方案的WebGL版本。


你可以在这里找到完整的系列:
Part 1. The Nature of Light
Part 2. Improving the Rainbow (Part 1)
Part 3. Improving the Rainbow (Part 2)
Part 4. Understanding Diffraction Grating
Part 5. The Mathematics of Diffraction Grating
Part 6. CD-ROM Shader: Diffraction Grating (Part 1)
Part 7. CD-ROM Shader: Diffraction Grating (Part 2)
Part 8. Iridescence on Mobile
Part 9. The Mathematics of Thin-Film Interference
Part 10. Car Paint Shader: Thin-Film Interference
您可以在Patreon上下载cd - rom着色效果的Unity包。
在Patreon上,Python的项目用于发现光谱和zucconi6函数的最优参数。




原文标题:Improving the Rainbow – Part 2








评分

参与人数 2鲜花 +3 收起 理由
ITsuperFan + 2 赞一个!
youxicehua + 1 赞一个!

查看全部评分

[发帖际遇]: manew_JR 捡了钱没交公 蛮牛币 降了 2 . 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1112/1500
排名
3310
昨日变化

12

主题

546

帖子

1112

积分

Rank: 6Rank: 6Rank: 6

UID
206456
好友
1
蛮牛币
2023
威望
0
注册时间
2017-2-14
在线时间
260 小时
最后登录
2017-12-8
发表于 2017-8-11 17:56:17 | 显示全部楼层
{:90:}{:90:}

回复

使用道具 举报

7日久生情
3282/5000
排名
4913
昨日变化
21

4

主题

2740

帖子

3282

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
209186
好友
5
蛮牛币
3792
威望
0
注册时间
2017-3-1
在线时间
308 小时
最后登录
2017-12-14
发表于 2017-8-14 09:21:02 | 显示全部楼层
学习了,part3

回复

使用道具 举报

5熟悉之中
969/1000
排名
3762
昨日变化
2

0

主题

480

帖子

969

积分

Rank: 5Rank: 5

UID
156480
好友
0
蛮牛币
1594
威望
0
注册时间
2016-7-12
在线时间
179 小时
最后登录
2017-11-27
发表于 2017-8-15 10:17:41 | 显示全部楼层
666666666666
[发帖际遇]: 东方小巴黎 乐于助人,奖励 3 蛮牛币. 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1176/1500
排名
2597
昨日变化

1

主题

468

帖子

1176

积分

Rank: 6Rank: 6Rank: 6

UID
45741
好友
0
蛮牛币
482
威望
0
注册时间
2014-9-19
在线时间
257 小时
最后登录
2017-12-8
发表于 2017-8-16 09:46:46 | 显示全部楼层
不错的资源,谢谢楼主的分享。

回复 支持 反对

使用道具 举报

0

主题

12

帖子

24

积分

Rank: 1

UID
213733
好友
0
蛮牛币
15
威望
0
注册时间
2017-3-22
在线时间
13 小时
最后登录
2017-12-13
发表于 2017-8-23 17:45:22 | 显示全部楼层
很好,很不错

回复

使用道具 举报

4四处流浪
427/500
排名
6857
昨日变化
3

3

主题

206

帖子

427

积分

Rank: 4

UID
234982
好友
0
蛮牛币
873
威望
0
注册时间
2017-7-30
在线时间
78 小时
最后登录
2017-12-5
发表于 2017-9-2 11:11:28 | 显示全部楼层
请为撸干杯吧朋友,撸完还能撸.代码你值得拥有

回复 支持 反对

使用道具 举报

4四处流浪
349/500
排名
11398
昨日变化
11

0

主题

239

帖子

349

积分

Rank: 4

UID
235457
好友
0
蛮牛币
340
威望
0
注册时间
2017-8-2
在线时间
46 小时
最后登录
2017-10-6
发表于 2017-9-4 11:35:35 | 显示全部楼层
66666666666666666666666

回复 支持 反对

使用道具 举报

3偶尔光临
250/300
排名
8896
昨日变化
9

0

主题

75

帖子

250

积分

Rank: 3Rank: 3Rank: 3

UID
163777
好友
1
蛮牛币
311
威望
0
注册时间
2017-2-27
在线时间
75 小时
最后登录
2017-12-13
发表于 2017-9-18 14:25:43 | 显示全部楼层
精彩的文章

回复

使用道具 举报

4四处流浪
427/500
排名
6857
昨日变化
3

3

主题

206

帖子

427

积分

Rank: 4

UID
234982
好友
0
蛮牛币
873
威望
0
注册时间
2017-7-30
在线时间
78 小时
最后登录
2017-12-5
发表于 2017-9-24 10:48:45 | 显示全部楼层
新颖的方法。
[发帖际遇]: shenhua0293 捡了钱没交公 蛮牛币 降了 1 . 幸运榜 / 衰神榜

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表