【Unity Shaders】概述及Diffuse Shading介绍

原创 2013年12月03日 17:34:26

本系列主要参考《Unity Shaders and Effects Cookbook》一书(感谢原书作者),同时会加上一点个人理解或拓展。

这里是本书所有的插图。这里是本书所需的代码和资源(当然你也可以从官网下载)。

========================================== 分割线 ==========================================



概述


几个月以前我就一直在找关于Unity Shader相关的资料,大三的时候有一门叫《计算机图形学》,让我觉得如果游戏程序员要从beginner成长为advancer,就必须了解底层渲染的一些知识。

Unity3D无疑是一个非常出色的游戏引擎,它让很多独立开发者真正能够独立开发一款让自己满意的游戏,而不需要考虑那些烦人的细节,正如Unity宣称的那样,让他们来做那些令人抓狂的事情吧!但是,在我们制作游戏的时候,经常会让游戏带有明显的“made in Unity”的感觉:明显的锯齿,糟糕的游戏性能,不真实的场景等等。当然这不是Unity引擎的错误,我相信它提供了很多强大的优化支持,支持很多自学者没有接触和学习这些高级技巧,就制作出了那样画面粗糙的游戏。

像育碧、盛大这种大型游戏公司,还是非常看重程序员对计算机图形学方面的知识,因为他们面向的对象是广大PC机,对画面和性能都有非常高的要求。而对于手机游戏,虽然现在手机硬件对渲染的支持还不是非常广泛,但是我们有理由相信,在这个发展迅速的时代,手机硬件的支持已经不再是梦想,手机游戏对画质的要求也一定越来越高。掌握shaders的原理和技术,我想是一个想要成长为更高level的游戏程序员不可或缺的部分。

哈,就在前两天,我发现了一本书,《Unity Shaders and Effects Cookbook》,这是我目前发现的第一本系统讲述Unity Shaders的书籍,我当时高兴坏了,毕竟之前都只是查看手册和一些论坛里的留言,非常零散。看了评论也是非常不错,因此决定把这本书当成以后学习Unity Shader的资料,并在博客里记录下学习的体会。

这里是本书所有的插图,先看看过个瘾吧!

这里是本书所需的代码和资源。

在这篇文章里,先对Diffuse Shading开个头。


Diffuse Shading 介绍


可以说Diffuse Shading是所有高级Shader的基础。几乎每个讲计算机图形渲染的书的第一章都是这个。在过去的计算机图形硬件中,这是通过固定渲染流水线来完成的。学过OpenGL等类似语言的人都会知道,以前是通过一些固定接口设置渲染属性来调节渲染细节的。而现在,那种固定编程的模型基本已经弃用,我们可以通过Cg更灵活地控制渲染细节。
Diffuse,即漫反射,可以想象成太阳光照射到某一个粗糙平面上时,该平面向四面八方都会反射光线,这些光线中的某些光线进入我们的眼睛,从而使我们看到了这个平面。一个基本的漫反射光照模型,需要包括以下几个部分:一个反射颜色(emissive color,可以理解成平面本身的颜色), 一个环境光颜色(ambient color,可以理解成光源的颜色), 以及计算来自所有光源的光线和。

下面给出了本章中主要实现的渲染效果:

  1. 最基本的漫反射光照模型(上述前四个小节):

  2. 半兰伯特光照模型(第5节):

  3. 使用一维渐变图控制光照模型(第6节):

  4. 使用二维渐变图控制光照模型(第7节):


结束语


呼呼,希望自己能坚持下来,也希望对大家有所帮助。
版权声明:本文为博主原创文章,未经博主允许不得转载。

【Unity Shaders】Diffuse Shading——创建一个自定义的diffuse lighting model(漫反射光照模型)

上一篇中,我们学了怎样在surface shader(这里即指surf函数)中使用自己定义的Properties变量。而在之前的学习中,我们实际上使用的都是Unity内置的Diffuse Lighti...
  • candycat1992
  • candycat1992
  • 2013年12月20日 15:01
  • 14735

Unity 3D - 光照计算中的diffuse的计算公式

创建颜色层 (LayerColor) : var _LayerColor = new cc.LayerColor(cc.winSize.height,cc.winSize.width);获取当前场景...
  • yu__jiaoshou
  • yu__jiaoshou
  • 2016年09月02日 16:21
  • 827

Unity Shader-兰伯特光照模型与Diffuse Shader

一.简介 学了一段时间shader,然而一直在玩后处理,现在终于下定决心钻研一下真正的带光照的shader。从Diffuse到Specular,到Bump等等。一个游戏的画面好坏,很大程度上取决于...
  • puppet_master
  • puppet_master
  • 2016年12月01日 13:02
  • 3852

unity diffuse 漫反射

Shader "Custom/MyDiffuse" { Properties { _Color("Main Color", color) = (1, 1, 1, 1) } SubSha...
  • qq_28221881
  • qq_28221881
  • 2017年04月05日 15:43
  • 238

【Unity Shaders】Diffuse Shading——在Surface Shader中使用properties

在上一篇中,我们已经向Surface Shader中添加了一些properties。在这篇教程里,我们将学习如何在Shader中访问和使用它们,以便通过调整Inspector中的变量来改变渲染效果。 ...
  • candycat1992
  • candycat1992
  • 2013年12月16日 17:24
  • 10751

【Unity Shaders】Diffuse Shading——漫反射光照改善技巧

上一篇中,我们演示了如何使用自定义的光照模型进行渲染。这一次,我们将进一步看一下怎样对它做一些变化来得到更好的效果! 我们会列出两种方法:使用Half Lambert lighting model(半...
  • candycat1992
  • candycat1992
  • 2013年12月20日 22:01
  • 19280

【Unity Shaders】概述及Diffuse Shading介绍

概述 几个月以前我就一直在找关于Unity Shader相关的资料,大三的时候有一门叫《计算机图形学》,让我觉得如果游戏程序员要从beginner成长为advancer,就必须了解底层渲染的一些知...
  • candycat1992
  • candycat1992
  • 2013年12月03日 17:34
  • 17464

Unity中写GLSL(十)—— Specular + Diffuse

先上图: 这光照是在顶点着色器里计算的,如果在片元着色器中计算效果会好一些。然后是代码:Shader "Custom/ShaderExample8" { Properties { ...
  • qq_22472397
  • qq_22472397
  • 2018年01月20日 20:31
  • 26

【Unity Shaders】Diffuse Shading——创建一个基本的Surface Shader

这一次的工作非常简单,我们主要是为了了解Unity Shaders的基本工作原理。 准备工作 创建一个新的Unity Project在Assets目录下新建一个文件夹:Shaders在Assets...
  • candycat1992
  • candycat1992
  • 2013年12月05日 00:46
  • 15960

【Unity Shaders and Effects Cookbook】Diffuse Shading

1. 基础的shader 写法 Shader "CookbookShaders/BasicDiffuse" { Properties { _MainT...
  • himilong
  • himilong
  • 2015年11月09日 21:24
  • 352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Unity Shaders】概述及Diffuse Shading介绍
举报原因:
原因补充:

(最多只允许输入30个字)