当前位置: 首页 > news >正文

HDR环境光照教程:用intensity_env和rotate_env在rayshader_portraits中打造电影级光影

HDR环境光照教程:用intensity_env和rotate_env在rayshader_portraits中打造电影级光影

【免费下载链接】rayshader_portraits项目地址: https://gitcode.com/gh_mirrors/ra/rayshader_portraits

rayshader_portraits 是基于 R 语言 rayshader 与 rayrender 包制作阴影地形图的开源项目。本教程将带你用三个关键参数——HDR 环境光照、intensity_env(光照强度)和 rotate_env(光源旋转)——快速为地形图打造电影级光影效果。无需渲染器经验,看完即可上手 🌄

什么是 HDR 环境光照?为什么它更"电影感"

传统的 3D 渲染只用一个"假太阳"打光,高光生硬、阴影发死。而HDR 环境光照(High Dynamic Range environment lighting)会把一整张高动态范围的环境照片(天空、地面、周边景物)包裹在场景四周,让光线从四面八方自然地照亮地形,产生柔和的漫反射、真实的色彩过渡,效果接近电影调色。

项目中所有渲染脚本都默认加载一张 4K 森林 HDR 环境图,路径为assets/env/phalzer_forest_01_4k.hdr。下面这张拱门国家公园地形图,就是 HDR 光照渲染出的成品——岩石表面呈现出自然的天光反射与层次分明的阴影:

核心参数速览:定义光影的 3 个开关

在渲染函数的参数列表中,控制环境光照的关键配置如下(摘自模板 R/templates/elevation/render_graphic.R 中的render_highquality()调用):

