您的位置:首页 > 移动开发 > Unity3D

如何系统的学习 Unity 3D 中的 shader 编写(nvidia cg 编程)?

2017-08-24 11:51 633 查看


如何系统的学习 Unity 3D 中的 shader 编写(nvidia cg 编程)?

相信一定也有很多做unity3d开发的朋友对shader这一块有疑问。unity3d算是比较新的引擎,最近手游又比较火,很多unity3d程序猿应该是从其他专业转过来的,比如本人以前就是搞java web开发的,所以对这一块的知识体系不太了解。

我看了nvidia官网上的
The Cg Tutorial: Chapter 1. Introduction ,算是稍微入了点门,

然后看了
Cg Programming/Unity 中的一些例子(有很多看不懂的),结合unity3d官方文档,能写一些简单的shader,但复杂的东西就不太懂了(比如上次看到一个镜面反射的例子,里面有些矩阵运算,不太明白那算法怎么来的,当然自己线性代数不好也是硬伤)。

感觉cg编程涉及的东西很多,数学、物理、编程、3D模型什么的都要懂一些,要学的东西很多很杂,有些迷茫。

不想再东拼西凑找例子,这里拷一段那里拷一段的写shader,而是按照自己的想法写。

请问有什么好书籍可以帮助我系统地学习这一块的知识( 包括计算机图形学、数学等各个方面的书籍)?

关注者

1201

被浏览

88862

添加评论

分享

邀请回答

收起

关注问题写回答

19 个回答

默认排序





Vinjn张静

招 D3D / Vulkan / OGL / CUDA 工程师

96 人赞同了该回答

谢邀,这会是个比较漫长的学习过程
(一)国内引进出版的书籍

国内引进或出版的图形学书籍很多,但是大部分是糟粕,看它们是浪费时间

3D数学基础:图形与游戏开发

这本可以补数学基础,矩阵变换,线性代数啥的
图形着色器:理论与实践(第2版)

这本是比较新的讲 opengl shader 的
DirectX 9.0 3D游戏开发编程基础

这本是国内出版或引进的 d3d 书籍中唯一能看的
(二)国内没有引进的书籍,可以下载电子版或上淘宝买打印版
OpenGL Shading Language

可以认为是 glsl 的圣经
Introduction to 3D Game Programming: With Directx 11

可以认为是 d3d11 的圣经,这本是 DirectX 9.0 3D游戏开发编程基础 的升级版
(三)个人推荐
3D数学基础:图形与游戏开发
DirectX 9.0 3D游戏开发编程基础
Introduction to 3D Game Programming: With Directx 11

编辑于 2013-08-14

96

8 条评论

分享

收藏

感谢



知乎用户

121 人赞同了该回答

最近也在学习shader,推荐几篇博客供题主入门。
1、首先来两篇最最基础文章对shader有大体的认识。这两篇文章会分析shader中的一行行代码,讲解语法和作用并加以扩展。读完后就基本了解了shader中的属性、Tags、LOD、光照模型等是怎么回事。
猫都能学会的Unity3D
Shader入门指南(一)
猫都能学会的Unity3D
Shader入门指南(二)
2、然后可以看《Unity Shader and Effect Cookbook》,或者它的中文版《Unity着色器和屏幕特效开发秘笈》。这本书会展示shader中的各个方面,如漫反射着色、纹理贴图、镜面反射等等。

可能由于这本书方方面面都有涉及,有时会忽略一些比较关键的细节,而这恰恰使初学者困惑。有一位博主记录下了根据这本书学习的笔记,题主可以直接看博客来学习:
【Unity
Shaders】概述及Diffuse Shading介绍
3、在第2步的过程中,你可能需要查阅shader中各个概念函数的更详细的情况,这时你会需要Unity官方手册以及Cg教程:
Unity
- Manual: Shaders
Unity
- Manual: Shader Reference
The
Cg Tutorial
4、学习shader的时候,你不仅想知道怎么用,可能还想了解它背后的机制,那这篇文章你肯定不能错过:
【Unity
Shaders】初探Surface Shader背后的机制
5、这些都熟练了,对shader也都比较熟悉了。你可以尝试去创造属于自己的shader,也可以去Shadertoy
BETA寻求灵感,感受shader的鬼斧神工。

发布于 2015-05-23

121

6 条评论

分享

收藏

感谢





Vic.L

Technical Artist, CG Engineer, VR Dev.

43 人赞同了该回答

不知道国内能不能登得上去—— Cg Programming 的 Wikibooks (链接:Wikibooks,
open books for an open world)。尤其是Unity那一部分,写的相当细致外带示例代码,英文能力允许的话建议直接刷一遍。刚开始实习的时候就把所有的打印出来边读边记笔记边实践,同时结合Unity的Shader部分的Documentation,很快就入门然后自己写光照模型和Vertex/Fragment
Shader了。
看过了这些,之后没事儿再看点别的书或教程重温一下真是神清气爽。

编辑于 2017-05-06

43

1 条评论

分享

收藏

感谢





