Computer Graphics 03
Ray TracingWhy Ray Tracing?
rasterization : real-time,ray tracing: offline
ray tracing is accurate,but is very slow
Whitted-Style Ray Tracing
渲染3d物体时计算机图形的工作之一。
同一场景的物体渲染需要考虑每个物体贡献的像素。
有两种常规的方法来考虑
object-order rendering ,通过找物体来计算对应像素
image-order rendering,通过找像素来判断物体,然后计算像素
差别可以这么来看
前者双重循环外循环是物体,后者则是像素
宽泛来说,image-order rendering 是更加简单和灵活的,一般来说也会有更长的执行事件来制造同样的图片。
Ray Tracing 就是image-order algorithm因为这样不需要像前者一样用数学器械就能实现光线追踪器。
The Basic Ray-Tracing Algorithm基本的光线追踪器有三个部分
某种意义上,在引擎中,可以认为“眼睛发光”
...
unityshader精要7
纹理
我们通常用一张纹理代替物体漫反射
单纹理贴图
代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Unity Shaders Book/Chapter7/SingleTexture"{ Properties{ _Color("Color Tint&qu ...
Computer Graphics 02
02Raster Images
光栅以矩形像素数组的形式展示图片
光栅在需要图片的输入设备中也很流行。电子相机包含一个图片传感器,这个传感器由一个光敏像素网格组成。每个像素记录颜色和照在上面的光强。
光栅图片常用于存储和处理图片。光栅图片是一个简单的二维数组,存储每个像素的像素值。
除了光栅图片,还有vector image 用于存储描述形状,颜色范围,存储直线和曲线。
以下讨论raster image的基础和展示,特别关注于标准显示的非线性。其中像素值如何关联光强将会是很重要的
Raster Device当今的显示器,包括电视,数字电影投影仪和电脑的显示器和投影仪一样,几乎都是基于固定像素数组。
他们可以被分为放射显示器(利用像素直接放射可控量的光)
和透射显示器(自己不发光,但是其他光源能够透过),需要一个lamp照射到screen上
Images,Pixels,and Geometry首先我们要知道gamma校正,见本文末“补充”
然后
设定一个处于黑和白中间的强度 0.5 = a ^ gamma
1.一个黑像素与白像素像交替的图片
2.一张灰色像素的图片
如果你是近视 ...
chapter3 Unity 基础光照
1. Unity中的基本光照
光线是如何产生的,光源发射光,一些物体与光交互,吸收一些光,散射一些光,而摄像机吸收一些光,形成了图像。在光学中,使用辐照度(irradiance)来量化光。
那么如何计算辐照度呢?
辐照度与照射到物体表面光线之间的距离d/cosx成反比。
当光垂直下落cosx=1,那么距离为d
当光与竖直方向呈x度角,距离为d/cosx
其中x可以由表面法线n和光源方向l的点积得到。
1.1
光与物体相交一般两种结果:散射与吸收
散射(scatering)只改变光线方向,不改变光线的密度和颜色。
散射的光线一般有两种方向,一种是向物体内部散射,叫做折射(refraction)或透射(transmission);
另一种是反射(reflection)到外部。
吸收(absorption)
则相反,只改变光线密度和颜色。对于不透明物体向物体内部折射时,一部分被吸收,一部分与内部粒子相交并反射出去
为了区分两种散射,用高光反射(specular)和漫反射(diffuse)分别表示物体如何反射以及计算多少光线折射、吸收(absorpt ...
Computer Graphics 01
Computer Graphics 01IntroductionEfficiencyHowever, for the foreseeable future, a good heuristic is that programmers
should pay more attention to memory access patterns than to operation counts.
因为内存的速度跟不上处理器的速度
Miscellaneous Math2.1 集合和映射
2.2 解决二次等式
2.3 三角学(trigonometry) 勾股,三角函数,角
…
2.4.4 叉乘(cross product)
a x b = |ab| sin (theta)
…
Curve and Surface从1d 到3d的积分,参数方程
Linear Interpolationp = (1 - t)a + tb
barycentric 重心坐标
cardinality 集合基数
chapter3 Unity Shader常用变量及函数
Unity Shader常用变量及函数顶点的坐标空间变换流程及推导
MVP的推导详情见我的图形学分类下的Transformation)
至此到了裁剪空间(投影空间),要想变换到屏幕空间
经过齐次除法/透视除法(除以w),得到NDC坐标(归一化设备坐标)
视口变换(viewport transformation),详情见Rasterization)
总结
从模型空间到世界空间,再到观察空间,然后裁剪空间,最后屏幕映射到屏幕空间。需要许多变换矩阵。
法线变换(特例)这里需要额外提及unity的法线变换
发现法线变换失败
设切线为T,法线为N
屏幕相机参数(API)
【此章待补充,用于记录unity shader CG/HLSL的语法区别和API应用】
DX和OpenGL / CG和HLSL / Built-in和URP之间的差异
chapter2 Unity Shader概述
前言
【注】因为是概述,很多细节和需要查询的内容请参考《Unity
Shader入门精要》
上一章描述了什么是渲染流水线,这一章主要讨论什么是Unity Shader。
Shader
翻译为着色器,GPU流水线中对于高度可编程的阶段来说,Shader是可以在GPU上运行的渲染代码;而对于固定流水线来说,则起着渲染设置的作用。前者有顶点着色器,片元着色器等。
正常情况下,开发者需要与下图中各种操作、文件打交道。
因为我们是在引擎上使用shader,Unity 提供了名为Unity
Shader的抽象。于是我们只需要使用unity
shader就可以控制所有操作。并且必要的内部功能已经写好。
与其它着色语言的关系
我们知道着色器语言主要有CG,HLSL,GLSL。
不同于它们,Unity中开发者使用的着色器语言叫做ShaderLab,语法上shaderlab和CG,HLSL没有太大区别,部分函数Unity没有提供;本质上shaderlab是基于它们的封装。
虽然Unity只支持封装后的CG,HLSL,但是如果要写GLSL也是可行的(不推荐)。
Unity S ...
Unity Shader之渲染流水线
前言
为什么要增加这个栏目?
由于个人目前主要学习Unity引擎,在引擎Shader的学习中,学了很多,但是不解的和不会的反而越来越多,借此机会自我总结一下,也为后续学习理清思路,该栏目将会随时间迭代更新。
该栏目有哪些内容?
我个人目前的想法是从我的学习路线入手。Unity Shader入门精要 ->
Catlike Coding -> 案例综合
环境
软件: Unity
着色器语言: ShaderLab (CG/HLSL)
Unity Shader之渲染流水线
什么是渲染流水线?
由CPU、GPU共同完成,使用三维数据(顶点,法线等)将三维物体渲染成屏幕上的二维图像
流水线的概念早已学过,那么渲染流水线又是什么。首先要区别于GPU(硬件)流水线。
分为三个概念上的阶段,每个阶段又有子流水线。
应用阶段(application):开发者支配的阶段,输入场景、贴图、摄像机、光源等等;输出点、线、三角面等渲染图元。CPU上。
几何阶段(geometry):
这个阶段主要决定渲染哪些图元,以及将这些图元映射到二 ...
搭建静态网页
搭建静态网页
Part1
创建仓库,命名为aspect-ux.github.io,找到Pages,发现site
是显示了。
安装node.js 参考(26条消息)
Node.js详细安装教程(2021)_cheerileeyoki的博客-CSDN博客_node安装教程
安装hexo,报错有可能是权限,删去c盘下的.npmrc???
大抵是nodejs版本太高了
主要参考手把手教你从0开始搭建自己的个人博客
|无坑版视频教程| hexo_哔哩哔哩_bilibili
配置_config.yml
123456# Deployment## Docs: https://hexo.io/docs/deployment.htmldeploy: type: git repo: https://github.com/aspect-ux/aspect-ux.github.io.git branch: main
然后
更改主题git clone https://github.com/litten/hexo-theme-yilia.git
themes/yil ...