Unity3D Shaderlab实战学习笔记 一 (《shaders for game programmers and artists》实践)

把这次学习的历程做成笔记。一个原因是想用专业、严谨的态度对待这次学习;另一个就是想分享下自己的经验。毕竟这次学习因为有一个好的思想,没有显得头昏脑胀。如果还有大牛能够指点一二,我就很开心了。

这里我假设你已经有了一定的编程水平,看过了一些关于shader编程的文档(当然肯定有Unity提供的shader文档),并且比较熟悉Unity3D。学习Unity3D的一个很好的方法就是边实践边查文档。

 

Unity3D环境的配置以前介绍过了。这里我下了一个cg toolkit当做文档参考。

这次学习准备先用Unity3D实现《Shaders for Game Programmers and Artists》中的内容。这本书使用的是ATI RenderMonkey,我本来想的是先用ATI RendMonkey做着先,但是觉得太麻烦,毕竟Unity工作方式也不太一样。所以,RenderMonkey还是放在一边先吧。

好了,准备动手。从第四章开始就是shader实战。不过建议大家还是看看前面的内容。第四章是个很基础的例子。关键在于教会你从头开始建立一个简单的shader。

大家都知道unity的shaderlab封装了很多东西,甚至已经是有自己的语法。比如surface shader。这里我并不打算用这个东西,因为我还不想学……就用vertex + fragment吧。

先看看书上的步骤

1.导入模型。

Unity就用不着那么麻烦了,因为内建了几个模型。Cube,sphere什么的,我是每样都建了一个,然后摆到摄像机能拍到的地方。

2.建立矩阵

Unity也不用那么麻烦了,Unity内建了几个矩阵,从文档里可以查到。也不用事先声明什么的。这次用到的是UNITY_MATRIX_MVP,先放着不管。

3.一个最基础的输出单一颜色的shader

现在动手

1. 新建一个工程,然后随意创建几个模型,摆到摄像机能拍到的地方。

2. 新建一个shader,把它里边的不需要的功能先删去。得到的结果如下:

Shader "Custom/Hello World" 
{
   	Properties	{
	}
	
	SubShader 
	{
        	Pass
		{
			CGPROGRAM
	  
	
			#pragma vertex Vert
		
			#pragma fragment Frag
		
			#include "UnityCG.cginc"


			V2F Vert(appdata_base v)
			{

			}

			half4 Frag(V2F i):COLOR0
			{

			}

			ENDCG
        	}

	} 
	

FallBack "Diffuse"

}

3. 除了矩阵那块以及appdata_base 文档里有说明以外照着敲代码吧,最后得到:

Shader "Custom/Hello World2" 
{
	
	Properties 
	{
	}

		SubShader 
		{
	
			Pass 
	
			{

	
				CGPROGRAM

	  
			#pragma vertex Vert

				#pragma fragment Frag
	
				#include "UnityCG.cginc"
			
			
				struct V2F
	
				{
			
					float4 pos:POSITION;

				};
		

	  
			V2F Vert(appdata_base v)

				{
			
					V2F output;
	
					output.pos = mul(UNITY_MATRIX_MVP,v.vertex);
		
					return output;
		
				}
			

				half4 Frag(V2F i):COLOR
		
				{
				
					return float4(1,0,0,1);

				}

		
				ENDCG	  
	  
	
			}

		
		}
	

	FallBack "Diffuse"

}

4. 新建一个material,然后把shader拖上去,再把material拖给之前创建的GameObject上面看效果吧…… (恶心的红色)

未命名

接下来是贴图

1. 首先有个从外界接收贴图的方式,unity有自己的一套东西,不懂的查文档……

2. 要加一个语义为TEXCOORD0的参数,表示当前取纹理的坐标

3. 最后结果如下:

