3D游戏相关笔记
2016-05-25 14:50
337 查看
1.法线贴图
法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。对于视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。
2. Dolly Zoom(滑动变焦)
An object that just fits within the frustum vertically will occupy the whole height of the view as seen on the screen. This is true whatever the object’s distance from the camera and whatever the field of view. For example, you can move the camera closer to the object but then widen the field of view so that the object still just fits inside the frustum’s height. That particular object will appear the same size onscreen but everything else will change size as the distance and FOV change. This is the essence of the dolly zoom effect.
Creating the effect in code is a matter of saving the height of the frustum at the object’s position at the start of the zoom. Then, as the camera moves, its new distance is found and the FOV adjusted to keep it the same height at the object’s position. This can be accomplished with the following code:
3.loadLevel时skybox的光照不会加载会造成场景变暗(此问题只在编辑器出现,游戏打包之后问题就不会出现了)
编辑器中的解决方案:
In both of your scenes go to Window --> Lighting --> Lightmaps and disable auto and manually click Bake. Leave the auto checkbox off. Do this for both of your scenes, the start menu scene and your game scene. In both scenes the auto checkbox must be off and have a lightmap snapshot up above in the lightmap snapshot field.
法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。对于视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。
2. Dolly Zoom(滑动变焦)
Dolly Zoom (AKA the “Trombone” Effect)
Dolly Zoom is the well-known visual effect where the camera simultaneously moves towards a target object and zooms out from it. The result is that the object appears roughly the same size but all the other objects in the scene change perspective. Done subtly, dolly zoom has the effect of highlighting the target object, since it is the only thing in the scene that isn’t shifting position in the image. Alternatively, the zoom can be deliberately performed quickly to create the impression of disorientation.An object that just fits within the frustum vertically will occupy the whole height of the view as seen on the screen. This is true whatever the object’s distance from the camera and whatever the field of view. For example, you can move the camera closer to the object but then widen the field of view so that the object still just fits inside the frustum’s height. That particular object will appear the same size onscreen but everything else will change size as the distance and FOV change. This is the essence of the dolly zoom effect.
Creating the effect in code is a matter of saving the height of the frustum at the object’s position at the start of the zoom. Then, as the camera moves, its new distance is found and the FOV adjusted to keep it the same height at the object’s position. This can be accomplished with the following code:
using UnityEngine; using System.Collections; public class ExampleScript : MonoBehaviour { public Transform target; public Camera camera; private float initHeightAtDist; private bool dzEnabled; // Calculate the frustum height at a given distance from the camera. void FrustumHeightAtDistance(float distance) { return 2.0f * distance * Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad); } // Calculate the FOV needed to get a given frustum height at a given distance. void FOVForHeightAndDistance(float height, float distance) { return 2.0f * Mathf.Atan(height * 0.5f / distance) * Mathf.Rad2Deg; } // Start the dolly zoom effect. void StartDZ() { var distance = Vector3.Distance(transform.position, target.position); initHeightAtDist = FrustumHeightAtDistance(distance); dzEnabled = true; } // Turn dolly zoom off. void StopDZ() { dzEnabled = false; } void Start() { StartDZ(); } void Update () { if (dzEnabled) { // Measure the new distance and readjust the FOV accordingly. var currDistance = Vector3.Distance(transform.position, target.position); camera.fieldOfView = FOVForHeightAndDistance(initHeightAtDist, currDistance); } // Simple control to allow the camera to be moved in and out using the up/down arrows. transform.Translate(Input.GetAxis("Vertical") * Vector3.forward * Time.deltaTime * 5f); } }
3.loadLevel时skybox的光照不会加载会造成场景变暗(此问题只在编辑器出现,游戏打包之后问题就不会出现了)
编辑器中的解决方案:
In both of your scenes go to Window --> Lighting --> Lightmaps and disable auto and manually click Bake. Leave the auto checkbox off. Do this for both of your scenes, the start menu scene and your game scene. In both scenes the auto checkbox must be off and have a lightmap snapshot up above in the lightmap snapshot field.
相关文章推荐
- Spring 源码解析之ViewResolver源码解析(四)
- leetcode 25. Reverse Nodes in k-Group——很值得一看的链表题
- NoSQL之Redis探析
- leetcode.87. Scramble String
- Log4j-日志
- 25岁的忧伤
- 最完整的垃圾回收原理
- ANT应用(三)ANT实战
- 阿里技术保障-KeepAlive
- iOS应用内支付(IAP)的那些坑
- OpenGL深入探索——OpenGL/GLSL数据传递小记(3.x) 【包含UBO详解】
- Java并发编程实战第四章对象的组合
- 代码混淆
- iOS 宏HUGE_VALL,HUGE_VAL,HUGE_VALF的含义
- 64位Ubuntu系统如何运行32位软件
- mvn 非法字符 65279
- Qt监测系统文件变化QFileSystemWatcher
- 排序算法
- 实例讲解Android中SQLiteDatabase使用方法
- java.lang.OutOfMemoryError处理错误