您的位置:首页 > 其它

Shader 学习笔记 20151031

2015-10-31 12:29 162 查看

Segment 1 阅读

阅读了Unity Shaders and Effects Cookboot的 Custom light model一节。(page 17)

阅读了Unity online manual关于 Custom light model两段文章

http://docs.unity3d.com/Manual/SL-SurfaceShaderLighting.html

http://docs.unity3d.com/Manual/SL-SurfaceShaderLightingExamples.html

阅读了博文 【Unity Shaders】初探Surface Shader背后的机制

http://blog.csdn.net/candycat1992/article/details/39994049

阅读了博文【Shader拓展】Illustrative Rendering in Team Fortress 2

http://blog.csdn.net/candycat1992/article/details/37696187

前两天阅读完了《GPU 编程与CG 语言之阳春白雪下里巴人.pdf》,写的很好,通俗易懂。

前两天阅读了《理解矩阵(孟岩)(全)》,这本简直神了,告诉了我们什么是数学的直觉意识,其中针对矩阵代表运动(变换),矩阵本身就是坐标系,为何空间点的坐标系变换需要齐次坐标(只需要一次矩阵乘法),空间的本质是容纳运动(变换)等等,这些论述极为精彩。

http://www.docin.com/p-201848123.html

Segment 2 理解

理解了Unity的渲染流程。特别是Unity里面的几个关键处理同顶点着色器片段着色器的关系。这一段写法暗含深意 #pragma surface surfaceFunction lightModel [optionalparams],#pragma surface surf BasicDiffuse vertex:vert finalcolor:final noforwardadd,其意思就是,如果你不玩一些特别的花样,其实就是在片段着色器里面先渲染surfaceFunction然后再搞lighting model.



理解了Unity Shader的运行机制

1,正常程序运行总是需要一个流程,对常见的C来说,就是顺序的,见到什么Call什么。但是对于Unity Shader来说,他的运行顺序是默认的(见上图),所以如果不清楚默认的程序流程,读code就很头疼。

2,正常程序在传递数据的时候,要么把值直接塞进去(通过定义一个临时变量的方式),要么传递指针进去,但是Unity Shader不,它不太允许/建议你建立自己定义的临时变量,你能用的就是规定死的一些类型。譬如:SurfaceOutput,或者类似下面这样一个自定义的struct,所谓自定义也是和顶点着色器/片段着色器息息相关的。

这个例子里面定义的就是Texture的UV坐标以及顶点颜色这两个。

<textarea readonly="readonly" name="code" class="c++">
struct Input
{
float2 uv_RampTex;
float4 vertColor;
};
</textarea>


为啥会是这样?规定的这么死?原因就是GPU都是通过寄存器直接传递的,并且都是硬连的,不是那种在内存里面想咋传就咋传的方式。

通过对Teamfortress博文的拜读,了解到了一个shader eng是如何同artist一起工作的,以及shader eng主要做什么/artist主要做什么。

但很初步,以后还需要更细致的摸索、体会。

初步识别一些简单的光照识别算法。譬如halfLambert的算法。

其核心算法是让暗的地方不要那么暗,以便增强一个物体的非光照面的细节,但是效果上减弱了明暗对比。

可能HDR会更好?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: