找回密码
 注册帐号

扫一扫,访问微社区

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

43
回复
4428
查看
[ 复制链接 ]
排名
10004
昨日变化

33

主题

51

帖子

562

积分

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

UID
48603
好友
6
蛮牛币
1145
威望
0
注册时间
2014-10-12
在线时间
98 小时
最后登录
2018-8-4

蛮牛译员

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日久生情
2943/5000
排名
439
昨日变化

0

主题

543

帖子

2943

积分

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

UID
52206
好友
3
蛮牛币
6028
威望
0
注册时间
2014-10-30
在线时间
800 小时
最后登录
2019-8-26
QQ
2018-2-23 08:30:57 显示全部楼层
谢谢分享
回复

使用道具 举报

7日久生情
2395/5000
排名
1634
昨日变化

7

主题

744

帖子

2395

积分

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

UID
183904
好友
6
蛮牛币
5721
威望
0
注册时间
2016-11-15
在线时间
840 小时
最后登录
2019-9-26
QQ
2018-2-23 10:14:29 显示全部楼层
那不是10美金才能下载么
回复 支持 反对

使用道具 举报

7日久生情
1514/5000
排名
1788
昨日变化

0

主题

385

帖子

1514

积分

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

UID
158859
好友
4
蛮牛币
1918
威望
0
注册时间
2016-7-26
在线时间
389 小时
最后登录
2019-10-14
2018-2-24 08:28:12 显示全部楼层
我只想说一句很好很强大!
回复 支持 反对

使用道具 举报

7日久生情
1915/5000
排名
4500
昨日变化

0

主题

1331

帖子

1915

积分

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

UID
267381
好友
6
蛮牛币
3206
威望
0
注册时间
2018-2-1
在线时间
258 小时
最后登录
2018-11-6
2018-2-25 11:42:41 显示全部楼层
回复

使用道具 举报

7日久生情
3884/5000
排名
1487
昨日变化

0

主题

2150

帖子

3884

积分

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

UID
219676
好友
1
蛮牛币
4368
威望
0
注册时间
2017-7-12
在线时间
880 小时
最后登录
2019-10-14

活力之星

2018-2-26 09:47:22 显示全部楼层
谢谢分享
回复

使用道具 举报

6蛮牛粉丝
1361/1500
排名
5609
昨日变化

6

主题

829

帖子

1361

积分

Rank: 6Rank: 6Rank: 6

UID
236677
好友
0
蛮牛币
2227
威望
0
注册时间
2017-8-9
在线时间
273 小时
最后登录
2018-9-11
2018-2-26 10:13:43 显示全部楼层
感谢分享
回复

使用道具 举报

3偶尔光临
237/300
排名
9305
昨日变化

1

主题

35

帖子

237

积分

Rank: 3Rank: 3Rank: 3

UID
268668
好友
0
蛮牛币
360
威望
0
注册时间
2018-2-13
在线时间
77 小时
最后登录
2019-5-15
2018-3-9 09:07:17 显示全部楼层
666666666666666666666666666
回复 支持 反对

使用道具 举报

5熟悉之中
624/1000
排名
6777
昨日变化

0

主题

288

帖子

624

积分

Rank: 5Rank: 5

UID
250350
好友
2
蛮牛币
588
威望
0
注册时间
2017-10-23
在线时间
140 小时
最后登录
2019-10-9
2018-3-16 09:44:03 显示全部楼层

谢谢分享
回复

使用道具 举报

4四处流浪
327/500
排名
13720
昨日变化

0

主题

82

帖子

327

积分

Rank: 4

UID
143351
好友
0
蛮牛币
9
威望
0
注册时间
2016-3-24
在线时间
183 小时
最后登录
2019-10-10
2018-3-16 15:26:44 显示全部楼层
感谢感谢感谢感谢感谢感谢感谢
回复 支持 反对

使用道具 举报

2初来乍到
107/150
排名
23066
昨日变化

0

主题

67

帖子

107

积分

Rank: 2Rank: 2

UID
152102
好友
0
蛮牛币
36
威望
0
注册时间
2016-6-15
在线时间
20 小时
最后登录
2019-6-21
2018-3-16 16:13:32 显示全部楼层
来学习了
回复

使用道具 举报

0

主题

13

帖子

17

积分

Rank: 1

UID
4775
好友
0
蛮牛币
7
威望
0
注册时间
2013-9-29
在线时间
4 小时
最后登录
2018-6-22
2018-3-16 20:44:05 显示全部楼层
很不错的逻辑
感谢楼主分享
努力!加油!
回复 支持 反对

使用道具 举报

排名
34890
昨日变化

0

主题

32

帖子

48

积分

Rank: 1

UID
237239
好友
0
蛮牛币
2
威望
0
注册时间
2017-8-12
在线时间
8 小时
最后登录
2018-3-19
2018-3-19 17:58:08 显示全部楼层
J拆开看卡萨丁出生地
回复 支持 反对

使用道具 举报

3偶尔光临
270/300
排名
12677
昨日变化

12

主题

126

帖子

270

积分

Rank: 3Rank: 3Rank: 3

UID
267911
好友
0
蛮牛币
334
威望
0
注册时间
2018-2-6
在线时间
60 小时
最后登录
2018-10-10
2018-3-23 10:37:36 显示全部楼层
thank your share
回复

使用道具 举报

5熟悉之中
617/1000
排名
5176
昨日变化

5

主题

157

帖子

617

积分

Rank: 5Rank: 5

UID
12962
好友
0
蛮牛币
96
威望
0
注册时间
2014-1-19
在线时间
177 小时
最后登录
2019-8-30
QQ
2018-4-8 08:42:25 显示全部楼层
qqqqqqqqqqqqqqq
回复 支持 反对

使用道具 举报

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

本版积分规则