All Projects → candycat1992 → Unity_shaders_book

candycat1992 / Unity_shaders_book

📖 书籍《Unity Shader入门精要》源代码

Programming Languages

ShaderLab
938 projects
C#
18002 projects

Projects that are alternatives of or similar to Unity shaders book

Unity Shaders
✨ Shader demo - More than 300 examples
Stars: ✭ 198 (-94.44%)
Mutual labels:  shaderlab
Forcefieldfx
Stars: ✭ 238 (-93.32%)
Mutual labels:  shaderlab
Standardtriplanar
Unity's standard shader with triplanar mapping
Stars: ✭ 253 (-92.9%)
Mutual labels:  shaderlab
Spritesheetrenderer
A powerful Unity ECS system to render massive numbers of animated sprites.
Stars: ✭ 204 (-94.27%)
Mutual labels:  shaderlab
Unity Vhsglitch
glitched VHS post-processing shader for Unity3D
Stars: ✭ 231 (-93.51%)
Mutual labels:  shaderlab
Spcrjointdynamics
布風骨物理エンジン
Stars: ✭ 241 (-93.23%)
Mutual labels:  shaderlab
Unity Ecs Job System Sph
Implementation of the SPH Algorithm (fluid simulation) in Unity, comparing singlethread and ECS/Job System performances.
Stars: ✭ 197 (-94.47%)
Mutual labels:  shaderlab
Matrixvfx
A realtime Matrix VFX Shader in Unity 3D
Stars: ✭ 278 (-92.2%)
Mutual labels:  shaderlab
Lwrpscriptablerenderpass examplelibrary
Stars: ✭ 237 (-93.35%)
Mutual labels:  shaderlab
Arktoon Shaders
Alternative Unity shaders made by synqark
Stars: ✭ 251 (-92.95%)
Mutual labels:  shaderlab
Universalshaderexamples
Sand box project containing example shaders and assets compatible with Unity Universal Render Pipeline.
Stars: ✭ 207 (-94.19%)
Mutual labels:  shaderlab
Skyboxpanoramicshader
Skybox shader for support of 360/180/cubemap video and static content
Stars: ✭ 231 (-93.51%)
Mutual labels:  shaderlab
Unity Shader Basics Tutorial
A introduction into creating shaders for Unity
Stars: ✭ 243 (-93.18%)
Mutual labels:  shaderlab
Amplifyshadercommunityextras
Community made extras for Amplify Shader Editor
Stars: ✭ 201 (-94.36%)
Mutual labels:  shaderlab
Urp Lwrp Shaders
A Collection of Shader For URP(LWRP) Render Pipeline
Stars: ✭ 252 (-92.93%)
Mutual labels:  shaderlab
Ssgi Urp
Screen Space Global Illumination for Unity Universal Render Pipeline
Stars: ✭ 198 (-94.44%)
Mutual labels:  shaderlab
Water Demo
A port of Evan Wallace's "Water Demo" for WebGL to Unity.
Stars: ✭ 240 (-93.26%)
Mutual labels:  shaderlab
Ultimateoutline
The easiest way to achieve outlines in unity.
Stars: ✭ 285 (-92%)
Mutual labels:  shaderlab
Tf Jam
Tensor Jam: Shooting Hoops with Machine Learning
Stars: ✭ 259 (-92.73%)
Mutual labels:  shaderlab
Alloy
Alloy physical shader framework for Unity.
Stars: ✭ 244 (-93.15%)
Mutual labels:  shaderlab

《Unity Shader入门精要》源代码

本项目是书籍《Unity Shader入门精要》的配套源代码。最新版本请移步本项目的Github页面

源码下载

我们推荐您从Github上clone项目源码并及时检查更新。如果下载速度过慢可以移步百度网盘地址

纸质版书籍可在以下链接购买:亚马逊当当京东

随书彩图

我们提供了包含书中所有插图的彩色版插图集锦:HTMLPDF

2019年新增:改版后的第十八章

当年乐观地以为自己有时间写第二版,是我太年轻了…… 第一版由于我能力有限的确有很多问题,感谢大家一直以来的支持。当年在我有时间的时候曾经花了一些时间重写了第18章,本来是想要放到第二版里的,但是目前第二版遥遥无期,索性直接把改版后的第18章直接放出来,希望能让读者有新的收获:改版后的第18章

第四章勘误

由于数学章是全书的重要基础,我们决定把第四章公开,来及时让读者获取最新的第四章数学章的内容:PDF

注意:我们可能会根据读者勘误随时更新该文档,内容和页号可能会与读者手中的版本不同,实体书中的勘误会在每次重印时进行修正。

读者反馈和勘误

尽管我们在本书的编写过程中多次检查内容的正确性,但不可避免书中仍然会出现一些错误,欢迎读者批评指正。任何关于本书内容、源码等方面的问题,欢迎读者反映到本书源码所在的Github讨论页,也可以发邮件([email protected])联系笔者。

关于目前已发现的错误我们会及时在网上更新:勘误列表

我们也维护了读者反馈的问题列表:FAQ

Unity版本