vczh

专业造轮子,拉黑抢前排。gaclib.net

36 人赞同了该回答

还得看NVidia良心免费彩色pdf 《GPU GEMS IIIIII》。这三本书十分精彩,我在当初还没免费的时候就买过了,一本一百多。

编辑于 2014-12-06

36

8 条评论

分享

收藏

感谢





kUANG tOBY

搞点unity

20 人赞同了该回答

自己回答一下,再补充两本书:

1.《Unity Shaders and Effects Cookbook》

主要讲Unity的Surface Shader 编程技巧,非常实用。除了光照以外还有Image effects在Unity中的实现。强力推荐。
2. 《Real-Time Rendering》

比较底层的内容,夯实基础(自己还没看完)
发现了新的好书再继续更新!

编辑于 2014-12-06

20

5 条评论

分享

收藏

感谢





老钟古

目前苦逼中

5 人赞同了该回答

数学推荐这部——《Mathematics for 3D Game Programming and Computer Graphics 3rd》另外就是看看这个推荐游戏程序员养成计划
(更新2013.3.19)

发布于 2014-02-20

5

1 条评论

分享

收藏

感谢



知乎用户

3 人赞同了该回答

仅针对你只想学些shader编程来讲:
1、先要明白shader在整个3D流水线中的地位或者是作用,建立流水线概念的过程,是理解整个当代3D的基础。
2、把Unity当做shader编辑器,这一方面讲,unity的确也是不错的,:)。由简到难的分析和实验各个shader,调试各种参数,用unity的所见即所得界面,了解shader内部代码的意义。
3、就每个遇到的问题,在互联网上查找该问题的可能的答案。如Diffuse light的算法公式究竟是什么,shadow map的矩阵干嘛用的。在这块上,请尽量查找英文资料,会痛快些。
就这么三点,第一点是面,能帮助自己确定方向。第三点是点,知道自己的短线位置在哪里。书籍不举例,只知道我第一本看的书是《3D游戏编程大师技巧》。后来在各种查找过程中,各种不同的书籍自然会进入自己的腰包,没有一本是需要全部读完的。但是读完所有的每本的某一个部分,应该每本书都算是读完了,你明白的。

发布于 2013-08-17

3

3 条评论

分享

收藏

感谢





liyonghelpme

程序员

1 人赞同了该回答

shader 只是一小段 运行在gpu上面的程序,因此需要首先去系统学习图形学,接着进阶学习 NVIDIA的 cg 书籍。

图形学包括矩阵计算,gpu流水线等等内容。

而unity 的 shader其实是更高阶的内容。

如果你只是求快 看看unity 的 wiki 中关于shader的样例即可。

下面这个视频不错,有专门讲解shader相关基础概念知识的内容,可以看看。
Unity
RPG MMO-火炬之光开发

发布于 2016-02-12

1

1 条评论

分享

收藏

感谢



知乎用户

3 人赞同了该回答

unity的shader浅浅的包装了一下cg。类似fx。总之就是一个DSL,对cg和渲染流程做了一些描述。所以基本上,你还是需要了解shader语言及基本的渲染流程。

@张静vinjn



@kUANG tOBY

提到的书对头。

速学的话,我补充一本:《GPU Programming And Cg Language Primer 1rd Edition》。国内的人写的小册子,很不错。

发布于 2014-06-12

3

添加评论

分享

收藏

感谢





凉鞋

Funk音乐/Poppin爱好者/独立开发者/liangxiegame.com

7 人赞同了该回答

最近在跟着这个教程做,Shader编程教程(3月2日更新67课)【会员免费】

现在呢,能看懂大部分Unity Shader的源码。

我觉得看视频听课,省时省力,照着视频跟着做就好,买个会员免费看了(不是广告,真心推荐),对于涨的工资来说太划算了。作为入门和强化基础知识这个视频最好不过了。之前买了很多书红宝书和蓝宝书都买了N版,图形学的书也下了些电子版的,看着呢比较耗精力和时间适合入门之后作为补充和深入是不错的。
大概说下视频好的地方吧

1.会讲线性代数基础。然后用C#会实现个mini数学库,到最后会用来实战,跟着做就好。看完这部分我再看,Cocos2d-x 3.x的数学库和OpenGL SB5的数学库就差不多都能看懂了。原理都是一样的。
2.会用C#的System.Drawing(忘了怎么拼)这个库,结合自己实现的数学库来教你绘制一个3d的立体在屏幕上,System.Drawing是二维的,我用的是Mac没装Windows系统,所以没跟着练,但是看完后知道原理了,如果让我不用OpenGL或其他硬件加速的图形库,而用只支持二维坐标的一个图形库来画3d图像的话,照猫画虎也能实现一个。
3.会讲Unity中常用的Shader API(虽然官方文档也有)。
4.临时出去有事,等会更新 233

回来了,视频中老师语速偏慢,有足够的时间去思考去理解,同时也治好了困扰我多个月的失眠:)。

编辑于 2016-03-11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Unity 手游 移动游戏