rustum 发表于 2021-4-23 06:54

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

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

kirin77 发表于 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擬合、SSS模擬。

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



2. 底層

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

3. 數學

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

參考

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/
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
Emil Persson, "Low-Level Thinking in High-Level Shading Languages",GDC 2013. Slides: Humus - Articles
Emil Persson, "Low-level Shader Optimization for Next-Gen and DX11", GDC 2014. Slides: Humus - Articles
Lengyel, Eric. Mathematics for 3D game programming and computer graphics. 3rd Edition, Cengage Learning, 2012.
Schneider, Philip, and David H. Eberly. Geometric tools for computer graphics. Morgan Kaufmann, 2002.

FeastSC 发表于 2021-4-23 07:08

以上大都是程序来回答你的问题。我作为一个美术出身的技术美术来回答一下。

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

所以,学点美术对写shader大有用处,另外也去学点心理学什么的,看什么样的刺激,能以最小的计算代价,能让玩家达到最大的心理预期。

XGundam05 发表于 2021-4-23 07:10

推荐你个网站叫做shaderlab 上面很多神奇的效果。不过效果这种东西 有时候需要艺术修养的,一些简单的图组合起来产生特别好的效果,可以看看火炬之光 1这款游戏的编辑器, 叫做torchEdit, 下载游戏的时候,自带的,里面的效果做法都很朴素。

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

Unity shader 从0到1

有一个系统性的介绍,后续再深入学习,就需要去分析一些游戏,和论文里面的内容了。
还有就是shader学习,良好的基础开发环境很重要,unity作为一款游戏引擎,用来学习shader非常方便。

HuldaGnodim 发表于 2021-4-23 07:16

学shader最重要的是要学以致用,勤做练习。
使用GPA,Nsight等软件不断的反复分析其他shader进行对比。
多从自己做的个别人做的shader上挑毛病。参考对应的论文,反复重构验证。

xiangtingsl 发表于 2021-4-23 07:20

推荐个网站吧
Shadertoy BETA

这个网站上面有很多的ps效果 大部分都是可以直接看到代码的

franciscochonge 发表于 2021-4-23 07:26

《GPU编程与CG语言之阳春白雪下里巴人》
这书的名字可真够长的,不过写的确实不错,可谓深入浅出。在书的结尾部分有基础材质算法,搞懂这些就算入门了。

Ylisar 发表于 2021-4-23 07:31

用obj法线和摄像机法线夹角模拟高光有什么可膜拜的。。。
页: [1]
查看完整版本: 如何进一步学习 shader (CG) 的知识?