我们推荐使用Unity 5.0以上的版本来编译本项目。如果你打算使用更低版本的Unity,那么在学习本书时可能就会遇到一些问题

  • 你可能发现会有些菜单或变量在你的Unity中找不到,这可能就是由于Unity版本不同造成的。绝大多数情况下,本书的代码和指令仍然可以工作良好,但在一些特殊情况下,Unity可能会更改底层的实现细节,造成同样的代码会得到不一样的效果(例如,在非统一缩放时对法线进行变换)。

  • 还有一些问题是Unity提供的内置变量、宏和函数,例如我们在书中经常会使用UnityObjectToWorldNormal内置函数把法线从模型空间变换到世界空间中,但这个函数是在Unity 5中才被引入的,因此如果读者使用的是Unity 5之前的版本就会报错。类似的情况还有和阴影相关的宏和变量等。

  • 和Unity 4.x版本相比,Unity 5.x最大的变化之一就是很多以前只有在专业版才支持的功能,在免费版也同样提供了。因此,如果读者使用的是Unity 4.x免费版,可能会发现本书中的某些材质会出错。

Unity 5.3及其以下Unity 5.x版本

分支链接master

在本书编写时,我们使用的版本是Unity 5.3,因此使用这些Unity版本的读者请使用本项目master分支的相关代码。

Unity 5.4及其以上Unity 5.x版本

分支链接unity_5_4

Unity 5.4对Shader部分进行了一些比较大的更新,比较明显的变化有:

  • 使用了unity_XXX来代替原有的XXX变换矩阵,例如_Object2World被替换成了unity_ObjectToWorld,_World2Object被替换成了unity_WorldToObject(均在UnityShaderVariables.cginc文件中被声明),_LightMatrix0被替换成了unity_WorldToLight(在AutoLight.cginc文件中被声明)。

  • 使用了一些内置函数来代替某些运算,例如mul(UNITY_MATRIX_MVP,)相关计算被替换成了UnityObjectToClipPos()。

在学习本书时,读者需要注意代码中一些由于更新造成的变化。

升级Unity 5.5

从Unity 5.5开始,Unity在某些平台(如DX11、DX12、PS4、Xbox One、Metal)等平台对深度缓存进行了反转操作,使得在近平面处的深度值为1,而远平面处为0。这样做的原因主要是为了更加充分得利用浮点深度缓存,具体原因可以参见NVIDIA的相关博客Depth Precision Visualized。Unity在Upgrading to Unity 5.5Platform-specific rendering differences文档中对此进行了说明。

在本书代码中,我们在第13章用到了深度纹理,其中对于使用了Linear01Depth、LinearEyeDepth等Unity内置函数的部分不受此变化影响,但我们在Chapter13-MotionBlurWithDepthTexture中直接访问了深度值来计算世界空间下的坐标:

// Get the depth buffer value at this pixel.
float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv_depth);

这使得在反转深度缓存的情况下会得到错误的结果。为了解决这个问题,我们可以使用内置宏来判断深度是否已被反转,并据此来做出相应的计算。变化后的代码如下:

// Get the depth buffer value at this pixel.
float d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, i.uv_depth);
#if defined(UNITY_REVERSED_Z)
	d = 1.0 - d;
#endif

截止到目前的Unity 2017版本

分支链接unity_2017_1

Unity 2017对Shader部分没有较大更新,我们主要做了以下更改来消除升级造成的Shader Warning信息:

  • 使用内置的UnityObjectToViewPos(*)函数来代替mul(UNITY_MATRIX_MV, *)对顶点进行变换。

在学习本书时,读者需要注意代码中一些由于更新造成的变化。

使用说明

本书源码的组织方式大多按资源类型和章节进行划分,主要包含了以下关键文件夹:

文件夹 说明
Assets/Scenes 包含了各章对应的场景,每个章节对应一个子文件夹,例如第七章所有场景所在的子文件夹为Assets/Scenes/Chapter7。每个场景的命名方式为Scene_章号_小节号_次小节号,例如7.2.3节对应的场景名为Scene_7_2_3。如果同一个小节包含了多个场景,那么会使用英文字母作为后缀依次表示,例如7.1.2节包含了两个场景Scene_7_1_2_a和Scene_7_1_2_b。
Assets/Shaders 包含了各章实现的Unity Shader文件,每个章节对应一个子文件夹,例如第七章实现的所有Unity Shader所在的子文件夹为Assets/Shaders/Chapter7。每个Unity Shader的命名方式为ChapterX-功能,例如第七章使用渐变纹理的Unity Shader名为Chapter7-RampTexture。
Assets/Materials 包含了各章对应的材质,每个章节对应一个子文件夹,例如第七章所有材质所在的子文件夹为Assets/Materials/Chapter7。每个材质的命名方式与它使用的Unity Shader名称相匹配,并以Mat作为后缀,例如使用名为Chapter7-RampTexture的Unity Shader的材质名称是RampTextureMat。
Assets/Scripts 包含了各章对应的C#脚本,每个章节对应一个子文件夹,例如第五章所有脚本所在的子文件夹为Assets/Scripts/Chapter5。
Assets/Textures 包含了各章使用的纹理贴图,每个章节对应一个子文件夹,例如第七章使用的所有纹理所在的子文件夹为Assets/Textures/Chapter7。

除了上述文件夹外,源码中还包含了一些辅助文件夹,例如Assets/Editor文件夹中包含了一些需要在编辑器状态下运行的脚本,Assets/Prefabs文件夹下包含了各章使用的预设模型和其他常用预设模型等。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].