#!/usr/bin/env bash set -euo pipefail if [[ $# -lt 3 || $# -gt 4 ]]; then echo "Usage: $0 [resolution]" >&2 exit 2 fi SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENGINE_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" PROJECT_ROOT="$(cd "$1" && pwd)" PROBE_GUID="$2" SOURCE_PATH="$3" RESOLUTION="${4:-256}" if [[ "${SOURCE_PATH}" != /* ]]; then SOURCE_PATH="${PROJECT_ROOT}/${SOURCE_PATH}" fi if [[ ! -f "${SOURCE_PATH}" ]]; then echo "Reflection probe source does not exist: ${SOURCE_PATH}" >&2 exit 3 fi if [[ ! "${PROBE_GUID}" =~ ^[0-9a-fA-F]{32}$ ]]; then echo "Reflection probe GUID must contain exactly 32 hexadecimal digits." >&2 exit 4 fi case "${RESOLUTION}" in 16|32|64|128|256|512|1024|2048) ;; *) echo "Resolution must be a power of two between 16 and 2048." >&2; exit 5 ;; esac CMGEN="${METACORE_FILAMENT_CMGEN:-${ENGINE_ROOT}/build/filament-host-tools/install/bin/cmgen}" if [[ ! -x "${CMGEN}" ]]; then echo "A runnable cmgen was not found at ${CMGEN}; run tools/build_filament_host_tools.sh first." >&2 exit 6 fi OUTPUT_ROOT="${PROJECT_ROOT}/Library/DerivedData/Rendering/Probes/${PROBE_GUID}" TEMP_ROOT="$(mktemp -d "${PROJECT_ROOT}/Library/DerivedData/Rendering/.probe-${PROBE_GUID}.XXXXXX")" cleanup() { rm -rf "${TEMP_ROOT}"; } trap cleanup EXIT "${CMGEN}" --quiet --format=ktx --size="${RESOLUTION}" --deploy="${TEMP_ROOT}" "${SOURCE_PATH}" SOURCE_STEM="$(basename "${SOURCE_PATH}")" SOURCE_STEM="${SOURCE_STEM%.*}" IBL_SOURCE="${TEMP_ROOT}/${SOURCE_STEM}_ibl.ktx" SKYBOX_SOURCE="${TEMP_ROOT}/${SOURCE_STEM}_skybox.ktx" if [[ ! -s "${IBL_SOURCE}" || ! -s "${SKYBOX_SOURCE}" ]]; then echo "cmgen did not produce the expected IBL and skybox KTX files." >&2 exit 7 fi mkdir -p "${OUTPUT_ROOT}" install -m 0644 "${IBL_SOURCE}" "${OUTPUT_ROOT}/probe_ibl.ktx" install -m 0644 "${SKYBOX_SOURCE}" "${OUTPUT_ROOT}/probe_skybox.ktx" if [[ -s "${TEMP_ROOT}/sh.txt" ]]; then install -m 0644 "${TEMP_ROOT}/sh.txt" "${OUTPUT_ROOT}/sh.txt" fi SOURCE_HASH="$(sha256sum "${SOURCE_PATH}" | cut -d' ' -f1)" HEADER_TEMP="${TEMP_ROOT}/probe.mcrprobe" printf 'MCRPROBE 1 %s "%s" "%s" "%s"\n' \ "${PROBE_GUID}" "${SOURCE_HASH}" "probe_ibl.ktx" "probe_skybox.ktx" > "${HEADER_TEMP}" install -m 0644 "${HEADER_TEMP}" "${OUTPUT_ROOT}/probe.mcrprobe" echo "Reflection probe baked: ${OUTPUT_ROOT}"