自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 光线追踪12 - Defocus Blur(虚焦模糊)

对于真实相机,如果需要更多光线,可以使光圈更大,并且远离焦距的物体将产生更多的模糊效果。对于我们的虚拟相机,我们可以拥有完美的传感器并且从不需要更多光线,因此只在需要虚化模糊时使用光圈。由于此圆盘的大小控制了我们获得的虚化模糊程度,这应该是相机类的一个参数。然而,在我们的模型中,这两个值将相等,因为我们将将像素网格放在焦平面上,距离摄像机中心焦距远。为了渲染相机外部的图像,我们不需要模拟相机内部的任何部分,这将增加不必要的复杂性。距离镜头焦距的位置),在那个平面上,3D世界中的所有物体都是完全聚焦的。

2024-03-07 15:19:24 986

原创 光线追踪11 - Positionable Camera(可定位相机)

u是指向相机右侧的单位向量,v是指向相机上方的单位向量,w是指向视线方向相反的单位向量(由于我们使用右手坐标系),相机中心位于原点。由于我们的图像不是正方形的,水平和垂直的视野是不同的。与以前一样,当我们的固定相机面向-Z时,我们的任意视角相机面向-w。请记住,我们可以选择使用世界坐标系的上方向(0,1,0)来指定vup,但不是必须的。我们将摄像机放置的位置称为"lookfrom",我们注视的点称为"lookat"。我们将使用一个90°的视野来测试这些变化,以两个相互接触的球体构成的简单场景为例。

2024-03-07 15:14:46 994

原创 光线追踪10 - Dielectrics( 电介质 )

其中θ和θ′是相对于法线的角度,η和η′(pronounced “eta” and “eta prime”)是折射率(一般情况下,空气为1.0,玻璃为1.3-1.7,钻石为2.4)。我们知道右侧每一项的值,除了cosθ。在这种情况下,所有光线都被反射回来,因为通常是在固体物体内部发生的,所以被称为“全内反射”。一个麻烦的实际问题是,当光线处于折射率较高的介质中时,斯涅尔定律没有真实解,因此无法发生折射。使用介电球体的一个有趣且简单的技巧是注意到,如果使用负半径,几何形状不受影响,但表面法线指向内部。

2024-03-07 15:08:09 924

原创 光线追踪9 - Meta 金属

当光线击中一个表面(例如特定的球体)时,hit_record中的材质指针将被设置为指向主函数(main())中设置的球体所赋予的材质指针。对于我们已经拥有的Lambertian(漫反射)情况,它可以始终根据其反射率R进行散射和衰减,或者有时候以概率1−R进行散射,但不进行衰减(未散射的光线会完全被材质吸收)。由于我们只是指定了一个指向类的指针,编译器不需要知道类的细节,从而解决了循环引用的问题。球体越大,反射越模糊。hit_record的作用是避免使用大量的参数,以便我们可以在其中存储任何所需的信息。

2024-03-07 12:18:05 739

原创 光线追踪8- Diffuse Materials 漫反射材料

您使用的图像查看器可能期望接收的是伽马空间中的图像,而我们提供的是线性空间中的图像,这就是为什么我们的图像看起来过于暗淡的原因。作为一个简单的近似,我们可以使用“gamma 2”作为我们的转换,这是从伽马空间到线性空间的转换所使用的幂次。在交点处,这个表面有两个完全不同的面,因此任何交点只能有两个唯一的与之相切的单位球(一个单位球对应于表面的每个面)。这种非常直观的材质是最简单的漫反射材质,事实上,许多最早的光线追踪论文使用了这种漫反射方法(在采用稍后将要实现的更精确方法之前)。这里存在一个潜在的问题。

2024-03-06 22:05:48 847

原创 光线追踪7 - 抗锯齿(Antialiasing)

那是因为我们的眼睛自然而然地完成了我们希望光线追踪完成的任务:将落在所渲染图像的特定(离散的)区域上的(连续函数的)光线进行积分。为了确保最终结果的颜色分量保持在正确的[0,1]范围内,我们将添加并使用一个小的辅助函数:interval::clamp(x),用于限制值x在指定范围内。该函数将使用一个新的辅助函数pixel_sample_square(),该函数生成一个随机样本点,在以原点为中心的单位正方形内。对于由多个样本组成的单个像素,我们将从像素周围的区域选择样本,并将得到的光(颜色)值进行平均。

2024-03-06 21:50:27 999

原创 光线追踪6 - Moving Camera Code Into Its Own Class