Shader "Custom/Hello World3"
 {

	Properties 

	{
		
		_MainTex ("Base (RGB)", 2D) = "white" {}

	}
	

	

	SubShader 
	
	{
	
		Pass 
	
		{

	
			CGPROGRAM
	
  
			#pragma vertex Vert

			#pragma fragment Frag
	
			#include "UnityCG.cginc"
	

			sampler2D _MainTex;
		
			struct V2F
		
			{
		
				float4 pos:POSITION;
	
				float2 txr1:TEXCOORD0;
		
			};
			  
		
			V2F Vert(appdata_base v)
	
			{
				
				V2F output;
	
				output.pos = mul(UNITY_MATRIX_MVP,v.vertex);
	
				output.txr1 = v.texcoord;
			
				return output;
			
			}
			
		
			half4 Frag(V2F i):COLOR
		
			{
				
				return tex2D(_MainTex,i.txr1);
	
			}

		
			ENDCG
	  
	  
	
		}

		
	}
	
	
FallBack "Diffuse"

}

4. 看效果吧……

未命名

再接下来书上写的是显示多个物体……没必要了……

再接下来是拓展练习

1.动画

这里的动画就是扰动传进来的TEXCOORD0值,让它有规律的移动。就是乘上cos时间或者sin时间。查看unityCG.cginc可以知道unity提供了_CosTime和_SinTime

output.txr1 = v.texcoord*_CosTime;

2.混合贴图

我在网上随意找了一张青苔的图片。这个混合的原理就是把取到的颜色值相乘(前提是0到1的那种)

return tex2D(_MainTex,i.txr1)*tex2D(_SecondTex,i.txr1);
都用TEXCOORD0采样
 

这样一套练习下来,相信你跟我一样会觉得还挺好玩的。下一章是Screen Effect。这个方面Unity3D就需要一些比较特别的设置。

待续。

转载于:https://www.cnblogs.com/dogablog/archive/2011/10/22/2221534.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Unity 3D ShaderLab开发实战详解》是一本介绍Unity 3D的ShaderLab开发实战教程的PDF电子书。ShaderLabUnity中用于创建和编辑着色器的工具,通过编写自定义着色器可以实现各种特效和材质效果,提升游戏的视觉效果。 这本书的目的是帮助读者掌握ShaderLab的基本概念和技巧,并通过实例演示来深入了解如何创建高质量的着色器。书中的内容涵盖了ShaderLab开发的各个方面,从基础的着色器语法开始讲解,逐步介绍如何创建材质、纹理、光照效果、透明效果、反射效果等。书中还详细讲解了Unity的着色器渲染管线和渲染流程,帮助读者理解着色器是如何与场景、摄像机、光源等组件进行交互和渲染的。 在书中,作者通过大量的示例代码和图文说明,帮助读者理解和掌握ShaderLab的使用方法和技巧。同时,书中还提供了一些实用的开发技巧和调试技巧,帮助读者解决在实际开发中可能遇到的问题。 《Unity 3D ShaderLab开发实战详解》适合有一定Unity开发经验的读者阅读,对于对着色器开发感兴趣的游戏开发者来说,这本书是一个很好的学习资源。通过学习这本书,读者可以深入了解Unity的着色器开发技术,掌握创建高质量视觉效果的方法,提升游戏的质量和表现力。 ### 回答2: 《Unity 3D ShaderLab开发实战详解》是一本介绍UnityShaderLab开发的实战指南。Shader是用来描述渲染效果的程序,而ShaderLab则是Unity的内建语言,用于编写和调试Shader。 该书包含了ShaderLab开发的基础知识和高级技巧。首先,它涵盖了ShaderLab语言的基本语法和结构,包括材质和渲染管线的理解,以及Shader中常用的算法和函数。读者可以通过逐步学习这些内容来掌握ShaderLab的基本编写和调试技巧。 书中还介绍了一些常见的渲染效果,如水面、光照、阴影等。读者可以通过学习这些案例来了解如何在实际项目中应用ShaderLab开发出高质量的渲染效果,并通过对案例代码的分析和修改来加深对ShaderLab的理解。 此外,该书还介绍了一些高级的ShaderLab开发技术,如使用GPU编程语言HLSL优化Shader性能、通过贴图及纹理坐标实现特定效果等。这些技术可以帮助读者深入理解ShaderLab的内部原理,并运用到实际项目中。 总的来说,《Unity 3D ShaderLab开发实战详解》提供了一个系统和全面的学习ShaderLab开发的平台。通过阅读本书,读者可以逐步掌握ShaderLab语言的基础知识和技巧,并学会如何应用它来实现各种炫酷的渲染效果。无论是初学者还是有一定经验的开发者,都可以从中获得实践和提高的机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值