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

扫一扫,访问微社区

蛮牛译馆

关注:629

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

查看: 890|回复: 22

[外文翻译] CD-ROM着色器:衍射光栅(二)

[复制链接]  [移动端链接]
排名
9064
昨日变化
3

33

主题

51

帖子

517

积分

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

UID
48603
好友
6
蛮牛币
1143
威望
0
注册时间
2014-10-12
在线时间
97 小时
最后登录
2018-3-6

蛮牛译员

发表于 2018-2-22 20:12:19 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 492899250 于 2018-2-22 20:30 编辑

CD-ROM着色器:衍射光栅(

这篇文章是,如何创建CD-ROMs着色器的后续。

图片1.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

在页面的底部,有本系列中用到的Unity工程下载链接

介绍

在教程的第1部分,我们创建了第一个彩虹反射的近似效果,就是CD-ROM的上的那种效果。这个着色器是基于物理的。为了正确的模拟这种反射效果,我们需要确保CD-ROM上轨道是环行排列的。这是径向反射的基础。

狭缝方向

衍射光栅的数学原理(The Mathematics of Diffraction Grating)一篇中,推导出的衍射方程有很大限制:它假设狭缝是朝同一方向的。这种情况在昆虫的外壳比较常见,而CD-ROM表面的分布是环形的。如果单纯按照上一节的方法实现,那么是无法得到我们想要的反射效果的(如下,右图)

图片2.png

为了修正这个问题,我们需要考虑,CD-ROM上狭缝的自身方向。使用普通的向量是没用的,因为狭缝的法线方向是相同的,指向远离光盘表面的方向。狭缝的切线方向矢量,才能正确反映狭缝自身的方向。

图片3.png

如上图所示,法向量N是蓝色的,切向量T是红色的。光源、观察者分别和法线N之间的夹角,被称为θL和θV。类似地,和T之间的夹角被称为ƏLƏV。如前所述,使用θL和θV,我们计算出的是“扁”的反射,因为所有狭缝的N是相同的。我们需要使用ƏLƏV,这样才能正确获取狭缝的自身方向。

至此,我们知道:

图片4.png

因为T N是正交的,所以下面的属性也是成立的。

图片5.png

因为Cg提供了点积的计算,所以这很简单,剩下的就是计算T

计算切向量

为了完成着色器,我们需要计算切向量T。通常,这会在网格顶点中计算,但是CD-ROM的表面非常简单,我们可以直接计算。请记住,本教程介绍的方法相当简单,同时假设CD-ROM的表面的UV贴图是正确的。

图片6.png

上图显示了切向量的计算过程。这里有一个潜在的假设,光盘表面的UV贴图是方形面片,坐标范围在(0,0) 到 (1,1)之间。一旦明确这些,CD-ROM表面的每一点,都可以重映射到 (-1,-1) 和(+1,+1)之间。随着这一参考系的变换,这个点有了新的坐标,它的方向远离中心(绿色箭头)。将这个方向旋转90度,就是CD-ROM上,环形轨道的切向量方向(红色箭头)。

cd_tangent_in_world_space.png

这些操作需要在着色器的surf函数中完成,因为在光照函数LightingDiffraction前,UV坐标是不可用的。

[C#] 纯文本查看 复制代码
// IN.uv_MainTex: [ 0, +1]

// uv:            [-1, +1]

fixed2 uv = IN.uv_MainTex * 2 -1;

fixed2 uv_orthogonal = normalize(uv);

fixed3 uv_tangent = fixed3(-uv_orthogonal.y, 0, uv_orthogonal.x);


现在剩下的就是将计算出的切向量,从物体空间转换到世界空间。转换需要考虑上物体的变化、旋转和缩放。

[C#] 纯文本查看 复制代码
worldTangent = normalize( mul(unity_ObjectToWorld, float4(uv_tangent, 0)) );


整合……
现在我们所需要的计算的就是,颜色对彩虹反射的影响。

[C#] 纯文本查看 复制代码
inline fixed4 LightingDiffraction(SurfaceOutputStandard s, fixed3 viewDir, UnityGI gi)

{

// Original colour

fixed4 pbr = LightingStandard(s, viewDir, gi);

// --- Diffraction grating effect ---

float3 L = gi.light.dir;

float3 V = viewDir;

float3 T = worldTangent;

 

float d = _Distance;

float cos_ThetaL = dot(L, T);

float cos_ThetaV = dot(V, T);

float u = abs(cos_ThetaL - cos_ThetaV);

 

if (u == 0)

return pbr;

 

// Reflection colour

fixed3 color = 0;

for (int n = 1; n <= 8; n++)

{

float wavelength = u * d / n;

color += spectral_zucconi6(wavelength);

}

color = saturate(color);

 

// Adds the refelection to the material colour

pbr.rgb += color;

return pbr;

}

结论

图片7.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


你可以从Patreon下载CD-ROM shader的Unity包。

原文标题:CD-ROM Shader: Diffraction Grating – Part 2
原文链接:https://www.alanzucconi.com/2017/07/15/cd-rom-shader-2/


194927g9ej44kj0sjjrgr0.png

回复

使用道具 举报

7日久生情
2625/5000
排名
480
昨日变化
1

0

主题

534

帖子

2625

积分

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

UID
52206
好友
3
蛮牛币
4740
威望
0
注册时间
2014-10-30
在线时间
703 小时
最后登录
2018-5-22
QQ
发表于 2018-2-23 08:30:57 | 显示全部楼层
谢谢分享

回复

使用道具 举报

7日久生情
1693/5000
排名
2935
昨日变化
28

7

主题

695

帖子

1693

积分

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

UID
183904
好友
5
蛮牛币
3109
威望
0
注册时间
2016-11-15
在线时间
543 小时
最后登录
2018-5-24
QQ
发表于 2018-2-23 10:14:29 | 显示全部楼层
那不是10美金才能下载么
[发帖际遇]: zzzzzzZ 乐于助人,奖励 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

5熟悉之中
502/1000
排名
6127
昨日变化
85

0

主题

239

帖子

502

积分

Rank: 5Rank: 5

UID
158859
好友
0
蛮牛币
838
威望
0
注册时间
2016-7-26
在线时间
71 小时
最后登录
2018-5-24
发表于 2018-2-24 08:28:12 | 显示全部楼层
我只想说一句很好很强大!

回复 支持 反对

使用道具 举报

6蛮牛粉丝
1412/1500
排名
6261
昨日变化
94

0

主题

1049

帖子

1412

积分

Rank: 6Rank: 6Rank: 6

UID
267381
好友
2
蛮牛币
2296
威望
0
注册时间
2018-2-1
在线时间
175 小时
最后登录
2018-5-25

迈向小康

发表于 2018-2-25 11:42:41 | 显示全部楼层

回复

使用道具 举报

7日久生情
2685/5000
排名
2983
昨日变化
27

0

主题

1888

帖子

2685

积分

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

UID
219676
好友
0
蛮牛币
2472
威望
0
注册时间
2017-7-12
在线时间
365 小时
最后登录
2018-5-24

活力之星

发表于 2018-2-26 09:47:22 | 显示全部楼层
谢谢分享
[发帖际遇]: 夜雨微凉 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

回复

使用道具 举报

6蛮牛粉丝
1344/1500
排名
5027
昨日变化
9

6

主题

821

帖子

1344

积分

Rank: 6Rank: 6Rank: 6

UID
236677
好友
0
蛮牛币
2197
威望
0
注册时间
2017-8-9
在线时间
269 小时
最后登录
2018-3-30
发表于 2018-2-26 10:13:43 | 显示全部楼层
感谢分享

回复

使用道具 举报

2初来乍到
114/150
排名
13660
昨日变化
15

1

主题

26

帖子

114

积分

Rank: 2Rank: 2

UID
268668
好友
0
蛮牛币
173
威望
0
注册时间
2018-2-13
在线时间
37 小时
最后登录
2018-5-7
发表于 2018-3-9 09:07:17 | 显示全部楼层
666666666666666666666666666

回复 支持 反对

使用道具 举报

5熟悉之中
501/1000
排名
7720
昨日变化
6

0

主题

260

帖子

501

积分

Rank: 5Rank: 5

UID
250350
好友
1
蛮牛币
430
威望
0
注册时间
2017-10-23
在线时间
103 小时
最后登录
2018-4-19
发表于 2018-3-16 09:44:03 | 显示全部楼层

谢谢分享

回复

使用道具 举报

3偶尔光临
214/300
排名
31724
昨日变化
43

0

主题

69

帖子

214

积分

Rank: 3Rank: 3Rank: 3

UID
143351
好友
0
蛮牛币
11
威望
0
注册时间
2016-3-24
在线时间
138 小时
最后登录
2018-4-24
发表于 2018-3-16 15:26:44 | 显示全部楼层
感谢感谢感谢感谢感谢感谢感谢

回复 支持 反对

使用道具 举报

2初来乍到
100/150
排名
20982
昨日变化
22

0

主题

62

帖子

100

积分

Rank: 2Rank: 2

UID
152102
好友
0
蛮牛币
63
威望
0
注册时间
2016-6-15
在线时间
18 小时
最后登录
2018-3-16
发表于 2018-3-16 16:13:32 | 显示全部楼层
来学习了

回复

使用道具 举报

0

主题

12

帖子

15

积分

Rank: 1

UID
4775
好友
0
蛮牛币
5
威望
0
注册时间
2013-9-29
在线时间
4 小时
最后登录
2018-3-28
发表于 2018-3-16 20:44:05 | 显示全部楼层
很不错的逻辑
感谢楼主分享
努力!加油!

回复 支持 反对

使用道具 举报

排名
31724
昨日变化
43

0

主题

32

帖子

48

积分

Rank: 1

UID
237239
好友
0
蛮牛币
2
威望
0
注册时间
2017-8-12
在线时间
8 小时
最后登录
2018-3-19
发表于 2018-3-19 17:58:08 | 显示全部楼层
J拆开看卡萨丁出生地
[发帖际遇]: 梁启凡 在网吧通宵,花了 2 蛮牛币. 幸运榜 / 衰神榜

回复 支持 反对

使用道具 举报

3偶尔光临
263/300
排名
12078
昨日变化
13

12

主题

126

帖子

263

积分

Rank: 3Rank: 3Rank: 3

UID
267911
好友
0
蛮牛币
275
威望
0
注册时间
2018-2-6
在线时间
59 小时
最后登录
2018-5-16
发表于 2018-3-23 10:37:36 | 显示全部楼层
thank your share

回复

使用道具 举报

4四处流浪
498/500
排名
5321
昨日变化
5

3

主题

126

帖子

498

积分

Rank: 4

UID
12962
好友
0
蛮牛币
14
威望
0
注册时间
2014-1-19
在线时间
137 小时
最后登录
2018-5-22
发表于 2018-4-8 08:42:25 | 显示全部楼层
qqqqqqqqqqqqqqq

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

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