CN110310358B - 一种实现逐像素光照运算的方法 - Google Patents
一种实现逐像素光照运算的方法 Download PDFInfo
- Publication number
- CN110310358B CN110310358B CN201810236725.9A CN201810236725A CN110310358B CN 110310358 B CN110310358 B CN 110310358B CN 201810236725 A CN201810236725 A CN 201810236725A CN 110310358 B CN110310358 B CN 110310358B
- Authority
- CN
- China
- Prior art keywords
- vertex
- coordinates
- index
- normal
- storing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/506—Illumination models
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种实现逐像素光照运算的方法,包括:将原始数据以三角面为对象存放,面对象包括三个顶点对象,顶点对象包括:纹理坐标、索引、原索引、法线、切线;计算得到顶点切线空间坐标并且以OBJ格式存储数据。3D建模软件自己编写插件或脚本导出自己所需的数据,只需要自己计算顶点的切线空间坐标并导出OBJ文件数据格式。
Description
技术领域
本发明属于图像处理技术领域,具体而言,涉及一种实现逐像素光照运算的方法。
背景技术
目前,大多数3D软件和游戏引擎都支持OBJ文件的读写。OBJ文件是一种标准3D模型文件格式,常用于3D软件模型之间的互导。比如在3dsMax或LightWave中建立一个模型,需要将它调到Maya里面进行渲染或动画,可以通过导出OBJ格式文件实现。OBJ文件是一种文本文件格式,比起二进制文件为主、用途块需要反复探索的3DS,文本文件为主的OBJ更利于提升开发者的工作效率。
计算光照效果是现在3D渲染的必备环节。OBJ文件可以支持顶点光照运算,但该效果比较粗糙,无法表达细腻的效果和逼真的表现,实际应用中该运算很少被使用几乎被淘汰。想要通过光照表现出模型表面的凹凸质感,并且做到逼真的表现,则必须使用逐像素光照运算。然而,由于OBJ文件缺少逐像素光照运算所需的数据,无法通过逐像素做光照运算得到细腻和逼真的3D图像。
发明内容
针对上述问题,本发明的目的在于提供一种实现逐像素光照运算的方法。
技术方案如下:
一种实现逐像素光照运算的方法,其特征在于,
步骤一、将原始数据以三角面为对象存放;
步骤二、计算得到顶点切线空间坐标;
步骤三、以OBJ格式存储数据。
具体的,上述实现逐像素光照运算的方法,其特征在于,步骤一、将原始数据以三角面为对象存放,面对象包括三个顶点对象,顶点对象包括:纹理坐标、索引、原索引、法线、切线。
更具体的,上述实现逐像素光照运算的方法,其特征在于,步骤二、计算得到顶点切线空间坐标,包括步骤:
1)根据面整理顶点数据和索引;
2)计算顶点法线;
3)计算切线空间。
更具体的,上述实现逐像素光照运算的方法,其特征在于,1)根据面整理顶点数据和索引中,对每个三角面单独计算;如果有顶点重复出现在多个面中,拆分成新的顶点,通过自动递增赋予新的顶点索引,而纹理坐标直接复制原值。
更具体的,上述实现逐像素光照运算的方法,其特征在于,2)计算顶点法线:
a)为每个面计算法线,以面法线作为顶点的初始法线:
顶点坐标v0,v1,v2,
向量v01=v1–v0,向量v02=v2–v0,
法线N=cross(v01,v02);
b)对顶点坐标相同的顶点的法线做平均值,作为实际法线值。
更具体的,上述实现逐像素光照运算的方法,其特征在于,3)计算切线空间:
a)顶点坐标v0,v1,v2,纹理坐标c0,c1,c2;
b)向量v01=v1–v0与向量c01=c1–c0=(U1-U0,V1-V0)=(U01,V01)方向一致;向量v02=v2–v0与向量c02=c2–c0=(U2-U0,V2-V0)=(U02,V02)方向一致;
c)T轴,B轴分别和纹理坐标轴U,V是平行的:v01=U01*T+V01*B,V02=U02*T+V02*B;
N轴由T轴和B轴叉乘得到:N=cross(T,B);
T、B、N就是切线空间坐标值。
具体的,上述实现逐像素光照运算的方法,其特征在于,步骤三、以OBJ格式存储数据,包括:
1)输出顶点,“v x y z”以该格式为一行存贮一个顶点坐标,xyz为坐标值使用浮点数,小数点后保存6位;
2)输出顶点纹理坐标,“vt x y z”以该格式为一行存贮一个顶点纹理坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位;
3)输出顶点法线坐标,“vn x y z”以该格式为一行存贮一个顶点法线坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位;
4)输出顶点切线空间坐标,“tg x y z”以该格式为一行存贮一个顶点切线空间坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位;
5)输出面索引,“f v/vt/vn v/vt/vn v/vt/vn”以该格式为一行存贮一个面的顶点索引,v为顶点坐标的索引,vt为纹理坐标索引,vn为法线坐标索引,索引值使用整数。
本发明所取得的技术效果在于:
3D建模软件,比如3dsMax都可以自己编写插件或脚本导出自己所需的数据。因此只需要自己计算顶点的切线空间坐标并导出(亦按照OBJ文件数据格式),其余数据均按照OBJ文件的格式导出即可。该文件可支持逐像素光照运算,并且兼容现有的OBJ文件格式,用3D软件按OBJ文件加载该文件不会有大的错误。
附图说明
图1为具体实施整体流程图。
图2为法线坐标计算流程图。
图3为切线空间坐标计算流程图。
具体实施方式
为使本领域的技术人员更好地理解本发明的技术方案,下面结合具体实施例对本发明提供的实现逐像素光照运算的方法进行详细描述。
作为OBJ文件想要支持逐像素光照计算,只需增加一种数据:顶点切线空间坐标。大部分3D建模软件,比如3dsMax都可以自己编写插件或脚本导出自己所需的数据。因此只需要自己计算顶点的切线空间坐标并导出(亦按照OBJ文件数据格式),其余数据均按照OBJ文件的格式导出即可。
具体实施例:
将原始数据以三角面为对象存放,面对象的成员包括三个顶点对象,顶点对象的成员包括纹理坐标、索引、原索引、法线、切线。
一、按面整理顶点数据和索引
由于需要对每个三角面单独计算,因此如果有顶点重复出现在多个面中需要拆分成新的顶点,并赋予新的顶点索引(自动递增),而纹理坐标直接复制原值。
二、计算顶点法线
1、为每个面计算法线,以面法线作为顶点的初始法线。
顶点坐标v0,v1,v2,向量v01=v1–v0,向量v02=v2–v0;
法线N=cross(v01,v02)
2、对顶点坐标相同的顶点的法线做平均值,作为实际法线值
三、计算切线空间
1、顶点坐标v0,v1,v2,纹理坐标c0,c1,c2。
2、向量v01=v1–v0与向量c01=c1–c0=(U1-U0,V1-V0)=(U01,V01)方向一致;向量v02=v2–v0与向量c02=c2–c0=(U2-U0,V2-V0)=(U02,V02)方向一致。
3、T,B分别和纹理坐标轴U,V是平行的。那么,v01=U01*T+V01*B;V02=U02*T+V02*B;
最终的变换形式:
而N轴可以由两轴叉乘得到:N=cross(T,B);
T、B、N就是切线空间坐标值。
四、将数据写入文件
文件格式完全按照OBJ文件的标准来:
1、输出顶点,“v x y z”以该格式为一行存贮一个顶点坐标,xyz为坐标值使用浮点数,小数点后保存6位。
2、输出顶点纹理坐标,“vt x y z”以该格式为一行存贮一个顶点纹理坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位。
3、输出顶点法线坐标,“vn x y z”以该格式为一行存贮一个顶点法线坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位。
4、输出顶点切线空间坐标,“tg x y z”以该格式为一行存贮一个顶点切线空间坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位。
5、输出面索引,“f v/vt/vn v/vt/vn v/vt/vn”以该格式为一行存贮一个面(3个顶点)的顶点索引,v为顶点坐标的索引,vt为纹理坐标索引,vn为法线坐标1、索引,索引值使用整数。
6、按具体需求可以输出其他OBJ文件支持的非主要数据。
以上方法的实施以如下代码段为例:
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变化和改进,这些变化和改进也视为本发明的保护范围。
Claims (1)
1.一种实现逐像素光照运算的方法,其特征在于,
步骤一、将原始数据以三角面为对象存放,面对象包括三个顶点对象,顶点对象包括:纹理坐标、索引、原索引、法线、切线;
步骤二、计算得到顶点切线空间坐标,包括步骤:
1)根据面整理顶点数据和索引:对每个三角面单独计算;如果有顶点重复出现在多个面中,拆分成新的顶点,通过自动递增赋予新的顶点索引,而纹理坐标直接复制原值;
2)计算顶点法线:
a)为每个面计算法线,以面法线作为顶点的初始法线:
顶点坐标v0,v1,v2,
向量v01=v1–v0,向量v02=v2–v0,
法线N=cross(v01,v02);
b)对顶点坐标相同的顶点的法线做平均值,作为实际法线值;
3)计算切线空间:
a)顶点坐标v0,v1,v2,纹理坐标c0,c1,c2;
b)向量v01=v1–v0与向量c01=c1–c0=(U1-U0,V1-V0)=(U01,V01)方向一致;向量v02=v2–v0与向量c02=c2–c0=(U2-U0,V2-V0)=(U02,V02)方向一致;
c)T轴,B轴分别和纹理坐标轴U,V是平行的:v01=U01*T+V01*B,V02=U02*T+V02*B;
N轴由T轴和B轴叉乘得到:N=cross(T,B);
T、B、N就是切线空间坐标值;
步骤三、以OBJ格式存储数据,包括:
1)输出顶点,“v x y z”以该格式为一行存贮一个顶点坐标,xyz为坐标值使用浮点数,小数点后保存6位;
2)输出顶点纹理坐标,“vt x y z”以该格式为一行存贮一个顶点纹理坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位;
3)输出顶点法线坐标,“vn x y z”以该格式为一行存贮一个顶点法线坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位;
4)输出顶点切线空间坐标,“tg x y z”以该格式为一行存贮一个顶点切线空间坐标,xyz为纹理坐标值使用浮点数,小数点后保存6位;
5)输出面索引,“f v/vt/vn v/vt/vn v/vt/vn”以该格式为一行存贮一个面的顶点索引,v为顶点坐标的索引,vt为纹理坐标索引,vn为法线坐标索引,索引值使用整数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810236725.9A CN110310358B (zh) | 2018-03-21 | 2018-03-21 | 一种实现逐像素光照运算的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810236725.9A CN110310358B (zh) | 2018-03-21 | 2018-03-21 | 一种实现逐像素光照运算的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110310358A CN110310358A (zh) | 2019-10-08 |
CN110310358B true CN110310358B (zh) | 2023-10-03 |
Family
ID=68073975
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810236725.9A Active CN110310358B (zh) | 2018-03-21 | 2018-03-21 | 一种实现逐像素光照运算的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110310358B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004054736A (ja) * | 2002-07-23 | 2004-02-19 | Ricoh Co Ltd | 法線ベクトルを含んだ三角形メッシュのデータ構造、三角形メッシュデータの圧縮方法及び伸長方法、プログラム、及びシステム |
CN103700129A (zh) * | 2014-01-08 | 2014-04-02 | 上海明穆电子科技有限公司 | 一种任意人头与任意人体的3d结合方法 |
CN104157000A (zh) * | 2014-08-14 | 2014-11-19 | 无锡梵天信息技术股份有限公司 | 模型表面法线的计算方法 |
-
2018
- 2018-03-21 CN CN201810236725.9A patent/CN110310358B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004054736A (ja) * | 2002-07-23 | 2004-02-19 | Ricoh Co Ltd | 法線ベクトルを含んだ三角形メッシュのデータ構造、三角形メッシュデータの圧縮方法及び伸長方法、プログラム、及びシステム |
CN103700129A (zh) * | 2014-01-08 | 2014-04-02 | 上海明穆电子科技有限公司 | 一种任意人头与任意人体的3d结合方法 |
CN104157000A (zh) * | 2014-08-14 | 2014-11-19 | 无锡梵天信息技术股份有限公司 | 模型表面法线的计算方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110310358A (zh) | 2019-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106909640B (zh) | 基于webgl的三维模型轻量化展示技术 | |
CN109636893B (zh) | 三维OBJ模型及MTL材质在iPhone中的解析与渲染方法 | |
US8831366B1 (en) | Encoding and compressing three-dimensional (3D) object data models | |
CN117136386A (zh) | 位移微网格压缩 | |
CN105556565A (zh) | 片段着色器执行顶点着色器计算 | |
US20200233988A1 (en) | Scalable and precise fitting of nurbs surfaces to large-size mesh representations | |
US10922852B2 (en) | Oil painting stroke simulation using neural network | |
US8928661B2 (en) | Representing a field over a triangular mesh | |
US20220005261A1 (en) | Method for instant rendering of voxels | |
CN104157000B (zh) | 模型表面法线的计算方法 | |
CN112785696A (zh) | 基于游戏引擎和倾斜摄影数据的三维实景模型生成方法 | |
CN110310358B (zh) | 一种实现逐像素光照运算的方法 | |
CN114494564A (zh) | 法线贴图生成方法、设备、电子设备及存储介质 | |
CN112131626B (zh) | 一种面向UnrealEngine引擎的CAD模型几何特征交互方法 | |
US11893677B1 (en) | Bounding volume hierarchy (BVH) widening based on node compressibility | |
US8749559B2 (en) | Mesh sequence file format | |
US20230252716A1 (en) | Generation of tight world space bounding regions | |
CN115272552A (zh) | 模型渲染方法和装置 | |
Andrysco et al. | Implicit and dynamic trees for high performance rendering | |
US7268788B2 (en) | Associative processing for three-dimensional graphics | |
CN113570691A (zh) | 用于体素模型的存储优化方法、装置及电子设备 | |
US12045928B2 (en) | Ray tracing processor | |
CN111599014B (zh) | 基于Unity3D的OBJ文件解析面渲染的方法、系统及介质 | |
CN116402932A (zh) | 地形模型的渲染方法、装置、电子设备及可读存储介质 | |
Binder et al. | Massively Parallel Stackless Ray Tracing of Catmull-Clark Subdivision Surfaces |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |