计算机图形学基础-介绍 图形领域(Graphics Areas) 建模(Modeling) 渲染(Rendering) 动画(Animation) 用户交互(User interaction) 虚拟现实(Virtual reality) 可视化(Visualization) 图像处理(Image processing) 三维扫描(Three-dimensional scanning) 计算摄影(Computationa 2022-07-05 Computer Graphics #Fundamental of Computer Graphics
使用噪声 消融效果 **消融(dissolve)**效果常见于游戏中的角色死亡、地图烧毁等效果。在这些效果中,消融往往从不同的区域开始,并向看似随机的方向扩张,最后整个物体都将消失不见。我们将学习如何在 Unity 中实现这种效果,并得到类似下图中的效果。 要实现上图中的效果,原理非常简单,概括来说就是噪声纹理+透明度测试。我们使用对噪声纹理采样的结果和某个控制消融程度的阈值比较,如果小于阈值,就使用 c 2022-04-23 Unity Shader #Texture
非真实感渲染 尽管游戏渲染一般都是以**照相写实主义(photorealism)作为主要目标,但也有许多游戏使用了非真实感渲染(Non-Photorealistic Rendering,NPR)**的方法来渲染游戏画面。非真实感渲染的一个主要目标是,使用一些渲染方法使得画面达到和某些特殊的绘画风格相似的效果,例如卡通、水彩风格等。 卡通风格的渲染 卡通风格是游戏中常见的一种渲染风格。使用这种风格的游戏画面通常有 2022-04-16 Unity Shader #Rendering
深度和法线纹理 获取深度和法线纹理 背后的原理 深度纹理实际上就是一张渲染纹理,只不过它里面存储的像素值不是颜色值,而是一个高精度的深度值。由于被存储在一张纹理中,深度纹理里的深度值范围是[0, 1],而且通常是非线性分布的。这些深度值来自于顶点变换后得到的归一化的设备坐标(Normalized Device Coordinates,NDC)。想要在屏幕上绘制一个模型,需要把模型顶点在顶点着色器中乘以 MVP 变 2022-03-21 Unity Shader #Texture
屏幕后处理 建立一个基本的屏幕后处理脚本系统 屏幕后处理,通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效。使用这种技术,可以为游戏画面添加更多的艺术效果,例如景深(Depth of Field)、运动模糊(Motion Blur)等。 因此,想要实现屏幕后处理的基础在于得到渲染后的屏幕图像,即抓取屏幕,而 Unity 为我们提供了这样一个方便的接口——OnRenderI 2022-03-04 Unity Shader #Post Processing
动画效果 Unity Shader 中的内置变量(时间篇) 动画效果往往都是把时间添加到一些变量的计算中,以便在时间变化时画面也可以随之变化。Unity Shader 提供了一系列关于时间的内置变量来允许我们方便地在 Shader 中访问运行时间,实现各种动画效果。下表给出了这些内置的时间变量。 名称 类型 描述 _Time float4 t 是自该场景加载开始所经过的时间,4 个分量的值分别 2022-02-24 Unity Shader #Animation
高级纹理(二) 渲染纹理 在之前的学习中,一个摄像机的渲染结果会输出到颜色缓冲中,并显示到我们的屏幕上。现代的 GPU 允许我们把整个三维场景渲染到一个中间缓冲中,即渲染目标纹理(Render Target Texture,RTT),而不是传统的帧缓冲或后备缓冲(back buffer)。与之相关的是多重渲染目标(Multiple Render Target,MRT),这种技术指的是 GPU 允许我们把场景同时渲 2022-02-23 Unity Shader #Texture
高级纹理(一) 立方体纹理 在图形学中,**立方体纹理(Cubemap)是环境映射(Environment Mapping)**的一种实现方法。环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了层金属一样反射出周围的环境。 立方体纹理一共包含了 6 张图像,这些图像对应了一个立方体的 6 个面,立方体纹理的名称也由此而来。立方体的每个面表示沿着世界空间下的轴向(上、下、左、右、前、后)观察所得 2022-02-23 Unity Shader #Texture
插值函数 线性插值函数 $$ lerp(y_1, y_2, weight) = y_1 + (y_2 - y_1) \times weight $$ 其中 $weight$ 是一个在 [0, 1] 区间的实数,倒不是因为取更大的值后这个函数就无定义了,而是因为取了更大的值,这个函数就失去了我们构造它的理由,另外,CG 会限制 $weight$ 的值在 [0, 1] 的范围内,超过这个范围会被留在边界 0 或 2022-02-20 Unity Shader #Math
更复杂的光照(三) Unity 的阴影 阴影是如何实现的 我们先可以考虑真实生活中阴影是如何产生的。当一个光源发射的一条光线遇到一个不透明物体时,这条光线就不可以再继续照亮其他物体(这里不考虑光线反射)。因此这个物体就会向它旁边的物体投射阴影,那些阴影区域的产生是因为光线无法到达这些区域。 在实时渲染中,我们最常使用的是一种名为 Shadow Map 的技术。这种技术理解起来非常简单,它会首先把摄像机的位置放在与光源 2022-02-19 Unity Shader #Light