ygtu

Three.js

ThreeJS教程:环境贴图2

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 环境贴图2 接着上节课的环境贴图给大家讲解。 环境贴图作用测试 实际生活中光源照射到一个物体上,这个物体反射出去的光线也会影响其他的物体,环境贴图就是用一种简单方式,近似模拟一个物体周边环境对物体表面的影响。 测试:对于PBR材质,如果threejs三维场景不添加任何光源,物体就是完全黑色的,你可以不添加任何光源,尝试只使用环境贴图,你会发现物体表面的颜色也能看到,这说明环境贴图其实相当于提供了物体周围环境发射或反射的光线。 测试:更换不同明暗的环境贴图,你会发现场景中模型的明暗也有变化。 场景环境属性.environment 网格模型可以通过材质的.envMap属性设置环境贴图,如果一个gltf模型中所有的Mesh都要设置环境贴图就需要递归遍历gltf模型,给里面每个Mesh的材质设置.envMap。 loader.load("../工厂.glb", function (gltf) { // 递归遍历批量设置环境贴图 gltf.scene.traverse(fun
2 min read
Three.js

ThreeJS教程:环境贴图.envMap(金属效果)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 环境贴图.envMap(金属效果) 环境贴图对PBR材质渲染效果影响还是比较大,一般渲染PBR材质的模型,最好设置一个合适的环境贴图。 立方体纹理加载器CubeTextureLoader * TextureLoader返回Texture * CubeTextureLoader返回CubeTexture 通过前面学习大家知道,通过纹理贴图加载器TextureLoader的.load()方法加载一张图片可以返回一个纹理对象Texture。 立方体纹理加载器CubeTextureLoader的.load()方法是加载6张图片,返回一个立方体纹理对象CubeTexture。 立方体纹理对象CubeTexture的父类是纹理对象Texture。 CubeTextureLoader加载环境贴图 所谓环境贴图,就是一个模型周围的环境的图像,比如一间房子,房子的上下左右前后分别拍摄一张照片,就是3D空间中6个角度方向的照片。 // 加载环境贴图 // 加载周围环境6个方向贴图 // 上下左右
3 min read
Three.js

ThreeJS教程:PBR材质金属度和粗糙度

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 PBR材质金属度和粗糙度 本节课给大家介绍PBR材质MeshStandardMaterial金属度metalness和粗糙度roughness,再加上下节课讲解的环境贴图.envMap,给大家呈现一个金属渲染效果。 金属度metalness 金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。 threejs的PBR材质,.metalness默认是0.5,0.0到1.0之间的值可用于生锈的金属外观 new THREE.MeshStandardMaterial({ metalness: 1.0,//金属度属性 }) mesh.material.metalness = 1.0;//金属度 粗糙度roughness 生活中不同物体表面的粗糙程度不同,比如地面比较粗糙,比如镜子表面就非常非常光滑。 粗糙度roughness表示模型表面的光滑或者说粗糙程度,越光滑镜面反射能力越强,越粗糙,表面镜面反射能力越弱,更多地表现为
1 min read
Three.js

ThreeJS教程:PBR材质简介

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 PBR材质简介 本节课没有具体的代码,就是给大家科普一下PBR材质,所谓PBR就是,基于物理的渲染(physically-based rendering)。 Three.js提供了两个PBR材质相关的APIMeshStandardMaterial和MeshPhysicalMaterial,MeshPhysicalMaterial是MeshStandardMaterial扩展的子类,提供了更多功能属性。 光照模型 如果你有初高中最基本的物理光学知识,应该有折射、镜面反射、漫反射等基本光学概念,对于实际生活中的光学问题,Three.js会提供一些的光照模型来模拟物体表面的光照,光照模型就一种模拟光照的计算方法。MeshPhysicalMaterial和MeshLambertMaterial一样都是渲染网格模型的材质,但是他们用的光照模型不同,具体点说就是材质模拟Mesh反射光照的代码算法不同,算法不同,自然模拟光照的真实程度也不同。 如果你想深入研究光照模型,可以学习下原生WebGL或WebG
3 min read
Three.js

ThreeJS教程:gui调试界面2-颜色命名等

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 gui调试界面2-颜色命名等 本节课结合threejs,给大家介绍gui.js库更多的方法。 .name()方法 .add()创建的交互界面,会默认显示所改变属性的名字,为了通过交互界面更好理解你改变的某个对象属性,你可以通过.name()方法改变gui生成交互界面显示的内容。 const gui = new GUI();//创建GUI对象 gui.add(ambient, 'intensity', 0, 2.0).name('环境光强度'); gui.add(directionalLight, 'intensity', 0, 2.0).name('平行光强度'); 步长.step()方法 步长.step()方法可以设置交互界面每次改变属性值间隔是多少。 gui.add(ambient, 'intensity',
1 min read
Three.js

ThreeJS教程:gui.js库(可视化改变三维场景)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 gui.js库(可视化改变三维场景) gui.js库(可视化改变三维场景) dat.gui.js说白了就是一个前端js库,对HTML、CSS和JavaScript进行了封装,学习开发的时候,借助dat.gui.js可以快速创建控制三维场景的UI交互界面,你打开课件中案例源码体验一下就能感受到。 课程学习dat.gui.js也不仅仅是为了学习dat.gui.js,也是建立一种思想,就是threejs三维空间的很多参数,不是心算出来的,往往需要可视化的方式调试出来。 引入dat.gui.js gihtub地址:https://github.com/dataarts/dat.gui npm地址:https://www.npmjs.com/package/dat.gui 你可以通过npm或github方式获得dat.gui.js库,
4 min read
Unity3D

ThreeJS教程:WebGL渲染器设置(锯齿模糊)

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 WebGL渲染器设置(锯齿模糊) 一般实际开发,threejs的WebGL渲染器需要进行一些通用的基础配置,本节课给大家简单介绍下,比如渲染模糊或锯齿问题。 渲染器锯齿属性.antialias 设置渲染器锯齿属性.antialias的值可以直接在参数中设置,也可通过渲染器对象属性设置。 const renderer = new THREE.WebGLRenderer({ antialias:true, }); 或 renderer.antialias = true, 设备像素比window.devicePixelRatio 如果你有web前端基础,应该了解window对象,设备像素比.devicePixelRatio是window对象的一个属性,该属性的值和你的硬件设备屏幕相关,不同硬件设备的屏幕window.devicePixelRatio的值可能不同,可能就是1、1.5、2.0等其它值。 // 不同硬件设备的屏幕的设备像素比window.devicePixelRati
2 min read
ThreeJS教程:高光网格材质Phong
Three.js

ThreeJS教程:高光网格材质Phong

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 高光网格材质Phong 高光网格材质MeshPhongMaterial和基础网格材质MeshBasicMaterial、漫反射网格材质MeshLambertMaterial一样都是网格模型的Mesh的材质。 高光网格材质MeshPhongMaterial和漫反射网格材质MeshLambertMaterial一样会受到光照的影响。 MeshPhongMaterial对光照反射特点 MeshPhongMaterial和MeshLambertMaterial都会收到光照的影响区别在于,对光线反射方式有差异。 MeshPhongMaterial可以实现MeshLambertMaterial不能实现的高光反射效果。对于高光效果,你可以想象一下,你在太阳下面观察一辆车,你会发现在特定角度和位置,你可以看到车表面某个局部区域非常高亮。 镜面反射与漫反射 MeshPhongMaterial可以提供一个镜面反射效果,可以类比你生活中拿一面镜子,放在太阳光下,调整角度,可以把太阳光反射到其它地方,如果反
2 min read
ThreeJS教程:Threejs常见几何体简介
Three.js

ThreeJS教程:Threejs常见几何体简介

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Threejs常见几何体简介 Three.js提供的几何体API很多,本节课先给大家介绍几个比较简单的案例,为后面的学习打下基础。 你可以结合threejs文档,把下面动手把下面几何体相关代码全部测试一遍,并预览3D效果。 //BoxGeometry:长方体 const geometry = new THREE.BoxGeometry(100, 100, 100); // SphereGeometry:球体 const geometry = new THREE.SphereGeometry(50); // CylinderGeometry:圆柱 const geometry = new THREE.CylinderGeometry(50,50,100); // PlaneGeometry:矩形平面 const geometry = new THREE.PlaneGeometry(100,50); // CircleGeometry:
1 min read
Three.js

ThreeJS教程:阵列立方体和相机适配体验

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 阵列立方体和相机适配体验 本节课通过阵列一片立方体,进一步体验下透视投影相机的投影规律。 for循环创建一列模型 const geometry = new THREE.BoxGeometry(100, 100, 100); //材质对象Material const material = new THREE.MeshLambertMaterial({ color: 0x00ffff, //设置材质颜色 transparent: true,//开启透明 opacity: 0.5,//设置透明度 }); for (let i = 0; i < 10; i++) { const mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh // 沿着x轴分布 mesh.position.
3 min read
Three.js

ThreeJS教程:stats查看threejs渲染帧率

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 stats查看threejs渲染帧率 three.js每执行WebGL渲染器.render()方法一次,就在canvas画布上得到一帧图像,不停地周期性执行.render()方法就可以更新canvas画布内容,一般场景越复杂往往渲染性能越低,也就是每秒钟执行.render()的次数越低。 通过stats.js库可以查看three.js当前的渲染性能,具体说就是计算three.js的渲染帧率(FPS),所谓渲染帧率(FPS),简单说就是three.js每秒钟完成的渲染次数,一般渲染达到每秒钟60次为最佳状态。 stats.js下载链接:https://github.com/mrdoob/stats.js 引入Stats //引入性能监视器stats.js import Stats from 'three/addons/libs/stats.module.js'; Stats使用 //创建stats对象
2 min read
Three.js

ThreeJS教程:Canvas画布布局和全屏

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Canvas画布布局和全屏 threejs渲染输出的结果就是一个Cavnas画布,canvas画布也是HTML的元素之一,这意味着three.js渲染结果的布局和普通web前端习惯是一样的。 通过renderer.domElement属性可以访问threejs的渲染结果,也就是HTML的元素canvas画布。 非全屏局部布局 你可以把threejs的渲染结果renderer.domElement,插入到web页面上任何一个元素中,只要符合你项目的布局规则即可。
2 min read
Three.js

ThreeJS教程:动画渲染循环

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 动画渲染循环 threejs可以借助HTML5的API请求动画帧window.requestAnimationFrame实现动画渲染。 请求动画帧window.requestAnimationFrame // requestAnimationFrame实现周期性循环执行 // requestAnimationFrame默认每秒钟执行60次,但不一定能做到,要看代码的性能 let i = 0; function render() { i+=1; console.log('执行次数'+i); requestAnimationFrame(render);//请求再次执行函数render } render(); threejs旋转动画 动画说白了就是一张张照片,连起来依次展示,这样就形成一个动画效果,只要帧率高,人的眼睛就感觉不到卡顿,是连续的视频效果。 const renderer = new THREE.WebGLRenderer(); renderer.setS
2 min read
ThreeJS教程:平行光与环境光
Three.js

ThreeJS教程:平行光与环境光

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 平行光与环境光 本节课通过平行光DirectionalLight (opens new window)和环境光AmbientLight (opens new window)进一步了解光照对应模型Mesh表面的影响。 点光源辅助观察PointLightHelper 通过点光源辅助观察对象PointLightHelper (opens new window)可视化点光源。 预览观察:可以借助相机控件OrbitControls旋转缩放三维场景便于预览点光源位置 // 光源辅助观察 const pointLightHelper = new THREE.PointLightHelper(pointLight, 10); scene.add(pointLightHelper); 改变点光源位置,观察光照效果变化。 pointLight.position.set(100, 60, 50); // 改变点光源位置,使用OrbitControls辅助观察 pointLight.position.set
3 min read
Three.js

ThreeJS教程:相机控件OrbitControls

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 相机控件OrbitControls 平时开发调试代码,或者展示模型的时候,可以通过相机控件OrbitControls实现旋转缩放预览效果。 OrbitControls使用 你可以打开课件案例源码测试下效果。 * 旋转:拖动鼠标左键 * 缩放:滚动鼠标中键 * 平移:拖动鼠标右键 引入扩展库OrbitControls.js // 引入轨道控制器扩展库OrbitControls.js import { OrbitControls } from 'three/addons/controls/OrbitControls.js'; 注意:如果你在原生.html文件中,使用上面引入方式import { OrbitControls } from 'three/addons/controls/OrbitControls.js';,注意通过
2 min read
ThreeJS教程:光源对物体表面影响
Three.js

ThreeJS教程:光源对物体表面影响

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 光源对物体表面影响 实际生活中物体表面的明暗效果是会受到光照的影响,threejs中同样也要模拟光照Light对网格模型Mesh表面的影响。 你可以打开课件中案例源码,对比有光照和无光照两种情况,网格模型Mesh表面的差异。 受光照影响材质 threejs提供的网格材质,有的受光照影响,有的不受光照影响。 基础网格材质MeshBasicMaterial (opens new window)不会受到光照影响。 //MeshBasicMaterial不受光照影响 const material = new THREE.MeshBasicMaterial(); 漫反射网格材质MeshLambertMaterial (opens new window)会受到光照影响,该材质也可以称为Lambert网格材质,音译为兰伯特网格材质。 一个立方体长方体使用MeshLambertMaterial材质,不同面和光线夹角不同,立方体不同面就会呈现出来不同的明暗效果。 //MeshLambertMat
3 min read
ThreeJS教程:三维坐标系-加强三维空间认识
Three.js

ThreeJS教程:三维坐标系-加强三维空间认识

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 三维坐标系-加强三维空间认识 本节课的目的就是为了加强大家对threejs三维空间的认识。 辅助观察坐标系 THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小,你可以根据需要改变尺寸。 // AxesHelper:辅助观察的坐标系 const axesHelper = new THREE.AxesHelper(150); scene.add(axesHelper); 材质半透明设置 设置材质半透明,这样可以看到坐标系的坐标原点。 const material = new THREE.MeshBasicMaterial({ color: 0x0000ff, //设置材质颜色 transparent:true,//开启透明 opacity:0.5,//设置透明度 }); AxesHelper的xyz轴 three.js坐标轴颜色红R、绿G、蓝B分别对应坐标系的x、y、z轴,对于three.js的3D坐标系默认y轴朝上。 设置模型在
3 min read
ThreeJS:第一个3D案例—渲染器
Three.js

ThreeJS:第一个3D案例—渲染器

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 第一个3D案例—渲染器 生活中如果有了景物和相机,那么如果想获得一张照片,就需要你拿着相机,按一下,咔,完成拍照。对于threejs而言,如果完成“咔”这个拍照动作,就需要一个新的对象,也就是WebGL渲染器WebGLRenderer (opens new window)。 WebGL渲染器WebGLRenderer 通过WebGL渲染器WebGLRenderer (opens new window)可以实例化一个WebGL渲染器对象。 // 创建渲染器对象 const renderer = new THREE.WebGLRenderer(); 设置Canvas画布尺寸.setSize() // 定义threejs输出画布的尺寸(单位:像素px) const width = 800; //宽度 const height = 500; //高度 renderer.setSize(width, height)
2 min read
ThreeJS:第一个3D案例—透视投影相机
Three.js

ThreeJS:第一个3D案例—透视投影相机

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 第一个3D案例—透视投影相机 Threejs如果想把三维场景Scene渲染到web网页上,还需要定义一个虚拟相机Camera,就像你生活中想获得一张照片,需要一台用来拍照的相机。 透视投影相机PerspectiveCamera Threejs提供了正投影相机OrthographicCamera (opens new window)和透视投影相机PerspectiveCamera (opens new window)。本节课先给大家比较常用的透视投影相机PerspectiveCamera。 透视投影相机PerspectiveCamera本质上就是在模拟人眼观察这个世界的规律。 // 实例化一个透视投影相机对象 const camera = new THREE.PerspectiveCamera(); 相机位置.position 生活中用相机拍照,你相机位置不同,拍照结果也不同,threejs中虚拟相机同样如此。 比如有一间房子,你拿着相机站在房间里面,看到的是房间内部,站在房子外面
5 min read
Unity3D

Unity3d:用户属性

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 用户属性 统一分析学 提供跟踪用户人口统计信息的功能。这为您提供了筛选数据以查看不同用户细分的可靠方法。此信息从注册时输入的玩家信息或第三方 SDK 中提取。 // Reference the Unity Analytics SDK package using UnityEngine.Cloud.Analytics; // Use this call to designate the user gender UnityAnalytics.SetUserGender(Gender gender); // Use this call to designate the user birth year UnityAnalytics.SetUserBirthYear(int birthYear); 输入参数名字类型描述性枚举用户的性别可以是性别.女性、性别.男性或性别.
1 min read
Unity3D

Unity3d:收据验证

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 收据验证 以下是实现详细信息: 对于 iOS 收据参数 * 如果您将其保留为 null,则此交易将显示在“未验证收入”中 * 如果您正在编写本机苹果 .plugin * 对于 iOS 6 及更低版本,发送原始 SKPaymentTransaction's transaction 收据 * 对于 iOS 7 及更高版本,请从应用程序捆绑包发送应用程序收据的 base64 编码值。 * 如果您使用的是Unibill插件 * 将 PurchasableItem 的“收据”属性作为收据传递。 * 如果您使用的是 Prime31 插件 * 传入 StoreKitTransaction 的“base64EncodedTransactionReceipt”属性作为收据。 签名参数 传入空值,因为未使用此功能。 对于安卓 要验证安卓货币化,
2 min read
Unity3D

Unity3d:Monetization

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 Monetization 统一分析学 允许您监控游戏内收入。通过实施收据验证,您将快速看到合法或欺诈易。 Unity 分析提供了一种灵活的方法,用于通过应用内购买跟踪变现事件。每次玩家触发变现事件时都应调用此方法。交易方法需要价格参数,货币和可选的Apple iTunes / Google Play收据字符串。 Unity Analytics 提供了 UnityAnalytics.Transaction 方法,用于通过应用内购买跟踪货币化事件。每次玩家触发变现事件时都应调用此方法。UnityAnalytics.Transaction 方法需要一个价格参数、一种货币和一个可选的 Apple iTunes / Google Play 收据字符串。 // Reference the Unity Analytics SDK package using UnityEngine.Cloud.Analytics; // Use this call for each
3 min read
Unity3d:自定义事件

Unity3d:自定义事件

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 自定义事件 自定义事件可以是用户执行的任何特定游戏内操作。它们允许您跟踪玩家行为 Unity分析学 不会自动跟踪,例如级别成就,现场 更改、进入商店或与游戏对象交互。每个自定义事件都可以有自己的参数。通过设置事件的参数,可以筛选事件发生时收集的数据。可以在分析仪表板中查看自定义事件的可视化工具,包括数据资源管理器 、漏斗分析器和区段生成器。 // Reference the Unity Analytics SDK namespace using UnityEngine.Cloud.Analytics; // Use this call for wherever a player triggers a custom event UnityAnalytics.CustomEvent(string customEventName, IDictionary eventData); UnityAnalytics.CustomEvent 输入参数名字类型描述自定义事件名
3 min read
Unity3d:播放以验证
Unity3D

Unity3d:播放以验证

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 播放以验证 Unity 编辑器可以充当测试环境来验证分析学 集成。当您按下播放按钮时,编辑器会发送数据,您可以在下面的验证器中看到这些数据。这意味着您无需构建和发布游戏即可验证基本集成。 按播放 要将测试数据发送到我们的服务器并验证您的集成,只需按“开始”按钮即可玩游戏。 3D建模学习工作室整理翻译,转载请标明出处! 上一篇:Unity3d:创建游戏脚本 (mvrlink.com) 下一篇:Unity3d:自定义事件 (mvrlink.com)
1 min read
Unity3d:创建游戏脚本
Unity3D

Unity3d:创建游戏脚本

推荐:将NSDT场景编辑器加入你的3D工具链 3D工具集:NSDT简石数字孪生 附加游戏脚本 可以将 Unity 分析集成脚本附加到游戏中任何场景中的任何游戏对象,以初始化 Unity分析学 软件开发工具包。我们建议您将脚本附加到游戏对象 在第一个现场 以确保您开始捕获尽可能多的用户参与度数据。 在此示例中,我们将脚本附加到主摄像机。 首先,找到并选择“主要”照相机 “,在编辑器左侧的”层次结构“选项卡中。 将脚本从“项目”选项卡拖放到主摄像机游戏对象上。在检查员 窗口中,选中主摄像机后,您应该会看到脚本已作为组件分配给主摄像机。 注: 您还可以通过在层次结构中选择游戏对象并在检查器中添加所需的脚本组件,将脚本添加到游戏对象。 3D建模学习工作室整理翻译,转载请标明出处! 上一篇:Unity3d:创建游戏脚本 (mvrlink.com) 下一篇:Unity3d:播放以验证 (mvrlink.com)
1 min read
NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号