最终,相机将遵循我们能想到的最简单的使用模式:它将不带参数进行默认构造,然后拥有它的代码将通过简单赋值来修改相机的公共变量,并最终通过调用initialize()函数来初始化一切。最后,拥有者代码可以调用initialize(),或者让相机在render()开始时自动调用这个函数。新的相机类将包含两个公共方法initialize()和render(),以及两个私有辅助方法get_ray()和ray_color()。在继续之前,现在是将我们的相机和场景渲染代码整合到一个新的类中:相机类。

2024-03-06 21:43:52 285

原创 光线追踪5- Surface normals and multiple objects

对于初始光线,这个区间是正数t,但正如我们将看到的,将tmin与tmax定义为区间可以简化我们的代码。虽然使用球体数组的方式很诱人,但一个非常简洁的解决方案是为光线可能碰到的任何物体创建一个"抽象类",并将球体和球体列表都视为可击中的物体。在本书中,我们有比几何类型更多的材质类型,所以我们将选择较少的工作量,并将确定放在几何时间。在我们的代码中,我们将使用 shared_ptr,因为它允许多个几何体共享一个公共实例(例如,一组使用相同颜色材质的球体),并且使内存管理自动化并更易于理解。

2024-03-06 20:52:48 823

原创 光线追踪4- Adding a sphere

需要注意的一点是,我们正在测试光线是否与球体相交,通过求解二次方程并判断是否存在解来进行判断,但含有负值的解同样完全有效。如果您将球体的中心位置改为 z=+1,您将得到完全相同的图像,因为该解并不能区分相机前方的物体和相机后方的物体。在图形学中,你几乎总是希望将公式表达为向量的形式,这样所有涉及 x、y、z 的部分都可以简单地用一个 vec3 类来表示。如果我们将这个数学公式硬编码到我们的程序中,我们可以通过在z轴上将一个小球放置在-1位,并将与其相交的像素块标记为红色来测试我们的代码。

2024-03-06 20:29:31 816

原创 光线追踪3-Rays, a Simple Camera, and Background

viewport是3D世界中的一个虚拟矩形,包含了图像像素位置的网格。然而,由于我们已经有一个给定的长宽比,更容易设置图像的宽度和长宽比,然后使用这个信息计算其高度。虽然我们的3D空间遵循上述规定,但这与我们的图像坐标冲突,我们希望将第一个像素设在左上角,并从上到下逐渐移动到右下角的最后一个像素。在这个图中,我们有视口(viewport),用于7*5分辨率图像的像素网格,视口左上角Q,像素P0,0位置,视口向量Vu(viewport_u),视口向量Vv(viewport_v),以及像素增量向量Δu和Δv。

2024-03-06 17:57:51 831

原创 光线追踪2- Vec3 类

修改主程序,以同时使用这两文件功能。新建一个文件: color.h。

2024-03-06 17:25:27 323

原创 光线追踪1 输出一张 ppm 格式图

红色从完全关闭(黑色)向右边逐渐变亮(鲜红),绿色从顶部完全关闭逐渐变暗(黑色)至底部。将红光和绿光混合会产生黄色,因此我们预期右下角应该是黄色的。根据约定,每个红/绿/蓝分量在内部使用取值范围为0.0到1.0的实值变量表示。在打印输出之前,必须将它们缩放为0到255之间的整数值。之后有x * y个(r,g,b)三元组,它会按照顺序读取,并且在图像的左上角开始一行一行扫描设置像素值。3 2 分别表示列数和行数,或者理解为x轴的长度和y轴的长度,或理解为图形的宽和高。这些行按照从上到下的顺序进行输出。

2024-03-06 17:19:15 346

原创 NURBS 曲面

准线可以是开曲线,也可以是闭曲线。, 设d是柱面高度方向的单位矢量。柱面p(u, v)的表达式是将准线p(u)沿方向d平行扫描距离h得到的。记扫描方向的参数为v, 且。曲面u方向的次数为p。由于曲面v方向的次数为1,所以v=[0,0,1,1]。曲面的v方向参数是直母线。因此一般柱面也可视为直母线一个端点沿着准线运动平移扫掠生成的曲面。故柱面可视为准线平移扫描生成的曲面。是三维空间的4个点,双线性曲面是通过四条边界线。一个在u次方向p次、v方向q次的NURBS曲面。为准线控制多边形顶点,相应的权因子为。

2024-03-06 17:03:59 365

原创 圆弧的NURBS表示

可用一段二次NURBS表示。,在标准有理二次Bezier曲线上插入一个t=1/2 的节点。来定义一段标准型,有理二次Bezier曲线,即定义了圆心角为。随着的增大,凸包性质将会变得越来越差。二次NURBS 圆弧权因子。的圆弧,需要6个控制点。为起始角,逆时针为正角,为起始角,逆时针为正角,为控制顶点,权因子为。为起始角,逆时针为正角,时,可以采用首末端点。

2024-03-06 16:35:11 367

原创 NURBS 曲线的定义及几何性质

(n=6), 如图所示,假定标准型NURBS曲线的其余权因子为2,节点矢量使用Hartley-Judd算法计算,绘制三次(k=3)NURBS曲线., 且顺序K个权因子不同时为0。首末权因子都为1的NURBS曲线称为标准型NURBS曲线,否则称为非标准型NURBS曲线。是k次规范B样条基函数。对于NURBS开曲线,常将两断节点的重复度取为k+1。称为权因子,分别与控制点。NURBS 的数学定义为。举例:给定7个控制点。

2024-03-06 16:01:42 491

原创 曲线节点插入

的过程为“节点插入”。节点插入实质是改变了节点矢量,导致增加了一个新的控制点,而曲线在几何和参数方面均不发生改变。, 则 i=5, 因为 k=3, r=0, n=7, 所以 i-k=2, i-r+1=6, n+1=8。曲线节点插入,会增加控制点数,原理是顺序将单个节点值拆入到定义的节点矢量中。在保持曲线形状不变的情况下,试计算插入节点后的新控制点。式中,i 为节点插入原节点区间的左端节点的下标序号,r表示所插节点t在原节点矢量。因此,原始的B样条曲线 p(t) 就可用这组新的B样条基函数和未知新控制点。

2024-03-06 15:54:01 372

原创 Bezier 曲线的拼接

把控制多边形近似看做样条曲线的外切多边形,并使曲线的分段连接点与控制多边形的顶点或边对应起来。生成曲面时,先固定u,变化v 得到一簇Bezier 曲线,然后固定v , 变化u得到另一簇Bezier曲线,两簇曲线交织生成双三次Bezier曲面。里森费尔德(Riesenfeld)算法 假定偶次b样条曲线的所有n-k个分段连接点对应于控制多边形上除两端各k/2条边外其余n-k条边的中点。假定样条曲线的n-k个分段连接点对应于控制多边形上除两端各 (k+1)/2 个顶点外其余的n-k个控制点。

2024-03-06 15:05:52 885

原创 曲线曲面 - 连续性, 坐标变换矩阵

指相邻两段曲线在结合点处的一阶导数成比例、二阶导数成比例,即曲率一致,但大小不一定相等;, 指相邻两段曲线在结合点处的一阶导数成比例、但大小不一定相等;与参数连续性不同的是,几何连续性只要求参数成比例而非相等。, 指相邻两段曲线在结合点处具有相同的一阶导数;, 指相邻两段曲线在结合点处具有相同的二阶导数;, 指相邻两段曲线在结合点处具有相同的坐标;,指相邻两段曲线在结合点处具有相同的坐标。零阶参数连续性,记为。一阶参数连续性,记为。二阶参数连续性,记为。一阶几何连续性,记为。二阶几何连续性,记为。

2024-03-01 22:40:29 442 1

原创 unity 导出函数给 Lua 调用

有些类的某个函数不支持导出,那就只能屏蔽掉,屏蔽列表在这儿。

2023-06-14 16:01:25 155

原创 unity 万向锁,四元素

最后,将旋转增量与当前旋转四元数相乘,得到新的旋转四元数,并将其赋值给物体的旋转属性,实现旋转效果。然而,当绕两个轴进行旋转时,会出现一种情况,即第二个轴与第一个轴重合,导致第三个轴的旋转轴发生了变化,从而导致旋转的不稳定或无法实现所期望的旋转,这种情况就被称为万向锁。在这种情况下,第二次旋转会与第一次旋转重合,导致第三次旋转的轴变成了原来的x轴,从而导致旋转的不稳定或无法实现所期望的旋转。总之,要避免万向锁问题,就需要使用更稳定和准确的旋转方式,或者通过限制旋转角度或改变旋转顺序来解决问题。

2023-06-14 15:59:14 361

原创 unity 动画 - Animator 的使用

目录一、Recap:Shadow Mapping 阴影贴图(内容回顾)--Issues From Shadow Mapping And Solutions 阴影贴图的问题和解决方法二、The math behind shadow mapping 阴影贴图背后的数学知识三、Percentage closer soft shadows 软阴影(PCSS)四、Basic Filtering Techniques 基础Filtering技术一、阴影贴图Shadow mapping 作者:沙.

2023-06-14 15:55:43 192