参数示例值作用
environment_lightassets/env/phalzer_forest_01_4k.hdr指定 HDR 环境贴图文件
lightFALSE关闭传统单光源,让环境光接管打光
intensity_env1.5调节整体光照强度,越大越亮
rotate_env-20旋转光源角度,正值逆时针旋转
render_highquality( outfile, samples = 300, light = FALSE, # 关闭传统光源 environment_light = "assets/env/phalzer_forest_01_4k.hdr", intensity_env = 1.5, # 照亮/压暗场景 rotate_env = -20, # 旋转光源方向 width = 6000, height = 6000 )

💡 关键组合是light = FALSE+environment_light = "...":只要用了 HDR 环境图,就必须关掉传统光源,否则两者叠加会过曝。

快速上手:5 步点亮你的地形图

  1. 创建新作品:打开项目后用内置函数.new_portrait("你的地图名")一键生成目录和脚本骨架(定义见 R/utils/on_load.R)。
  2. 准备 DEM 数据:脚本会用elevatr包自动下载海拔数据。迭代阶段建议z = 10,出成品再升到z = 14
  3. 设置 HDR 光照:在render_highquality()中填入environment_light路径并设light = FALSE
  4. 调亮度:从intensity_env = 1.5起步,画面偏暗就加大,偏曝就减小。
  5. 转光源:用rotate_env旋转到阴影方向最戏剧化的角度(正值为逆时针)。

大荒原(Badlands)的这张成图就是典型的 HDR 光照风格——低角度光线把层叠丘陵拉出长长的阴影,"tangerine_blues" 色板与森林环境光相互映衬:

intensity_env:像调"曝光"一样控制亮度

intensity_env相当于相机的曝光补偿,项目中的实际取值可以抄作业:

  • 1.5:最常用基准值,arches、badlands 等大多数作品都采用;
  • 0.5:压低强度,营造昏暗、神秘的氛围(见 R/portraits/black_canyon/render_graphic.R);
  • 1.75:提亮场景,适合想突出明亮高光的构图(见 R/portraits/bryce_canyon/render_graphic.R)。

经验法则:4K HDR 图本身较亮,1.0 ~ 1.5之间最稳妥;想玩暗调氛围再往下压到0.5试试。

rotate_env:让光源"绕场一周",拍出光影长片

rotate_env以度为单位旋转整个环境贴图,正值逆时针、负值顺时针。改这一个数字,阴影方向就跟着变,同一张地图可以"换无数个太阳":

  • rotate_env = -20:项目默认值,适合大多数北向构图;
  • rotate_env = 90:把光源转到正上方偏侧, Bryce Canyon 作品即采用此角度;
  • 动画模式:R/portraits/badlands/render_gif.R 中把rotate_env = i放进循环,i从 0 到 360 每 3 度渲染一帧,再合成视频——光源绕着地形"日出日落",就是电影级动态光影 🎞️

想要类似 Voyager 那种旋转动效,可以直接参考 R/portraits/voyageurs/gif.R 的写法。

实用技巧清单

  • 先试光、后渲染:R/portraits/blank/render_graphic.R 专门用一小块地面测试不同intensity_env/rotate_env组合,几秒钟出结果,确定参数后再跑小时级正式渲染;
  • 采样别吝啬:HDR 光属于全局光照,samples = 300起步配合sobol采样方法,边缘更干净;
  • 换氛围换贴图:脚本注释里备有small_rural_road_4k.hdr等备选环境图,不同 HDR 会带入不同色温;
  • 成品尺寸width/height决定最终分辨率,项目成品普遍 4000~6000 像素。

不同参数组合下,同一套工作流产出的风格跨度极大。例如雷尼尔山采用冰川冷调环境光,光影清澈通透:

去哪里看更多真实案例

想直接"抄参数",可以按题材逛这些目录(每个目录内都有 render_graphic.R 渲染脚本和header.rds配置):

想看什么目录
经典 HDR 静态光照R/portraits/arches/、R/portraits/badlands/
暗调低强度光R/portraits/black_canyon/
光源旋转动画R/portraits/badlands/render_gif.R、R/portraits/voyageurs/gif.R
可复用的参数骨架R/templates/elevation/
成品效果展示tracked_graphics/

"创生之柱"天体地形的这张作品,正是环境光照 + 自定义色板结合的产物,星云细节在柔和光线下层次分明:

小结

📌 记住这个组合拳:light = FALSE+environment_light(HDR 路径)+intensity_env管亮度 +rotate_env管方向。从1.5 / -20的默认值起步,先用 blank 测试场景快速试光,满意后再渲染成品,你也能做出同样有"电影感"的地形光影图。

【免费下载链接】rayshader_portraits项目地址: https://gitcode.com/gh_mirrors/ra/rayshader_portraits

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4158342.html

相关文章:

  • 基于FMMosaicLayout打造互动图片墙:Cell长按缩放动画与复用机制实战
  • tlock进阶技巧:Duration、轮次编号与Armor,6个让时间锁加密更灵活的用法
  • 题解:洛谷 P3076 [USACO13FEB] Taxi G
  • NCM 转 MP3 完整攻略:用 ncmdump 免费转换,拖拽 4 步上手
  • FiD显存优化秘籍:Checkpointing与answer_maxlength如何驯服100段长文本
  • 毕业论文“难产”自救指南:AI写论文哪个软件最好?我站宏智树AI
  • UE5-MCP:如何用AI把3个月的UE5关卡开发压缩到3天
  • 星际争霸II Bot API库python-sc2入门:为什么它是Python打造SC2 AI机器人的终极选择
  • 为什么Remote PowerShell正在被淘汰:理解Exchange V3模块的REST API连接迁移(office-docs-powershell)
  • 053、VLA模型的训练数据与配比:互联网数据与机器人数据的融合
  • 3步备份QQ空间全部历史说说:GetQzonehistory 完整上手指南
  • QuickLook 插件选型指南:macOS 空格键预览只装这几组才真正用得上
  • PCSX2 Gamefixes与PNACH作弊码完全指南:解决闪退卡顿并解锁60帧
  • Engauge Digitizer 入门指南:从图表图像提取数据点的安装配置全流程
  • CSWin Transformer预训练权重怎么选:Tiny/Small/Base/Large六种模型参数与FLOPs全对比(附选型建议)
  • 如何快速给 Unity WebGL 加上原生输入框:WebGLInput 完整上手指南
  • Oracle APEX Blueprints实战:AI驱动的规范开发,从需求文档一键生成应用
  • EntityFrameworkCore.Triggered性能开销到底有多大?完整基准测试数据解读
  • 132、洞察驱动的实战标题——时域降噪的“鬼影博弈“——运动检测阈值高一点还是低一点?从运动矢量置信度到混合权重的工程调优
  • 使用vminpoly前必知的5个注意事项:常见坑与浏览器兼容清单
  • 扩展 D-Zone:接入 Slack 等新聊天平台的开发者进阶指南
  • 潍坊全家电维修服务指南-欧米到家常见故障、服务范围与预约报修
  • SillyTavern-Launcher:一条命令装好 AI 应用全家桶|从零跑通完整指南
  • 安卓7.0 开机动画和launcher之间的黑屏...如何解决?
  • R2CNN_Faster-RCNN_Tensorflow网络架构深度剖析:ResNet+RPN双路旋转检测的TensorFlow实现原理
  • ThriftPy2协议层深度解析:Binary、Compact、JSON协议全对比与选型建议
  • 基于BERT的情感分析实战:从Hugging Face微调到生产部署全流程
  • 中文AI绘图神器ComfyUI-Kolors-MZ:为什么它能让快手Kolors在ComfyUI原生采样?完整概览
  • YAMLScript快速上手教程:5步安装ys和libys,跑通你的第一个YAML程序
  • Apktool APK 逆向完整指南:如何快速解码与重打包一个 Android 应用