在Unity 3D中,shader是何时编译的,在何时加载入显存中的
Editor中:修改shader并保存时立即编译。
Runtime下,无论哪个平台,都是在进入场景时加载shader object内容到内存,但是首次实际调用渲染时才编译,编译完成之后会cache下来。
有两种优化方法:
1. 调用Shader.WarmupAllShaders(),自动编译该场景中用到的所有shader。该方法在Unity5中已经废弃。
2. 在项目设置的GraphicsSettings中,可以导出ShaderVariantCollection,并在Preloaded Shader中导入,这样的话就可以在载入场景时一并编译需要预加载的shader,这样的优化在移动平台上用得比较多。
在Unity 3D中,shader是何时编译的,在何时加载入显存中的
你在编辑器里,每次修改、保存的时候就会自动编译(unity是监视Asset文件改动的)
移动平台的话,感觉是载入场景的时候,按需编译、加载的,不过不是十分确定
Unity - Scripting API: 这个文档里有一些说明:Usually graphics drivers do not actually prepare shaders until they are first needed. However when some object is first rendered with a previously unused shader, there can be a hiccup because the driver is compiling/optimizing the shader. This can be quite noticeable, especially on mobile platforms.
unity3d 如何代码修改某个shader的颜色
1.打开软件,新建工程如下图所示。点击创建工程按钮。2.在层级面板中穿件Cube,在项目面板鼠标右键中创建材质,如下图所示 3.在项目面板下创建脚本文件,如图所示4.双击脚本文件打开,编写代码如下5.创建标准shader,如下图所示6.并将创建的shader替换给Cube对象7.双击打开5中创建的Shader文件,查看参数信息(参数信息的结果是为了书写4中的代码,参见经验视频)8.将3中的脚本附加给Cube。9.点击运行,结果如图。
在Unity 3D中,shader是何时编译的,在何时加载入显存中的
你在编辑器里,每次修改、保存的时候就会自动编译(unity是监视Asset文件改动的)
移动平台的话,感觉是载入场景的时候,按需编译、加载的,不过不是十分确定
Unity - Scripting API: 这个文档里有一些说明:Usually graphics drivers do not actually prepare shaders until they are first needed. However when some object is first rendered with a previously unused shader, there can be a hiccup because the driver is compiling/optimizing the shader. This can be quite noticeable, especially on mobile platforms.
求教unity3D中shader显示双面的模型颜色特别亮,怎么改
Shader "DoubleSide/Diffuse"
{
Properties
{
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Tags { "Queue" = "Transparent" }
Material
{
Diffuse [_Color]
Ambient (1,1,1,1)
}
Pass
{
Lighting On
Cull off
Blend SrcAlpha OneMinusSrcAlpha
SetTexture [_MainTex]
{
constantColor [_Color]
Combine texture * primary DOUBLE, texture * constant
}
}
}
FallBack "Diffuse", 1
}
如何系统的学习 Unity 3D 中的 shader 编写
如何系统的学习 Unity 3D 中的 shader 编写nvidia cg 编程
2016-02-25
Unity Shader(23)
相信一定也有很多做unity3d开发的朋友对shader这一块有疑问。unity3d算是比较新的引擎,最近手游又比较火,很多unity3d程序猿应该是从其他专业转过来的,比如本人以前就是搞java web开发的,所以对这一块的知识体系不太了解。
我看了nvidia官网上的 The Cg Tutorial: Chapter 1. Introduction ,算是稍微入了点门,
然后看了 Cg Programming/Unity 中的一些例子(有很多看不懂的),结合unity3d官方文档,能写一些简单的shader,但复杂的东西就不太懂了(比如上次看到一个镜面反射的例子,里面有些矩阵运算,不太明白那算法怎么来的,当然自己线性代数不好也是硬伤)。
感觉cg编程涉及的东西很多,数学、物理、编程、3D模型什么的都要懂一些,要学的东西很多很杂,有些迷茫。
不想再东拼西凑找例子,这里拷一段那里拷一段的写shader,而是按照自己的想法写。
请问有什么好书籍可以帮助我系统地学习这一块的知识( 包括计算机图形学、数学等各个方面的书籍)?
,这会是个比较漫长的学习过程
(一)国内引进出版的书籍
国内引进或出版的图形学书籍很多,但是大部分是糟粕,看它们是浪费时间
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
Vinjn张静 2013-08-14
还得看NVidia良心免费彩色pdf 《GPU GEMS IIIIII》。这三本书十分精彩,我在当初还没免费的时候就买过了,一本一百多。
vczh 2014-12-06
自己回答一下,再补充两本书:
1.《Unity Shaders and Effects Cookbook》
主要讲Unity的Surface Shader 编程技巧,非常实用。除了光照以外还有Image effects在Unity中的实现。强力推荐。
2. 《Real-Time Rendering》
比较底层的内容,夯实基础(自己还没看完)
发现了新的好书再继续更新!
kUANG tOBY 2014-12-06
最近也在学习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
推荐一本书,Unity Shader and Effect Cookbook,但一般的Shader都可以用Shader Forge搞定。Shader Forge是一个可视化的,nose-based的shader编辑器。简单来说,就是你在图形化界面把各种effect按一定逻辑连接好,它可以自动生成shader的代码。
Jingwen Zhao 2014-11-13
仅针对你只想学些shader编程来讲:
1、先要明白shader在整个3D流水线中的地位或者是作用,建立流水线概念的过程,是理解整个当代3D的基础。
2、把Unity当做shader编辑器,这一方面讲,unity的确也是不错的,:)。由简到难的分析和实验各个shader,调试各种参数,用unity的所见即所得界面,了解shader内部代码的意义。
3、就每个遇到的问题,在互联网上查找该问题的可能的答案。如Diffuse light的算法公式究竟是什么,shadow map的矩阵干嘛用的。在这块上,请尽量查找英文资料,会痛快些。
就这么三点,第一点是面,能帮助自己确定方向。第三点是点,知道自己的短线位置在哪里。书籍不举例,只知道我第一本看的书是《3D游戏编程大师技巧》。后来在各种查找过程中,各种不同的书籍自然会进入自己的腰包,没有一本是需要全部读完的。但是读完所有的每本的某一个部分,应该每本书都算是读完了,你明白的。
匿名 2013-08-17
unity的shader浅浅的包装了一下cg。类似fx。总之就是一个DSL,对cg和渲染流程做了一些描述。所以基本上,你还是需要了解shader语言及基本的渲染流程。 @张静vinjn和 @kUANG tOBY提到的书对头。
速学的话,我补充一本:《GPU Programming And Cg Language Primer 1rd Edition》。国内的人写的小册子,很不错。
知道 2014-06-12
这个网站可以参考 Shadertoy BETA
不过是同样的问题,因为很多代码都是式子,是经过计算之后得出的,计算过程在代码里没有体现,所以根本不知道那些奇怪的数字和算式都是怎么来的。
殷实 2014-07-23
数学推荐这部——《Mathematics for 3D Game Programming and Computer Graphics 3rd》另外就是看看这个推荐游戏程序员养成计划 (更新2013.3.19)
老钟古 2014-02-20
我比较推荐《交互式计算机图形学:基于OpenGL的自顶向下方法(第6版)》
配合《计算机图形学/基于3D图形开发技术》食用风味更佳。
学习shader会遇到一些比较基础的数学问题,google、wiki和度娘基本能够解决。
匿名 2014-06-12
《Unity Shaders and Effects Cookbook》其实这本书是surface shader的入门,我确实是先看了这本书,还不是特别实用,但也必须要看,它有解释一些入门的知识比如pipeline,常见语法。。
那本书完全没有涉及cg语言,vertex和frag shader,个人觉得有一本不错,比较系统,就是《Cg Programming in unity》。然后“龙书”多少也着看,还有各种高数线性代数书籍跟着研究,有空多拿其他人的shader打开来看,并且在相关技术qq群贴吧等平台,利用好这些平台资源获取大神的解答。。这是我的路,也是新手爬坑中,以供参考。。互勉!
周车 2015-06-29
如何系统的学习 Unity 3D 中的 shader 编写
Unity中的Shader通常来说叫做UnityShader,相对来说他有自己的相对语法UnityShaderLab。如果你想学好Shader编程的话,有几个步骤你是少不了的:你需要学习GPU编程、CG、渲染管线和相对应的知识。CG相关知识渲染管线数学及物理知识,尤其线性代数比较重要,当然矩阵这套东西也不能丢掉。如果你是初学的话,有本书可以推荐给你 Unity Shader入门精要,这个比较简单,适合入门。