原创 让树叶摇动起来

Shader "XW/Tree/TreeLeaf_Simple"{ Properties { _Color("Main Color", Color) = (1,1,1,1) _clipAlpha("clip Alpha", Range(0 , 1) ) = 0.5 _MainTex("Base (RGB) Trans (A)", 2D) = "white" {} _Cutoff("Alpha Cutoff", R...

2023-06-14 15:48:38 211

原创 Unity 制作动画 - Animation 的使用

如果你在当前帧修改了多个属性,可以点击菜单中的Key All Modified(将所有修改的属性记录关键帧)或Key All Animated(记录属性列表中所有属性的数值,即使与上一帧相同数值的属性也会被记录)来一次性将所有修改的属性保存。在录制模式下,不管是在场景中移动、旋转、缩放物体,还是在Inspector面板中修改物体组件的属性(Unity动画支持的属性),Unity都会自动在动画Clip的当前时间上添加关键帧保存。也可以通过修改当前帧数输入框中的数字,修改时间轴的位置。

2023-06-14 15:47:40 5044

原创 TextMeshPro 的使用

TextMesh Pro提供了对文本格式和布局的改进控制,具有诸如字符、单词、行和段落间距、字距、对齐文本、链接、30多个可用的富文本标记、支持多种字体和精灵、自定义样式等功能。功能强大,易于使用,TextMesh Pro使用先进的文本渲染技术,以及一套自定义着色器;提供实质性的视觉质量改进,同时给用户提供难以置信的灵活性,当涉及到文本样式和纹理。由于TextMesh Pro创建的几何图形和Unity的文本组件一样,每个字符使用两个三角形,所以这种改进的视觉质量和灵活性并不需要额外的性能成本。

2023-06-14 15:42:43 1209

原创 TimeLine 的使用 2 - Cinemachine 部分

World Up Override:复写世界坐标系的UP向上,Y 轴方向,如果这儿的值为 None 的话,则是世界坐标系的Y轴。在一些极端向上和向下的情况下,这里的设置会极大的避免【 万向节死锁(Gimbal Lock)现象】,这儿的值默认为 None。点击导航栏 Cinemachine/Create Virtual Camera 从而在 Hierarchy 中创建 Virtual Camera 节点,连续操作2次,创建2个节点,分别命名为:CM vcam1 , CM vcam2。

2023-06-14 15:40:15 227

原创 TimeLine 的使用说明

在 Hierachy 中创建一个空物体,命名为 SignalReceiver , 另外在创建一个脚本命名为 SignalTest.cs, 挂到 SignalReceiver 上(会自动绑定挂上 SignalReceiver 组件),用于响应信号。可以用来控制粒子效果,事先制作好的 prefab Rain ,它的 Inspector 面板上,添加了 Particle System 组件,将 Rain Prefab 拖到 Hierarchy 中.此外,滚动条上也有一个小的白竖线,代表了时间轴的位置。

2023-06-14 15:34:31 2112

原创 Unity3D - Shader - 模型、世界、观察、裁剪空间坐标转换

模型空间模型空间(model space),也成为对象空间(object space)或局部空间(local space)。 每个模型都有自己的模型空间,当它旋转或移动时,模型空间也会随之移动3dMax 导出 Obj 文件世界空间世界空间(world space)是一个宏观的特殊坐标系,其代表了我们关心的最大坐标系。在Unity中模型如果没有父节点,那么它就在世界空间内。将顶点坐标从模型空间 转换到世界空间,成为模型变换(model transform)。Transform中的Positi...

2022-03-24 11:26:15 7548 1

原创 unity 表面着色器、顶点、片元着色器

1.表面着色器:表面着色器是Unity特有的一种着色器代码类型,表面着色器定义在SubShader中。表面着色器需要编写的代码量很少,Unity会自动处理一些细节。但是表面着色器的本质和顶点、片元着色器是一样的,当我们定义一个表面着色器的时候,Unity会在背后将其转换成一个顶点、片元着色器。虽然使用表面着色器Unity会做很多的处理工作,使开发更为简单,但是其带来的缺点也是很明显的,如:灵活性很低,无法控制渲染的细节等。2.顶点、片元着色器:顶点、片元着色器定义在SubShader中的Pass块中,编

2022-03-16 09:59:22 1167

转载 学习札记 GMAES202 高质量实时渲染 Lecture02: Recap of CG Basics

一、Basic GPU hardware pipeline 基础硬件渲染管线知识二、OpenGL三、OpenGL Shading Language (GLSL)高阶着色语言四、The Rendering Equation 渲染方程五、Caluculus 基本微积分知识 (课上没讲)一、Basic GPU hardware pipeline基础GPU渲染管线知识从一开始从3D模型到最后的一张图,中间的过程就是渲染管线/渲染流水线,管线是GPU完成的工作。输入:空间中的点和连...

2022-03-01 16:57:02 130

转载 GAMES101 Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪

0 引入——辐射度量学概述在之前讲Blinn-Phong着色模型时,会设置一个数当做光照强度,但是这个数真实的物理意义我们并不甚清楚,我们只是极大简化成一个数 Whitted风格的光线追踪不是一个真实的结果 所有的这些都会被辐射度量学解决,这也是路径追踪的基础辐射度量学给出了一系列度量方法和单位去定义光照它定义了光照在空间中的属性,这在物理上是完全正确的同时闫老师提供了他学习新东西的方法:从探究为什么学,到这东西是什么,它具体是怎么运作的1 相关概念1.1 Radiant Ene.

2022-03-01 11:08:27 484 1

转载 GAMES101 Lec 13~14(1):Ray Tracing(1) Whitted风格光线追踪

1 引入——Shadow Mapping 阴影贴图之前提到光栅化的着色,我们知道这是一种局部的现象着色的过程中,我们只会考虑着色点自己,光源,以及摄像机我们不考虑其他物体,甚至不考虑物资自身的其他部分对着色点的影响而事实上是会有遮挡的关系的,是会有阴影的之前我们解决不了阴影问题,现在来试着在光栅化的范围里面解决一下一种解决方法即为Shadow Mapping本质上Shadow Mapping这个方法是一种图像空间的做法,也就是在生成阴影这一步,我们不需要知道场景的几何信息(会在之后的实

2022-02-28 23:29:35 215

转载 GAMES101课程学习笔记—Lec 10~12:Geometry 几何、隐式与显式、曲线与曲面、网格

Geometry 几何、隐式与显式、曲线与曲面、网格

2022-02-28 19:14:36 333

转载 GAMES101 Lec 07~09:Shading 定义、着色模型、着色频率、图形渲染管线、纹理

Shading 定义、着色模型、着色频率、图形渲染管线、纹理

2022-02-28 18:01:44 166

原创 unity3d 小记

Quaternion.identity 是一个确定的值,就是指Quaternion(0,0,0,0), 就是每旋转前的初始角度transform.rotation = Quaternion.identity; 赋值;activeHierarchy和activeSelf 如果 parent 为不可见,那么 子对象的 activeSelf 可能为 true , 但是子对象的a...

2019-08-23 12:41:40 127

原创 Unity3D Shader 学习 1

// 1. 属性定义,用来指定这段代码将有哪些输入 1、name("display name", Range(min, max)) = number:定义浮点数范围属性。 2、name("display name", Color) = (number, number, number, number):定义颜色属性。 3、name("display name", 2D) = "na...

2019-01-25 19:55:43 147

原创 加载人物模型

        var abPath = "prefab/character/nanjianshi_01all.unity3d";        var assetName = "Nanjianshi_01All";LuaHelper.GetResManager().LoadPrefabAsync(abPath, assetName, CreateModel); p...

2019-01-09 11:54:58 261

原创 c# yield 用法

  返回类型必须为 IEnumerable、IEnumerable<T>、IEnumerator 或 IEnumerator<T>。声明不能有任何 in、ref 或 out 参数。public class PowersOf2{ static void Main() { // Display powers of 2 up t...

2019-01-02 17:37:11 507

原创 unity3d 加载文件

1. 单个大图加载:在 unity editor 模式下,先通过string[] assetPaths = AssetDatabase.GetAssetPathsFromAssetBundleAndAssetName(abname, assetname);Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>(assetP...

2018-12-30 18:43:12 678

原创 Unity3d 热更新

下载插件:https://github.com/jarjinLuaFramework_UGUI解压后将 Assets 目录全部拷贝到项目的 Assets 下 

2018-12-20 18:12:22 227

原创 unity3d 导航栏 组件

//脚本不需要挂载, 所有方法都是静态方法public MenuItem(string itemName);public MenuItem(string itemName, bool isValidateFunction);public MenuItem(string itemName, bool isValidateFunction, int priority); publ...

2018-12-19 17:42:11 645

微信小程序商城完整前端+ php 后台,有数据库,带配置说明,亲测可用

本人亲测可用,有php后端,有完整前端,有数据库,有完整的后台控制系统,完全可以拿来就用,登录后台界面:game +/index.php/Admin , 前端记得要配置 ssl 证书,https,

2018-04-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除