找回密码
 立即注册
查看: 560|回复: 7

如何进一步学习 shader (CG) 的知识?

[复制链接]
发表于 2021-4-23 06:54 | 显示全部楼层 |阅读模式
如何进一步学习 shader (CG) 的知识?
发表于 2021-4-23 07:00 | 显示全部楼层
1. 高層

深入了解各種計算圖形學及數字圖像學的算法,要知道它們要解決什麼問題,現存有那些解決方案,每個方案的優缺點是甚麼。書籍太多,不在此列舉,可參考本人的豆列:
    計算機圖形: 入門/API類 http://book.douban.com/doulist/1445744/
    計算機圖形: 進階/專門 http://book.douban.com/doulist/1445680/
    計算機圖形: Gems類 http://book.douban.com/doulist/1445745/
    計算機圖形: 專欄結集 http://book.douban.com/doulist/1445806/
    計算機圖形: 動畫 http://book.douban.com/doulist/1445716/
    計算機圖形: 相關數學 http://book.douban.com/doulist/1445735/
    計算機圖形: 其他參考 http://book.douban.com/doulist/1447740/
遊戲圖形程序員必讀的是《Real Time Rendering》(見進建/專門豆列),和shader有關的較前沿著作有《GPU Pro》叢書(見Gems類列)。

計算機圖形學並不是追求物理上完全正確的解,而是觀眾/玩家看上去覺得好看。為了優化,有些問題可以通過近似化來減少運算,學習一些擬合函數(也需了解底層提供的現成函數),並作出嘗試。例如基於物理着色中的BRDF擬合[1]、SSS模擬[2]。

有時候,可以分解一些複雜的函數,生成查找表(LUT)減少運算量,如下面[1]的示例:



2. 底層

通常shader是圖形算法實現的一部分,程序員需要了解shader語言提供的指令,以及它們如何影射至更底層的匯編指令,有時候還要了解具體的GPU架構和特性。有些指令可能較少用,例如ddx/ddy這些,有時候能用於優化。可以參考shader語言手冊、各GPU廠商的官方文件,以及GDC的一些講座[3][4]。

3. 數學

如題主所言,數學佔了很大的部分,建議閱讀[5][6],之後可以找相關數學的豆列。

參考

[1] Brian Karis, "Real Shading in Unreal Engine 4", ACM SIGGRAPH 2013 Courses: Physically based shading in theory and practice, ACM, 2013. http://blog.selfshadow.com/publications/s2013-shading-course/
[2] Colin Barré-Brisebois, Marc Bouchard, "Real-Time Approximation of Light Transport in Translucent Homogenous Media", Gpu Pro 2. Vol. 2. CRC Press, 2011. Slides: GDC 2011 – Approximating Translucency for a Fast, Cheap and Convincing Subsurface Scattering Look
[3] Emil Persson, "Low-Level Thinking in High-Level Shading Languages",  GDC 2013. Slides: Humus - Articles
[4] Emil Persson, "Low-level Shader Optimization for Next-Gen and DX11", GDC 2014. Slides: Humus - Articles
[5] Lengyel, Eric. Mathematics for 3D game programming and computer graphics. 3rd Edition, Cengage Learning, 2012.
[6] Schneider, Philip, and David H. Eberly. Geometric tools for computer graphics. Morgan Kaufmann, 2002.

本帖子中包含更多资源

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

×
发表于 2021-4-23 07:08 | 显示全部楼层
以上大都是程序来回答你的问题。我作为一个美术出身的技术美术来回答一下。

程序部分各位大神已经讲的很清楚了,我主要说视觉的部分。shader说到底是要给人眼展现结果,也就是要让人脑负责视觉的部分认可你展现的视觉效果。首先要弄清楚人脑对什么类的视觉信号敏感。一般来说是移动,轮廓,明暗,颜色,材质,这样排下去,写shader就是研究明白你试图模仿的真实物体有什么样的视觉信号,然后简明扼要地模仿出来。

所以,学点美术对写shader大有用处,另外也去学点心理学什么的,看什么样的刺激,能以最小的计算代价,能让玩家达到最大的心理预期。
发表于 2021-4-23 07:10 | 显示全部楼层
推荐你个网站叫做shaderlab 上面很多  神奇的效果。  不过效果这种东西 有时候需要艺术修养的,一些简单的图  组合起来  产生特别好的效果,  可以看看火炬之光 1这款游戏的编辑器, 叫做torchEdit, 下载游戏的时候,自带的,  里面的效果做法都很朴素。

系统的学习shader,涉及到多个领域,一个是图形图像领域自身,例如绘制图形,绘制颜色,噪音,分型,图像处理,图像模拟等内容,可以参考这个 视频里面的一些内容,

Unity shader 从0到1

有一个系统性的介绍,后续再深入学习,就需要去分析一些游戏,和论文里面的内容了。
还有就是shader学习,良好的基础开发环境很重要,unity作为一款游戏引擎,用来学习shader非常方便。
发表于 2021-4-23 07:16 | 显示全部楼层
学shader最重要的是要学以致用,勤做练习。
使用GPA,Nsight等软件不断的反复分析其他shader进行对比。
多从自己做的个别人做的shader上挑毛病。参考对应的论文,反复重构验证。
发表于 2021-4-23 07:20 | 显示全部楼层
推荐个网站吧
Shadertoy BETA

这个网站上面有很多的ps效果 大部分都是可以直接看到代码的
发表于 2021-4-23 07:26 | 显示全部楼层
《GPU编程与CG语言之阳春白雪下里巴人》
这书的名字可真够长的,不过写的确实不错,可谓深入浅出。在书的结尾部分有基础材质算法,搞懂这些就算入门了。
发表于 2021-4-23 07:31 | 显示全部楼层
用obj法线和摄像机法线夹角模拟高光有什么可膜拜的。。。
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-15 04:35 , Processed in 0.146318 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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