2018.10.5

大概总结一下吧,今天我还是在网上看了下关于unity的基础教程。因为自己本身对于3dmax 也自学了很久了,所以感觉听起来很轻松(毕竟还是些基本操作),全程开着1.5倍速观看。但是,得亏我没有觉得简单就跳过,视屏里的老师讲的还真挺好的。除了讲一些操作的原理之外,还会渗透很多重要的emm 应该说是方法吧!比如看了这几集教程,我对于诸如FPS游戏及一些2D游戏 的镜头(分屏,猪脚视野,俯瞰视野),小地图,灯光的原理有了清晰直观的认识,真是刷新了一遍。以前玩的时候没注意,原来这些游戏机制的实现在Unity中仅仅只是很简单的设定。当然对于这些机制,还是应该带着敬畏。毕竟我们也只是用着一个黑箱子,一旦深入到代码还是抓瞎。其次,在视频里,又听了一遍渲染管线的知识。由于之前已经看过书了,所以还是抱着快进的想法。但是认真听过之后,发现其实看书时的很多内容其实自己并没有真正的理解或者是记住。果然多次学习还是很有效果的。
下午的时候,我只是精读了一个shader代码。自己一个字符的敲,并且打上注释。感觉收获还是很大的,虽然前几天看了很多页,但当我认真读这个代码的过程中,自己还是得不停往前翻阅。最后关于代码的原理,还是有两个小点不是很清楚。不过今天还得写作业,就只能放到明天了。
休息的时候,翻了两本CG画册看看,也就是只能看看了。会画画还是牛逼啊!

**

Unity学习

**

摄像机还具有耳朵的功能

clear Flags:屏幕空白部分的处理 (Depth only)

solid Color:纯色

天空盒:模拟天空的材质;包装器 ;6面:procdural 1 专门有组件使用 可以作为反射源。

layer:层 culling mask:遮罩(可视化)

Perspective(透视) Orthographic(正交) Field of view(镜头距离,仅在正交模式中存在,狙?)

Clipping Plane:视野范围(太远的不渲染)(Near --Far)

Viewport Rect: 可以实现分屏操作 (x w的调整)

地图相机(小地图显示)

Depth:主摄像机 的深度大于次摄像机时,次摄像机才有效(渲染覆盖)

Ctrl Shift+f:切换至选定物体的视角

第三人称视角:创建一个空物体作为猪脚,模型 集合(model)和主相机都放在猪脚(player)附属内; 实现相机跟人跑 。

采用地图的俯瞰视角时,最好使用正交方式,避免因为透视导致过多的遮蔽。如果希望猪脚在俯瞰时能够是立体的,我们可以在猪脚的头顶放一张Plane并附上贴图(真是个好方法!)(原来如此,我贴三角形,那可不就是三角形,还会转向。。)

我们需要对层的操作灵活运用!!

地图摄像机一定不要去看地形,避免重复渲染,降低性能。在整个场景的最底下放一张Plane。俯瞰时只看图,避免渲染地形(!!)

渲染管线:(图形数据在GPU上经过运算处理,最后输出到屏幕的过程)
Draw call:(game–>stats–>Batches[批次])
每次引擎准备数据并通知GPU的过程。每帧调用显卡渲染物体的次数。

顶点处理–>图元装配–>光栅化(计算三角面内的像素点的数目 ,并为着色阶段提供合理插值???)

像素处理:着色,写缓存(帧缓存【色彩】;深度缓存Z-buffer【深度信息,距离】)

Instant Occlusion culling:即时遮挡剔除
物体在进入渲染流水线之前,将看不到的物体剔除。
cam后缀表示摄像机。
原理:发射线 biubiubiu 给物体添加Box Collider
分布密集的时候用,否则CPU性能浪费
步骤:1创建层 2为物体指定层 3添加物体碰撞组件Collider
4 添加IOCcam脚本
全局光照(GI):能计算直接光,间接光,环境光,反射光的光照系统
类型:方向光(和位置无关)
点光源(球形范围)
聚光(Spot)手电筒
多细节层次技术(LOD):
根据物体模型的节点重要性,分配渲染资源

Shader学习

标准光照模型中的漫反射光照模型

Shader “Unity Shaders Book/Chapter 6/Diffuse Vertex-Level” {
Properties {
_Diffuse (“Diffuse”, Color) = (1, 1, 1, 1) //声明反射的颜色属性
}
SubShader {
Pass {
Tags { “LightMode”=“ForwardBase” } //声明光照模式,是标准光照模型,这个关系到对入射光颜色强度的取值

		CGPROGRAM
		
		#pragma vertex vert                                                 //告诉Unity 顶点,片元着色器分别叫什么
		#pragma fragment frag
		
		#include "Lighting.cginc"
		
		fixed4 _Diffuse;                                                      //为了在SubShader中使用Properties声明的属性,我们需要定义一个相同类型的变量
		
		struct a2v {            //顶点着色器输入结构体,存放顶点坐标及法线数据
			float4 vertex : POSITION;
			float3 normal : NORMAL;
		};
		                                               //顶点着色器输出结构体(片元着色器输入结构体),存放裁剪空间的坐标,及顶点着色器所计算出来的颜色数据
		struct v2f {            
			float4 pos : SV_POSITION;
			fixed3 color : COLOR;
		};

//顶点着色器函数
v2f vert(a2v v) {
v2f o; //定义一个输出变量
// 将顶点坐标从模型空间转换到世界空间(裁剪的空间);数据来自于顶点着色器的输入v
o.pos = UnityObjectToClipPos(v.vertex);

			// 定义一个变量获得环境光的强度,颜色
			fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
			
			// 将法线参数从模型空间转换到裁剪空间【??这部分的线代还不是很清楚】;
			fixed3 worldNormal = normalize(mul(v.normal, (float3x3)unity_WorldToObject));
			// 得到入射光线在世界空间中的方向
			fixed3 worldLight = normalize(_WorldSpaceLightPos0.xyz);
			//计算反射的颜色【需要三个数据】光源的颜色    漫反射的颜色   顶点法线  光源的方向
			//[反射光强度??]
			fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldNormal, worldLight));
			//saturate函数限定取值范围【0,1】
			o.color = ambient + diffuse;    //将反射光颜色和环境光叠加,得到最后结果
			
			return o;
		}
		
		fixed4 frag(v2f i) : SV_Target {          //片元着色器直接输出
			return fixed4(i.color, 1.0);
		}
		
		ENDCG
	}
}
FallBack "Diffuse"      //回调函数
}

//一点小问题: 为什么只有反射光的颜色数据(强度?)模型空间到裁剪空间的变换细节? 对漫反射颜色参数的改变会有什么影响?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值