矮草坪渲染尝试

本来说写unity里的,由于three测试方便,先试试three

在这里插入图片描述
这个图片是目标效果
可以看见草很矮,很密集,如果用instance来绘制的话,遭不住的
忽然发现这个效果很像绒毛效果
于是找了博客康康
https://zhuanlan.zhihu.com/p/256445252
大概就是叠alpha,性能比instance好多了,虽然效果其实比不得instance,他这个实际来说丢失了每一根草的渲染能力,只能调叠层的色彩和整体调色,可能要和一根一根的草混用吧

在这里插入图片描述

这是在three构建demo的代码

			const geometry = new THREE.PlaneGeometry(20, 20);//new THREE.ConeGeometry( 10, 30, 20, 20 );geometry.rotateX(Math.PI * 0.5);// const material = new THREE.MeshPhongMaterial( { color: 0xffffff, wireframe: true } );const material = new THREE.ShaderMaterial({uniforms: {id: { value: 1 },iTime: { value: 0 },},vertexShader: `uniform float id;varying vec2 vUv;varying vec3 vColor;varying vec3 vNormal;varying vec3 pos;void main() {vUv = uv;vColor = vec3(1.0, 0.0, 0.0);pos = position.xyz;vNormal = normal;pos+=normal*0.1*id;gl_Position = projectionMatrix * modelViewMatrix * vec4(pos.xyz,1.0);}`,fragmentShader: `uniform float id;uniform float iTime;varying vec3 vColor;varying vec3 vNormal;varying vec3 pos;varying vec2 vUv;float random (in vec2 st) {return fract(sin(dot(st.xy,vec2(12.9898,78.233)))* 43758.5453123);
}// 2D Noise based on Morgan McGuire @morgan3d
// https://www.shadertoy.com/view/4dS3Wd
float noise (in vec2 st) {vec2 i = floor(st);vec2 f = fract(st);// Four corners in 2D of a tilefloat a = random(i);float b = random(i + vec2(1.0, 0.0));float c = random(i + vec2(0.0, 1.0));float d = random(i + vec2(1.0, 1.0));// Smooth Interpolation// Cubic Hermine Curve.  Same as SmoothStep()vec2 u = f*f*(3.0-2.0*f);// u = smoothstep(0.,1.,f);// Mix 4 coorners percentagesreturn mix(a, b, u.x) +(c - a)* u.y * (1.0 - u.x) +(d - b) * u.x * u.y;}vec4 permute(vec4 x) {return mod((34.0 * x + 1.0) * x, 289.0);}// Cellular noise, returning F1 and F2 in a vec2.// Speeded up by using 2x2 search window instead of 3x3,// at the expense of some strong pattern artifacts.// F2 is often wrong and has sharp discontinuities.// If you need a smooth F2, use the slower 3x3 version.// F1 is sometimes wrong, too, but OK for most purposes.vec2 cellular2x2(vec2 P) {#define K 0.142857142857 // 1/7#define K2 0.0714285714285 // K/2#define jitter 0.8 // jitter 1.0 makes F1 wrong more oftenvec2 Pi = mod(floor(P), 289.0);vec2 Pf = fract(P);vec4 Pfx = Pf.x + vec4(-0.5, -1.5, -0.5, -1.5);vec4 Pfy = Pf.y + vec4(-0.5, -0.5, -1.5, -1.5);vec4 p = permute(Pi.x + vec4(0.0, 1.0, 0.0, 1.0));p = permute(p + Pi.y + vec4(0.0, 0.0, 1.0, 1.0));vec4 ox = mod(p, 7.0)*K+K2;vec4 oy = mod(floor(p*K),7.0)*K+K2;vec4 dx = Pfx + jitter*ox;vec4 dy = Pfy + jitter*oy;vec4 d = dx * dx + dy * dy; // d11, d12, d21 and d22, squared// Sort out the two smallest distances#if 0// Cheat and pick only F1d.xy = min(d.xy, d.zw);d.x = min(d.x, d.y);return d.xx; // F1 duplicated, F2 not computed#else// Do it right and find both F1 and F2d.xy = (d.x < d.y) ? d.xy : d.yx; // Swap if smallerd.xz = (d.x < d.z) ? d.xz : d.zx;d.xw = (d.x < d.w) ? d.xw : d.wx;d.y = min(d.y, d.z);d.y = min(d.y, d.w);return sqrt(d.xy);#endif}void main(){float test2 = (noise(vUv*30.0)*0.5+0.5)*0.5;vec2 F = cellular2x2((vUv + 0.0* test2 * 0.0025*(1.0 - id)* sin(test2*0.1*iTime) )*2000.);float test = noise(vUv*15.0);vec3 yellow = vec3(0.4,0.9,0.0)*0.85;vec3 green = vec3(0.2,1.0,0.0)*0.85;float n = 1.0-1.5*F.x;//gl_FragColor += vec4(0.1, 0.5 + (1.0 - id)*0.25, 0.0, n * id);gl_FragColor += vec4(mix(green,yellow,  test)*0.5+(1.0 - id)*0.5, n * id );// if(gl_FragColor.a<0.21)discard; else {gl_FragColor.a=1.0;// }//  gl_FragColor += vec4(n,n,n, n * id*0.5);}`,transparent: true,side: 2})let arr = [];const COUNT = 30;for (let i = 0; i < COUNT; i++) {let geo = geometry.clone();const materialClone = material.clone();materialClone.uniforms.id.value = 1.0 - (i / COUNT);arr.push(materialClone);const mesh = new THREE.Mesh(geo, materialClone);scene.add(mesh);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1524075.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu | 安装 Truffle 框架(安装缓慢)

目录 预备工作具体步骤Step1&#xff1a;安装 nvma. 官方方式&#xff08;可能失败&#xff09;b. 压缩包安装方式 Step2&#xff1a;安装 node.js 和 npmStep3&#xff1a;安装 Truffle 参考博客 前言&#xff1a;昨天安装 Truffle 框架&#xff0c;结果缓冲条转了一晚上都没安…

企业全球组网有哪几种常用的组网方式?

为了实现全球范围内的高效通信和数据传输&#xff0c;企业需要选择适合自身需求的组网方式。企业全球组网的有哪几种主要方式&#xff1f;一般包括传统的MPLS网络、云网络、SD-WAN技术和全球VPN&#xff0c;以帮助企业在全球范围内建立稳定、高效的网络连接。 1、传统的MPLS网络…

探索AWS EC2:云计算的强大引擎

在数字化转型的浪潮中&#xff0c;企业对计算资源的需求不断增长。亚马逊弹性计算云&#xff08;EC2&#xff09;作为AWS&#xff08;亚马逊网络服务&#xff09;的核心产品之一&#xff0c;凭借其强大的功能和灵活性&#xff0c;成为了全球企业构建和扩展应用的首选平台。无论…

数据结构(邓俊辉)学习笔记】串 10——BM_BC算法:坏字符

文章目录 1.坏字符2. 特殊情况 1.坏字符 实际上&#xff0c;刚才的实例中我们所展示的那样一个计算过程&#xff0c;就是所谓 BM 算法所采用的策略之一&#xff0c;而这一策略&#xff0c;将我们刚才所说的教训称作坏字符。 在这里&#xff0c;不妨改为基于蛮力算法的第二个版…

设置电子签名

设置点赞签名代码 export class Signature {width: number 300height: number 300canvas!: HTMLCanvasElementctx!: CanvasRenderingContext2Dprivate drawing: boolean falsepreTask: string[] []nextTask: string[] []private allTask: { x: number; y: number; color: …

Leetcode - 周赛413

目录 一&#xff0c;3274. 检查棋盘方格颜色是否相同 二&#xff0c;3275. 第 K 近障碍物查询 三&#xff0c;3276. 选择矩阵中单元格的最大得分 四&#xff0c;3277. 查询子数组最大异或值 一&#xff0c;3274. 检查棋盘方格颜色是否相同 本题就是找规律&#xff0c;假设白…

EPLAN中如何将图纸导出为PDF文件并设置页边距?

EPLAN中如何将图纸导出为PDF文件并设置页边距? 如下图所示,在项目中选中需要导出的图纸页, 如下图所示,点击上方页-----导出------PDF, 如下图所示,在弹出的窗口中设置导出文件的名称、输出目录、输出颜色,这里建议勾选“使用打印边距”, 如下图所示,继续点击下方的设…

论文速读|重新审视奖励设计与评估:用于强健人型机器人站立与行走控制的方法

论文地址&#xff1a;https://arxiv.org/pdf/2404.19173 这篇论文为类人机器人站立和行走&#xff08;SaW&#xff09;控制器的持续可衡量改进奠定了基础。通过引入一套定量实际基准测试方法&#xff0c;作者展示了现有控制器的优缺点&#xff0c;并通过基准测试指导新控制器的…

论文速读|自然语言的最优控制合成:机遇与挑战

项目地址&#xff1a;Optimal Control Synthesis from Natural Language: Opportunities and Challenges 介绍了一种从自然语言自动生成最优控制器的框架&#xff0c;该框架主要包括以下几个步骤&#xff1a;首先&#xff0c;通过人类用户提供的初始文本和系统描述&#xff0c;…

源代码如何防泄露?做好这十条轻松应对

源代码防泄露是一个多方面的安全问题&#xff0c;涉及到技术、管理和物理等多个层面。以下是一些有效的策略和方法&#xff0c;结合深信达的SDC防泄密软件&#xff0c;来实现源代码的防泄露&#xff1a; 1. **访问控制**&#xff1a;实施基于角色的访问控制&#xff08;RBAC&am…

JUC-无锁之CAS

问题提出 (应用之互斥) package cn.itcast; import java.util.ArrayList; import java.util.List; interface Account {// 获取余额Integer getBalance();// 取款void withdraw(Integer amount);/*** 方法内会启动 1000 个线程&#xff0c;每个线程做 -10 元 的操作* 如果初始…

深度学习系列73:使用rapidStructure进行版面分析

1. 概述 项目地址https://github.com/RapidAI/RapidStructure?tabreadme-ov-file 2. 文档方向分类示例 安装$ pip install rapid-orientation import cv2 from rapid_orientation import RapidOrientation orientation_engine RapidOrientation() img cv2.imread(test_im…

C++笔记---string类(简单地使用)

1. string类介绍 string类是C标准库中给出的一种类类型&#xff0c;其目的是为了代替C语言中的字符串。 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是…

【时时三省】(C语言基础)指针进阶 例题

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 字符数组例题&#xff1a; arr后面放了六个字符 所以这个数组的元素个数就是6 第一个arr 因为他计算的是一整个数组的大小 就是打印6 第二个arr0 arr没有单独放在它的内部 所以它计算的就是…

深智城基于超融合数据库MatrixOne的一站式交通大数据平台改造

在智慧交通应用中&#xff0c;数据处理需求极为复杂&#xff0c;涉及人、车辆、道路和环境等多个方面&#xff0c;产生了大量异构数据。交通管理人员需要对这些数据进行实时分析和决策&#xff0c;以应对各种交通事件。然而&#xff0c;在实际生产中会发现数据处理缺陷、管理复…

智慧平台赋能政务管理,声通科技助力政务管理智能化

在智能时代的大潮中&#xff0c;政务管理也在不断寻求创新与突破&#xff0c;在这方面&#xff0c;涌现出了很多优秀的公司。比如声通科技的子公司西安金讯数智信息技术有限公司&#xff0c;就在AI政务热线领域有很多创新成果&#xff0c;为政务管理的智能化升级提供了新思路。…

windows安装php7.4

windows安装php7.4 1.通过官网下载所需的php版本 首先从PHP官网&#xff08;https://www.php.net/downloads.php&#xff09;或者Windows下的PHP官网&#xff08;http://windows.php.net/download/&#xff09;下载Windows版本的PHP安装包。下载后解压到一个路径下。 2.配…

爆改YOLOv8|利用yolov10的PSA注意力机制改进yolov8-高效涨点

1&#xff0c;本文介绍 PSA是一种改进的自注意力机制&#xff0c;旨在提升模型的效率和准确性。传统的自注意力机制需要计算所有位置对之间的注意力&#xff0c;这会导致计算复杂度高和训练时间长。PSA通过引入极化因子来减少需要计算的注意力对的数量&#xff0c;从而降低计算…

视频汇聚平台LntonAIServer视频质量诊断功能--偏色检测与噪声检测

随着视频监控技术的不断进步&#xff0c;视频质量成为了决定监控系统性能的关键因素之一。LntonAIServer新增的视频质量诊断功能&#xff0c;特别是偏色检测和噪声检测&#xff0c;进一步强化了视频监控系统的可靠性和实用性。下面我们将详细介绍这两项功能的技术细节、应用场景…

window系统开机执行bat脚本

1&#xff0c;win R 打开运行对话框&#xff0c;然后如下图所示输入 第二&#xff0c;打开启动文件夹后&#xff0c;将想要执行的bat脚本&#xff0c;创建快捷方式&#xff0c;放在这里&#xff0c;重启电脑时就会执行这个程序