diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ed6a2c14f5a..1dcc5f086441 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,11 +54,6 @@ endif() # quiet output for Makefiles, 'make -s' helps too # set_property(GLOBAL PROPERTY RULE_MESSAGES OFF) -# Global compile definitions since add_definitions() adds for all. -# _DEBUG is a Visual Studio define, enabled for all platforms. -set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS - $<$:_DEBUG> -) # ----------------------------------------------------------------------------- # Set policy @@ -1128,13 +1123,13 @@ if(WIN32) option(WITH_WINDOWS_FIND_MODULES "Use find_package to locate libraries" OFF) mark_as_advanced(WITH_WINDOWS_FIND_MODULES) -# The python debugger in Visual Studio for has been broken for years -# but the upstream project over at https://github.com/microsoft/PTVS -# show hopeful signs of life once in a while, so there is hope that +# The python debugger in Visual Studio for has been broken for years +# but the upstream project over at https://github.com/microsoft/PTVS +# show hopeful signs of life once in a while, so there is hope that # at one point this will start working again. That being said people -# do keep turning this option on and end up disappointed it isn't -# working and they spend a whole bunch of time on trying to get it to -# work. So for now rather than removing this functionality +# do keep turning this option on and end up disappointed it isn't +# working and they spend a whole bunch of time on trying to get it to +# work. So for now rather than removing this functionality # completely, just disable it. if(WINDOWS_PYTHON_DEBUG) diff --git a/GNUmakefile b/GNUmakefile index 77747c98ee06..c251905cf8d4 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -505,7 +505,9 @@ check_spelling_py: .FORCE "$(BLENDER_DIR)/release" \ "$(BLENDER_DIR)/scripts" \ "$(BLENDER_DIR)/source" \ - "$(BLENDER_DIR)/tools" + "$(BLENDER_DIR)/tools" \ + "$(BLENDER_DIR)/doc" \ + "$(BLENDER_DIR)/build_files" check_spelling_c: .FORCE @PYTHONIOENCODING=utf_8 $(PYTHON) \ diff --git a/build_files/build_environment/cmake/dpcpp.cmake b/build_files/build_environment/cmake/dpcpp.cmake index 5f30b46df372..a555c092d4d0 100644 --- a/build_files/build_environment/cmake/dpcpp.cmake +++ b/build_files/build_environment/cmake/dpcpp.cmake @@ -46,6 +46,9 @@ set(DPCPP_EXTRA_ARGS -DSYCL_PI_UR_USE_FETCH_CONTENT=OFF -DSYCL_PI_UR_SOURCE_DIR=${BUILD_DIR}/unifiedruntime/src/external_unifiedruntime/ -DFETCHCONTENT_SOURCE_DIR_UNIFIED-MEMORY-FRAMEWORK=${BUILD_DIR}/unifiedmemoryframework/src/external_unifiedmemoryframework/ + -DSYCL_UMF_DISABLE_HWLOC=ON + -DUMF_DISABLE_HWLOC=ON + -DUMF_BUILD_SHARED_LIBRARY=OFF # Below here is copied from an invocation of buildbot/config.py -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_TARGETS_TO_BUILD=X86 @@ -71,7 +74,7 @@ set(DPCPP_EXTRA_ARGS -DXPTI_ENABLE_WERROR=OFF -DSYCL_CLANG_EXTRA_FLAGS= -DSYCL_ENABLE_PLUGINS=level_zero - -DSYCL_ENABLE_KERNEL_FUSION=OFF + -DSYCL_ENABLE_EXTENSION_JIT=OFF -DSYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB=OFF -DCMAKE_INSTALL_RPATH=\$ORIGIN -DPython3_ROOT_DIR=${LIBDIR}/python/ @@ -79,10 +82,20 @@ set(DPCPP_EXTRA_ARGS -DPYTHON_EXECUTABLE=${PYTHON_BINARY} -DLLDB_ENABLE_CURSES=OFF -DLLVM_ENABLE_TERMINFO=OFF + -DLLVM_ENABLE_ZSTD=FORCE_ON + -DLLVM_USE_STATIC_ZSTD=ON + -Dzstd_INCLUDE_DIR=${LIBDIR}/zstd/include ) if(WIN32) - list(APPEND DPCPP_EXTRA_ARGS -DPython3_FIND_REGISTRY=NEVER) + list(APPEND DPCPP_EXTRA_ARGS + -DPython3_FIND_REGISTRY=NEVER + -Dzstd_LIBRARY=${LIBDIR}/zstd/lib/zstd_static.lib + ) +else() + list(APPEND DPCPP_EXTRA_ARGS + -Dzstd_LIBRARY=${LIBDIR}/zstd/lib/libzstd.a + ) endif() ExternalProject_Add(external_dpcpp @@ -111,7 +124,7 @@ ExternalProject_Add(external_dpcpp ${PATCH_DIR}/dpcpp.diff && ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/dpcpp/src/external_dpcpp < - ${PATCH_DIR}/dpcpp_13328.diff + ${PATCH_DIR}/dpcpp_15124.diff INSTALL_DIR ${LIBDIR}/dpcpp ) @@ -142,9 +155,6 @@ if(WIN32) COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/lld.exe COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/lld-link.exe COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/wasm-ld.exe - COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/pi_unified_runtime.dll - COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/ur_adapter_level_zero.dll - COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/ur_loader.dll DEPENDEES install ) endif() @@ -152,7 +162,6 @@ else() harvest(external_dpcpp dpcpp/bin dpcpp/bin "*") harvest(external_dpcpp dpcpp/include dpcpp/include "*") harvest(external_dpcpp dpcpp/lib dpcpp/lib "libsycl*") - # avoid harvesting libpi_unified_runtime and libur_ as they're optional. - harvest(external_dpcpp dpcpp/lib dpcpp/lib "libpi_level_zero*") + harvest(external_dpcpp dpcpp/lib dpcpp/lib "libur*") harvest(external_dpcpp dpcpp/lib/clang dpcpp/lib/clang "*") endif() diff --git a/build_files/build_environment/cmake/dpcpp_deps.cmake b/build_files/build_environment/cmake/dpcpp_deps.cmake index 08134b8661fc..b74c205da644 100644 --- a/build_files/build_environment/cmake/dpcpp_deps.cmake +++ b/build_files/build_environment/cmake/dpcpp_deps.cmake @@ -67,6 +67,9 @@ ExternalProject_Add(external_unifiedruntime URL_HASH ${UNIFIED_RUNTIME_HASH_TYPE}=${UNIFIED_RUNTIME_HASH} DOWNLOAD_DIR ${DOWNLOAD_DIR} PREFIX ${BUILD_DIR}/unifiedruntime + PATCH_COMMAND ${PATCH_CMD} -p 1 -d + ${BUILD_DIR}/unifiedruntime/src/external_unifiedruntime < + ${PATCH_DIR}/unifiedruntime.diff CONFIGURE_COMMAND echo . BUILD_COMMAND echo . INSTALL_COMMAND echo . @@ -77,6 +80,9 @@ ExternalProject_Add(external_unifiedmemoryframework URL_HASH ${UNIFIED_MEMORY_FRAMEWORK_HASH_TYPE}=${UNIFIED_MEMORY_FRAMEWORK_HASH} DOWNLOAD_DIR ${DOWNLOAD_DIR} PREFIX ${BUILD_DIR}/unifiedmemoryframework + PATCH_COMMAND ${PATCH_CMD} -p 1 -d + ${BUILD_DIR}/unifiedmemoryframework/src/external_unifiedmemoryframework < + ${PATCH_DIR}/unifiedmemoryframework.diff CONFIGURE_COMMAND echo . BUILD_COMMAND echo . INSTALL_COMMAND echo . diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake index eaa35c1bdd38..f9bd594897c9 100644 --- a/build_files/build_environment/cmake/embree.cmake +++ b/build_files/build_environment/cmake/embree.cmake @@ -87,9 +87,13 @@ ExternalProject_Add(external_embree CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR} PREFIX ${BUILD_DIR}/embree - PATCH_COMMAND ${PATCH_CMD} -p 1 -d - ${BUILD_DIR}/embree/src/external_embree < - ${PATCH_DIR}/embree.diff + PATCH_COMMAND + ${PATCH_CMD} -p 1 -d + ${BUILD_DIR}/embree/src/external_embree < + ${PATCH_DIR}/embree.diff && + ${PATCH_CMD} -p 1 -d + ${BUILD_DIR}/embree/src/external_embree < + ${PATCH_DIR}/embree_1ace3ba33d.diff CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree @@ -138,9 +142,6 @@ if(WIN32) COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/embree/lib/embree4_d.lib ${HARVEST_TARGET}/embree/lib/embree4_d.lib - COMMAND ${CMAKE_COMMAND} -E copy - ${LIBDIR}/embree/lib/embree4_sycl_d.lib - ${HARVEST_TARGET}/embree/lib/embree4_sycl_d.lib DEPENDEES install ) diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 4edd050338d2..5358f63d2bff 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -790,9 +790,9 @@ set(SQLITE_CPE "cpe:2.3:a:sqlite:sqlite:${SQLITE_VERSION}:*:*:*:*:*:*:*") set(SQLITE_HOMEPAGE https://www.sqlite.org) set(SQLITE_LICENSE Public Domain) -set(EMBREE_VERSION 4.3.2-blender) +set(EMBREE_VERSION 4.3.3) set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip) -set(EMBREE_HASH 91bd65e59c6cf4d9ff0e4d628aa28d6a) +set(EMBREE_HASH a03f49d17084612dc0f28bdc36d92e89) set(EMBREE_HASH_TYPE MD5) set(EMBREE_FILE embree-v${EMBREE_VERSION}.zip) set(EMBREE_HOMEPAGE https://github.com/embree/embree) @@ -1039,25 +1039,26 @@ set(OPENPGL_HOMEPAGE http://www.openpgl.org/) set(OPENPGL_LICENSE SPDX:Apache-2.0) set(OPENPGL_COPYRIGHT "Copyright 2020 Intel Corporation.") -set(LEVEL_ZERO_VERSION 1.16.1) +# Default version used by DPCPP: unified-runtime/cmake/FetchLevelZero.cmake +set(LEVEL_ZERO_VERSION 1.19.2) set(LEVEL_ZERO_NAME "oneAPI Level Zero") set(LEVEL_ZERO_URI https://codeload.github.com/oneapi-src/level-zero/tar.gz/refs/tags/v${LEVEL_ZERO_VERSION}) -set(LEVEL_ZERO_HASH f341dd6355d8da6ee9c29031642b8e8e4259f91c13c72d318c81663af048817e) +set(LEVEL_ZERO_HASH b0bea0a09d1a68f68ecf8694e58a60e199fa5785f91c2fd59f026133bc1c4f28) set(LEVEL_ZERO_HASH_TYPE SHA256) set(LEVEL_ZERO_FILE level-zero-${LEVEL_ZERO_VERSION}.tar.gz) set(LEVEL_ZERO_HOMEPAGE https://github.com/oneapi-src/level-zero) set(LEVEL_ZERO_LICENSE SPDX:MIT) -set(LEVEL_ZERO_COPYRIGHT "Copyright (C) 2019-2021 Intel Corporation") +set(LEVEL_ZERO_COPYRIGHT "Copyright (C) 2019-2024 Intel Corporation") -set(DPCPP_VERSION d2817d6d317db1143bb227168e85c409d5ab7c82) # tip of sycl-rel_5_2_0 as of 2024.05.24 +set(DPCPP_VERSION v6.0.0-rc1) set(DPCPP_URI https://github.com/intel/llvm/archive/${DPCPP_VERSION}.tar.gz) -set(DPCPP_HASH 86cbff157b79e29a6ebb96ba79c96f64b4296c33fcd896f60a5579955fca5724) +set(DPCPP_HASH 65f508827f48d9a894cc8c6fbdc9b15760681558ee29f6ebfef608034db99ca1) set(DPCPP_HASH_TYPE SHA256) set(DPCPP_FILE DPCPP-${DPCPP_VERSION}.tar.gz) set(DPCPP_NAME DPC++) set(DPCPP_HOMEPAGE "https://github.com/intel/llvm#oneapi-dpc-compiler") set(DPCPP_LICENSE SPDX:Apache-2.0) -set(DPCPP_COPYRIGHT "Copyright (C) 2021 Intel Corporation") +set(DPCPP_COPYRIGHT "Copyright (C) 2021-2024 Intel Corporation") ######################## ### DPCPP DEPS BEGIN ### @@ -1068,14 +1069,14 @@ set(DPCPP_COPYRIGHT "Copyright (C) 2021 Intel Corporation") # will take care of building them, unpack is being done in dpcpp_deps.cmake # Source llvm/lib/SYCLLowerIR/CMakeLists.txt -set(VCINTRINSICS_VERSION da892e1982b6c25b9a133f85b4ac97142d8a3def) +set(VCINTRINSICS_VERSION b2565a03eb3cac07f5e8000fde971f95dc782c75) set(VCINTRINSICS_URI https://github.com/intel/vc-intrinsics/archive/${VCINTRINSICS_VERSION}.tar.gz) -set(VCINTRINSICS_HASH 06b85bd988059939770eb6e6e6194562d17c5f5a5df9947af18696b3b1fe92f3) +set(VCINTRINSICS_HASH 4dfccbb60c2a929a97745c7a4cff04cc3f54aca1590b2763ca7842be59b55f01) set(VCINTRINSICS_HASH_TYPE SHA256) set(VCINTRINSICS_FILE vc-intrinsics-${VCINTRINSICS_VERSION}.tar.gz) set(VCINTRINSICS_HOMEPAGE https://github.com/intel/vc-intrinsics) set(VCINTRINSICS_LICENSE SPDX:MIT) -set(VCINTRINSICS_COPYRIGHT "Copyright (c) 2019 Intel Corporation") +set(VCINTRINSICS_COPYRIGHT "Copyright (c) 2019-2024 Intel Corporation") # Source opencl/CMakeLists.txt set(OPENCLHEADERS_VERSION 9ddb236e6eb3cf844f9e2f81677e1045f9bf838e) @@ -1101,9 +1102,9 @@ set(ICDLOADER_COPYRIGHT " Copyright (c) 2020 The Khronos Group Inc.") # Source sycl/cmake/modules/AddBoostMp11Headers.cmake # Using external MP11 here, getting AddBoostMp11Headers.cmake to recognize # our copy in boost directly was more trouble than it was worth. -set(MP11_VERSION ef7608b463298b881bc82eae4f45a4385ed74fca) +set(MP11_VERSION 863d8b8d2b20f2acd0b5870f23e553df9ce90e6c) set(MP11_URI https://github.com/boostorg/mp11/archive/${MP11_VERSION}.tar.gz) -set(MP11_HASH ec2d68858dd4d04f9a1e3960fc94a58440715e1b3e746cc495438116715343e2) +set(MP11_HASH 525692267abb8086bb9cc2fe81fb96d73ac645dfa6825cb5114686aafe244e9f) set(MP11_HASH_TYPE SHA256) set(MP11_FILE mp11-${MP11_VERSION}.tar.gz) set(MP11_HOMEPAGE https://github.com/boostorg/mp11) @@ -1120,10 +1121,10 @@ set(SPIRV_HEADERS_HOMEPAGE https://github.com/KhronosGroup/SPIRV-Headers) set(SPIRV_HEADERS_LICENSE SPDX:MIT-Khronos-old) set(SPIRV_HEADERS_COPYRIGHT "Copyright (c) 2015-2024 The Khronos Group Inc.") -# Source sycl/plugins/unified_runtime/CMakeLists.txt -set(UNIFIED_RUNTIME_VERSION ec634ff05b067d7922ec45059dda94665e5dcd9b) +# Source sycl/cmake/modules/FetchUnifiedRuntime.cmake +set(UNIFIED_RUNTIME_VERSION 04db12683146673af9a09e923c19cf9a4ee96982) set(UNIFIED_RUNTIME_URI https://github.com/oneapi-src/unified-runtime/archive/${UNIFIED_RUNTIME_VERSION}.tar.gz) -set(UNIFIED_RUNTIME_HASH ff15574aba6225d0c8a32f71866126551dee1aaacfa7894b8fdcc5e52e0f5da9) +set(UNIFIED_RUNTIME_HASH 1ebb6f6ec640dac6279ad84a705ddb48da12e29af9942a7e8fc087f23212f650) set(UNIFIED_RUNTIME_HASH_TYPE SHA256) set(UNIFIED_RUNTIME_FILE unified-runtime-${UNIFIED_RUNTIME_VERSION}.tar.gz) set(UNIFIED_RUNTIME_HOMEPAGE https://github.com/oneapi-src/unified-runtime) @@ -1131,9 +1132,9 @@ set(UNIFIED_RUNTIME_LICENSE SPDX:Apache-2.0 WITH LLVM-exception) set(UNIFIED_RUNTIME_COPYRIGHT "Copyright (C) 2019-2024 Intel Corporation") # Source unified-runtime/source/common/CMakeList.txt -set(UNIFIED_MEMORY_FRAMEWORK_VERSION 9bf7a0dc4dff76844e10edbb5c6e9d917536ef6d) +set(UNIFIED_MEMORY_FRAMEWORK_VERSION v0.9.0) set(UNIFIED_MEMORY_FRAMEWORK_URI https://github.com/oneapi-src/unified-memory-framework/archive/${UNIFIED_MEMORY_FRAMEWORK_VERSION}.tar.gz) -set(UNIFIED_MEMORY_FRAMEWORK_HASH 7ff7d0be7be6e59693d238eab02b5a9741c820d3d995446781dcd7a2adaa28e9) +set(UNIFIED_MEMORY_FRAMEWORK_HASH 8594738d84abb4001bb0e962383b8a2604837e7bbc378d0771ecdab436c7d001) set(UNIFIED_MEMORY_FRAMEWORK_HASH_TYPE SHA256) set(UNIFIED_MEMORY_FRAMEWORK_FILE unified-memory-framework-${UNIFIED_MEMORY_FRAMEWORK_VERSION}.tar.gz) set(UNIFIED_MEMORY_FRAMEWORK_HOMEPAGE https://github.com/oneapi-src/unified-memory-framework) diff --git a/build_files/build_environment/patches/dpcpp.diff b/build_files/build_environment/patches/dpcpp.diff index 570f1c25a838..85d282a37f0a 100644 --- a/build_files/build_environment/patches/dpcpp.diff +++ b/build_files/build_environment/patches/dpcpp.diff @@ -1,44 +1,46 @@ -diff -Naur llvm-sycl-nightly-20220501.orig\opencl/CMakeLists.txt llvm-sycl-nightly-20220501\opencl/CMakeLists.txt ---- llvm-sycl-nightly-20220501.orig/opencl/CMakeLists.txt 2022-04-29 13:47:11 -0600 -+++ llvm-sycl-nightly-20220501/opencl/CMakeLists.txt 2022-05-21 15:25:06 -0600 -@@ -11,6 +11,11 @@ +diff --git a/libdevice/cmake/modules/SYCLLibdevice.cmake b/libdevice/cmake/modules/SYCLLibdevice.cmake +index c1aac6d017ef..99d84d89b9cc 100644 +--- a/libdevice/cmake/modules/SYCLLibdevice.cmake ++++ b/libdevice/cmake/modules/SYCLLibdevice.cmake +@@ -65,7 +65,9 @@ add_custom_target(libsycldevice-obj-new-offload) + add_custom_target(libsycldevice-spv) + add_custom_target(libsycldevice-bc) + +-add_custom_target(libsycldevice DEPENDS ++# Blender: add ALL here otherwise this target will not build ++# and cause an error due to missing files during the install phase. ++add_custom_target(libsycldevice ALL DEPENDS + libsycldevice-obj + libsycldevice-bc + libsycldevice-obj-new-offload +diff --git a/opencl/CMakeLists.txt b/opencl/CMakeLists.txt +index 6f618033a203..38a7d4ddec22 100644 +--- a/opencl/CMakeLists.txt ++++ b/opencl/CMakeLists.txt +@@ -11,6 +11,11 @@ if (MSVC) ) endif() - + +# Blender code below is determined to use FetchContent_Declare +# temporarily allow it (but feed it our downloaded tarball +# in the OpenCL_HEADERS variable +set(FETCHCONTENT_FULLY_DISCONNECTED OFF) + # Repo URLs - + set(OCL_HEADERS_REPO -@@ -77,5 +82,6 @@ - +@@ -77,5 +82,6 @@ endif() + FetchContent_MakeAvailable(ocl-icd) add_library(OpenCL-ICD ALIAS OpenCL) +set(FETCHCONTENT_FULLY_DISCONNECTED ON) - - add_subdirectory(opencl-aot) -diff -Naur llvm-sycl-nightly-20220208.orig/libdevice/cmake/modules/SYCLLibdevice.cmake llvm-sycl-nightly-20220208/libdevice/cmake/modules/SYCLLibdevice.cmake ---- llvm-sycl-nightly-20220208.orig/libdevice/cmake/modules/SYCLLibdevice.cmake 2022-02-08 09:17:24 -0700 -+++ llvm-sycl-nightly-20220208/libdevice/cmake/modules/SYCLLibdevice.cmake 2022-05-24 11:35:51 -0600 -@@ -36,7 +36,9 @@ - add_custom_target(libsycldevice-obj) - add_custom_target(libsycldevice-spv) - --add_custom_target(libsycldevice DEPENDS -+# Blender: add ALL here otherwise this target will not build -+# and cause an error due to missing files during the install phase. -+add_custom_target(libsycldevice ALL DEPENDS - libsycldevice-obj - libsycldevice-spv) + add_subdirectory(opencl-aot) diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt -index 00ce045f43c3..e044262e628e 100644 +index 6ee321b7bff9..a77b94ede51f 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt -@@ -188,7 +188,6 @@ install(FILES +@@ -203,7 +203,6 @@ install(FILES COMPONENT sycl-headers) include(AddBoostMp11Headers) @@ -48,10 +50,10 @@ index 00ce045f43c3..e044262e628e 100644 # are not detected by copy_directory command. diff --git a/sycl/cmake/modules/FetchBoostUnorderedHeaders.cmake b/sycl/cmake/modules/FetchBoostUnorderedHeaders.cmake deleted file mode 100644 -index a0f446055026..000000000000 +index 5cabc6cccdbf..000000000000 --- a/sycl/cmake/modules/FetchBoostUnorderedHeaders.cmake +++ /dev/null -@@ -1,129 +0,0 @@ +@@ -1,101 +0,0 @@ -# Fetches the unordered boost module and its dependencies -function(add_boost_module_headers) - cmake_parse_arguments( @@ -81,124 +83,126 @@ index a0f446055026..000000000000 - set(BOOST_UNORDERED_INCLUDE_DIRS ${BOOST_UNORDERED_INCLUDE_DIRS} "${BOOST_MODULE_SRC_DIR}/include" PARENT_SCOPE) -endfunction(add_boost_module_headers) - --set(BOOST_UNORDERED_GIT_TAG bd24dfd284dbc70e7521915af0d8d049f74a1e85) --# Author: joaquintides --# Date: Tue Jul 18 18:19:13 2023 +0200 +-set(BOOST_UNORDERED_GIT_TAG 5e6b9291deb55567d41416af1e77c2516dc1250f) +-# Merge: 15cfef69 ccf9a76e +-# Author: joaquintides +-# Date: Sat Mar 16 09:18:41 2024 +0100 -# --# updated concurrent map benchmark plots +-# Merge pull request #238 from boostorg/fix/gh-237 -add_boost_module_headers(NAME "unordered" SRC_DIR ${BOOST_UNORDERED_SOURCE_DIR} GIT_TAG ${BOOST_UNORDERED_GIT_TAG}) - --set(BOOST_ASSERT_GIT_TAG 02256c84fd0cd58a139d9dc1b25b5019ca976ada) +-set(BOOST_ASSERT_GIT_TAG 447e0b3a331930f8708ade0e42683d12de9dfbc3) -# Author: Peter Dimov --# Date: Thu Jun 22 18:11:58 2023 +0300 +-# Date: Sat Feb 3 20:43:55 2024 +0200 -# --# Do not use std::source_location::current under nvcc. Fixes #32. +-# Use __builtin_FUNCSIG() under MSVC 19.35+. Fixes #35. -add_boost_module_headers(NAME "assert" SRC_DIR ${BOOST_ASSERT_SOURCE_DIR} GIT_TAG ${BOOST_ASSERT_GIT_TAG}) - --set(BOOST_CONFIG_GIT_TAG a1cf5d531405e62927b0257b5cbecc66a545b508) --# Merge: f5726a26 a1edcd56 +-set(BOOST_CONFIG_GIT_TAG 11385ec21012926e15a612e3bf9f9a71403c1e5b) +-# Merge: eef05e98 601598f8 -# Author: jzmaddock --# Date: Sat Apr 15 13:20:12 2023 +0100 +-# Date: Sun Feb 4 09:46:22 2024 +0000 -# --# Merge pull request #475 from boostorg/ci_2023_04 +-# Merge branch 'develop' -add_boost_module_headers(NAME "config" SRC_DIR ${BOOST_CONFIG_SOURCE_DIR} GIT_TAG ${BOOST_CONFIG_GIT_TAG}) - --set(BOOST_CONTAINER_HASH_GIT_TAG 226eb066e949adbf37b220e993d64ecefeeaae99) +-set(BOOST_CONTAINER_HASH_GIT_TAG 6d214eb776456bf17fbee20780a034a23438084f) -# Author: Peter Dimov --# Date: Thu Jun 29 14:38:53 2023 +0300 +-# Date: Wed Mar 6 05:13:53 2024 +0200 -# --# Update .drone.jsonnet +-# Update .appveyor.yml -add_boost_module_headers(NAME "container_hash" SRC_DIR ${BOOST_CONTAINER_HASH_SOURCE_DIR} GIT_TAG ${BOOST_CONTAINER_HASH_GIT_TAG}) - --set(BOOST_CORE_GIT_TAG 216999e552e7f73e63c7bcc88b8ce9c179bbdbe2) --# Author: Peter Dimov --# Date: Sun Jun 25 13:46:53 2023 +0300 +-set(BOOST_CORE_GIT_TAG 083b41c17e34f1fc9b43ab796b40d0d8bece685c) +-# Merge: 8cc2fda a973490 +-# Author: Andrey Semashev +-# Date: Tue Mar 19 18:10:04 2024 +0300 -# --# Avoid -Wsign-conversion warning in checked_delete.hpp +-# Merge pull request #169 from k3DW/feature/168 -add_boost_module_headers(NAME "core" SRC_DIR ${BOOST_CORE_SOURCE_DIR} GIT_TAG ${BOOST_CORE_GIT_TAG}) - -# Describe is a dependency of container_hash --set(BOOST_DESCRIBE_GIT_TAG a0eafb08100eb15a57b6dae6d270c0012a56aa21) --# Merge: 1692c3e b54fda5 +-set(BOOST_DESCRIBE_GIT_TAG 50719b212349f3d1268285c586331584d3dbfeb5) -# Author: Peter Dimov --# Date: Sun May 21 04:51:35 2023 +0300 +-# Date: Sat Mar 23 20:27:08 2024 +0200 -# --# Merge branch 'fix-deprecated-inline-static-variables' of https://github.com/Romain-Geissler-1A/describe into feature/pr-40 +-# Update .drone.jsonnet -add_boost_module_headers(NAME "describe" SRC_DIR ${BOOST_DESCRIBE_SOURCE_DIR} GIT_TAG ${BOOST_DESCRIBE_GIT_TAG}) - --set(BOOST_MOVE_GIT_TAG f1fbb45134065deebe95249c616a967d4b66c809) --# Author: Ion GaztaƱaga --# Date: Mon Mar 13 13:32:29 2023 +0100 --# --# Use [[msvc::intrinsic] attribute if available in move/forward in order to improve debug experience --add_boost_module_headers(NAME "move" SRC_DIR ${BOOST_MOVE_SOURCE_DIR} GIT_TAG ${BOOST_MOVE_GIT_TAG}) -- -# Reuse mp11 fetched earlier for DPC++ headers -set(BOOST_UNORDERED_INCLUDE_DIRS ${BOOST_UNORDERED_INCLUDE_DIRS} "${BOOST_MP11_SOURCE_DIR}/include/") - --set(BOOST_PREDEF_GIT_TAG 392e4e767469e3469c9390f0d9cca16724dc3fc8) --# Merge: a12c7fd 499d28e +-set(BOOST_PREDEF_GIT_TAG 0fdfb49c3a6789e50169a44e88a07cc889001106) +-# Merge: 392e4e7 614546d -# Author: Rene Rivera --# Date: Sun Feb 27 14:44:35 2022 -0600 +-# Date: Tue Oct 31 20:24:41 2023 -0500 -# --# Release 1.14. +-# Merge branch 'develop' -add_boost_module_headers(NAME "predef" SRC_DIR ${BOOST_PREDEF_SOURCE_DIR} GIT_TAG ${BOOST_PREDEF_GIT_TAG}) - --set(BOOST_PREPROCESSOR_GIT_TAG 667e87b3392db338a919cbe0213979713aca52e3) --# Author: Peter Dimov --# Date: Tue Aug 16 20:59:52 2022 +0300 --# --# Change C test names to not conflict with the C++ ones --add_boost_module_headers(NAME "preprocessor" SRC_DIR ${BOOST_PREPROCESSOR_SOURCE_DIR} GIT_TAG ${BOOST_PREPROCESSOR_GIT_TAG}) -- --set(BOOST_STATIC_ASSERT_GIT_TAG 45eec41c293bc5cd36ec3ed83671f70bc1aadc9f) --# Merge: ba72d33 a1abfec --# Author: jzmaddock --# Date: Tue Mar 8 09:35:50 2022 +0000 +-# Static assert is a dependency of core +-set(BOOST_STATIC_ASSERT_GIT_TAG ba72d3340f3dc6e773868107f35902292f84b07e) +-# Merge: 392e4e7 614546d +-# Author: Rene Rivera +-# Date: Tue Oct 31 20:24:41 2023 -0500 -# --# Merge pull request #15 from sdarwin/githubactions +-# Merge branch 'develop' -add_boost_module_headers(NAME "static_assert" SRC_DIR ${BOOST_STATIC_ASSERT_SOURCE_DIR} GIT_TAG ${BOOST_STATIC_ASSERT_GIT_TAG}) - --set(BOOST_THROW_EXCEPTION_GIT_TAG 23dd41e920ecd91237500ac6428f7d392a7a875c) +-set(BOOST_THROW_EXCEPTION_GIT_TAG 7c8ec2114bc1f9ab2a8afbd629b96fbdd5901294) -# Author: Peter Dimov --# Date: Sun Jun 25 16:12:57 2023 +0300 +-# Date: Sat Jan 6 19:41:56 2024 +0200 -# --# Update ci.yml +-# Add -Wundef to test/Jamfile -add_boost_module_headers(NAME "throw_exception" SRC_DIR ${BOOST_THROW_EXCEPTION_SOURCE_DIR} GIT_TAG ${BOOST_THROW_EXCEPTION_GIT_TAG}) -- --set(BOOST_TUPLE_GIT_TAG 500e4fa0a2845b96c0dd919e7485e0f216438a01) --# Merge: aa16ae3 ded3c1d --# Author: Joel de Guzman --# Date: Thu Dec 30 23:20:18 2021 +0800 --# --# Merge pull request #21 from igaztanaga/patch-1 --add_boost_module_headers(NAME "tuple" SRC_DIR ${BOOST_TUPLE_SOURCE_DIR} GIT_TAG ${BOOST_TUPLE_GIT_TAG}) -- --set(BOOST_TYPE_TRAITS_GIT_TAG 89f5011b4a79d91e42735670e39f72cb25c86c72) --# Merge: 55feb75 1ebd31e --# Author: John Maddock --# Date: Fri Feb 24 18:02:30 2023 +0000 --# --# Merge branch 'develop' --add_boost_module_headers(NAME "type_traits" SRC_DIR ${BOOST_TYPE_TRAITS_SOURCE_DIR} GIT_TAG ${BOOST_TYPE_TRAITS_GIT_TAG}) -diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt -index ead8f2c83ab7..6fb8305a1a88 100644 ---- a/sycl/source/CMakeLists.txt -+++ b/sycl/source/CMakeLists.txt -@@ -69,8 +69,6 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) - target_link_libraries(${LIB_NAME} PRIVATE ${ARG_XPTI_LIB}) +diff --git a/sycl/cmake/modules/FetchUnifiedRuntime.cmake b/sycl/cmake/modules/FetchUnifiedRuntime.cmake +index 41268945b078..895065b8f1a7 100644 +--- a/sycl/cmake/modules/FetchUnifiedRuntime.cmake ++++ b/sycl/cmake/modules/FetchUnifiedRuntime.cmake +@@ -128,11 +128,11 @@ if(SYCL_PI_UR_USE_FETCH_CONTENT) + # to link statically on windows + if(WIN32) + set(UMF_BUILD_SHARED_LIBRARY OFF CACHE INTERNAL "Build UMF shared library") +- set(UMF_LINK_HWLOC_STATICALLY ON CACHE INTERNAL "static HWLOC") +- else() +- set(UMF_DISABLE_HWLOC ${SYCL_UMF_DISABLE_HWLOC} CACHE INTERNAL "Disable hwloc for UMF") endif() -- target_include_directories(${LIB_OBJ_NAME} PRIVATE ${BOOST_UNORDERED_INCLUDE_DIRS}) -- - # pi_win_proxy_loader - if (WIN32) - include_directories(${LLVM_EXTERNAL_SYCL_SOURCE_DIR}/pi_win_proxy_loader) ++ set(UMF_LINK_HWLOC_STATICALLY OFF CACHE INTERNAL "static HWLOC") ++ set(UMF_DISABLE_HWLOC ${SYCL_UMF_DISABLE_HWLOC} CACHE INTERNAL "Disable hwloc for UMF") ++ + fetch_adapter_source(level_zero + ${UNIFIED_RUNTIME_REPO} + ${UNIFIED_RUNTIME_TAG} +diff --git a/sycl/source/detail/graph_impl.hpp b/sycl/source/detail/graph_impl.hpp +index 454a43fe9953..50fa14fbbd5d 100644 +--- a/sycl/source/detail/graph_impl.hpp ++++ b/sycl/source/detail/graph_impl.hpp +@@ -28,6 +28,7 @@ + #include + #include + #include ++#include + + namespace sycl { + inline namespace _V1 { +diff --git a/sycl/source/detail/kernel_bundle_impl.hpp b/sycl/source/detail/kernel_bundle_impl.hpp +index 2a128ba9a901..db8faf6e188f 100644 +--- a/sycl/source/detail/kernel_bundle_impl.hpp ++++ b/sycl/source/detail/kernel_bundle_impl.hpp +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + + #include "split_string.hpp" diff --git a/sycl/source/detail/kernel_program_cache.hpp b/sycl/source/detail/kernel_program_cache.hpp -index 87a41d9fe105..c0a572b4d144 100644 +index f170b55a6348..9f593359c7f3 100644 --- a/sycl/source/detail/kernel_program_cache.hpp +++ b/sycl/source/detail/kernel_program_cache.hpp -@@ -18,12 +18,10 @@ +@@ -19,12 +19,10 @@ #include #include @@ -212,8 +216,8 @@ index 87a41d9fe105..c0a572b4d144 100644 // For testing purposes class MockKernelProgramCache; -@@ -113,8 +111,8 @@ public: - std::pair; +@@ -123,8 +121,8 @@ public: + using CommonProgramKeyT = std::pair; struct ProgramCache { - ::boost::unordered_map Cache; @@ -223,23 +227,22 @@ index 87a41d9fe105..c0a572b4d144 100644 size_t size() const noexcept { return Cache.size(); } }; -@@ -138,10 +136,8 @@ public: +@@ -152,23 +150,15 @@ public: }; using KernelBuildResultPtr = std::shared_ptr; - using KernelByNameT = - ::boost::unordered_map; - using KernelCacheT = -- ::boost::unordered_map; +- ::boost::unordered_map; + using KernelByNameT = std::map; -+ using KernelCacheT = std::map; ++ using KernelCacheT = std::map; using KernelFastCacheKeyT = - std::tuple; using KernelFastCacheValT = - std::tuple; + std::tuple; - // This container is used as a fast path for retrieving cached kernels. - // unordered_flat_map is used here to reduce lookup overhead. - // The slow path is used only once for each newly created kernel, so the @@ -252,7 +255,7 @@ index 87a41d9fe105..c0a572b4d144 100644 ~KernelProgramCache() = default; diff --git a/sycl/unittests/CMakeLists.txt b/sycl/unittests/CMakeLists.txt -index 71d2413c2974..0c55c870c4b8 100644 +index ec740f913ed4..c0e04bfaf119 100644 --- a/sycl/unittests/CMakeLists.txt +++ b/sycl/unittests/CMakeLists.txt @@ -1,6 +1,5 @@ @@ -262,6 +265,17 @@ index 71d2413c2974..0c55c870c4b8 100644 foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE --- -2.30.1.windows.1 - +diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake +index 63a5bfe09a03..0eb3fd2adf20 100644 +--- a/llvm/cmake/modules/HandleLLVMOptions.cmake ++++ b/llvm/cmake/modules/HandleLLVMOptions.cmake +@@ -575,6 +575,9 @@ if( MSVC ) + + append("/Zc:inline" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) + ++ # Zc:lambda works around VS19 internal compiler errors. ++ append("/Zc:lambda" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) ++ + if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang") + # Enable standards-conforming preprocessor. + # https://learn.microsoft.com/en-us/cpp/build/reference/zc-preprocessor diff --git a/build_files/build_environment/patches/dpcpp_13328.diff b/build_files/build_environment/patches/dpcpp_13328.diff deleted file mode 100644 index 2f880818a30b..000000000000 --- a/build_files/build_environment/patches/dpcpp_13328.diff +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/clang/lib/Driver/CMakeLists.txt b/clang/lib/Driver/CMakeLists.txt -index bfeb4a763da84..94400f08154a2 100644 ---- a/clang/lib/Driver/CMakeLists.txt -+++ b/clang/lib/Driver/CMakeLists.txt -@@ -98,6 +98,7 @@ add_clang_library(clangDriver - - DEPENDS - ClangDriverOptions -+ DeviceConfigFile - - LINK_LIBS - clangBasic diff --git a/build_files/build_environment/patches/dpcpp_15124.diff b/build_files/build_environment/patches/dpcpp_15124.diff new file mode 100644 index 000000000000..8993d7959629 --- /dev/null +++ b/build_files/build_environment/patches/dpcpp_15124.diff @@ -0,0 +1,1036 @@ +diff --git a/buildbot/configure.py b/buildbot/configure.py +index 692a64fd3125..424df77c2513 100644 +--- a/buildbot/configure.py ++++ b/buildbot/configure.py +@@ -178,6 +178,8 @@ def do_configure(args): + "-DLLVM_ENABLE_PROJECTS={}".format(llvm_enable_projects), + "-DSYCL_BUILD_PI_HIP_PLATFORM={}".format(sycl_build_pi_hip_platform), + "-DLLVM_BUILD_TOOLS=ON", ++ "-DLLVM_ENABLE_ZSTD=ON", ++ "-DLLVM_USE_STATIC_ZSTD=ON", + "-DSYCL_ENABLE_WERROR={}".format(sycl_werror), + "-DCMAKE_INSTALL_PREFIX={}".format(install_dir), + "-DSYCL_INCLUDE_TESTS=ON", # Explicitly include all kinds of SYCL tests. +diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp +index 17dd75a265a8..8472efa23fdf 100644 +--- a/clang/lib/Driver/ToolChains/Clang.cpp ++++ b/clang/lib/Driver/ToolChains/Clang.cpp +@@ -10043,6 +10043,19 @@ void OffloadWrapper::ConstructJob(Compilation &C, const JobAction &JA, + SmallString<128> TargetTripleOpt = TT.getArchName(); + bool WrapFPGADevice = false; + bool FPGAEarly = false; ++ ++ // Validate and propogate CLI options related to device image compression. ++ // -offload-compress ++ if (C.getInputArgs().getLastArg(options::OPT_offload_compress)) { ++ WrapperArgs.push_back( ++ C.getArgs().MakeArgString(Twine("-offload-compress"))); ++ // -offload-compression-level=<> ++ if (Arg *A = C.getInputArgs().getLastArg( ++ options::OPT_offload_compression_level_EQ)) ++ WrapperArgs.push_back(C.getArgs().MakeArgString( ++ Twine("-offload-compression-level=") + A->getValue())); ++ } ++ + if (Arg *A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ)) { + WrapFPGADevice = true; + FPGAEarly = (A->getValue() == StringRef("early")); +diff --git a/clang/test/Driver/clang-offload-wrapper-zstd.c b/clang/test/Driver/clang-offload-wrapper-zstd.c +new file mode 100644 +index 000000000000..bc5fadfc4cf4 +--- /dev/null ++++ b/clang/test/Driver/clang-offload-wrapper-zstd.c +@@ -0,0 +1,40 @@ ++// REQUIRES: zstd && (system-windows || system-linux) ++ ++// clang-offload-wrapper compression test: checks that the wrapper can compress the device images. ++// Checks the '--offload-compress', '--offload-compression-level', and '--offload-compression-threshold' ++// CLI options. ++ ++// --- Prepare test data by creating the debice binary image. ++// RUN: echo -e -n 'device binary image1\n' > %t.bin ++// RUN: echo -e -n '[Category1]\nint_prop1=1|10\n[Category2]\nint_prop2=1|20\n' > %t.props ++// RUN: echo -e -n 'kernel1\nkernel2\n' > %t.sym ++// RUN: echo -e -n 'Manifest file - arbitrary data generated by the toolchain\n' > %t.mnf ++// RUN: echo '[Code|Properties|Symbols|Manifest]' > %t.img1 ++// RUN: echo %t.bin"|"%t.props"|"%t.sym"|"%t.mnf >> %t.img1 ++ ++/////////////////////////////////////////////////////// ++// Compress the test image using clang-offload-wrapper. ++/////////////////////////////////////////////////////// ++ ++// RUN: clang-offload-wrapper -kind=sycl -target=TARGET -batch %t.img1 -o %t.wrapped.bc -v \ ++// RUN: --offload-compress --offload-compression-level=9 --offload-compression-threshold=0 \ ++// RUN: 2>&1 | FileCheck %s --check-prefix=CHECK-COMPRESS ++ ++// CHECK-COMPRESS: [Compression] Original image size: ++// CHECK-COMPRESS: [Compression] Compressed image size: ++// CHECK-COMPRESS: [Compression] Compression level used: 9 ++ ++/////////////////////////////////////////////////////////// ++// Check that there is no compression when the threshold is set to a value higher than the image size ++// or '--offload-compress' is not set. ++/////////////////////////////////////////////////////////// ++ ++// RUN: clang-offload-wrapper -kind=sycl -target=TARGET -batch %t.img1 -o %t.wrapped.bc -v \ ++// RUN: --offload-compress --offload-compression-level=3 --offload-compression-threshold=1000 \ ++// RUN: 2>&1 | FileCheck %s --check-prefix=CHECK-NO-COMPRESS ++ ++// RUN: clang-offload-wrapper -kind=sycl -target=TARGET -batch %t.img1 -o %t.wrapped.bc -v \ ++// RUN: --offload-compression-level=3 --offload-compression-threshold=0 \ ++// RUN: 2>&1 | FileCheck %s --check-prefix=CHECK-NO-COMPRESS ++ ++// CHECK-NO-COMPRESS-NOT: [Compression] Original image size: +diff --git a/clang/test/Driver/sycl-offload-wrapper-compression.cpp b/clang/test/Driver/sycl-offload-wrapper-compression.cpp +new file mode 100644 +index 000000000000..1ef9282ee359 +--- /dev/null ++++ b/clang/test/Driver/sycl-offload-wrapper-compression.cpp +@@ -0,0 +1,14 @@ ++/// ++/// Check if '--offload-compress' and '--offload-compression-level' CLI ++/// options are passed to the clang-offload-wrapper. ++/// ++ ++// RUN: %clangxx -### -fsycl --offload-compress --offload-compression-level=3 %s 2>&1 | FileCheck %s --check-prefix=CHECK-COMPRESS ++// CHECK-COMPRESS: {{.*}}clang-offload-wrapper{{.*}}"-offload-compress"{{.*}}"-offload-compression-level=3"{{.*}} ++ ++// Make sure that the compression options are not passed when --offload-compress is not set. ++// RUN: %clangxx -### -fsycl %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-COMPRESS ++// RUN: %clangxx -### -fsycl --offload-compression-level=3 %s 2>&1 | FileCheck %s --check-prefix=CHECK-NO-COMPRESS ++ ++// CHECK-NO-COMPRESS-NOT: {{.*}}clang-offload-wrapper{{.*}}"-offload-compress"{{.*}} ++// CHECK-NO-COMPRESS-NOT: {{.*}}clang-offload-wrapper{{.*}}"-offload-compression-level=3"{{.*}} +diff --git a/clang/tools/clang-offload-wrapper/CMakeLists.txt b/clang/tools/clang-offload-wrapper/CMakeLists.txt +index 9cb5ec66c644..3195f18fe23c 100644 +--- a/clang/tools/clang-offload-wrapper/CMakeLists.txt ++++ b/clang/tools/clang-offload-wrapper/CMakeLists.txt +@@ -10,6 +10,7 @@ add_clang_tool(clang-offload-wrapper + + set(CLANG_OFFLOAD_WRAPPER_LIB_DEPS + clangBasic ++ LLVMSupport + ) + + add_dependencies(clang clang-offload-wrapper) +diff --git a/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp b/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp +index 5facbb4329ab..6ce4c5dc36ab 100644 +--- a/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp ++++ b/clang/tools/clang-offload-wrapper/ClangOffloadWrapper.cpp +@@ -67,6 +67,9 @@ + #include + #include + ++// For device image compression. ++#include ++ + #define OPENMP_OFFLOAD_IMAGE_VERSION "1.0" + + using namespace llvm; +@@ -139,6 +142,25 @@ static cl::list Inputs(cl::Positional, cl::OneOrMore, + cl::desc(""), + cl::cat(ClangOffloadWrapperCategory)); + ++// CLI options for device image compression. ++static cl::opt OffloadCompressDevImgs( ++ "offload-compress", cl::init(false), cl::Optional, ++ cl::desc("Enable device image compression using ZSTD."), ++ cl::cat(ClangOffloadWrapperCategory)); ++ ++static cl::opt ++ OffloadCompressLevel("offload-compression-level", cl::init(10), ++ cl::Optional, ++ cl::desc("ZSTD Compression level. Default: 10"), ++ cl::cat(ClangOffloadWrapperCategory)); ++ ++static cl::opt ++ OffloadCompressThreshold("offload-compression-threshold", cl::init(512), ++ cl::Optional, ++ cl::desc("Threshold (in bytes) over which to " ++ "compress images. Default: 512"), ++ cl::cat(ClangOffloadWrapperCategory)); ++ + // Binary image formats supported by this tool. The support basically means + // mapping string representation given at the command line to a value from this + // enum. No format checking is performed. +@@ -146,8 +168,9 @@ enum BinaryImageFormat { + none, // image kind is not determined + native, // image kind is native + // portable image kinds go next +- spirv, // SPIR-V +- llvmbc // LLVM bitcode ++ spirv, // SPIR-V ++ llvmbc, // LLVM bitcode ++ compressed_none // compressed image with unknown format + }; + + /// Sets offload kind. +@@ -265,6 +288,8 @@ static StringRef formatToString(BinaryImageFormat Fmt) { + return "llvmbc"; + case BinaryImageFormat::native: + return "native"; ++ case BinaryImageFormat::compressed_none: ++ return "compressed_none"; + } + llvm_unreachable("bad format"); + +@@ -1083,10 +1108,66 @@ private: + return FBinOrErr.takeError(); + Fbin = *FBinOrErr; + } else { +- Fbin = addDeviceImageToModule( +- ArrayRef(Bin->getBufferStart(), Bin->getBufferSize()), +- Twine(OffloadKindTag) + Twine(ImgId) + Twine(".data"), Kind, +- Img.Tgt); ++ ++ // If '--offload-compress' option is specified and zstd is not ++ // available, throw an error. ++ if (OffloadCompressDevImgs && !llvm::compression::zstd::isAvailable()) { ++ return createStringError( ++ inconvertibleErrorCode(), ++ "'--offload-compress' option is specified but zstd " ++ "is not available. The device image will not be " ++ "compressed."); ++ } ++ ++ // Don't compress if the user explicitly specifies the binary image ++ // format or if the image is smaller than OffloadCompressThreshold ++ // bytes. ++ if (Kind != OffloadKind::SYCL || !OffloadCompressDevImgs || ++ Img.Fmt != BinaryImageFormat::none || ++ !llvm::compression::zstd::isAvailable() || ++ static_cast(Bin->getBufferSize()) < OffloadCompressThreshold) { ++ Fbin = addDeviceImageToModule( ++ ArrayRef(Bin->getBufferStart(), Bin->getBufferSize()), ++ Twine(OffloadKindTag) + Twine(ImgId) + Twine(".data"), Kind, ++ Img.Tgt); ++ } else { ++ ++ // Compress the image using zstd. ++ SmallVector CompressedBuffer; ++#if LLVM_ENABLE_EXCEPTIONS ++ try { ++#endif ++ llvm::compression::zstd::compress( ++ ArrayRef( ++ (const unsigned char *)(Bin->getBufferStart()), ++ Bin->getBufferSize()), ++ CompressedBuffer, OffloadCompressLevel); ++#if LLVM_ENABLE_EXCEPTIONS ++ } catch (const std::exception &ex) { ++ return createStringError(inconvertibleErrorCode(), ++ std::string("Failed to compress the device image: \n") + ++ std::string(ex.what())); ++ } ++#endif ++ if (Verbose) ++ errs() << "[Compression] Original image size: " ++ << Bin->getBufferSize() << "\n" ++ << "[Compression] Compressed image size: " ++ << CompressedBuffer.size() << "\n" ++ << "[Compression] Compression level used: " ++ << OffloadCompressLevel << "\n"; ++ ++ // Add the compressed image to the module. ++ Fbin = addDeviceImageToModule( ++ ArrayRef((const char *)CompressedBuffer.data(), ++ CompressedBuffer.size()), ++ Twine(OffloadKindTag) + Twine(ImgId) + Twine(".data"), Kind, ++ Img.Tgt); ++ ++ // Change image format to compressed_none. ++ Ffmt = ConstantInt::get(Type::getInt8Ty(C), ++ BinaryImageFormat::compressed_none); ++ } + } + + if (Kind == OffloadKind::SYCL) { +diff --git a/sycl/doc/UsersManual.md b/sycl/doc/UsersManual.md +index 6a9e12882518..3f184edc12de 100644 +--- a/sycl/doc/UsersManual.md ++++ b/sycl/doc/UsersManual.md +@@ -195,6 +195,19 @@ and not recommended to use in production environment. + which may or may not perform additional inlining. + Default value is 225. + ++**`--offload-compress`** ++ ++ Enables device image compression for SYCL offloading. Device images ++ are compressed using `zstd` compression algorithm and only if their size ++ exceeds 512 bytes. ++ Default value is false. ++ ++**`--offload-compression-level=`** ++ ++ `zstd` compression level used to compress device images when `--offload- ++ compress` is enabled. ++ The default value is 10. ++ + ## Target toolchain options + + **`-Xsycl-target-backend= "options"`** +diff --git a/sycl/source/CMakeLists.txt b/sycl/source/CMakeLists.txt +index f0067a45b20a..be683124f7f9 100644 +--- a/sycl/source/CMakeLists.txt ++++ b/sycl/source/CMakeLists.txt +@@ -69,6 +69,13 @@ function(add_sycl_rt_library LIB_NAME LIB_OBJ_NAME) + target_link_libraries(${LIB_NAME} PRIVATE ${ARG_XPTI_LIB}) + endif() + ++ if (NOT LLVM_ENABLE_ZSTD) ++ target_compile_definitions(${LIB_OBJ_NAME} PRIVATE SYCL_RT_ZSTD_NOT_AVAIABLE) ++ else() ++ target_link_libraries(${LIB_NAME} PRIVATE ${zstd_STATIC_LIBRARY}) ++ target_include_directories(${LIB_OBJ_NAME} PRIVATE ${zstd_INCLUDE_DIR}) ++ endif() ++ + target_include_directories(${LIB_OBJ_NAME} PRIVATE ${BOOST_UNORDERED_INCLUDE_DIRS}) + + # ur_win_proxy_loader +diff --git a/sycl/source/detail/compiler.hpp b/sycl/source/detail/compiler.hpp +index 9d2777e863ee..827ee61ef811 100644 +--- a/sycl/source/detail/compiler.hpp ++++ b/sycl/source/detail/compiler.hpp +@@ -115,7 +115,8 @@ enum sycl_device_binary_type : uint8_t { + SYCL_DEVICE_BINARY_TYPE_NONE = 0, // undetermined + SYCL_DEVICE_BINARY_TYPE_NATIVE = 1, // specific to a device + SYCL_DEVICE_BINARY_TYPE_SPIRV = 2, +- SYCL_DEVICE_BINARY_TYPE_LLVMIR_BITCODE = 3 ++ SYCL_DEVICE_BINARY_TYPE_LLVMIR_BITCODE = 3, ++ SYCL_DEVICE_BINARY_TYPE_COMPRESSED_NONE = 4 + }; + + // Device binary descriptor version supported by this library. +diff --git a/sycl/source/detail/compression.hpp b/sycl/source/detail/compression.hpp +new file mode 100644 +index 000000000000..1878010cd5ba +--- /dev/null ++++ b/sycl/source/detail/compression.hpp +@@ -0,0 +1,153 @@ ++//==---------- compression.hpp --------------------------------------------===// ++// ++// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ++// See https://llvm.org/LICENSE.txt for license information. ++// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ++// ++//===----------------------------------------------------------------------===// ++#pragma once ++ ++#ifndef SYCL_RT_ZSTD_NOT_AVAIABLE ++ ++#include ++ ++#include ++#include ++#include ++ ++#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1) ++#define ZSTD_CONTENTSIZE_ERROR (0ULL - 2) ++ ++namespace sycl { ++inline namespace _V1 { ++namespace detail { ++ ++// Singleton class to handle ZSTD compression and decompression. ++class ZSTDCompressor { ++private: ++ ZSTDCompressor() {} ++ ++ ZSTDCompressor(const ZSTDCompressor &) = delete; ++ ZSTDCompressor &operator=(const ZSTDCompressor &) = delete; ++ ~ZSTDCompressor() {} ++ ++ // Get the singleton instance of the ZSTDCompressor class. ++ static ZSTDCompressor &GetSingletonInstance() { ++ static ZSTDCompressor instance; ++ return instance; ++ } ++ ++ // Public APIs ++public: ++ // Blob (de)compression do not assume format/structure of the input buffer. ++ // This function can be used in future for compression in on-disk cache. ++ static std::unique_ptr CompressBlob(const char *src, size_t srcSize, ++ size_t &dstSize, int level) { ++ auto &instance = GetSingletonInstance(); ++ ++ // Lazy initialize compression context. ++ if (!instance.m_ZSTD_compression_ctx) { ++ ++ // Call ZSTD_createCCtx() and ZSTD_freeCCtx() to create and free the ++ // context. ++ instance.m_ZSTD_compression_ctx = ++ std::unique_ptr(ZSTD_createCCtx(), ++ ZSTD_freeCCtx); ++ if (!instance.m_ZSTD_compression_ctx) { ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ "Failed to create ZSTD compression context"); ++ } ++ } ++ ++ // Get maximum size of the compressed buffer and allocate it. ++ auto dstBufferSize = ZSTD_compressBound(srcSize); ++ auto dstBuffer = std::unique_ptr(new char[dstBufferSize]); ++ ++ if (!dstBuffer) ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ "Failed to allocate memory for compressed data"); ++ ++ // Compress the input buffer. ++ dstSize = ++ ZSTD_compressCCtx(instance.m_ZSTD_compression_ctx.get(), ++ static_cast(dstBuffer.get()), dstBufferSize, ++ static_cast(src), srcSize, level); ++ ++ // Store the error code if compression failed. ++ if (ZSTD_isError(dstSize)) ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ ZSTD_getErrorName(dstSize)); ++ ++ // Pass ownership of the buffer to the caller. ++ return dstBuffer; ++ } ++ ++ static size_t GetDecompressedSize(const char *src, size_t srcSize) { ++ size_t dstBufferSize = ZSTD_getFrameContentSize(src, srcSize); ++ ++ if (dstBufferSize == ZSTD_CONTENTSIZE_UNKNOWN || ++ dstBufferSize == ZSTD_CONTENTSIZE_ERROR) { ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ "Error determining size of uncompressed data."); ++ } ++ return dstBufferSize; ++ } ++ ++ static std::unique_ptr DecompressBlob(const char *src, size_t srcSize, ++ size_t &dstSize) { ++ auto &instance = GetSingletonInstance(); ++ ++ // Lazy initialize decompression context. ++ if (!instance.m_ZSTD_decompression_ctx) { ++ ++ // Call ZSTD_createDCtx() and ZSTD_freeDCtx() to create and free the ++ // context. ++ instance.m_ZSTD_decompression_ctx = ++ std::unique_ptr(ZSTD_createDCtx(), ++ ZSTD_freeDCtx); ++ if (!instance.m_ZSTD_decompression_ctx) { ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ "Failed to create ZSTD decompression context"); ++ } ++ } ++ ++ // Size of decompressed image can be larger than what we can allocate ++ // on heap. In that case, we need to use streaming decompression. ++ auto dstBufferSize = GetDecompressedSize(src, srcSize); ++ ++ // Allocate buffer for decompressed data. ++ auto dstBuffer = std::unique_ptr(new char[dstBufferSize]); ++ ++ if (!dstBuffer) ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ "Failed to allocate memory for decompressed data"); ++ ++ dstSize = ++ ZSTD_decompressDCtx(instance.m_ZSTD_decompression_ctx.get(), ++ static_cast(dstBuffer.get()), dstBufferSize, ++ static_cast(src), srcSize); ++ ++ // In case of decompression error, return the error message and set dstSize ++ // to 0. ++ if (ZSTD_isError(dstSize)) { ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ ZSTD_getErrorName(dstSize)); ++ } ++ ++ // Pass ownership of the buffer to the caller. ++ return dstBuffer; ++ } ++ ++ // Data fields ++private: ++ // ZSTD contexts. Reusing ZSTD context speeds up subsequent (de)compression. ++ std::unique_ptr m_ZSTD_compression_ctx{ ++ nullptr, nullptr}; ++ std::unique_ptr m_ZSTD_decompression_ctx{ ++ nullptr, nullptr}; ++}; ++} // namespace detail ++} // namespace _V1 ++} // namespace sycl ++ ++#endif // SYCL_RT_ZSTD_NOT_AVAIABLE +diff --git a/sycl/source/detail/device_binary_image.cpp b/sycl/source/detail/device_binary_image.cpp +index beb9bae0dd0f..2be48d4a38fc 100644 +--- a/sycl/source/detail/device_binary_image.cpp ++++ b/sycl/source/detail/device_binary_image.cpp +@@ -9,6 +9,9 @@ + #include + #include + ++// For device image compression. ++#include ++ + #include + #include + #include +@@ -167,6 +170,8 @@ void RTDeviceBinaryImage::init(sycl_device_binary Bin) { + // it when invoking the offload wrapper job + Format = static_cast(Bin->Format); + ++ // For compressed images, we delay determining the format until the image is ++ // decompressed. + if (Format == SYCL_DEVICE_BINARY_TYPE_NONE) + // try to determine the format; may remain "NONE" + Format = ur::getBinaryImageFormat(Bin->BinaryStart, getSize()); +@@ -226,6 +231,48 @@ DynRTDeviceBinaryImage::~DynRTDeviceBinaryImage() { + Bin = nullptr; + } + ++#ifndef SYCL_RT_ZSTD_NOT_AVAIABLE ++CompressedRTDeviceBinaryImage::CompressedRTDeviceBinaryImage( ++ sycl_device_binary CompressedBin) ++ : RTDeviceBinaryImage() { ++ ++ // 'CompressedBin' is part of the executable image loaded into memory ++ // which can't be modified easily. So, we need to make a copy of it. ++ Bin = new sycl_device_binary_struct(*CompressedBin); ++ ++ // Get the decompressed size of the binary image. ++ m_ImageSize = ZSTDCompressor::GetDecompressedSize( ++ reinterpret_cast(Bin->BinaryStart), ++ static_cast(Bin->BinaryEnd - Bin->BinaryStart)); ++ ++ init(Bin); ++} ++ ++void CompressedRTDeviceBinaryImage::Decompress() { ++ ++ size_t CompressedDataSize = ++ static_cast(Bin->BinaryEnd - Bin->BinaryStart); ++ ++ size_t DecompressedSize = 0; ++ m_DecompressedData = ZSTDCompressor::DecompressBlob( ++ reinterpret_cast(Bin->BinaryStart), CompressedDataSize, ++ DecompressedSize); ++ ++ Bin->BinaryStart = ++ reinterpret_cast(m_DecompressedData.get()); ++ Bin->BinaryEnd = Bin->BinaryStart + DecompressedSize; ++ ++ Bin->Format = ur::getBinaryImageFormat(Bin->BinaryStart, getSize()); ++ Format = static_cast(Bin->Format); ++} ++ ++CompressedRTDeviceBinaryImage::~CompressedRTDeviceBinaryImage() { ++ // De-allocate device binary struct. ++ delete Bin; ++ Bin = nullptr; ++} ++#endif // SYCL_RT_ZSTD_NOT_AVAIABLE ++ + } // namespace detail + } // namespace _V1 + } // namespace sycl +diff --git a/sycl/source/detail/device_binary_image.hpp b/sycl/source/detail/device_binary_image.hpp +index 49047a04ae77..203427b89ca4 100644 +--- a/sycl/source/detail/device_binary_image.hpp ++++ b/sycl/source/detail/device_binary_image.hpp +@@ -7,12 +7,12 @@ + //===----------------------------------------------------------------------===// + #pragma once + ++#include "ur_utils.hpp" + #include + #include + #include + #include + #include +-#include "ur_utils.hpp" + + #include + +@@ -158,7 +158,10 @@ public: + virtual void print() const; + virtual void dump(std::ostream &Out) const; + +- size_t getSize() const { ++ // getSize will be overridden in the case of compressed binary images. ++ // In that case, we return the size of uncompressed data, instead of ++ // BinaryEnd - BinaryStart. ++ virtual size_t getSize() const { + assert(Bin && "binary image data not set"); + return static_cast(Bin->BinaryEnd - Bin->BinaryStart); + } +@@ -276,6 +279,35 @@ protected: + std::unique_ptr Data; + }; + ++#ifndef SYCL_RT_ZSTD_NOT_AVAIABLE ++// Compressed device binary image. Decompression happens when the image is ++// actually used to build a program. ++// Also, frees the decompressed data in destructor. ++class CompressedRTDeviceBinaryImage : public RTDeviceBinaryImage { ++public: ++ CompressedRTDeviceBinaryImage(sycl_device_binary Bin); ++ ~CompressedRTDeviceBinaryImage() override; ++ ++ void Decompress(); ++ ++ // We return the size of decompressed data, not the size of compressed data. ++ size_t getSize() const override { ++ assert(Bin && "binary image data not set"); ++ return m_ImageSize; ++ } ++ ++ bool IsCompressed() const { return m_DecompressedData.get() == nullptr; } ++ void print() const override { ++ RTDeviceBinaryImage::print(); ++ std::cerr << " COMPRESSED\n"; ++ } ++ ++private: ++ std::unique_ptr m_DecompressedData; ++ size_t m_ImageSize; ++}; ++#endif // SYCL_RT_ZSTD_NOT_AVAIABLE ++ + } // namespace detail + } // namespace _V1 + } // namespace sycl +diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp +index 01e567fb03c3..e7357a45d117 100644 +--- a/sycl/source/detail/program_manager/program_manager.cpp ++++ b/sycl/source/detail/program_manager/program_manager.cpp +@@ -174,6 +174,8 @@ isDeviceBinaryTypeSupported(const context &C, + return "SPIR-V"; + case SYCL_DEVICE_BINARY_TYPE_LLVMIR_BITCODE: + return "LLVM IR"; ++ case SYCL_DEVICE_BINARY_TYPE_COMPRESSED_NONE: ++ return "compressed none"; + } + assert(false && "Unknown device image format"); + return "unknown"; +@@ -721,6 +723,14 @@ setSpecializationConstants(const std::shared_ptr &InputImpl, + } + } + ++static inline void CheckAndDecompressImage([[maybe_unused]] RTDeviceBinaryImage *Img) { ++#ifndef SYCL_RT_ZSTD_NOT_AVAIABLE ++ if (auto CompImg = dynamic_cast(Img)) ++ if (CompImg->IsCompressed()) ++ CompImg->Decompress(); ++#endif ++} ++ + // When caching is enabled, the returned UrProgram will already have + // its ref count incremented. + ur_program_handle_t ProgramManager::getBuiltURProgram( +@@ -773,6 +783,10 @@ ur_program_handle_t ProgramManager::getBuiltURProgram( + collectDeviceImageDepsForImportedSymbols(Img, Device); + DeviceImagesToLink.insert(ImageDeps.begin(), ImageDeps.end()); + ++ // Decompress all DeviceImagesToLink ++ for (RTDeviceBinaryImage *BinImg : DeviceImagesToLink) ++ CheckAndDecompressImage(BinImg); ++ + std::vector AllImages; + AllImages.reserve(ImageDeps.size() + 1); + AllImages.push_back(&Img); +@@ -1317,6 +1331,10 @@ ProgramManager::getDeviceImage(const std::string &KernelName, + Device); + } + } ++ ++ // Decompress the image if it is compressed. ++ CheckAndDecompressImage(Img); ++ + if (Img) { + CheckJITCompilationForImage(Img, JITCompilationIsRequired); + +@@ -1458,6 +1476,13 @@ getDeviceLibPrograms(const ContextImplPtr Context, + return Programs; + } + ++// Check if device image is compressed. ++static inline bool isDeviceImageCompressed(sycl_device_binary Bin) { ++ ++ auto currFormat = static_cast(Bin->Format); ++ return currFormat == SYCL_DEVICE_BINARY_TYPE_COMPRESSED_NONE; ++} ++ + ProgramManager::ProgramPtr ProgramManager::build( + ProgramPtr Program, const ContextImplPtr Context, + const std::string &CompileOptions, const std::string &LinkOptions, +@@ -1583,7 +1608,19 @@ void ProgramManager::addImages(sycl_device_binaries DeviceBinary) { + if (EntriesB == EntriesE) + continue; + +- auto Img = std::make_unique(RawImg); ++ std::unique_ptr Img; ++ if (isDeviceImageCompressed(RawImg)) ++#ifndef SYCL_RT_ZSTD_NOT_AVAIABLE ++ Img = std::make_unique(RawImg); ++#else ++ throw sycl::exception(sycl::make_error_code(sycl::errc::runtime), ++ "Recieved a compressed device image, but " ++ "SYCL RT was built without ZSTD support." ++ "Aborting. "); ++#endif ++ else ++ Img = std::make_unique(RawImg); ++ + static uint32_t SequenceID = 0; + + // Fill the kernel argument mask map +@@ -1620,6 +1657,10 @@ void ProgramManager::addImages(sycl_device_binaries DeviceBinary) { + [&](auto &CurrentImg) { + return CurrentImg.first->getFormat() == Img->getFormat(); + }); ++ ++ // Check if image is compressed, and decompress it before dumping. ++ CheckAndDecompressImage(Img.get()); ++ + dumpImage(*Img, NeedsSequenceID ? ++SequenceID : 0); + } + +@@ -2097,6 +2138,9 @@ ProgramManager::getSYCLDeviceImagesWithCompatibleState( + + auto &[KernelImagesState, KernelImages] = *StateImagesPair; + ++ // Check if device image is compressed and decompress it if needed ++ CheckAndDecompressImage(BinImage); ++ + if (KernelImages.empty()) { + KernelImagesState = ImgState; + KernelImages.push_back(BinImage); +diff --git a/sycl/test-e2e/Compression/Inputs/single_kernel.cpp b/sycl/test-e2e/Compression/Inputs/single_kernel.cpp +new file mode 100644 +index 000000000000..eac8a63438f8 +--- /dev/null ++++ b/sycl/test-e2e/Compression/Inputs/single_kernel.cpp +@@ -0,0 +1,17 @@ ++#include ++ ++int main() { ++ ++ sycl::queue q0; ++ int val = -1; ++ { ++ sycl::buffer buffer1(&val, sycl::range(1)); ++ ++ q0.submit([&](sycl::handler &cgh) { ++ auto acc = sycl::accessor(buffer1, cgh); ++ cgh.single_task([=] { acc[0] = acc[0] + 1; }); ++ }).wait(); ++ } ++ ++ return !(val == 0); ++} +diff --git a/sycl/test-e2e/Compression/compression.cpp b/sycl/test-e2e/Compression/compression.cpp +new file mode 100644 +index 000000000000..1d8da7abc9d4 +--- /dev/null ++++ b/sycl/test-e2e/Compression/compression.cpp +@@ -0,0 +1,7 @@ ++// End-to-End test for testing device image compression. ++// REQUIRES: zstd ++// RUN: %{build} -O0 -g %S/Inputs/single_kernel.cpp -o %t_not_compress.out ++// RUN: %{build} -O0 -g --offload-compress --offload-compression-level=3 %S/Inputs/single_kernel.cpp -o %t_compress.out ++// RUN: %{run} %t_not_compress.out ++// RUN: %{run} %t_compress.out ++// RUN: not diff %t_not_compress.out %t_compress.out +diff --git a/sycl/test-e2e/Compression/compression_aot.cpp b/sycl/test-e2e/Compression/compression_aot.cpp +new file mode 100644 +index 000000000000..5b44b6a41e9c +--- /dev/null ++++ b/sycl/test-e2e/Compression/compression_aot.cpp +@@ -0,0 +1,5 @@ ++// End-to-End test for testing device image compression in AOT. ++// REQUIRES: zstd, opencl-aot, cpu ++ ++// RUN: %clangxx -fsycl -fsycl-targets=spir64_x86_64 -O0 --offload-compress --offload-compression-level=3 %S/Inputs/single_kernel.cpp -o %t_compress.out ++// RUN: %{run} %t_compress.out +diff --git a/sycl/test-e2e/Compression/compression_multiple_tu.cpp b/sycl/test-e2e/Compression/compression_multiple_tu.cpp +new file mode 100644 +index 000000000000..72eb3f090479 +--- /dev/null ++++ b/sycl/test-e2e/Compression/compression_multiple_tu.cpp +@@ -0,0 +1,56 @@ ++// End-to-End test for testing device image compression when we have two ++// translation units, one compressed and one not compressed. ++// REQUIRES: zstd, linux ++ ++// RUN: %{build} --offload-compress -DENABLE_KERNEL1 -shared -fPIC -o %T/kernel1.so ++// RUN: %{build} -DENABLE_KERNEL2 -shared -fPIC -o %T/kernel2.so ++ ++// RUN: %{build} %T/kernel1.so %T/kernel2.so -o %t_compress.out ++// RUN: %{run} %t_compress.out ++#if defined(ENABLE_KERNEL1) || defined(ENABLE_KERNEL2) ++#include ++#include ++using namespace sycl; ++#endif ++ ++#ifdef ENABLE_KERNEL1 ++void kernel1() { ++ int data = -1; ++ { ++ buffer b(&data, range(1)); ++ queue q; ++ q.submit([&](sycl::handler &cgh) { ++ auto acc = accessor(b, cgh); ++ cgh.single_task([=] { acc[0] = abs(acc[0]); }); ++ }); ++ } ++ assert(data == 1); ++} ++#endif ++ ++#ifdef ENABLE_KERNEL2 ++void kernel2() { ++ int data = -2; ++ { ++ buffer b(&data, range(1)); ++ queue q; ++ q.submit([&](sycl::handler &cgh) { ++ auto acc = accessor(b, cgh); ++ cgh.single_task([=] { acc[0] = abs(acc[0]); }); ++ }); ++ } ++ assert(data == 2); ++} ++#endif ++ ++#if not defined(ENABLE_KERNEL1) && not defined(ENABLE_KERNEL2) ++void kernel1(); ++void kernel2(); ++ ++int main() { ++ kernel1(); ++ kernel2(); ++ ++ return 0; ++} ++#endif +diff --git a/sycl/test-e2e/Compression/compression_separate_compile.cpp b/sycl/test-e2e/Compression/compression_separate_compile.cpp +new file mode 100644 +index 000000000000..9e47bbebdc87 +--- /dev/null ++++ b/sycl/test-e2e/Compression/compression_separate_compile.cpp +@@ -0,0 +1,70 @@ ++// End-to-End test for testing device image compression when we ++// seperatly compile and link device images. ++ ++// REQUIRES: zstd, opencl-aot, cpu, linux ++ ++////////////////////// Compile device images ++// RUN: %clangxx -fsycl -fsycl-targets=spir64_x86_64 -fsycl-host-compiler=clang++ -fsycl-host-compiler-options='-std=c++17 -Wno-attributes -Wno-deprecated-declarations -fPIC -DENABLE_KERNEL1' -DENABLE_KERNEL1 -c %s -o %t_kernel1_aot.o ++// RUN: %clangxx -fsycl -fsycl-targets=spir64_x86_64 -fsycl-host-compiler=clang++ -fsycl-host-compiler-options='-std=c++17 -Wno-attributes -Wno-deprecated-declarations -fPIC -DENABLE_KERNEL2' -DENABLE_KERNEL2 -c %s -o %t_kernel2_aot.o ++ ++////////////////////// Link device images ++// RUN: %clangxx --offload-compress -fsycl -fsycl-link -fsycl-targets=spir64_x86_64 -fPIC %t_kernel1_aot.o %t_kernel2_aot.o -o %t_compressed_image.o -v ++ ++////////////////////// Compile the host program ++// RUN: %clangxx -fsycl -std=c++17 -Wno-attributes -Wno-deprecated-declarations -fPIC -c %s -o %t_main.o ++ ++////////////////////// Link the host program and compressed device images ++// RUN: %clangxx -fsycl %t_main.o %t_kernel1_aot.o %t_kernel2_aot.o %t_compressed_image.o -o %t_compress.out ++ ++// RUN: %{run} %t_compress.out ++ ++#include ++ ++using namespace sycl; ++ ++// Kernel 1 ++#ifdef ENABLE_KERNEL1 ++class test_kernel1; ++void run_kernel1(int *a, queue q) { ++ q.single_task([=]() { *a *= 3; }).wait(); ++} ++#endif ++ ++// Kernel 2 ++#ifdef ENABLE_KERNEL2 ++class test_kernel2; ++void run_kernel2(int *a, queue q) { ++ q.single_task([=]() { *a += 42; }).wait(); ++} ++#endif ++ ++// Main application. ++#if not defined(ENABLE_KERNEL1) && not defined(ENABLE_KERNEL2) ++#include ++#include ++ ++#include ++ ++class kernel_init; ++void run_kernel1(int *a, queue q); ++void run_kernel2(int *a, queue q); ++int main() { ++ int retCode = 0; ++ queue q; ++ ++ if (!q.get_device().get_info()) ++ return 0; ++ ++ int *p = malloc_shared(1, q); ++ *p = 42; ++ ++ run_kernel1(p, q); ++ run_kernel2(p, q); ++ q.wait(); ++ ++ retCode = *p != (42 * 3 + 42); ++ ++ free(p, q); ++ return retCode; ++} ++#endif +diff --git a/sycl/test-e2e/Compression/no_zstd_warning.cpp b/sycl/test-e2e/Compression/no_zstd_warning.cpp +new file mode 100644 +index 000000000000..8a4460f9b864 +--- /dev/null ++++ b/sycl/test-e2e/Compression/no_zstd_warning.cpp +@@ -0,0 +1,4 @@ ++// using --offload-compress without zstd should throw an error. ++// REQUIRES: !zstd ++// RUN: not %{build} -O0 -g --offload-compress %S/Inputs/single_kernel.cpp -o %t_compress.out 2>&1 | FileCheck %s ++// CHECK: '--offload-compress' option is specified but zstd is not available. The device image will not be compressed. +diff --git a/sycl/test-e2e/lit.cfg.py b/sycl/test-e2e/lit.cfg.py +index c3a68f45bfef..961bc79307ac 100644 +--- a/sycl/test-e2e/lit.cfg.py ++++ b/sycl/test-e2e/lit.cfg.py +@@ -295,6 +295,18 @@ sp = subprocess.getstatusoutput( + if sp[0] == 0: + config.available_features.add("preview-breaking-changes-supported") + ++# Check if clang is built with ZSTD and compression support. ++fPIC_opt = "-fPIC" if platform.system() != "Windows" else "" ++ps = subprocess.Popen( ++ [config.dpcpp_compiler, "-fsycl", "--offload-compress", "-shared", fPIC_opt, "-x", "c++", "-", "-o", "-"], ++ stdin=subprocess.PIPE, ++ stdout=subprocess.DEVNULL, ++ stderr=subprocess.PIPE, ++) ++op = ps.communicate(input=b"") ++if ps.wait() == 0: ++ config.available_features.add("zstd") ++ + # Check for CUDA SDK + check_cuda_file = "cuda_include.cpp" + with open_check_file(check_cuda_file) as fp: +diff --git a/sycl/unittests/CMakeLists.txt b/sycl/unittests/CMakeLists.txt +index c0e04bfaf119..9ae7f4d79fb6 100644 +--- a/sycl/unittests/CMakeLists.txt ++++ b/sycl/unittests/CMakeLists.txt +@@ -52,6 +52,12 @@ add_subdirectory(accessor) + add_subdirectory(handler) + add_subdirectory(builtins) + add_subdirectory(buffer/l0_specific) ++ ++# Enable compression unit-tests only if zstd is present. ++if (LLVM_ENABLE_ZSTD) ++ add_subdirectory(compression) ++endif() ++ + # TODO Enable xpti tests for Windows + if (NOT WIN32) + add_subdirectory(xpti_trace) +diff --git a/sycl/unittests/compression/CMakeLists.txt b/sycl/unittests/compression/CMakeLists.txt +new file mode 100644 +index 000000000000..742e2d228072 +--- /dev/null ++++ b/sycl/unittests/compression/CMakeLists.txt +@@ -0,0 +1,3 @@ ++add_sycl_unittest(CompressionTests OBJECT ++ CompressionTests.cpp ++) +diff --git a/sycl/unittests/compression/CompressionTests.cpp b/sycl/unittests/compression/CompressionTests.cpp +new file mode 100644 +index 000000000000..e9b50fa1cc2e +--- /dev/null ++++ b/sycl/unittests/compression/CompressionTests.cpp +@@ -0,0 +1,80 @@ ++//==------- CompressionTests.cpp --- compression unit test ----------------==// ++// ++// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. ++// See https://llvm.org/LICENSE.txt for license information. ++// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception ++// ++//===----------------------------------------------------------------------===// ++ ++#include ++ ++#include ++ ++#include ++ ++using namespace sycl::detail; ++ ++TEST(CompressionTest, SimpleCompression) { ++ ++ // Data to compress. ++ std::string data = "Hello World! I'm about to get compressed :P"; ++ size_t compressedDataSize = 0; ++ ++ auto compressedData = ZSTDCompressor::CompressBlob( ++ data.c_str(), data.size(), compressedDataSize, /*Compression level*/ 3); ++ ++ // Check if compression was successful. ++ EXPECT_NE(compressedData, nullptr); ++ EXPECT_GT(compressedDataSize, (size_t)0); ++ ++ // Decompress the data. ++ size_t decompressedSize = 0; ++ auto decompressedData = ZSTDCompressor::DecompressBlob( ++ compressedData.get(), compressedDataSize, decompressedSize); ++ ++ ASSERT_NE(decompressedData, nullptr); ++ ASSERT_GT(decompressedSize, (size_t)0); ++ ++ // Check if decompressed data is same as original data. ++ std::string decompressedStr((char *)decompressedData.get(), decompressedSize); ++ ASSERT_EQ(data, decompressedStr); ++} ++ ++// Test getting error code and error string. ++// Intentionally give incorrect input to decompress ++// to trigger an error. ++TEST(CompressionTest, NegativeErrorTest) { ++ std::string input = "Hello, World!"; ++ size_t decompressedSize = 0; ++ bool threwException = false; ++ try { ++ auto compressedData = ZSTDCompressor::DecompressBlob( ++ input.c_str(), input.size(), decompressedSize); ++ } catch (...) { ++ threwException = true; ++ } ++ ++ ASSERT_TRUE(threwException); ++} ++ ++// Test passing empty input to (de)compress. ++// There should be no error and the output should be empty. ++TEST(CompressionTest, EmptyInputTest) { ++ std::string input = ""; ++ size_t compressedSize = 0; ++ auto compressedData = ZSTDCompressor::CompressBlob( ++ input.c_str(), input.size(), compressedSize, 1); ++ ++ ASSERT_NE(compressedData, nullptr); ++ ASSERT_GT(compressedSize, (size_t)0); ++ ++ size_t decompressedSize = 0; ++ auto decompressedData = ZSTDCompressor::DecompressBlob( ++ compressedData.get(), compressedSize, decompressedSize); ++ ++ ASSERT_NE(decompressedData, nullptr); ++ ASSERT_EQ(decompressedSize, (size_t)0); ++ ++ std::string decompressedStr((char *)decompressedData.get(), decompressedSize); ++ ASSERT_EQ(input, decompressedStr); ++} diff --git a/build_files/build_environment/patches/embree.diff b/build_files/build_environment/patches/embree.diff index d36017c629bc..ba5db5370e60 100644 --- a/build_files/build_environment/patches/embree.diff +++ b/build_files/build_environment/patches/embree.diff @@ -59,3 +59,22 @@ index 7d1386853..6bfc8a9c6 100644 DISABLE_STACK_PROTECTOR_FOR_INTERSECTORS(${EMBREE_LIBRARY_FILES_AVX2}) ADD_LIBRARY(embree_avx2 STATIC ${EMBREE_LIBRARY_FILES_AVX2}) TARGET_LINK_LIBRARIES(embree_avx2 PRIVATE tasking) +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 548038507..8c08e1fa1 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -159,7 +159,13 @@ IF (EMBREE_SYCL_GEOMETRY_CALLBACK) + ENDIF() + + IF (EMBREE_SYCL_SUPPORT) +- ADD_DEFINITIONS("-DEMBREE_SYCL_SUPPORT") # FIXME: only use define from rtcore_config.h ++# Too many compilation issues with MSVC Debug and various versions of DPC++. ++# It's preferable to disable SYCL support when using MSVC Debug. ++ IF(WIN32 AND CMAKE_BUILD_TYPE STREQUAL "Debug") ++ SET(EMBREE_SYCL_SUPPORT FALSE) ++ ELSE() ++ ADD_DEFINITIONS("-DEMBREE_SYCL_SUPPORT") # FIXME: only use define from rtcore_config.h ++ ENDIF() + ENDIF() + + CMAKE_DEPENDENT_OPTION(EMBREE_SYCL_RT_SIMULATION "Using hardware simulation" OFF "EMBREE_SYCL_SUPPORT" OFF) diff --git a/build_files/build_environment/patches/embree_1ace3ba33d.diff b/build_files/build_environment/patches/embree_1ace3ba33d.diff new file mode 100644 index 000000000000..132329e8b990 --- /dev/null +++ b/build_files/build_environment/patches/embree_1ace3ba33d.diff @@ -0,0 +1,23 @@ +diff --git a/common/sys/sycl.h b/common/sys/sycl.h +index f246f0d08..6bef829fc 100644 +--- a/common/sys/sycl.h ++++ b/common/sys/sycl.h +@@ -282,18 +282,6 @@ namespace embree + return sycl::inclusive_scan_over_group(this_sub_group(),x,binary_op,init); + } + +- template __forceinline T sub_group_shuffle(T x, sycl::id<1> local_id) { +- return this_sub_group().shuffle(x, local_id); +- } +- +- template __forceinline T sub_group_shuffle_down(T x, uint32_t delta) { +- return this_sub_group().shuffle_down(x, delta); +- } +- +- template __forceinline T sub_group_shuffle_up(T x, uint32_t delta) { +- return this_sub_group().shuffle_up(x, delta); +- } +- + template __forceinline T sub_group_load(const void* src) { + return this_sub_group().load(sycl::multi_ptr((T*)src)); + } diff --git a/build_files/build_environment/patches/level-zero.diff b/build_files/build_environment/patches/level-zero.diff index d28b3310d707..811f803c01fa 100644 --- a/build_files/build_environment/patches/level-zero.diff +++ b/build_files/build_environment/patches/level-zero.diff @@ -1,29 +1,28 @@ diff --git a/CMakeLists.txt b/CMakeLists.txt -index 7e27816..bd34055 100644 +index ca0746f..75d2890 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -81,13 +81,6 @@ if(MSVC) +@@ -92,13 +92,6 @@ if(MSVC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /DYNAMICBASE") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /DYNAMICBASE") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /guard:cf") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_CXX_LINKER_WRAPPER_FLAG}/DYNAMICBASE") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_CXX_LINKER_WRAPPER_FLAG}/guard:cf") - # enable Spectre Mitigation, not supported by clang-cl -- if(NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang) +- if((NOT CMAKE_CXX_COMPILER_ID STREQUAL Clang) AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL IntelLLVM)) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Qspectre") - endif() -- if(NOT CMAKE_C_COMPILER_ID STREQUAL Clang) +- if((NOT CMAKE_C_COMPILER_ID STREQUAL Clang) AND NOT (CMAKE_C_COMPILER_ID STREQUAL IntelLLVM)) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Qspectre") - endif() endif() #CXX compiler support -@@ -128,7 +121,9 @@ if(MSVC) - set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /DEBUG /OPT:REF /OPT:ICF") - - # enable CET shadow stack -- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT") -+ if(NOT CMAKE_SYSTEM_PROCESSOR MATCHES ARM64) -+ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT") -+ endif() +@@ -142,9 +135,6 @@ if(MSVC) + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi") + set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} ${CMAKE_CXX_LINKER_WRAPPER_FLAG}/DEBUG ${CMAKE_CXX_LINKER_WRAPPER_FLAG}/OPT:REF ${CMAKE_CXX_LINKER_WRAPPER_FLAG}/OPT:ICF") +- # enable CET shadow stack +- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${CMAKE_CXX_LINKER_WRAPPER_FLAG}/CETCOMPAT") +- #Use of sccache with MSVC requires workaround of replacing /Zi with /Z7 #https://github.com/mozilla/sccache + if(USE_Z7) #sccache diff --git a/build_files/build_environment/patches/unifiedmemoryframework.diff b/build_files/build_environment/patches/unifiedmemoryframework.diff new file mode 100644 index 000000000000..efc4e447a074 --- /dev/null +++ b/build_files/build_environment/patches/unifiedmemoryframework.diff @@ -0,0 +1,13 @@ +# this otherwise leads to error C1258 due to too long path for XML log files +diff --git a/cmake/helpers.cmake b/cmake/helpers.cmake +index 1d3e175..48770c4 100644 +--- a/cmake/helpers.cmake ++++ b/cmake/helpers.cmake +@@ -229,7 +229,6 @@ function(add_umf_target_compile_options name) + ${name} + PRIVATE /MD$<$:d> + $<$:/sdl> +- /analyze + /DYNAMICBASE + /W4 + /Gy diff --git a/build_files/build_environment/patches/unifiedruntime.diff b/build_files/build_environment/patches/unifiedruntime.diff new file mode 100644 index 000000000000..ab13aa68ca96 --- /dev/null +++ b/build_files/build_environment/patches/unifiedruntime.diff @@ -0,0 +1,13 @@ +# this is needed in order to be able to push textures to the host memory +diff --git a/source/adapters/level_zero/image.cpp b/source/adapters/level_zero/image.cpp +index f68b2d93..90182568 100644 +--- a/source/adapters/level_zero/image.cpp ++++ b/source/adapters/level_zero/image.cpp +@@ -457,6 +457,7 @@ ur_result_t bindlessImagesCreateImpl(ur_context_handle_t hContext, + ZE2UR_CALL(zeContextMakeImageResident, + (hContext->ZeContext, hDevice->ZeDevice, ZeImage)); + } else if (MemAllocProperties.type == ZE_MEMORY_TYPE_DEVICE || ++ MemAllocProperties.type == ZE_MEMORY_TYPE_HOST || + MemAllocProperties.type == ZE_MEMORY_TYPE_SHARED) { + ZeStruct PitchedDesc; + PitchedDesc.ptr = reinterpret_cast(hImageMem); diff --git a/build_files/cmake/packaging.cmake b/build_files/cmake/packaging.cmake index 03dffd98085f..fa46ebaa6739 100644 --- a/build_files/cmake/packaging.cmake +++ b/build_files/cmake/packaging.cmake @@ -91,9 +91,9 @@ if(WIN32) set(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.ico) set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") - + # Eventhough we no longer display this, we still need to set it otherwise it'll throw an error - # during the msi build. + # during the msi build. set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/release/license/spdx/GPL-3.0-or-later.txt) set(CPACK_WIX_PRODUCT_ICON ${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.ico) diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index fd4234580b40..1c7a13f69b45 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -424,9 +424,9 @@ if(DEFINED LIBDIR) ${SYCL_ROOT_DIR}/lib/libsycl.so.* ${SYCL_ROOT_DIR}/lib/libpi_*.so ${SYCL_ROOT_DIR}/lib/libur_*.so + ${SYCL_ROOT_DIR}/lib/libur_*.so.* ) list(FILTER _sycl_runtime_libraries EXCLUDE REGEX ".*\.py") - list(REMOVE_ITEM _sycl_runtime_libraries "${SYCL_ROOT_DIR}/lib/libpi_opencl.so") list(APPEND PLATFORM_BUNDLED_LIBRARIES ${_sycl_runtime_libraries}) unset(_sycl_runtime_libraries) endif() diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index fb7d04f234d7..a012f5853d71 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -1040,11 +1040,19 @@ if(WITH_CYCLES AND WITH_CYCLES_EMBREE) ) if(EMBREE_SYCL_SUPPORT) - set(EMBREE_LIBRARIES - ${EMBREE_LIBRARIES} - optimized ${LIBDIR}/embree/lib/embree4_sycl.lib - debug ${LIBDIR}/embree/lib/embree4_sycl_d.lib - ) + # MSVC debug version of embree may have been compiled without SYCL support + if(EXISTS ${LIBDIR}/embree/lib/embree4_sycl_d.lib) + set(EMBREE_LIBRARIES + ${EMBREE_LIBRARIES} + optimized ${LIBDIR}/embree/lib/embree4_sycl.lib + debug ${LIBDIR}/embree/lib/embree4_sycl_d.lib + ) + else() + set(EMBREE_LIBRARIES + ${EMBREE_LIBRARIES} + optimized ${LIBDIR}/embree/lib/embree4_sycl.lib + ) + endif() endif() if(EMBREE_STATIC_LIB) @@ -1069,11 +1077,19 @@ if(WITH_CYCLES AND WITH_CYCLES_EMBREE) ) if(EMBREE_SYCL_SUPPORT) - set(EMBREE_LIBRARIES - ${EMBREE_LIBRARIES} - optimized ${LIBDIR}/embree/lib/embree_rthwif.lib - debug ${LIBDIR}/embree/lib/embree_rthwif_d.lib - ) + # MSVC debug version of embree may have been compiled without SYCL support + if(EXISTS ${LIBDIR}/embree/lib/embree_rthwif_d.lib) + set(EMBREE_LIBRARIES + ${EMBREE_LIBRARIES} + optimized ${LIBDIR}/embree/lib/embree_rthwif.lib + debug ${LIBDIR}/embree/lib/embree_rthwif_d.lib + ) + else() + set(EMBREE_LIBRARIES + ${EMBREE_LIBRARIES} + optimized ${LIBDIR}/embree/lib/embree_rthwif.lib + ) + endif() endif() endif() endif() diff --git a/build_files/utils/make_source_archive.py b/build_files/utils/make_source_archive.py index 1654b605d913..90643da5e95e 100755 --- a/build_files/utils/make_source_archive.py +++ b/build_files/utils/make_source_archive.py @@ -89,11 +89,11 @@ def manifest_path(tarball: Path) -> Path: """Return the manifest path for the given tarball path. >>> from pathlib import Path - >>> tarball = Path("/home/sybren/workspace/blender-git/blender-test.tar.gz") + >>> tarball = Path("/home/user/workspace/blender-git/blender-test.tar.gz") >>> manifest_path(tarball).as_posix() - '/home/sybren/workspace/blender-git/blender-test-manifest.txt' + '/home/user/workspace/blender-git/blender-test-manifest.txt' """ - # ".tar.gz" is seen as two suffixes. + # Note that `.tar.gz` is seen as two suffixes. without_suffix = tarball.with_suffix("").with_suffix("") name = without_suffix.name return without_suffix.with_name(f"{name}-manifest.txt") @@ -105,8 +105,8 @@ def packages_path(current_directory: Path, cli_args: Any) -> Union[Path, None]: abspath = cli_args.include_packages.absolute() - # os.path.relpath() can return paths like "../../packages", where - # Path.relative_to() will not go up directories (so its return value never + # `os.path.relpath()` can return paths like "../../packages", where + # `Path.relative_to()` will not go up directories (so its return value never # has "../" in there). relpath = os.path.relpath(abspath, current_directory) diff --git a/build_files/utils/make_update.py b/build_files/utils/make_update.py index 2d99da040aeb..04641217707c 100755 --- a/build_files/utils/make_update.py +++ b/build_files/utils/make_update.py @@ -266,7 +266,7 @@ def use_upstream_workflow(args: argparse.Namespace) -> bool: def work_tree_update_upstream_workflow(args: argparse.Namespace, use_fetch: bool = True) -> str: """ - Update the Blender repository using the Github style of fork organization + Update the Blender repository using the GitHub style of fork organization Returns true if the current local branch has been updated to the upstream state. Otherwise false is returned. diff --git a/doc/python_api/examples/blf.py b/doc/python_api/examples/blf.py index 50b67f5efaaa..ec716d16e08e 100644 --- a/doc/python_api/examples/blf.py +++ b/doc/python_api/examples/blf.py @@ -18,7 +18,7 @@ def init(): """init function - runs once""" import os - # Create a new font object, use external ttf file. + # Create a new font object, use external TTF file. font_path = bpy.path.abspath('//Zeyada.ttf') # Store the font indice - to use later. if os.path.exists(font_path): diff --git a/doc/python_api/examples/bpy.types.Depsgraph.5.py b/doc/python_api/examples/bpy.types.Depsgraph.5.py index 4811f77bbdf9..523145968fe0 100644 --- a/doc/python_api/examples/bpy.types.Depsgraph.5.py +++ b/doc/python_api/examples/bpy.types.Depsgraph.5.py @@ -11,7 +11,7 @@ - For meshes this is similar to duplicating the source mesh. - For curves this disables own modifiers, and modifiers of objects used as bevel and taper. -- For metaballs this produces an empty mesh since polygonization is done as a modifier evaluation. +- For meta-balls this produces an empty mesh since polygonization is done as a modifier evaluation. When is used on evaluated object all modifiers are taken into account. diff --git a/doc/python_api/examples/mathutils.Vector.py b/doc/python_api/examples/mathutils.Vector.py index 4d8bf8c065c5..8b94997291b6 100644 --- a/doc/python_api/examples/mathutils.Vector.py +++ b/doc/python_api/examples/mathutils.Vector.py @@ -12,7 +12,7 @@ vec3d = mathutils.Vector((1.0, 0.0, 0.0)) vec4d = vec_a.to_4d() -# other mathutuls types +# Other `mathutils` types. quat = mathutils.Quaternion() matrix = mathutils.Matrix() diff --git a/doc/python_api/templates/components/footer_contribute.html b/doc/python_api/templates/components/footer_contribute.html index 3a34cf9ed0ae..3f6ea8cb78fe 100644 --- a/doc/python_api/templates/components/footer_contribute.html +++ b/doc/python_api/templates/components/footer_contribute.html @@ -15,4 +15,4 @@ -{%- endif %} \ No newline at end of file +{%- endif %} diff --git a/doc/python_api/templates/page.html b/doc/python_api/templates/page.html index f220bfeee4be..aeddec2f1c70 100644 --- a/doc/python_api/templates/page.html +++ b/doc/python_api/templates/page.html @@ -3,4 +3,4 @@ {%- block footer -%} {{ super() }} {%- include "components/footer_contribute.html" -%} -{%- endblock footer -%} \ No newline at end of file +{%- endblock footer -%} diff --git a/intern/cycles/device/oneapi/device_impl.cpp b/intern/cycles/device/oneapi/device_impl.cpp index 00889b9abfed..8cbfd3d16629 100644 --- a/intern/cycles/device/oneapi/device_impl.cpp +++ b/intern/cycles/device/oneapi/device_impl.cpp @@ -658,7 +658,12 @@ void OneapiDevice::tex_alloc(device_texture &mem) void OneapiDevice::tex_copy_to(device_texture &mem) { - generic_copy_to(mem); + if (!mem.device_pointer) { + tex_alloc(mem); + } + else { + generic_copy_to(mem); + } } void OneapiDevice::tex_free(device_texture &mem) diff --git a/intern/cycles/kernel/geom/curve.h b/intern/cycles/kernel/geom/curve.h index eb1c39f4248b..5434aa26454b 100644 --- a/intern/cycles/kernel/geom/curve.h +++ b/intern/cycles/kernel/geom/curve.h @@ -20,6 +20,29 @@ CCL_NAMESPACE_BEGIN #ifdef __HAIR__ +/* Partial derivative of f w.r.t. x, namely āˆ‚f/āˆ‚x + * f is a function of u (along the curve) + * f(u) = f0 * (1 - u) + f1 * u, + * The partial derivative in x is + * āˆ‚f/āˆ‚x = āˆ‚f/āˆ‚u * āˆ‚u/āˆ‚x + * = (f1 - f0) * du.dx. */ +template +ccl_device_inline T curve_attribute_dfdx(const ccl_private differential &du, + const ccl_private T &f0, + const ccl_private T &f1) +{ + return du.dx * (f1 - f0); +} + +/* Partial derivative of f w.r.t. in x, namely āˆ‚f/āˆ‚y, similarly computed as āˆ‚f/āˆ‚x above. */ +template +ccl_device_inline T curve_attribute_dfdy(const ccl_private differential &du, + const ccl_private T &f0, + const ccl_private T &f1) +{ + return du.dy * (f1 - f0); +} + /* Reading attributes on various curve elements */ ccl_device float curve_attribute_float(KernelGlobals kg, @@ -38,10 +61,10 @@ ccl_device float curve_attribute_float(KernelGlobals kg, # ifdef __RAY_DIFFERENTIALS__ if (dx) { - *dx = sd->du.dx * (f1 - f0); + *dx = curve_attribute_dfdx(sd->du, f0, f1); } if (dy) { - *dy = 0.0f; + *dy = curve_attribute_dfdy(sd->du, f0, f1); } # endif @@ -79,10 +102,10 @@ ccl_device float2 curve_attribute_float2(KernelGlobals kg, # ifdef __RAY_DIFFERENTIALS__ if (dx) { - *dx = sd->du.dx * (f1 - f0); + *dx = curve_attribute_dfdx(sd->du, f0, f1); } if (dy) { - *dy = make_float2(0.0f, 0.0f); + *dy = curve_attribute_dfdy(sd->du, f0, f1); } # endif @@ -125,10 +148,10 @@ ccl_device float3 curve_attribute_float3(KernelGlobals kg, # ifdef __RAY_DIFFERENTIALS__ if (dx) { - *dx = sd->du.dx * (f1 - f0); + *dx = curve_attribute_dfdx(sd->du, f0, f1); } if (dy) { - *dy = make_float3(0.0f, 0.0f, 0.0f); + *dy = curve_attribute_dfdy(sd->du, f0, f1); } # endif @@ -167,10 +190,10 @@ ccl_device float4 curve_attribute_float4(KernelGlobals kg, # ifdef __RAY_DIFFERENTIALS__ if (dx) { - *dx = sd->du.dx * (f1 - f0); + *dx = curve_attribute_dfdx(sd->du, f0, f1); } if (dy) { - *dy = zero_float4(); + *dy = curve_attribute_dfdy(sd->du, f0, f1); } # endif diff --git a/intern/cycles/kernel/osl/shaders/node_wireframe.osl b/intern/cycles/kernel/osl/shaders/node_wireframe.osl index 21faf1281d34..f5738046028f 100644 --- a/intern/cycles/kernel/osl/shaders/node_wireframe.osl +++ b/intern/cycles/kernel/osl/shaders/node_wireframe.osl @@ -10,19 +10,12 @@ shader node_wireframe(string bump_offset = "center", float Size = 0.01, output float Fac = 0.0) { - Fac = wireframe("triangles", Size, use_pixel_size); - /* TODO(sergey): Since we can't use autodiff here we do algebraic - * calculation of derivatives by definition. We could probably - * optimize this a bit by doing some extra calculation in wireframe(). - */ if (bump_offset == "dx") { - point dx = Dx(P); - P -= dx; - Fac += (Fac - wireframe("triangles", Size, use_pixel_size)) / length(dx); + P += Dx(P); } else if (bump_offset == "dy") { - point dy = Dy(P); - P -= dy; - Fac += (Fac - wireframe("triangles", Size, use_pixel_size)) / length(dy); + P += Dy(P); } + + Fac = wireframe("triangles", Size, use_pixel_size); } diff --git a/intern/cycles/kernel/svm/wireframe.h b/intern/cycles/kernel/svm/wireframe.h index 1710d4f34349..173a71cfce73 100644 --- a/intern/cycles/kernel/svm/wireframe.h +++ b/intern/cycles/kernel/svm/wireframe.h @@ -95,18 +95,17 @@ ccl_device_noinline void svm_node_wireframe(KernelGlobals kg, /* Calculate wireframe */ const differential3 dP = differential_from_compact(sd->Ng, sd->dP); - float f = wireframe(kg, sd, dP, size, pixel_size, &sd->P); - /* TODO(sergey): Think of faster way to calculate derivatives. */ + float3 P = sd->P; if (bump_offset == NODE_BUMP_OFFSET_DX) { - float3 Px = sd->P - dP.dx; - f += (f - wireframe(kg, sd, dP, size, pixel_size, &Px)) / len(dP.dx); + P += dP.dx; } else if (bump_offset == NODE_BUMP_OFFSET_DY) { - float3 Py = sd->P - dP.dy; - f += (f - wireframe(kg, sd, dP, size, pixel_size, &Py)) / len(dP.dy); + P += dP.dy; } + const float f = wireframe(kg, sd, dP, size, pixel_size, &P); + if (stack_valid(out_fac)) { stack_store_float(stack, out_fac, f); } diff --git a/intern/ghost/intern/GHOST_SystemWayland.cc b/intern/ghost/intern/GHOST_SystemWayland.cc index 7c18af5f6edb..1ef2b9c749a8 100644 --- a/intern/ghost/intern/GHOST_SystemWayland.cc +++ b/intern/ghost/intern/GHOST_SystemWayland.cc @@ -7411,11 +7411,21 @@ GHOST_SystemWayland::GHOST_SystemWayland(bool background) #ifdef WITH_GHOST_WAYLAND_LIBDECOR bool libdecor_required = false; - if (const char *xdg_current_desktop = getenv("XDG_CURRENT_DESKTOP")) { - /* See the free-desktop specifications for details on `XDG_CURRENT_DESKTOP`. - * https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html */ - if (string_elem_split_by_delim(xdg_current_desktop, ':', "GNOME")) { - libdecor_required = true; + { + const char *xdg_current_desktop = [] { + /* Account for VSCode overriding this value (tsk!), see: #133921. */ + const char *key = "ORIGINAL_XDG_CURRENT_DESKTOP"; + const char *value = getenv(key); + return value ? value : getenv(key + 9); + }(); + + if (xdg_current_desktop) { + /* See the free-desktop specifications for details on `XDG_CURRENT_DESKTOP`. + * https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html + */ + if (string_elem_split_by_delim(xdg_current_desktop, ':', "GNOME")) { + libdecor_required = true; + } } } diff --git a/locale/po/ab.po b/locale/po/ab.po index 121b926e5e0d..226558d73f47 100644 --- a/locale/po/ab.po +++ b/locale/po/ab.po @@ -1,7 +1,7 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" "PO-Revision-Date: 2024-04-29 13:23+0000\n" "Last-Translator: Anonymous \n" diff --git a/locale/po/ar.po b/locale/po/ar.po index 55040f1cef75..542e9946c4b3 100644 --- a/locale/po/ar.po +++ b/locale/po/ar.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-29 13:28+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Arabic \n" @@ -11820,10 +11820,6 @@ msgid "Display the object's name" msgstr "ļ»¦ļŗ‹ļŗŽļ»œļ»Ÿļŗ ļ»¢ļŗ³ļŗ ļŗ½ļŗ®ļ»‹ļŗ‡" -msgid "Shape Key Lock" -msgstr "ļ»žļ»œļŗøļ»Ÿļŗ ļŗ”ļŗŽļŗ˜ļ»”ļ»£ ļ»žļ»”ļ»—" - - msgid "Display the object's texture space" msgstr "ļ»¦ļŗ‹ļŗŽļ»œļ»Ÿļŗ ļŗžļ»“ļŗ“ļ»§ Ų”ļŗŽļ»€ļ»“ ļŗ½ļŗ®ļ»‹ļŗ‡" @@ -15904,6 +15900,10 @@ msgid "Material slot name" msgstr "ļŗ”ļ»£ļŗŽļŗØļ»Ÿļŗ ļŗ”ļŗ¤ļŗ˜ļ»“ ļ»¢ļŗ³ļŗ‡" +msgid "Metaball" +msgstr "ļŗ”ļ» ļ»‹ļŗŽļ»”ļŗ˜ļ»£ ļŗ“ļŗ®ļ»›" + + msgid "Names" msgstr "Ų”ļŗŽļ»¤ļŗ³ļŗƒ" @@ -15956,10 +15956,6 @@ msgid "Select Linked" msgstr "ļŗ”ļ»„ļŗ’ļŗ—ļŗ®ļ»¤ļ»Ÿļŗ ļŗ­ļŗŽļŗ˜ļŗ§ļŗ‡" -msgid "Metaball" -msgstr "ļŗ”ļ» ļ»‹ļŗŽļ»”ļŗ˜ļ»£ ļŗ“ļŗ®ļ»›" - - msgid "Light" msgstr "Ų”ļ»®ļŗæ" @@ -18962,10 +18958,6 @@ msgid "Channel Key" msgstr "ļŗ“ļŗŽļ»Øļ»˜ļ»Ÿļŗ ļŗ”ļŗŽļŗ˜ļ»”ļ»£" -msgid "RGB color space" -msgstr "RGB ļ»„ļ»®ļ»Ÿ ļ»ļŗŽļŗ ļ»£" - - msgid "High" msgstr "ļ»²ļ»ŸļŗŽļ»‹" @@ -19350,6 +19342,10 @@ msgid "Distance Key" msgstr "ļŗŖļ»Œļŗ‘" +msgid "RGB color space" +msgstr "RGB ļ»„ļ»®ļ»Ÿ ļ»ļŗŽļŗ ļ»£" + + msgid "Double Edge Mask" msgstr "ļŗ”ļ»“ļŗŽļŗ¤ļ»Ÿļŗ ļ»²ļŗ‹ļŗŽļ»Øļŗ› ļ»‰ļŗŽļ»Øļ»—" @@ -19755,10 +19751,6 @@ msgid "Absolute Frame" msgstr "ļ»–ļ» ļ»„ļ»¤ļ»Ÿļŗ ļŗ­ļŗŽļ»ƒļ»¹ļ»æļŗ" -msgid "Wrapping" -msgstr "Ų”ļŗŽļŗ“ļ»›ļ»¹ļ»æļŗ" - - msgid "X Axis" msgstr "X ļŗ­ļ»®ļŗ¤ļ»£" @@ -24991,6 +24983,14 @@ msgid "Exit Tweak Mode" msgstr "ļ»‚ļŗ’ļ»€ļ»Ÿļŗ ļ»Šļŗæļ»­ ļ»¦ļ»£ ļŗļŗ®ļŗ§ļŗ" +msgid "Source color" +msgstr "ļŗ­ļŗŖļŗ¼ļ»¤ļ»Ÿļŗ ļ»„ļ»®ļ»Ÿ" + + +msgid "Gamma Corrected" +msgstr "ļŗ”ļ»ŸļŗŖŁ‘ļ»Œļ»£ ļŗ“ļŗ­ļŗŽļ»§ļŗ‡" + + msgctxt "Operator" msgid "Add File Node" msgstr "ļ»’ļ» ļ»£ ļ»’ļŗæļŗ ļŗ“ļŗŖļ»˜ļ»‹" @@ -27952,14 +27952,6 @@ msgid "Drop Color" msgstr "ļ»„ļ»®ļ» Ł‘ļ»Ÿļŗ ļ»–ļ»Ÿļŗƒ" -msgid "Source color" -msgstr "ļŗ­ļŗŖļŗ¼ļ»¤ļ»Ÿļŗ ļ»„ļ»®ļ»Ÿ" - - -msgid "Gamma Corrected" -msgstr "ļŗ”ļ»ŸļŗŖŁ‘ļ»Œļ»£ ļŗ“ļŗ­ļŗŽļ»§ļŗ‡" - - msgctxt "Operator" msgid "Edit Source" msgstr "ļŗ­ļŗŖļŗ¼ļ»¤ļ»Ÿļŗ ļŗ­ļŗ®ļŗ£" @@ -28906,10 +28898,6 @@ msgid "Use Deform Only" msgstr "ļ»‚ļ»˜ļ»“ ļ»Šļ»³ļ»®ļ»„ļŗ˜ļ»Ÿļŗ ļ»”ļŗŖļŗØļŗ˜ļŗ³ļŗ" -msgid "UV Sculpting" -msgstr "UV Ł€ļ»Ÿļŗ ļŗ–ļŗ¤ļ»§" - - msgid "Restrict" msgstr "ļŗ®ļŗ¼ļŗ£ļŗƒ" @@ -34290,6 +34278,10 @@ msgid "Color of the light's specular highlight" msgstr "Ų”ļ»®ļ»€ļ»Ÿļŗ ļ»–ļ»³ļŗ®ļŗ‘ ļ»‰ļ»®ļ»„ļŗ³ ļ»„ļ»®ļ»Ÿ" +msgid "UV Sculpting" +msgstr "UV Ł€ļ»Ÿļŗ ļŗ–ļŗ¤ļ»§" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "ļ»Æļŗ®ļŗ§ļŗƒ ļŗ½ļŗļŗ®ļ»ļŗƒ ļ»­ ļ»žļ»œļ»“ļ»¬ļ»Ÿļŗ ļ»Ŗļ»³ļ»®ļŗøļŗ˜ļ»Ÿ ļŗ”ļ» ļ»¤ļ»Œļŗ˜ļŗ“ļ»£ ŲŒļ»‚ļ»˜ļ»Øļ»Ÿļŗ ļŗ”ļ»‹ļ»®ļ»¤ļŗ ļ»£" @@ -36702,6 +36694,10 @@ msgid "No active Keying Set to use" msgstr "ļ»”ļŗļŗŖļŗØļŗ˜ļŗ³ļ»ŗļ»æļ»Ÿ ļŗ”ļ»ŸļŗŽļ»ŒŁ‘ļ»“ ļŗ¢ļ»“ļŗ—ļŗŽļ»”ļ»£ ļŗ”ļ»‹ļ»®ļ»¤ļŗ ļ»£ ļŗŖļŗŸļ»®ļŗ— ļ»»ļ»æ" +msgid "Cancel" +msgstr "ļ»Žļ»Ÿļŗƒ" + + msgid "No keyframes to slide between" msgstr "ļŗ­ļŗŽļ»ƒļ»»ļ»æļŗ ļ»Šļŗæ" @@ -36781,10 +36777,6 @@ msgid "Nothing selected" msgstr "ļŗ­ļŗŽļŗ˜ļŗØļ»£ Ų”ļ»²ļŗ· ļ»»ļ»æ" -msgid "Cancel" -msgstr "ļ»Žļ»Ÿļŗƒ" - - msgid "Pin" msgstr "ļŗ–ļŗ’Ł‘ļŗ›" diff --git a/locale/po/be.po b/locale/po/be.po index a7535db17f74..5837ed4c9926 100644 --- a/locale/po/be.po +++ b/locale/po/be.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-02-23 23:56+0000\n" "Last-Translator: Aleh \n" "Language-Team: Belarusian \n" diff --git a/locale/po/bg.po b/locale/po/bg.po index 48652e5077bb..58164e15f550 100644 --- a/locale/po/bg.po +++ b/locale/po/bg.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-11-08 04:56+0000\n" "Last-Translator: Just Adam \n" "Language-Team: Bulgarian \n" diff --git a/locale/po/ca.po b/locale/po/ca.po index 25660f5af6fe..4efc08ff0e69 100644 --- a/locale/po/ca.po +++ b/locale/po/ca.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-26 22:47+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-02-03 00:56+0000\n" "Last-Translator: Joan Pujolar \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -439,6 +439,11 @@ msgid "Expanded state of the slot" msgstr "Estat desplegat de l'epĆ­graf" +msgctxt "ID" +msgid "Target ID Type" +msgstr "Tipus d'ID del referent" + + msgctxt "ID" msgid "Action" msgstr "AcciĆ³" @@ -6312,7 +6317,7 @@ msgstr "[Compression Stiffness Maximum]: Valor mĆ xim de rigidesa de compressiĆ³ msgid "Target Density Strength" -msgstr "ForƧa del lĆ­mit de densitat" +msgstr "PotĆØncia de la densitat buscada" msgid "Influence of target density on the simulation" @@ -25966,10 +25971,6 @@ msgid "Display the object's name" msgstr "[Display Name]: Mostra el nom de l'objecte" -msgid "Shape Key Lock" -msgstr "Bloquejar morfofita" - - msgid "Only show the active shape key at full value" msgstr "NomĆ©s mostra la morfofita activa a tota potĆØncia" @@ -26834,7 +26835,7 @@ msgstr "Fa que el vector distant de la ubicaciĆ³ de la partĆ­cula referent doni msgid "How many steps paths are rendered with (power of 2)" -msgstr "Amb quants passos s'hi revelen els trajectes (potĆØncia de 2)" +msgstr "Amb quants trams s'hi revelen els trajectes (potĆØncia de 2)" msgid "Particle Rendering" @@ -30045,7 +30046,7 @@ msgstr "[Max Step]: LĆ­mit superior per al cronolapse en segons en el cas de sub msgid "Min Step" -msgstr "Min tandes" +msgstr "MĆ­n tandes" msgid "Lower bound for timestep in second in case of automatic substeps" @@ -34304,6 +34305,14 @@ msgid "Editor menu containing buttons" msgstr "El menĆŗ d'ediciĆ³ que contĆ© els botons" +msgid "Metaball" +msgstr "Metabola" + + +msgid "Show/Hide" +msgstr "Mostrar/amagar" + + msgid "Names" msgstr "Noms" @@ -34312,10 +34321,6 @@ msgid "Bone Roll" msgstr "Girar os" -msgid "Show/Hide" -msgstr "Mostrar/amagar" - - msgid "Clean Up" msgstr "Netejar" @@ -34404,10 +34409,6 @@ msgid "Assign Material" msgstr "Assignar material" -msgid "Metaball" -msgstr "Metabola" - - msgid "Light" msgstr "Llum" @@ -38200,7 +38201,7 @@ msgstr "Factor de fosa" msgid "Defines how much of the stroke is fading in/out" -msgstr "[Fade Factor]: Defineix fins a quin punt el traƧ es fon d'inici/de final" +msgstr "[Fade Factor]: Defineix fins a quin punt el traƧ s'esvaeix d'inici/de final" msgid "Opacity Strength" @@ -44489,30 +44490,14 @@ msgid "Create matte based on differences in color channels" msgstr "Crear trepa en base a les diferĆØncies dels canals de color" -msgid "RGB color space" -msgstr "Espai de color RGB" - - -msgid "HSV color space" -msgstr "Espai de color TSV" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "Espai de color YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "Espai de color YCbCr" - - msgctxt "Color" msgid "Limit Channel" msgstr "LĆ­mit de canal" @@ -45036,26 +45021,6 @@ msgid "Mode of color processing" msgstr "Mode de procĆ©s de color" -msgid "Use RGB color processing" -msgstr "Usar procĆ©s de color RGB" - - -msgid "Use HSV color processing" -msgstr "Usar procĆ©s de color TSV" - - -msgid "Use HSL color processing" -msgstr "Usar procĆ©s de color TSL" - - -msgid "Use YCbCr color processing" -msgstr "Usar procĆ©s de color YCbCr" - - -msgid "Use YUV color processing" -msgstr "Usar procĆ©s de color YUV" - - msgid "Color space used for YCbCrA processing" msgstr "Espai cromĆ tic usat per al procĆ©s YCbCrA" @@ -45513,6 +45478,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "Crear trepa en base a la distĆ ncia 3D entre colors" +msgid "RGB color space" +msgstr "Espai de color RGB" + + msgid "YCbCr suppression" msgstr "SupressiĆ³ YCbCr" @@ -46979,42 +46948,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "[Translate]: Usa valors relatius (fracciĆ³ de la mida de la imatge ingressada) per a definir la translaciĆ³" -msgid "Wrapping" -msgstr "EnclusiĆ³" - - -msgid "Wrap image on a specific axis" -msgstr "[Wrapping]: Enclou la imatge a un eix especĆ­fic" - - -msgid "No wrapping on X and Y" -msgstr "No encloure en X ni Y" - - msgid "X Axis" msgstr "Eix X" -msgid "Wrap all pixels on the X axis" -msgstr "Encloure tots els pĆ­xels a l'eix X" - - msgid "Y Axis" msgstr "Eix Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Encloure tots els pĆ­xels a l'eix Y" - - msgid "Both Axes" msgstr "Tots dos eixos" -msgid "Wrap all pixels on both axes" -msgstr "Encloure tots els pĆ­xels a ambdĆ³s eixos" - - msgid "Map values to colors with the use of a gradient" msgstr "Mapeja els valors sobre colors amb l'Ćŗs d'un degradat" @@ -48673,6 +48618,14 @@ msgid "Retrieve a unit length vector indicating the direction pointing away from msgstr "Extreu un vector d'unitat de longitud que indica l'orientaciĆ³ en direcciĆ³ contrĆ ria a la geometria a cada element" +msgid "Flat Corner Normals" +msgstr "Normals de cantells aplanats" + + +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "Cal emprar sempre normals de cara per al domini de cantells de cara, coincidint amb l'antic comportament del node" + + msgid "Output a single object" msgstr "Egressar un Ćŗnic objecte" @@ -48814,7 +48767,7 @@ msgstr "Ara es pot accedir a la definiciĆ³ d'enum directament amb el node. AixĆ² msgid "Merge by Distance" -msgstr "Fusiona per distĆ ncia" +msgstr "FusiĆ³ per distĆ ncia" msgid "Merge vertices or points within a given distance" @@ -62563,6 +62516,22 @@ msgid "Export armatures using rest position as joints' rest pose. When off, curr msgstr "Exporta esquelets en posa de repĆ²s com a posa de respĆ²s d'articulacions. Si no estĆ  activat, la posa del fotograma actual fa de posa de repĆ²s" +msgid "Sampling Interpolation Fallback" +msgstr "Alternativa a la interpolaciĆ³ de mostratge" + + +msgid "Interpolation fallback for sampled animations, when the property is not keyed" +msgstr "Alternativa d'interpolaciĆ³ per a animacions mostrejades quan la propietat no estĆ  fitada" + + +msgid "Linear interpolation between keyframes" +msgstr "InterpolaciĆ³ lineal entre fotofites" + + +msgid "No interpolation between keyframes" +msgstr "Sense interpolaciĆ³ entre fotofites" + + msgid "Shared Accessors" msgstr "Accessors compartits" @@ -66199,11 +66168,11 @@ msgstr "Nom del material" msgctxt "Operator" msgid "Merge by Distance" -msgstr "Fusionar per distĆ ncia" +msgstr "FusiĆ³ per distĆ ncia" msgid "Merge points by distance" -msgstr "[Merge by Distance]: Fusiona punts per distĆ ncia" +msgstr "[Merge by Distance]: Fusiona punts segons la distĆ ncia" msgid "Use whole stroke, not only selected points" @@ -71619,6 +71588,22 @@ msgid "Add a collection info node to the current node editor" msgstr "Afegir un node d'info de colĀ·lecciĆ³ a l'editor de nodes actual" +msgid "Source color" +msgstr "Color d'origen" + + +msgid "Gamma Corrected" +msgstr "Gamma corregida" + + +msgid "The source color is gamma corrected" +msgstr "El color d'origen tĆ© la gamma corregida" + + +msgid "Has Alpha" +msgstr "TƉ alfa" + + msgctxt "Operator" msgid "Add File Node" msgstr "Afegir node document" @@ -84451,18 +84436,6 @@ msgid "Drop colors to buttons" msgstr "Deixa caure els colors damunt els botons" -msgid "Source color" -msgstr "Color d'origen" - - -msgid "Gamma Corrected" -msgstr "Gamma corregida" - - -msgid "The source color is gamma corrected" -msgstr "El color d'origen tĆ© la gamma corregida" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "Deposar material en epĆ­grafs de materials" @@ -85466,7 +85439,7 @@ msgstr "Fusionar UVs segons distĆ ncia" msgid "Selected UV vertices that are within a radius of each other are welded together" -msgstr "[Merge UVs by Distance]: Als vĆØrtexs UV seleccionats que estan dins d'un radi l'un de l'altre se'ls solda junts" +msgstr "[Merge UVs by Distance]: Se'ls solden junts els vĆØrtexs UV seleccionats que estan dins d'un radi l'un de l'altre" msgid "Maximum distance between welded vertices" @@ -87159,6 +87132,11 @@ msgid "Lattices" msgstr "RetĆ­cules" +msgctxt "ID" +msgid "Lights" +msgstr "Llums" + + msgctxt "ID" msgid "Light Probes" msgstr "Sondes de llum" @@ -88264,7 +88242,7 @@ msgstr "Importar els atributs de vĆØrtex personalitzats" msgid "Merges vertices by distance" -msgstr "Fusionar vĆØrtexs per distĆ ncia" +msgstr "Fusiona vĆØrtexs segons la distĆ ncia" msgid "Save Backups" @@ -89177,10 +89155,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "Especifica un valor d'escena personalitzat en metres per unitat" -msgid "Convert World Material" -msgstr "Convertir material mĆ³n" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "[Convert World Material]: Converteix el material del mĆ³n en una llum de cĆŗpula USD. Actualment funciona amb materials senzills, que consisteixen en una textura d'entorn connectada a un aspector de rerefons, amb una multiplicaciĆ³ vectorial opcional del color de la textura" @@ -89534,10 +89508,6 @@ msgid "Add all imported objects to a new collection" msgstr "Afegir tots els objectes importats a una nova colĀ·lecciĆ³" -msgid "Create World Material" -msgstr "Crear material del mĆ³n" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "Converteix la primera llum de cĆŗpula USD descoberta en un aspector de rerefons de mĆ³n" @@ -90641,19 +90611,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Utilitza nomĆ©s modificadors de deformaciĆ³ (desactiva temporalment tots els modificadors constructius excepte el multiresoluciĆ³)" -msgid "UV Sculpting" -msgstr "Esculpir UVs" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "Predefinit de corba de forƧa" - - -msgid "Strength Curve" -msgstr "Corba de forƧa" - - msgid "Properties of vertex and weight paint mode" msgstr "Propietats del mode pintat de vĆØrtexs i pesos" @@ -92664,7 +92621,7 @@ msgstr "Intensitat de pinzell" msgid "Puff Volume" -msgstr "Volum de pĆØl" +msgstr "Voluminat del pĆØl" msgid "Apply puff to unselected end-points (helps maintain hair volume when puffing root)" @@ -102429,10 +102386,18 @@ msgid "Retiming Key Selection Status" msgstr "Estatus de selecciĆ³ de la fita de retemporitzaciĆ³" +msgid "(Deprecated: Replaced by '.strips') Top-level strips only" +msgstr "(Obsolet: substituĆÆt per '.strips') Sols per a segments de nivell mĆ xim" + + msgid "All Strips" msgstr "Tots els segments" +msgid "(Deprecated: Replaced by '.strips_all') All strips, recursively including those inside metastrips" +msgstr "(Obsolet: substituĆÆt per '.strips') Tots els segments incloent-hi recursivament els que estan dins de metasegments" + + msgid "Show Missing Media" msgstr "Mostrar els mĆØdia que falten" @@ -107173,6 +107138,10 @@ msgid "Sequence strip to group other strips as a single sequence strip" msgstr "[Meta Sequence]: Segment de seqĆ¼ĆØncia que agrupa altres segments com un de sol" +msgid "(Deprecated: Replaced by '.strips') Strips nested in meta strip" +msgstr "(Obsolet: substituĆÆt per '.strips') Segments aniuats dins metasegments" + + msgid "Strips nested in meta strip" msgstr "Segments aniuats dins un metasegment" @@ -111349,6 +111318,19 @@ msgid "Enable this light in solid shading mode" msgstr "Activa aquesta llum en mode d'aspecciĆ³ sĆ²lida" +msgid "UV Sculpting" +msgstr "Esculpir UVs" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "Predefinit de corba de forƧa" + + +msgid "Strength Curve" +msgstr "Corba de forƧa" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Grup de vĆØrtexs, utilitzat per a la deformaciĆ³ d'esquelet i d'altres propĆ²sits" @@ -117107,6 +117089,10 @@ msgid "Work Relative to some Object" msgstr "Treball relatiu a algun objecte" +msgid "No 'Relative To' object found, set one explicitly or make sure there is an active object" +msgstr "No s'ha trobat objecte 'Relatiu a', cal definir-ne un d'explĆ­cit per assegurar que hi ha un objecte actiu" + + msgid "Select an object or pose bone" msgstr "Seleccionar un objecte o os de posa" @@ -117724,6 +117710,10 @@ msgid "No glTF Animation" msgstr "Sense animaciĆ³ glTF" +msgid "Please disable/enable 'action filter' to refresh the list" +msgstr "Sisplau deshabiliteu/habiliteu 'filtre d'acciĆ³' per a refrescar la llista" + + msgid "No Actions in .blend file" msgstr "No hi ha accions en el document .blend" @@ -119611,7 +119601,7 @@ msgstr "Continuar" msgid "Getting Started" -msgstr "S'estĆ  iniciant" +msgstr "Per comenƧar" msgctxt "Operator" @@ -121071,7 +121061,7 @@ msgstr "Passos de qualitat" msgid "Pin Goal Strength" -msgstr "ForƧa de fixacions a destĆ­" +msgstr "Fixar potĆØncia del destĆ­" msgid "Air Drag" @@ -121083,7 +121073,7 @@ msgstr "Densitat pretesa" msgid "Density Strength" -msgstr "Densitat d'emissiĆ³" +msgstr "PotĆØncia de la densitat" msgid "Tangent Phase" @@ -121887,6 +121877,10 @@ msgid "Bake All Light Probe Volumes" msgstr "Precuinar tots els volums de sonda de llum" +msgid "Compositing Node Tree" +msgstr "Arbre de nodes de CompositaciĆ³" + + msgctxt "Operator" msgid "Export to File" msgstr "Exportar a document" @@ -127182,7 +127176,7 @@ msgstr "Posicions d'arrels" msgid "Path Steps" -msgstr "Passos de camĆ­" +msgstr "Trams de trajecte" msgid "No brush selected" @@ -127913,6 +127907,10 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "Error de revelat (%s) no es pot desar: '%s'" +msgid "Failed to create stereo image buffer" +msgstr "Ha fallat la creaciĆ³ del dosificador d'imatge estĆØreo" + + msgid "ipos" msgstr "ipos" @@ -129616,6 +129614,18 @@ msgid "Cannot pose libdata" msgstr "No es pot crear posa de dades de bib" +msgid "Show Original Pose" +msgstr "Mostrar posa original" + + +msgid "Show Blended Pose" +msgstr "Mostrar posa fusionada" + + +msgid "Flip Pose" +msgstr "Capgirar posa" + + msgid "Pose lib is only for armatures in pose mode" msgstr "La bib de poses nomĆ©s Ć©s per a esquelets en mode posa" @@ -129652,48 +129662,8 @@ msgid "Sliding-Tool" msgstr "Eina de lliscar" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "[X]/Y/Z nomĆ©s eix (X per retirar)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "X/[Y]/Z nomĆ©s eix (Y per retirar)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "X/Y/[Z] nomĆ©s eix (Z per retirar)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = RestricciĆ³ d'eix" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - NomĆ©s ubicaciĆ³ (G per retirar) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - NomĆ©s rotaciĆ³ (R per retirar) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - NomĆ©s escalar (S per retirar) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - NomĆ©s propietats d'os doblegable (B per retirar) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - NomĆ©s propietats expresses (C per retirar) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - Limit per joc de transformacions/propietats" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - Permutar visibilitat d'ossos" +msgid "Cancel" +msgstr "CancelĀ·lar" msgid "No keyframes to slide between" @@ -130117,6 +130087,10 @@ msgid "Node group's first output must be a geometry" msgstr "La primera egressiĆ³ del grup de nodes ha de ser una geometria" +msgid "Place Next Stroke Vertex" +msgstr "ColĀ·locar vĆØrtex del traƧ segĆ¼ent" + + msgid "Erase" msgstr "Esborrar" @@ -130277,10 +130251,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "No hi ha objecte actiu o l'objecte actiu no Ć©s un objecte de Llapis de greix" -msgid "Cancel" -msgstr "CancelĀ·lar" - - msgid "Panning" msgstr "Escombratge" @@ -131743,6 +131713,10 @@ msgid "Icosphere" msgstr "Polisfera" +msgid "Profile Shape" +msgstr "Forma del perfil" + + msgid "Harden" msgstr "Endurir" @@ -131751,6 +131725,10 @@ msgid "Outer" msgstr "Enfora" +msgid "Miter Profile Shape" +msgstr "Forma de perfil de motllura" + + msgid "Intersection Type" msgstr "Tipus d'intersecciĆ³" @@ -132448,6 +132426,18 @@ msgid "No UV layer named \"%s\" found in the object \"%s\"" msgstr "No s'ha trobat cap capa UV anomenada \"%s\" en l'objecte \"%s\"" +msgid "Cage object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "No s'ha trobat l'objecte gĆ bia \"%s\" en l'escena avaluada, pot estar ocult" + + +msgid "Object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "No s'ha trobat l'objecte \"%s\" en l'escena avaluada, pot estar ocult" + + +msgid "Failed to access mesh from object \"%s\", ensure it's visible while rendering" +msgstr "No s'ha pogut accedir a la malla des de objecte \"%s\", assegureu-vos que estĆ  visible mentre es revela" + + msgid "Error baking from object \"%s\"" msgstr "S'ha produĆÆt un error en precuinar l'objecte \"%s\"" @@ -134158,18 +134148,6 @@ msgid "UV map or surface attachment is invalid" msgstr "El mapa UV o l'adhesiĆ³ a la superfĆ­cie no Ć©s vĆ lid/a" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "Emplenar: ESC/BDR cancelĀ·lar, BER Emplenar, BMR Ajustar extensiĆ³, S: Mode intercanviar, D: ColĀ·lisiĆ³ de traƧ | Mode: {}, ColĀ·lisiĆ³ {}, Llargada: {:.3f}" - - -msgid "ON" -msgstr "ENGEGAR" - - -msgid "OFF" -msgstr "APAGAr" - - msgid "No Grease Pencil frame to draw weight on" msgstr "No hi ha quadre de Llapis de greix on dibuixar pes" @@ -134465,6 +134443,10 @@ msgid "Action must have at least one keyframe or F-Modifier" msgstr "L'acciĆ³ ha de tenir almenys una fotofita o Modificador-F" +msgid "Action+Slot has already been stashed" +msgstr "L'acciĆ³+epĆ­graf ja han estat dipositats" + + msgid "Could not find current NLA Track" msgstr "No s'ha pogut trobar la pista d'ANL actual" @@ -134701,6 +134683,10 @@ msgid "Cannot read '%s': %s" msgstr "No es pot llegir '%s': %s" +msgid "Place Marker" +msgstr "ColĀ·locar marcador" + + msgid "Delete selected tracks?" msgstr "Eliminar els rastres seleccionats?" @@ -135258,42 +135244,6 @@ msgid "Deleted %u drivers" msgstr "Eliminats %u controladors" -msgid "Decimate Keyframes" -msgstr "Delmar fotofites" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - Modificar nitidesa" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - Modificar arc de corba" - - -msgid "Ease Keys" -msgstr "Gradualitzar fites" - - -msgid "Shear Keys" -msgstr "Estrebar fites" - - -msgid "D - Toggle Direction" -msgstr "D - Sentit de permuta" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Escalar des de l'extrem dret" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Escalar des de l'extrem esquerre" - - -msgid "Scale from Neighbor Keys" -msgstr "Escalar des de fites veĆÆnes" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "Delmar corbes-F especificant quant es poden desviar de la corba original" @@ -137907,6 +137857,14 @@ msgid " | Ctrl - Hold for increments" msgstr " | Ctrl - aguantar per a increments" +msgid "Overshoot" +msgstr "Ultrapassat" + + +msgid "Overshoot Disabled" +msgstr "Ultrapassat deshabilitat" + + msgid "Unpack File" msgstr "Desempaquetar document" @@ -138000,6 +137958,14 @@ msgid "Pinned vertices can be selected in Vertex Mode only" msgstr "NomĆ©s es poden seleccionar vĆØrtexs fixats en nomĆ©s mode vĆØrtex" +msgid "Switch Island" +msgstr "Intercanviar illa" + + +msgid "Midpoints" +msgstr "Punts mitjans" + + msgid "Could not initialize stitching on any selected object" msgstr "No s'ha pogut inicialitzar el cosit en cap objecte seleccionat" @@ -140864,8 +140830,8 @@ msgid "Clipping" msgstr "Segar" -msgid "Level Viewport" -msgstr "Nivell de mirador" +msgid "Levels Viewport" +msgstr "Nivells de mirador" msgid "Unsubdivide" @@ -141002,6 +140968,14 @@ msgid "Built without Remesh modifier" msgstr "ConstruĆÆt sense modificador Remallar" +msgid "Zero voxel size cannot be solved" +msgstr "No es pot resoldre una mida de vĆ²xel zero" + + +msgid "Zero scale cannot be solved" +msgstr "No es pot resoldre una escala zero" + + msgid "Axis Object" msgstr "Objecte eix" @@ -141083,10 +141057,6 @@ msgid "Adaptive Subdivision" msgstr "SubdivisiĆ³ adaptativa" -msgid "Levels Viewport" -msgstr "Nivells de mirador" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "Escala final: revela %.2f px, Mirador %.2f px" @@ -141358,6 +141328,14 @@ msgid "Quality:" msgstr "Qualitat:" +msgid "Disabled. Built without OpenImageDenoise" +msgstr "Deshabilitat. Bastit sense OpenImageDenoise" + + +msgid "Disabled. Platform not supported" +msgstr "Deshabilitat. Plataforma no compatible" + + msgid "Image 1" msgstr "Imatge 1" @@ -141486,6 +141464,10 @@ msgid "ID value" msgstr "Valor ID" +msgid "Render passes in the Viewport compositor are only supported in EEVEE" +msgstr "Les passades de revelat del compositador del Mirador nomĆ©s sĆ³n compatibles amb EEVEE" + + msgid "Viewport compositor setup not fully supported" msgstr "La configuraciĆ³ del compositador del mirador no Ć©s del tot compatible" @@ -141526,10 +141508,6 @@ msgid "Offset Y" msgstr "DesplaƧament en Y" -msgid "Undistortion" -msgstr "DesdistorsiĆ³" - - msgid "Dot" msgstr "Punt" @@ -142573,10 +142551,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Els valors mĆ©s grans que el llindar es troben dins de la malla generada" -msgid "Has Alpha" -msgstr "TƉ alfa" - - msgid "Frame Count" msgstr "Recompte de fotogrames" @@ -145398,6 +145372,14 @@ msgid "drag-" msgstr "arrossegar-" +msgid "ON" +msgstr "ENGEGAR" + + +msgid "OFF" +msgstr "APAGAr" + + msgid "Set Debug Value" msgstr "Definir valor de depuraciĆ³" diff --git a/locale/po/cs.po b/locale/po/cs.po index d17d547cf943..be0ec9ecb1d1 100644 --- a/locale/po/cs.po +++ b/locale/po/cs.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-29 13:36+0000\n" "Last-Translator: Zdeněk Doležal \n" "Language-Team: Czech \n" @@ -10466,10 +10466,6 @@ msgid "Display the object's name" msgstr "Zobrazit aktivnĆ­ objekt se vÅ”emi možnĆ½mi hranami" -msgid "Shape Key Lock" -msgstr "SamochytavĆ© Klƭče" - - msgid "Display the object's texture space" msgstr "Zobrazit koncovĆ½ frame animovanĆ© textury" @@ -13641,6 +13637,14 @@ msgid "Material slot name" msgstr "NĆ”zev okĆ©nka materiĆ”lu" +msgid "Metaball" +msgstr "Meta objekt" + + +msgid "Show/Hide" +msgstr "Zobrazit/skrĆ½t" + + msgid "Names" msgstr "NĆ”zvy" @@ -13649,10 +13653,6 @@ msgid "Bone Roll" msgstr "Kost" -msgid "Show/Hide" -msgstr "Zobrazit/skrĆ½t" - - msgid "Clean Up" msgstr "Vyčistit" @@ -13697,10 +13697,6 @@ msgid "Assign Material" msgstr "Přiřadit MateriĆ”l" -msgid "Metaball" -msgstr "Meta objekt" - - msgid "Light" msgstr "Světlo" @@ -16689,10 +16685,6 @@ msgid "Channel Key" msgstr "KanĆ”l" -msgid "RGB color space" -msgstr "BarevnĆ½ prostor RGB" - - msgid "High" msgstr "VĆ½Å”ka" @@ -17049,6 +17041,10 @@ msgid "Distance Key" msgstr "VzdĆ”lenost" +msgid "RGB color space" +msgstr "BarevnĆ½ prostor RGB" + + msgid "Double Edge Mask" msgstr "Dvojklik" @@ -17433,10 +17429,6 @@ msgid "Translate" msgstr "Posunout" -msgid "Wrapping" -msgstr "MapovĆ”nĆ­" - - msgid "X Axis" msgstr "Osa X" @@ -31218,10 +31210,6 @@ msgid "Use Deform Only" msgstr "PouÅ¾Ć­t Pouze Deformace" -msgid "UV Sculpting" -msgstr "UV sochařstvĆ­" - - msgid "Properties of vertex and weight paint mode" msgstr "TextovĆ½ editor" @@ -37685,6 +37673,10 @@ msgid "Solid Light" msgstr "Barva speculĆ”rnĆ­ složky difÅÆznĆ­ho světla" +msgid "UV Sculpting" +msgstr "UV sochařstvĆ­" + + msgid "Index number of the vertex group" msgstr "Odstranit skupinu vertexÅÆ" @@ -41760,8 +41752,8 @@ msgid "Relax Pose" msgstr "Relaxovat pĆ³zu" -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - Pouze vlastnĆ­ vlastnosti (C k vymazĆ”nĆ­) | %s" +msgid "Cancel" +msgstr "ZruÅ”it" msgid "No keyframes to slide between" @@ -41896,10 +41888,6 @@ msgid "Unable to find layer to add" msgstr "Nelze najĆ­t vrstvu, kterĆ” by se přidala" -msgid "Cancel" -msgstr "ZruÅ”it" - - msgid "Failed to set value" msgstr "NastavenĆ­ hodnoty se nezdařilo" @@ -44010,10 +43998,6 @@ msgid "Bisect" msgstr "PÅÆlit" -msgid "Level Viewport" -msgstr "VĆ½chozĆ­ 3D Pohled" - - msgid "Unsubdivide" msgstr "Odrozdělit" diff --git a/locale/po/da.po b/locale/po/da.po index b3667b4794dc..32c819e57dd1 100644 --- a/locale/po/da.po +++ b/locale/po/da.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-11-09 15:56+0000\n" "Last-Translator: leif larsen \n" "Language-Team: Danish \n" @@ -3146,14 +3146,6 @@ msgid "Sharpen" msgstr "Skarpere" -msgid "ON" -msgstr "Til" - - -msgid "OFF" -msgstr "Fra" - - msgid "Keyframe not in F-Curve" msgstr "NĆøglebillede er ikke i F-kurve" @@ -3258,6 +3250,14 @@ msgid "W4" msgstr "W4" +msgid "ON" +msgstr "Til" + + +msgid "OFF" +msgstr "Fra" + + msgid "unsupported format" msgstr "ikke understĆøttet format" diff --git a/locale/po/de.po b/locale/po/de.po index c631c8b98814..063579aec26f 100644 --- a/locale/po/de.po +++ b/locale/po/de.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-12-08 20:56+0000\n" "Last-Translator: Thomas Radeke \n" "Language-Team: German \n" @@ -14657,10 +14657,6 @@ msgid "Display the object's name" msgstr "Namen des Objekts anzeigen" -msgid "Shape Key Lock" -msgstr "FormschlĆ¼ssel sperren" - - msgid "Display Texture Space" msgstr "Texturraum anzeigen" @@ -18900,14 +18896,18 @@ msgid "Material slot name" msgstr "Materialsteckplatzname" -msgid "Names" -msgstr "Namen" +msgid "Metaball" +msgstr "Metaball" msgid "Show/Hide" msgstr "Zeigen/Verbergen" +msgid "Names" +msgstr "Namen" + + msgid "Clean Up" msgstr "AufrƤumen" @@ -18984,10 +18984,6 @@ msgid "Assign Material" msgstr "Material zuweisen" -msgid "Metaball" -msgstr "Metaball" - - msgid "Light" msgstr "Licht" @@ -23221,30 +23217,14 @@ msgid "Channel Key" msgstr "SchlĆ¼sselkanal" -msgid "RGB color space" -msgstr "RGB Farbraum" - - -msgid "HSV color space" -msgstr "HSV Farbraum" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "YUV Farbraum" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "YCbCr Farbraum" - - msgid "Limit by this channel's value" msgstr "Begrenzung durch diesen Kanalwert" @@ -23813,6 +23793,10 @@ msgid "Distance Key" msgstr "Abstand" +msgid "RGB color space" +msgstr "RGB Farbraum" + + msgid "YCbCr suppression" msgstr "YCbCr UnterdrĆ¼ckung" @@ -24434,42 +24418,18 @@ msgid "Translate" msgstr "Ɯbersetzten" -msgid "Wrapping" -msgstr "Verpacken" - - -msgid "Wrap image on a specific axis" -msgstr "Wickle ein Bild um eine spezifische Achse" - - -msgid "No wrapping on X and Y" -msgstr "Kein verpacken bei X und Y" - - msgid "X Axis" msgstr "X-Achse" -msgid "Wrap all pixels on the X axis" -msgstr "Verpacke alle Pixel an der X Achse" - - msgid "Y Axis" msgstr "Y-Achse" -msgid "Wrap all pixels on the Y axis" -msgstr "Verpacke alle Pixel an der Y Achse" - - msgid "Both Axes" msgstr "Beide Achsen" -msgid "Wrap all pixels on both axes" -msgstr "Verpacke alle Pixel an beiden Achsen" - - msgid "Vector Blur" msgstr "Vektor Weichzeichner" @@ -33247,6 +33207,14 @@ msgid "Add Node Collection" msgstr "Knotensammlung hinzufĆ¼gen" +msgid "Source color" +msgstr "Quellfarbe" + + +msgid "Gamma Corrected" +msgstr "Gamma korrigiert" + + msgctxt "Operator" msgid "Add File Node" msgstr "Dateiknoten hinzufĆ¼gen" @@ -38301,14 +38269,6 @@ msgid "Drop Color" msgstr "Farbe verwerfen" -msgid "Source color" -msgstr "Quellfarbe" - - -msgid "Gamma Corrected" -msgstr "Gamma korrigiert" - - msgctxt "Operator" msgid "Drop Name" msgstr "Name verwerfen" @@ -56048,8 +56008,8 @@ msgid "Create" msgstr "Erstellen" -msgid "[H] - Toggle bone visibility" -msgstr "[H] - Knochensichtbarkeit umschalten" +msgid "Cancel" +msgstr "Abbrechen" msgid "Programming error: missing clear transform function or keying set name" @@ -56198,10 +56158,6 @@ msgid "Nothing selected" msgstr "Nichts ausgewƤhlt" -msgid "Cancel" -msgstr "Abbrechen" - - msgid "Could not resolve path '%s'" msgstr "Pfad '%s' kann nicht aufgelƶst werden" @@ -57802,14 +57758,6 @@ msgid "File not found '%s'" msgstr "Datei nicht gefunden '%s'" -msgid "ON" -msgstr "AN" - - -msgid "OFF" -msgstr "AUS" - - msgid "Active group is locked, aborting" msgstr "Aktive Gruppe ist gesperrt, abbrechen" @@ -58166,10 +58114,6 @@ msgid "No F-Modifiers to paste" msgstr "Kein F-Modifikator zum EinfĆ¼gen" -msgid "Decimate Keyframes" -msgstr "Dezimierte SchlĆ¼sselbilder" - - msgid "Discard" msgstr "Verwerfen" @@ -59554,10 +59498,6 @@ msgid "Offset Y" msgstr "Y-Versatz" -msgid "Undistortion" -msgstr "Entzerren" - - msgid "Dot" msgstr "Punkt" @@ -60301,6 +60241,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "AN" + + +msgid "OFF" +msgstr "AUS" + + msgid "unsupported format" msgstr "Nicht unterstĆ¼tztes Format" diff --git a/locale/po/el.po b/locale/po/el.po index 4fe4ca580be1..cb8cb894dfbc 100644 --- a/locale/po/el.po +++ b/locale/po/el.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-29 13:44+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Greek \n" @@ -519,6 +519,10 @@ msgid "Keyboard" msgstr "Ī Ī»Ī·ĪŗĻ„ĻĪæĪ»ĻŒĪ³Ī¹Īæ" +msgid "Metaball" +msgstr "ĪœĪµĻ„Ī±-ĻƒĻ†Ī±ĪÆĻĪ±" + + msgid "Snap" msgstr "Ī ĻĪæĻƒĪŗĻŒĪ»Ī»Ī·ĻƒĪ·" @@ -531,10 +535,6 @@ msgid "Select Linked" msgstr "Ī•Ļ€Ī¹Ī»ĪæĪ³Ī® Ī£Ļ…Ī½Ī“ĪµĪ“ĪµĪ¼Ī­Ī½Ļ‰Ī½" -msgid "Metaball" -msgstr "ĪœĪµĻ„Ī±-ĻƒĻ†Ī±ĪÆĻĪ±" - - msgid "Light" msgstr "Ī¦Ļ‰Ļ‚" diff --git a/locale/po/eo.po b/locale/po/eo.po index 9f1ce0123689..e29377173ac8 100644 --- a/locale/po/eo.po +++ b/locale/po/eo.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-29 13:46+0000\n" "Last-Translator: william sĆ©lifet \n" "Language-Team: Esperanto \n" diff --git a/locale/po/es.po b/locale/po/es.po index 7c4673be226a..5785cc629ac1 100644 --- a/locale/po/es.po +++ b/locale/po/es.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-26 09:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-02-02 08:56+0000\n" "Last-Translator: Gabriel GazzĆ”n \n" "Language-Team: Spanish \n" "Language: es\n" @@ -439,6 +439,11 @@ msgid "Expanded state of the slot" msgstr "Estado expandido del contenedor" +msgctxt "ID" +msgid "Target ID Type" +msgstr "Tipo de ID objetivo" + + msgctxt "ID" msgid "Action" msgstr "AcciĆ³n" @@ -5928,7 +5933,7 @@ msgstr "Invertir horizontalmente" msgid "Flip the background image horizontally" -msgstr "Invierte la imagen de fondo en sentido horizontal" +msgstr "Voltea la imagen de fondo en sentido horizontal" msgid "Flip Vertically" @@ -5936,7 +5941,7 @@ msgstr "Invertir verticalmente" msgid "Flip the background image vertically" -msgstr "Invierte la imagen de fondo en sentido vertical" +msgstr "Voltea la imagen de fondo en sentido vertical" msgid "Background Images" @@ -8029,7 +8034,7 @@ msgstr "AcciĆ³n del objeto" msgid "Bones only: apply the object's transformation channels of the action to the constrained bone, instead of bone's channels" -msgstr "SĆ³lo para huesos: Aplica los canales de transformaciĆ³n de la acciĆ³n del objeto al hueso restringido, en vez de los canales del propio hueso" +msgstr "(SĆ³lo para huesos) Aplica al hueso restringido los canales de la acciĆ³n correspondientes a las transformaciones del objeto, en vez de los canales correspondientes al propio hueso" msgid "Use Evaluation Time" @@ -25966,10 +25971,6 @@ msgid "Display the object's name" msgstr "Muestra el nombre del objeto" -msgid "Shape Key Lock" -msgstr "Fijar Forma clave activa" - - msgid "Only show the active shape key at full value" msgstr "Muestra Ćŗnicamente la forma clave activa, a mĆ”xima intensidad" @@ -34304,6 +34305,14 @@ msgid "Editor menu containing buttons" msgstr "MenĆŗ del editor que contiene botones" +msgid "Metaball" +msgstr "Metabola" + + +msgid "Show/Hide" +msgstr "Mostrar / Ocultar" + + msgid "Names" msgstr "Nombres" @@ -34312,10 +34321,6 @@ msgid "Bone Roll" msgstr "Giro de huesos" -msgid "Show/Hide" -msgstr "Mostrar / Ocultar" - - msgid "Clean Up" msgstr "Limpiar" @@ -34404,10 +34409,6 @@ msgid "Assign Material" msgstr "Asignar material" -msgid "Metaball" -msgstr "Metabola" - - msgid "Light" msgstr "Luz" @@ -44489,30 +44490,14 @@ msgid "Create matte based on differences in color channels" msgstr "Permite crear un mate basado en las diferencias en los canales de color" -msgid "RGB color space" -msgstr "Espacio de color RVA" - - -msgid "HSV color space" -msgstr "Espacio de color TSV" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "Espacio de color YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "Espacio de color YCbCr" - - msgctxt "Color" msgid "Limit Channel" msgstr "Limitar canal" @@ -45036,26 +45021,6 @@ msgid "Mode of color processing" msgstr "Modo de procesamiento del color" -msgid "Use RGB color processing" -msgstr "Usar procesamiento de color RVA" - - -msgid "Use HSV color processing" -msgstr "Usar procesamiento de color TSV" - - -msgid "Use HSL color processing" -msgstr "Usar procesamiento de color TSL" - - -msgid "Use YCbCr color processing" -msgstr "Usar procesamiento de color YCbCr" - - -msgid "Use YUV color processing" -msgstr "Usar procesamiento de color YUV" - - msgid "Color space used for YCbCrA processing" msgstr "Espacio de color usado para el procesamiento YCbCr Ī±" @@ -45513,6 +45478,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "Permite crear un mate basado en la distancia, en espacio tridimensional, entre los colores de la imagen y del fondo" +msgid "RGB color space" +msgstr "Espacio de color RVA" + + msgid "YCbCr suppression" msgstr "SupresiĆ³n YCbCr" @@ -46979,42 +46948,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Usar valores relativos (como fracciĆ³n del tamaƱo de la imagen original) para definir la traslaciĆ³n" -msgid "Wrapping" -msgstr "Ciclo" - - -msgid "Wrap image on a specific axis" -msgstr "Repite cĆ­clicamente la imagen en un eje especĆ­fico" - - -msgid "No wrapping on X and Y" -msgstr "No repetir en X ni en Y" - - msgid "X Axis" msgstr "Eje X" -msgid "Wrap all pixels on the X axis" -msgstr "Repetir todos los pĆ­xeles en el eje X" - - msgid "Y Axis" msgstr "Eje Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Repetir todos los pĆ­xeles en el eje Y" - - msgid "Both Axes" msgstr "Ambos ejes" -msgid "Wrap all pixels on both axes" -msgstr "Repetir todos los pĆ­xeles en ambos ejes" - - msgid "Map values to colors with the use of a gradient" msgstr "Mapea valores en colores mediante el uso de un gradiente" @@ -48673,6 +48618,14 @@ msgid "Retrieve a unit length vector indicating the direction pointing away from msgstr "Proporciona un versor que indica la direcciĆ³n que apunta hacia afuera de una geometrĆ­a, en cada elemento" +msgid "Flat Corner Normals" +msgstr "Normales planas de esquina" + + +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "Siempre usar normales de caras para el dominio Esquinas de caras, coincidiendo con el comportamiento antiguo del nodo" + + msgid "Output a single object" msgstr "Producir un Ćŗnico objeto" @@ -60052,20 +60005,20 @@ msgstr "Crear una notificaciĆ³n luego de la operaciĆ³n" msgctxt "Operator" msgid "Clear Inverse" -msgstr "Eliminar inversiĆ³n" +msgstr "Eliminar compensaciĆ³n" msgid "Clear inverse correction for Child Of constraint" -msgstr "Elimina la inversiĆ³n correctiva de la restricciĆ³n Subordinar" +msgstr "Elimina la compensaciĆ³n correctiva de la restricciĆ³n Subordinar" msgctxt "Operator" msgid "Set Inverse" -msgstr "Activar inversiĆ³n" +msgstr "Activar compensaciĆ³n" msgid "Set inverse correction for Child Of constraint" -msgstr "Activa una inversiĆ³n correctiva para la restricciĆ³n Subordinar" +msgstr "Activa una compensaciĆ³n correctiva para la restricciĆ³n Subordinar" msgctxt "Operator" @@ -60153,11 +60106,11 @@ msgstr "Mueve la restricciĆ³n hacia arriba en la lista de modificadores" msgid "Clear inverse correction for Object Solver constraint" -msgstr "Elimina la inversiĆ³n correctiva de la restricciĆ³n Resolver objeto" +msgstr "Elimina la compensaciĆ³n correctiva de la restricciĆ³n Resolver objeto" msgid "Set inverse correction for Object Solver constraint" -msgstr "Activa una inversiĆ³n correctiva para la restricciĆ³n Resolver objeto" +msgstr "Activa una compensaciĆ³n correctiva para la restricciĆ³n Resolver objeto" msgctxt "Operator" @@ -62563,6 +62516,22 @@ msgid "Export armatures using rest position as joints' rest pose. When off, curr msgstr "Exportar esqueletos usando su posiciĆ³n de reposo como pose de reposo de sus huesos. Si estĆ” desactivado, la pose del fotograma actual serĆ” usada como reposo" +msgid "Sampling Interpolation Fallback" +msgstr "InterpolaciĆ³n alternativa muestreadas" + + +msgid "Interpolation fallback for sampled animations, when the property is not keyed" +msgstr "InterpolaciĆ³n alternativa para animaciones muestreadas, cuando la propiedad no estĆ© animada" + + +msgid "Linear interpolation between keyframes" +msgstr "InterpolaciĆ³n lineal entre claves" + + +msgid "No interpolation between keyframes" +msgstr "Sin interpolaciĆ³n entre claves" + + msgid "Shared Accessors" msgstr "Accesores compartidos" @@ -70973,11 +70942,11 @@ msgstr "LĆ­mite para adherir los vĆ©rtices centrales al eje de simetrĆ­a" msgctxt "Operator" msgid "Snap to Symmetry" -msgstr "Adherir a simetrĆ­a" +msgstr "Adherir a simĆ©trico" msgid "Snap vertex pairs to their mirrored locations" -msgstr "Adhiere pares de vĆ©rtices a sus ubicaciones simĆ©tricas" +msgstr "Adhiere los vĆ©rtices seleccionados a la posiciĆ³n de sus pares simĆ©tricos" msgid "Mix factor of the locations of the vertices" @@ -71619,6 +71588,22 @@ msgid "Add a collection info node to the current node editor" msgstr "Agrega un nodo de informaciĆ³n de colecciĆ³n al editor de nodos actual" +msgid "Source color" +msgstr "Color original" + + +msgid "Gamma Corrected" +msgstr "Con gama corregido" + + +msgid "The source color is gamma corrected" +msgstr "El color original tiene su gama corregido" + + +msgid "Has Alpha" +msgstr "Tiene alfa" + + msgctxt "Operator" msgid "Add File Node" msgstr "Agregar nodo de archivo" @@ -75654,11 +75639,11 @@ msgstr "Desbloquear todas las Formas clave" msgctxt "Operator" msgid "Mirror Shape Key" -msgstr "Simetrizar Forma clave" +msgstr "Voltear Forma clave" msgid "Mirror the current shape key along the local X axis" -msgstr "Permite simetrizar la Forma clave actual con respecto al eje local X" +msgstr "Permite voltear la Forma clave actual, con respecto al eje local X" msgctxt "Operator" @@ -84451,18 +84436,6 @@ msgid "Drop colors to buttons" msgstr "Soltar colores sobre botones" -msgid "Source color" -msgstr "Color original" - - -msgid "Gamma Corrected" -msgstr "Con gama corregido" - - -msgid "The source color is gamma corrected" -msgstr "El color original tiene su gama corregido" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "Arrastrar material a contenedores" @@ -87159,6 +87132,11 @@ msgid "Lattices" msgstr "Jaulas" +msgctxt "ID" +msgid "Lights" +msgstr "Luces" + + msgctxt "ID" msgid "Light Probes" msgstr "Sondas de luz" @@ -89177,10 +89155,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "Especificar un valor personalizado de metros por unidad de la escena" -msgid "Convert World Material" -msgstr "Convertir material del entorno" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "Convierte el material del entorno a una luz de tipo cĆŗpula de USD. Actualmente funciona para materiales simples, consiste en una textura de entorno conectada a un sombreador de fondo, con una multiplicaciĆ³n vectorial opcional para el color de la textura" @@ -89534,10 +89508,6 @@ msgid "Add all imported objects to a new collection" msgstr "Agregar todos los objetos importados a una nueva colecciĆ³n" -msgid "Create World Material" -msgstr "Crear material de entorno" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "Convierte la primera luz de tipo cĆŗpula de USD detectada a un sombreador de entorno" @@ -90641,19 +90611,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Usar sĆ³lo modificadores de deformaciĆ³n (deshabilita temporalmente todos los modificadores de construcciĆ³n excepto el Multi-resoluciĆ³n)" -msgid "UV Sculpting" -msgstr "Esculpido de UV" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "Preajuste curva de intensidad" - - -msgid "Strength Curve" -msgstr "Curva de intensidad" - - msgid "Properties of vertex and weight paint mode" msgstr "Propiedades del modo de pintura de vĆ©rtices e influencias" @@ -102429,10 +102386,18 @@ msgid "Retiming Key Selection Status" msgstr "Estado de selecciĆ³n clave retemporizaciĆ³n" +msgid "(Deprecated: Replaced by '.strips') Top-level strips only" +msgstr "(Obsoleto: Reemplazado por '.strips') SĆ³lo para clips de nivel superior" + + msgid "All Strips" msgstr "Todos los clips" +msgid "(Deprecated: Replaced by '.strips_all') All strips, recursively including those inside metastrips" +msgstr "(Obsoleto: Reemplazado por '.strips_all') Para todos los clips, incluyendo recursivamente a aquellos dentro de meta-clips" + + msgid "Show Missing Media" msgstr "Mostrar medios faltantes" @@ -107173,6 +107138,10 @@ msgid "Sequence strip to group other strips as a single sequence strip" msgstr "Clip de secuencia que agruparĆ” a varios clips en uno solo" +msgid "(Deprecated: Replaced by '.strips') Strips nested in meta strip" +msgstr "(Obsoleto: Reemplazado por '.strips') SĆ³lo para clips anidados en meta-clips" + + msgid "Strips nested in meta strip" msgstr "Clips anidados en el meta-clip" @@ -111349,6 +111318,19 @@ msgid "Enable this light in solid shading mode" msgstr "Habilitar esta luz en el modo de visualizaciĆ³n SĆ³lido" +msgid "UV Sculpting" +msgstr "Esculpido de UV" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "Preajuste curva de intensidad" + + +msgid "Strength Curve" +msgstr "Curva de intensidad" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Grupo de vĆ©rtices, usado para deformaciĆ³n con esqueletos y otros propĆ³sitos" @@ -117107,6 +117089,10 @@ msgid "Work Relative to some Object" msgstr "Relativo a un objeto" +msgid "No 'Relative To' object found, set one explicitly or make sure there is an active object" +msgstr "No se encontrĆ³ un objeto en el subpanel 'Relativo', definir uno de manera explĆ­cita o asegurarse de que exista un objeto activo" + + msgid "Select an object or pose bone" msgstr "Selecciona un objeto o hueso de pose" @@ -117724,6 +117710,10 @@ msgid "No glTF Animation" msgstr "No existe ninguna animaciĆ³n glTF" +msgid "Please disable/enable 'action filter' to refresh the list" +msgstr "Alternar el interruptor 'Filtrar acciones' para refrescar la lista" + + msgid "No Actions in .blend file" msgstr "No hay acciones en el archivo .blend" @@ -120253,7 +120243,7 @@ msgstr "Foco en hueso" msgctxt "Image" msgid "Flip" -msgstr "Invertir" +msgstr "Voltear" msgid "Not Set" @@ -120507,7 +120497,7 @@ msgstr "Ordenar por jerarquĆ­a de huesos" msgctxt "Operator" msgid "Mirror Vertex Group (Topology)" -msgstr "Simetrizar grupo de vĆ©rtices (TopologĆ­a)" +msgstr "Simetrizar grupo de vĆ©rtices (topologĆ­a)" msgctxt "Operator" @@ -120537,7 +120527,7 @@ msgstr "Nueva Forma clave a partir de mezcla" msgctxt "Operator" msgid "Mirror Shape Key (Topology)" -msgstr "Simetrizar Forma clave (TopologĆ­a)" +msgstr "Voltear Forma clave (topologĆ­a)" msgctxt "Operator" @@ -121887,6 +121877,10 @@ msgid "Bake All Light Probe Volumes" msgstr "Capturar todas las sondas de luz (volumen)" +msgid "Compositing Node Tree" +msgstr "Ɓrbol de nodos de composiciĆ³n" + + msgctxt "Operator" msgid "Export to File" msgstr "Exportar a archivo" @@ -127913,6 +127907,10 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "Error de procesamiento (%s) no es posible guardar: '%s'" +msgid "Failed to create stereo image buffer" +msgstr "Error al crear buffer de imagen estĆ©reo" + + msgid "ipos" msgstr "ipos" @@ -129616,6 +129614,18 @@ msgid "Cannot pose libdata" msgstr "No es posible posar los datos de la biblioteca" +msgid "Show Original Pose" +msgstr "Mostrar pose original" + + +msgid "Show Blended Pose" +msgstr "Mostrar pose fundida" + + +msgid "Flip Pose" +msgstr "Voltear pose" + + msgid "Pose lib is only for armatures in pose mode" msgstr "La biblioteca de poses es sĆ³lo para esqueletos en modo Pose" @@ -129652,48 +129662,8 @@ msgid "Sliding-Tool" msgstr "Deslizar" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "SĆ³lo eje [X]/Y/Z (X para restablecer)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "SĆ³lo eje X/[Y]/Z (Y para restablecer)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "SĆ³lo eje X/Y/[Z] (Z para restablecer)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = restringir eje" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - sĆ³lo posiciĆ³n (G para restablecer) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - sĆ³lo rotaciĆ³n (R para restablecer) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - sĆ³lo escala (S para restablecer) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - sĆ³lo propiedades de hueso flexible (B para restablecer) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - sĆ³lo propiedades personalizadas (C para restablecer) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - limitar a transformaciĆ³n / grupo de propiedades" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - alternar visibilidad de huesos" +msgid "Cancel" +msgstr "Cancelar" msgid "No keyframes to slide between" @@ -130117,6 +130087,10 @@ msgid "Node group's first output must be a geometry" msgstr "La primera salida del grupo de nodos debe ser una geometrĆ­a" +msgid "Place Next Stroke Vertex" +msgstr "Colocar siguiente vĆ©rtice del trazo" + + msgid "Erase" msgstr "Borrador" @@ -130277,10 +130251,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "No hay ningĆŗn objeto activo o el objeto activo no es un objeto de Grease Pencil" -msgid "Cancel" -msgstr "Cancelar" - - msgid "Panning" msgstr "Desplazamiento" @@ -131743,6 +131713,10 @@ msgid "Icosphere" msgstr "Esfera geodĆ©sica" +msgid "Profile Shape" +msgstr "Forma del perfil" + + msgid "Harden" msgstr "Endurecer" @@ -131751,6 +131725,10 @@ msgid "Outer" msgstr "Exterior" +msgid "Miter Profile Shape" +msgstr "Forma del perfil de ingletes" + + msgid "Intersection Type" msgstr "Tipo de intersecciĆ³n" @@ -132448,6 +132426,18 @@ msgid "No UV layer named \"%s\" found in the object \"%s\"" msgstr "No se encontrĆ³ ninguna capa UV llamada \"%s\" en el objeto \"%s\"" +msgid "Cage object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "Objeto jaula \"%s\" no encontrado en la escena evaluada, podrĆ­a estar oculto" + + +msgid "Object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "Objeto \"%s\" no encontrado en la escena evaluada, podrĆ­a estar oculto" + + +msgid "Failed to access mesh from object \"%s\", ensure it's visible while rendering" +msgstr "No fue posible acceder a la malla del objeto \"%s\", asegurarse de que estĆ© visible al procesar" + + msgid "Error baking from object \"%s\"" msgstr "Problema al capturar desde el objeto \"%s\"" @@ -132569,7 +132559,7 @@ msgstr "Sin objetivos" msgid "Could not find constraint data for Child-Of Set Inverse" -msgstr "No fue posible encontrar datos para 'Activar inversiĆ³n' de la restricciĆ³n Subordinar" +msgstr "No fue posible encontrar datos para 'Activar compensaciĆ³n' de la restricciĆ³n Subordinar" msgid "Child Of constraint not found" @@ -132585,7 +132575,7 @@ msgstr "La trayectoria ya estĆ” animada" msgid "Could not find constraint data for ObjectSolver Set Inverse" -msgstr "No fue posible encontrar datos de restricciĆ³n para 'Activar inversiĆ³n' de la restricciĆ³n Resolver objeto" +msgstr "No fue posible encontrar datos de restricciĆ³n para 'Activar compensaciĆ³n' de la restricciĆ³n Resolver objeto" msgid "Applied constraint was not first, result may not be as expected" @@ -134158,18 +134148,6 @@ msgid "UV map or surface attachment is invalid" msgstr "El anclaje al mapa UV o la superficie es invĆ”lido" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "Rellenar: ESC/RMB cancelar, LMB rellenar, MMB ajustar extensiĆ³n, S: cambiar modo, D: colisiĆ³n de trazos | Modo: {}, ColisiĆ³n {}, Longitud: {:.3f}" - - -msgid "ON" -msgstr "ACTIVADO" - - -msgid "OFF" -msgstr "DESACTIVADO" - - msgid "No Grease Pencil frame to draw weight on" msgstr "No hay ningĆŗn fotograma de Grease Pencil sobre el cual pintar influencias" @@ -134465,6 +134443,10 @@ msgid "Action must have at least one keyframe or F-Modifier" msgstr "La acciĆ³n debe contener al menos un fotograma clave o modificador-f" +msgid "Action+Slot has already been stashed" +msgstr "La acciĆ³n+contenedor ya han sido escondidos" + + msgid "Could not find current NLA Track" msgstr "No fue posible encontrar la pista actual de ANL" @@ -134701,6 +134683,10 @@ msgid "Cannot read '%s': %s" msgstr "No es posible leer '%s': %s" +msgid "Place Marker" +msgstr "Colocar marcador" + + msgid "Delete selected tracks?" msgstr "ĀæBorrar los rastros seleccionados?" @@ -135258,42 +135244,6 @@ msgid "Deleted %u drivers" msgstr "Se borraron %u controladores" -msgid "Decimate Keyframes" -msgstr "Diezmar claves" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - Modificar definiciĆ³n" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - Modificar flexiĆ³n de la curva" - - -msgid "Ease Keys" -msgstr "Suavizar claves" - - -msgid "Shear Keys" -msgstr "Sesgar claves" - - -msgid "D - Toggle Direction" -msgstr "D - Alternar direcciĆ³n" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Escalar desde extremo derecho" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Escalar desde extremo izquierdo" - - -msgid "Scale from Neighbor Keys" -msgstr "Escalar segĆŗn claves cercanos" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "Permite diezmar curvas-f especificando cuĆ”nto podrĆ”n desviarse de su forma original" @@ -137907,6 +137857,14 @@ msgid " | Ctrl - Hold for increments" msgstr " | Ctrl - Mantener para incrementos" +msgid "Overshoot" +msgstr "ExtensiĆ³n" + + +msgid "Overshoot Disabled" +msgstr "ExtensiĆ³n deshabilitada" + + msgid "Unpack File" msgstr "Desempacar archivo" @@ -138000,6 +137958,14 @@ msgid "Pinned vertices can be selected in Vertex Mode only" msgstr "SĆ³lo es posible seleccionar vĆ©rtices fijos en modo de VĆ©rtices" +msgid "Switch Island" +msgstr "Intercambiar isla" + + +msgid "Midpoints" +msgstr "Puntos medios" + + msgid "Could not initialize stitching on any selected object" msgstr "No fue posible inicializar uniones en ninguno de los objetos seleccionados" @@ -140864,8 +140830,8 @@ msgid "Clipping" msgstr "Limitar" -msgid "Level Viewport" -msgstr "Niveles Vista" +msgid "Levels Viewport" +msgstr "Nivel Vistas" msgid "Unsubdivide" @@ -141002,6 +140968,14 @@ msgid "Built without Remesh modifier" msgstr "Construido sin el modificador Rehacer malla" +msgid "Zero voxel size cannot be solved" +msgstr "No es posible calcular con un tamaƱo de vĆ³xel de cero" + + +msgid "Zero scale cannot be solved" +msgstr "No es posible calcular con un tamaƱo de escala de cero" + + msgid "Axis Object" msgstr "Eje de objeto" @@ -141083,10 +141057,6 @@ msgid "Adaptive Subdivision" msgstr "SubdivisiĆ³n adaptativa" -msgid "Levels Viewport" -msgstr "Nivel Vistas" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "Escala final: Procesamiento %.2f pĆ­x, Vistas %.2f pĆ­x" @@ -141358,6 +141328,14 @@ msgid "Quality:" msgstr "Calidad:" +msgid "Disabled. Built without OpenImageDenoise" +msgstr "Deshabilitado, compilado sin soporte para OpenImageDenoise" + + +msgid "Disabled. Platform not supported" +msgstr "Deshabilitado. Plataforma no soportada" + + msgid "Image 1" msgstr "Imagen 1" @@ -141486,6 +141464,10 @@ msgid "ID value" msgstr "Valor de ID" +msgid "Render passes in the Viewport compositor are only supported in EEVEE" +msgstr "Al usar el compositor en las vistas, las pasadas de procesamiento sĆ³lo se soportan en EEVEE" + + msgid "Viewport compositor setup not fully supported" msgstr "ConfiguraciĆ³n de composiciĆ³n en el visor no soportada en forma completa" @@ -141526,10 +141508,6 @@ msgid "Offset Y" msgstr "Desplazamiento Y" -msgid "Undistortion" -msgstr "Revertir distorsiĆ³n" - - msgid "Dot" msgstr "Escalar" @@ -142573,10 +142551,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Valores mĆ”s grandes que el umbral se encontrarĆ”n dentro de la malla generada" -msgid "Has Alpha" -msgstr "Tiene alfa" - - msgid "Frame Count" msgstr "Cantidad de fotogramas" @@ -145398,6 +145372,14 @@ msgid "drag-" msgstr "arrast-" +msgid "ON" +msgstr "ACTIVADO" + + +msgid "OFF" +msgstr "DESACTIVADO" + + msgid "Set Debug Value" msgstr "Definir valor de depuraciĆ³n" diff --git a/locale/po/eu.po b/locale/po/eu.po index 2d27bf3efa7e..d249e0d25eb9 100644 --- a/locale/po/eu.po +++ b/locale/po/eu.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-29 13:54+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Basque \n" @@ -2113,14 +2113,6 @@ msgid "Sphere" msgstr "Esfera" -msgid "ON" -msgstr "GAITUTA" - - -msgid "OFF" -msgstr "DESGAITUTA" - - msgid "normal" msgstr "Normala" @@ -2289,6 +2281,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "GAITUTA" + + +msgid "OFF" +msgstr "DESGAITUTA" + + msgid "unsupported format" msgstr "Euskarri gabeko formatua" diff --git a/locale/po/fa.po b/locale/po/fa.po index 894209faa40f..1df9d41c75d6 100644 --- a/locale/po/fa.po +++ b/locale/po/fa.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-05-03 12:13+0000\n" "Last-Translator: Nooby Noober \n" "Language-Team: Persian \n" @@ -4879,14 +4879,14 @@ msgid "Out" msgstr "ļƽļŗŸļ»­ļŗ®ļŗ§" -msgid "Nothing selected" -msgstr "ļ»©ļŗŖļŗøļ»§ ļŗļŗŽļŗØļŗ˜ļ»§ļŗ ļŗ°ļÆæļ­¼ ļ­»ļÆæļ»«" - - msgid "Cancel" msgstr "ļ»‘ļŗļŗ®ļŗ¼ļ»§ļŗ" +msgid "Nothing selected" +msgstr "ļ»©ļŗŖļŗøļ»§ ļŗļŗŽļŗØļŗ˜ļ»§ļŗ ļŗ°ļÆæļ­¼ ļ­»ļÆæļ»«" + + msgctxt "Operator" msgid "Reset All to Default Values" msgstr "ļŗ½ļŗ®ļ»“ ļŗ¶ļÆæļ­˜ ļŗ®ļƾļŗ©ļŗŽļ»˜ļ»£ ļ»Ŗļŗ‘ ļ»Ŗļ»¤ļ»« ļŗ©ļŗŖļŗ ļ»£ ļ»¢ļÆæļ»ˆļ»Øļŗ—" diff --git a/locale/po/fi.po b/locale/po/fi.po index e4812337b0a9..5422d08214ad 100644 --- a/locale/po/fi.po +++ b/locale/po/fi.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-10-16 00:56+0000\n" "Last-Translator: Leevi Oksanen \n" "Language-Team: Finnish \n" @@ -7340,14 +7340,18 @@ msgid "Mask" msgstr "Maski" -msgid "Names" -msgstr "Nimet" +msgid "Metaball" +msgstr "Metapallo" msgid "Show/Hide" msgstr "NƤytƤ/Piilota" +msgid "Names" +msgstr "Nimet" + + msgid "UV Mapping" msgstr "UV-kartoittaminen" @@ -7368,10 +7372,6 @@ msgid "Select Loops" msgstr "Valitse silmukat" -msgid "Metaball" -msgstr "Metapallo" - - msgid "Light" msgstr "Valo" @@ -13999,6 +13999,10 @@ msgid "Create" msgstr "Luo" +msgid "Cancel" +msgstr "Peruuta" + + msgid "No pose to copy" msgstr "Ei kopioitavaa asentoa" @@ -14037,10 +14041,6 @@ msgid "Nothing selected" msgstr "MitƤƤn ei ole valittu" -msgid "Cancel" -msgstr "Peruuta" - - msgctxt "Operator" msgid "Change Shortcut" msgstr "Vaihda pikakomento" @@ -14826,14 +14826,6 @@ msgid "Missing surface mesh" msgstr "Pinnan muoto puuttuu" -msgid "ON" -msgstr "PƤƤllƤ" - - -msgid "OFF" -msgstr "Pois pƤƤltƤ" - - msgid "Trace" msgstr "JƤljitƤ" @@ -17192,6 +17184,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "PƤƤllƤ" + + +msgid "OFF" +msgstr "Pois pƤƤltƤ" + + msgid "unsupported format" msgstr "frmaattia ei tueta" diff --git a/locale/po/fr.po b/locale/po/fr.po index bb4214218127..6736a040e29e 100644 --- a/locale/po/fr.po +++ b/locale/po/fr.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2025-01-21 01:42+0000\n" "Last-Translator: Damien Picard \n" "Language-Team: French \n" @@ -25966,10 +25966,6 @@ msgid "Display the object's name" msgstr "Afficher le nom de lā€™objet" -msgid "Shape Key Lock" -msgstr "Verrouiller la clĆ© de forme" - - msgid "Only show the active shape key at full value" msgstr "Nā€™afficher que la clĆ© de forme active, avec son effet au maximum" @@ -34304,6 +34300,14 @@ msgid "Editor menu containing buttons" msgstr "Menu dā€™Ć©diteur contenant des boutons" +msgid "Metaball" +msgstr "MĆ©taballe" + + +msgid "Show/Hide" +msgstr "Afficher/cacher" + + msgid "Names" msgstr "Noms" @@ -34312,10 +34316,6 @@ msgid "Bone Roll" msgstr "Roulis de lā€™os" -msgid "Show/Hide" -msgstr "Afficher/cacher" - - msgid "Clean Up" msgstr "Nettoyer" @@ -34404,10 +34404,6 @@ msgid "Assign Material" msgstr "Assigner un matĆ©riau" -msgid "Metaball" -msgstr "MĆ©taballe" - - msgid "Light" msgstr "Ɖclairage" @@ -44491,30 +44487,14 @@ msgid "Create matte based on differences in color channels" msgstr "CrĆ©er un masque dā€™aprĆØs les diffĆ©rences entre les canaux de couleur" -msgid "RGB color space" -msgstr "Espace de couleur RVB" - - -msgid "HSV color space" -msgstr "Espace de couleur TSV" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "Espace de couleur YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "Espace de couleur YCbCr" - - msgctxt "Color" msgid "Limit Channel" msgstr "Canal de limitation" @@ -45038,26 +45018,6 @@ msgid "Mode of color processing" msgstr "Mode de traitement de la couleur" -msgid "Use RGB color processing" -msgstr "Traiter la couleur en RVB" - - -msgid "Use HSV color processing" -msgstr "Traiter la couleur en TSV" - - -msgid "Use HSL color processing" -msgstr "Traiter la couleur en TSL" - - -msgid "Use YCbCr color processing" -msgstr "Traiter la couleur en YCbCr" - - -msgid "Use YUV color processing" -msgstr "Traiter la couleur en YCbCr" - - msgid "Color space used for YCbCrA processing" msgstr "Espace de couleur utilisĆ© pour le traitement YCbCrA" @@ -45515,6 +45475,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "CrĆ©er un masque dā€™aprĆØs la distance 3D entre les couleurs" +msgid "RGB color space" +msgstr "Espace de couleur RVB" + + msgid "YCbCr suppression" msgstr "Suppression YCbCr" @@ -46981,42 +46945,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Utiliser des valeurs relatives Ć  la taille de lā€™image dā€™entrĆ©e pour dĆ©finir la translation" -msgid "Wrapping" -msgstr "RĆ©pĆ©ter" - - -msgid "Wrap image on a specific axis" -msgstr "RĆ©pĆ©ter lā€™image le long dā€™un axe donnĆ©" - - -msgid "No wrapping on X and Y" -msgstr "Pas de rĆ©pĆ©tition, ni en X ni en Y" - - msgid "X Axis" msgstr "Axe X" -msgid "Wrap all pixels on the X axis" -msgstr "RĆ©pĆ©ter tous les pixels sur lā€™axe Y" - - msgid "Y Axis" msgstr "Axe Y" -msgid "Wrap all pixels on the Y axis" -msgstr "RĆ©pĆ©ter tous les pixels sur lā€™axe Y" - - msgid "Both Axes" msgstr "Les deux axes" -msgid "Wrap all pixels on both axes" -msgstr "RĆ©pĆ©ter tous les pixels sur les deux axes" - - msgid "Map values to colors with the use of a gradient" msgstr "Faire correspondre les valeurs Ć  des couleurs Ć  lā€™aide dā€™un dĆ©gradĆ©" @@ -71617,6 +71557,22 @@ msgid "Add a collection info node to the current node editor" msgstr "Ajouter un nœud dā€™infos de collection Ć  lā€™Ć©diteur de nœuds actuel" +msgid "Source color" +msgstr "Couleur source" + + +msgid "Gamma Corrected" +msgstr "Gamma-corrigĆ©e" + + +msgid "The source color is gamma corrected" +msgstr "La couleur source est gamma-corrigĆ©e" + + +msgid "Has Alpha" +msgstr "A un alpha" + + msgctxt "Operator" msgid "Add File Node" msgstr "Ajouter un nœud Fichier" @@ -84441,18 +84397,6 @@ msgid "Drop colors to buttons" msgstr "DĆ©poser la couleur sur les boutons" -msgid "Source color" -msgstr "Couleur source" - - -msgid "Gamma Corrected" -msgstr "Gamma-corrigĆ©e" - - -msgid "The source color is gamma corrected" -msgstr "La couleur source est gamma-corrigĆ©e" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "DĆ©poser le matĆ©riau dans les emplacements de matĆ©riaux" @@ -89167,10 +89111,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "Choisir une valeur personnalisĆ©e pour le nombre de mĆØtres par unitĆ© de la scĆØne" -msgid "Convert World Material" -msgstr "Convertir le matĆ©riau du monde" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "Convertir le matĆ©riau du monde en dome light USD. Fonctionne actuellement pour les matĆ©riaux simples consistant en une texture dā€™environnement connectĆ©e Ć  un shader dā€™arriĆØre-plan, avec Ć©ventuellement une multiplication scalaire de la couleur de texture" @@ -89524,10 +89464,6 @@ msgid "Add all imported objects to a new collection" msgstr "Ajouter tous les objets importĆ©s Ć  une nouvelle collection" -msgid "Create World Material" -msgstr "CrĆ©er un matĆ©riau du monde" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "Convertir le premier dome light USD trouvĆ© en shader dā€™arriĆØre-plan du monde" @@ -90631,19 +90567,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Nā€™utiliser que les modificateurs de dĆ©formation (dĆ©sactiver temporairement tous les modificateurs constructifs, exceptĆ©e la multirĆ©solutions)" -msgid "UV Sculpting" -msgstr "Sculpture UV" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "PrĆ©rĆ©glage de courbe dā€™intensitĆ©" - - -msgid "Strength Curve" -msgstr "Courbe dā€™intensitĆ©" - - msgid "Properties of vertex and weight paint mode" msgstr "PropriĆ©tĆ©s des modes de peinture de sommets et de poids" @@ -111315,6 +111238,19 @@ msgid "Enable this light in solid shading mode" msgstr "Activer cet Ć©clairage en mode dā€™affichage solide" +msgid "UV Sculpting" +msgstr "Sculpture UV" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "PrĆ©rĆ©glage de courbe dā€™intensitĆ©" + + +msgid "Strength Curve" +msgstr "Courbe dā€™intensitĆ©" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Groupe de sommets, utilisĆ© pour la dĆ©formation de lā€™armature et dā€™autres usages" @@ -129618,48 +129554,8 @@ msgid "Sliding-Tool" msgstr "Outil glisser" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "Axe [X]/Y/Z uniquement (X pour effacer)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Axe X/[Y]/Z uniquement (Y pour effacer)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "Axe X/Y/[Z] uniquement (Z pour effacer)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = contrainte dā€™axe" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - Position uniquement (G pour effacer) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - Rotation uniquement (R pour effacer) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - Ɖchelle uniquement (S pour effacer) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - PropriĆ©tĆ©s dā€™os souples uniquement (B pour effacer) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - PropriĆ©tĆ©s personnalisĆ©es uniquement (C pour effacer) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - Limiter Ć  un ensemble de transformations ou propriĆ©tĆ©s" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] -(DĆ©s)activer la visibilitĆ© dā€™os" +msgid "Cancel" +msgstr "Annuler" msgid "No keyframes to slide between" @@ -130243,10 +130139,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "Aucun object actif, ou lā€™objet actif nā€™est pas un Grease Pencil" -msgid "Cancel" -msgstr "Annuler" - - msgid "Panning" msgstr "DĆ©placement de vue" @@ -134124,18 +134016,6 @@ msgid "UV map or surface attachment is invalid" msgstr "La carte UV ou lā€™attachement de surface est invalide" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "RemplirĀ : Ɖchap/ClicDĀ : Annuler, ClicGĀ : Remplir, ClicMĀ : Ajuster lā€™extension, SĀ : Changer de mode, DĀ : Collision des traits | ModeĀ : {}, CollisionĀ : {}, LongueurĀ : {:.3f}" - - -msgid "ON" -msgstr "ON" - - -msgid "OFF" -msgstr "OFF" - - msgid "No Grease Pencil frame to draw weight on" msgstr "Aucune frame de Grease Pencil sur laquelle dessiner les poids" @@ -135224,42 +135104,6 @@ msgid "Deleted %u drivers" msgstr "%u contrĆ“leurs supprimĆ©s" -msgid "Decimate Keyframes" -msgstr "Supprimer les images clĆ©s" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - Modifier la nettetĆ©" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - Modifier la courbure de la courbe" - - -msgid "Ease Keys" -msgstr "Amortir les clĆ©s" - - -msgid "Shear Keys" -msgstr "Cisailler les clĆ©s" - - -msgid "D - Toggle Direction" -msgstr "D - Changer de direction" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Redimensionner depuis la droite" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Redimensionner depuis la gauche" - - -msgid "Scale from Neighbor Keys" -msgstr "Redimensionner depuis les clĆ©s voisines" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "DĆ©cimer les F-courbes en spĆ©cifiant de combien elles peuvent dĆ©vier de leur courbe originale" @@ -140766,8 +140610,8 @@ msgid "Clipping" msgstr "Coller au miroir" -msgid "Level Viewport" -msgstr "Niveau vue" +msgid "Levels Viewport" +msgstr "Niveaux vue 3D" msgid "Unsubdivide" @@ -140985,10 +140829,6 @@ msgid "Adaptive Subdivision" msgstr "Subdivision adaptative" -msgid "Levels Viewport" -msgstr "Niveaux vue 3D" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "Ɖchelle finaleĀ : rendu %.2f px, vue 3D %.2f px" @@ -141400,10 +141240,6 @@ msgid "Offset Y" msgstr "DĆ©calage Y" -msgid "Undistortion" -msgstr "DĆ©-distorsion" - - msgid "Dot" msgstr "Produit scalaire" @@ -142447,10 +142283,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Les valeurs plus Ć©levĆ©es que le seuil sont Ć  lā€™intĆ©rieur du maillage gĆ©nĆ©rĆ©" -msgid "Has Alpha" -msgstr "A un alpha" - - msgid "Frame Count" msgstr "Nombre de frames" @@ -145272,6 +145104,14 @@ msgid "drag-" msgstr "glisser-" +msgid "ON" +msgstr "ON" + + +msgid "OFF" +msgstr "OFF" + + msgid "Set Debug Value" msgstr "DĆ©finir la valeur de dĆ©bugage" diff --git a/locale/po/ha.po b/locale/po/ha.po index 4f198ff0767c..958cfa6e42a7 100644 --- a/locale/po/ha.po +++ b/locale/po/ha.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2017-12-25 14:01+0100\n" "Last-Translator: UMAR HARUNA ABDULLAHI \n" "Language-Team: BlenderNigeria \n" diff --git a/locale/po/he.po b/locale/po/he.po index c770ad8b9c04..f3539d28728e 100644 --- a/locale/po/he.po +++ b/locale/po/he.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2023-10-06 09:54+0000\n" "Last-Translator: Eitan Traurig \n" "Language-Team: Hebrew \n" @@ -777,10 +777,6 @@ msgid "Export Vertex Colors" msgstr "דוקדוק יעבצ אציי" -msgid "UV Sculpting" -msgstr "UV לוהיפ" - - msgid "Color Picker" msgstr "םיעבצ ×Øחוב" @@ -823,6 +819,10 @@ msgid "Sort by Name" msgstr "םש יפל ןיימ" +msgid "UV Sculpting" +msgstr "UV לוהיפ" + + msgid "Error Message" msgstr "האיגש ×Ŗעדוה" @@ -895,14 +895,14 @@ msgid "AOV" msgstr "AOV" -msgid "Nothing selected" -msgstr "×Øבד ×Øחבנ אל" - - msgid "Cancel" msgstr "לוטיב" +msgid "Nothing selected" +msgstr "×Øבד ×Øחבנ אל" + + msgctxt "Operator" msgid "Change Shortcut" msgstr "ך×Øד־×Øוציק הנש" diff --git a/locale/po/hi.po b/locale/po/hi.po index 1ea891b9f406..6bd4f9be6cef 100644 --- a/locale/po/hi.po +++ b/locale/po/hi.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2015-03-03 16:21+0530\n" "Last-Translator: Roshan Lal Gumasta \n" "Language-Team: Hindi \n" @@ -2613,6 +2613,10 @@ msgid "Mask" msgstr "ą¤†ą¤µą¤°ą¤£" +msgid "Show/Hide" +msgstr "ą¤›ą„ą¤Ŗą¤¾ą¤ą¤ / ą¤¦ą¤æą¤–ą¤¾ą¤ą¤" + + msgid "Names" msgstr "ą¤Øą¤¾ą¤®" @@ -2621,10 +2625,6 @@ msgid "Bone Roll" msgstr "ą¤¹ą¤”ą„ą¤”ą„€ ą¤Ŗą¤‚ą¤œą„€" -msgid "Show/Hide" -msgstr "ą¤›ą„ą¤Ŗą¤¾ą¤ą¤ / ą¤¦ą¤æą¤–ą¤¾ą¤ą¤" - - msgid "Snap" msgstr "ą¤øą„ą¤Øą„ˆą¤Ŗ" @@ -5975,15 +5975,15 @@ msgid "Same bone selected..." msgstr "ą¤ą¤• ą¤¹ą„€ ą¤¹ą¤”ą„ą¤”ą„€ ą¤•ą¤¾ ą¤šą¤Æą¤Ø ą¤•ą¤æą¤Æą¤¾..." +msgid "Cancel" +msgstr "ą¤°ą¤¦ą„ą¤¦ ą¤•ą¤°ą„‡ą¤‚" + + msgctxt "Curve" msgid "Surface" msgstr "ą¤øą¤¤ą¤¹" -msgid "Cancel" -msgstr "ą¤°ą¤¦ą„ą¤¦ ą¤•ą¤°ą„‡ą¤‚" - - msgctxt "Operator" msgid "Change Shortcut" msgstr "ą¤Ŗą¤°ą¤æą¤µą¤°ą„ą¤¤ą¤Ø ą¤¶ą„‰ą¤°ą„ą¤Ÿą¤•ą¤Ÿ" @@ -6396,14 +6396,6 @@ msgid "Blender Render" msgstr "ą¤¬ą„ą¤²ą„‡ą¤‚ą¤”ą¤° ą¤Ŗą„ą¤°ą¤¤ą¤æą¤Ŗą¤¾ą¤¦ą¤Ø" -msgid "ON" -msgstr "ą¤‘ą¤Ø" - - -msgid "OFF" -msgstr "ą¤¬ą¤‚ą¤¦" - - msgid "No active camera set" msgstr "ą¤•ą„‹ą¤ˆ ą¤øą¤•ą„ą¤°ą¤æą¤Æ ą¤Ŗą„ą¤°ą¤¤ą¤æą¤¬ą¤æą¤‚ą¤¬ą¤• ą¤Øą¤¹ą„€ą¤‚" @@ -6714,6 +6706,14 @@ msgid "Blender File View" msgstr "ą¤¬ą„ą¤²ą„‡ą¤‚ą¤”ą¤° ą¤øą¤‚ą¤šą¤æą¤•ą¤¾ ą¤¦ą„ƒą¤¶ą„ą¤Æ" +msgid "ON" +msgstr "ą¤‘ą¤Ø" + + +msgid "OFF" +msgstr "ą¤¬ą¤‚ą¤¦" + + msgctxt "Operator" msgid "Toggle System Console" msgstr "ą¤¬ą¤‚ą¤¦/ą¤¬ą„ą¤ ą¤Ŗą„ą¤°ą¤£ą¤¾ą¤²ą„€ ą¤•ą¤‚ą¤øą„‹ą¤²" diff --git a/locale/po/hu.po b/locale/po/hu.po index 125dba2f6b79..25dd85760340 100644 --- a/locale/po/hu.po +++ b/locale/po/hu.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-01-11 03:55+0000\n" "Last-Translator: RĆ©pĆ”si DĆ”vid \n" "Language-Team: Hungarian \n" @@ -5240,10 +5240,6 @@ msgid "Display the object's name" msgstr "Az objektum nevĆ©nek megjelenĆ­tĆ©se" -msgid "Shape Key Lock" -msgstr "Formakulcs lezĆ”rĆ”sa" - - msgid "Display the object's texture space" msgstr "Az objektum textĆŗraterĆ©nek megjelenĆ­tĆ©se" @@ -6614,6 +6610,10 @@ msgid "Mask" msgstr "Maszk" +msgid "Metaball" +msgstr "Meta test" + + msgid "Show/Hide" msgstr "Mutat/Rejt" @@ -6638,10 +6638,6 @@ msgid "Align View" msgstr "NĆ©zet igazĆ­tĆ”sa" -msgid "Metaball" -msgstr "Meta test" - - msgid "Light" msgstr "FĆ©nyforrĆ”s" @@ -9303,10 +9299,6 @@ msgid "Translate" msgstr "Ɓthelyez" -msgid "Wrapping" -msgstr "BorĆ­tĆ”s/csomagolĆ”s" - - msgid "X Axis" msgstr "X tengely" @@ -16513,6 +16505,10 @@ msgid "Operation requires an active bone" msgstr "A művelet aktĆ­v csontot igĆ©nyel" +msgid "Cancel" +msgstr "MĆ©gsem" + + msgid "Cannot spin" msgstr "Nem lehet forgatni" @@ -16540,10 +16536,6 @@ msgid "No active frame to delete" msgstr "Nincs tƶrƶlhető aktĆ­v kĆ©pkocka" -msgid "Cancel" -msgstr "MĆ©gsem" - - msgctxt "Operator" msgid "Online Python Reference" msgstr "Online Python Referencia" @@ -17103,10 +17095,6 @@ msgid "Value:" msgstr "ƉrtĆ©k:" -msgid "Decimate Keyframes" -msgstr "Kulcs-kĆ©pkockĆ”k tizedelĆ©se" - - msgid "Select Layer" msgstr "RĆ©teg kijelƶlĆ©se" diff --git a/locale/po/id.po b/locale/po/id.po index 33ef257628e8..49f769381208 100644 --- a/locale/po/id.po +++ b/locale/po/id.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-24 02:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-01-31 04:04+0000\n" "Last-Translator: \"Adriel Y.\" \n" "Language-Team: Indonesian \n" "Language: id\n" @@ -61,6 +61,10 @@ msgid "Collection of AOVs" msgstr "Koleksi AOVs" +msgid "Animation Channel Bag" +msgstr "Tas Saluran Animasi" + + msgid "Collection of animation channels, typically associated with an action slot" msgstr "Koleksi saluran animasi, biasanya terkait dengan slot aksi" @@ -389,6 +393,11 @@ msgid "Expanded state of the slot" msgstr "Keadaan slot yang diperluas" +msgctxt "ID" +msgid "Target ID Type" +msgstr "Tipe ID Sasaran" + + msgctxt "ID" msgid "Action" msgstr "Aksi" @@ -9858,6 +9867,10 @@ msgid "Save" msgstr "Simpan" +msgid "Label" +msgstr "Label" + + msgid "Icon ID" msgstr "Ikon ID" @@ -10807,6 +10820,14 @@ msgid "Take face smoothness into account in view map calculation" msgstr "Pertimbangkan kehalusan wajah dalam perhitungan tampilan peta" +msgid "Frame Number" +msgstr "Nomor Bingkai" + + +msgid "Annotation Frames" +msgstr "Bingkai-bingkai Anotasi" + + msgid "Grease Pencil Interpolate Settings" msgstr "Pengaturan Interpolasi Pensil Grease" @@ -11087,6 +11108,10 @@ msgid "Enable cyclic on individual stroke dashes" msgstr "Mengaktifkan siklik pada garis-garis sapuan individual" +msgid "Attributes" +msgstr "Atribut-atribut" + + msgid "Type of keyframe" msgstr "Tipe keyframe" @@ -11762,6 +11787,10 @@ msgid "Topology" msgstr "Topologi" +msgid "Rate" +msgstr "Nilai" + + msgid "Sculpt Plane" msgstr "Memahat Bidang" @@ -11776,6 +11805,11 @@ msgid "Layer" msgstr "Lapis" +msgctxt "Brush" +msgid "Blob" +msgstr "Gumpalan" + + msgctxt "Brush" msgid "Flatten" msgstr "Meratakan" @@ -11835,6 +11869,10 @@ msgid "Secondary Color" msgstr "Warna Sekunder" +msgid "Elastic" +msgstr "Elastik" + + msgid "Accumulate" msgstr "Akumulasi" @@ -11843,6 +11881,10 @@ msgid "Airbrush" msgstr "Kuasudara" +msgid "Anchored" +msgstr "Berlabuh" + + msgid "Occlusion" msgstr "Oklusi" @@ -12081,6 +12123,10 @@ msgid "Fill Mode" msgstr "Mode Isi" +msgid "Half" +msgstr "Setengah" + + msgid "Taper Object" msgstr "Sunting Objek" @@ -12089,6 +12135,10 @@ msgid "Twist Method" msgstr "Metode Pelintir" +msgid "Z-Up" +msgstr "Z-Atas" + + msgid "Use Z-Up axis to calculate the curve twist at each point" msgstr "Gunakan sumbu Z-Atas untuk menghitung pelinitr kurva di setiap titik" @@ -12105,6 +12155,10 @@ msgid "Path" msgstr "Jalur" +msgid "Follow" +msgstr "Ikuti" + + msgid "Surface Curve" msgstr "Kurva Permukaan" @@ -12117,6 +12171,18 @@ msgid "Center text" msgstr "Text Pusat" +msgid "Justify" +msgstr "Membenarkan" + + +msgid "Flush" +msgstr "Siram" + + +msgid "Middle" +msgstr "Tengah" + + msgid "Body Text" msgstr "Teks Tubuh" @@ -12173,6 +12239,14 @@ msgid "Alpha Modifiers" msgstr "Pengubah Nilai Alfa" +msgid "Butt" +msgstr "Pantat" + + +msgid "Square" +msgstr "Kotak" + + msgid "Plain" msgstr "Biasa" @@ -12305,6 +12379,10 @@ msgid "Thickness Position" msgstr "Posisi Ketebalan" +msgid "Chaining" +msgstr "Rantai" + + msgid "Same Object" msgstr "Objek Sama" @@ -12337,6 +12415,18 @@ msgid "JPEG 2000" msgstr "JPEG 2000" +msgid "TIFF" +msgstr "TIFF" + + +msgid "WebP" +msgstr "WebP" + + +msgid "Duration" +msgstr "Durasi" + + msgid "Generated Type" msgstr "Tipe" @@ -12369,6 +12459,14 @@ msgid "Generated image" msgstr "Gambar yang dihasilkan" +msgid "Multilayer" +msgstr "Berlapis-lapis" + + +msgid "Compositing" +msgstr "Pengomposisian" + + msgid "Deinterlace" msgstr "Deinterlace" @@ -12430,6 +12528,10 @@ msgid "Blur shadow aliasing using Percentage Closer Filtering" msgstr "Buramkan aliasing bayangan menggunakan Persentase Pemfilteran Lebih Dekat" +msgid "Rectangle" +msgstr "Persegi panjang" + + msgid "Show Cone" msgstr "Konsol Python" @@ -12450,6 +12552,10 @@ msgid "Visibility Collection" msgstr "Koleksi Visibilitas" +msgid "Intensity" +msgstr "Intensitas" + + msgid "Surface Offset" msgstr "Offset Permukaan" @@ -12462,6 +12568,10 @@ msgid "Render surface without transparency" msgstr "Render permukaan tanpa transparansi" +msgid "Metallic" +msgstr "Metalik" + + msgctxt "Material" msgid "Flat" msgstr "Datar" @@ -12507,6 +12617,10 @@ msgid "Subsurface Translucency" msgstr "Tembusan Subpermukaan" +msgid "Fast" +msgstr "Cepat" + + msgid "Edges" msgstr "Tepi" @@ -12615,6 +12729,10 @@ msgid "Pattern" msgstr "Pola" +msgid "Interface" +msgstr "Antarmuka" + + msgid "Links" msgstr "Hubungan" @@ -12647,6 +12765,10 @@ msgid "Active Material" msgstr "Bahan Aktif" +msgid "Data" +msgstr "Data" + + msgid "Object data" msgstr "Data Objek" @@ -12655,6 +12777,18 @@ msgid "Delta Location" msgstr "Lokasi Delta" +msgid "Cylinder" +msgstr "Silinder" + + +msgid "Capsule" +msgstr "Kapsul" + + +msgid "Bounds" +msgstr "Batas-batasan" + + msgid "Solid" msgstr "Padat" @@ -12663,6 +12797,14 @@ msgid "Textured" msgstr "Tekstur" +msgid "Arrows" +msgstr "Panah" + + +msgid "Circle" +msgstr "Lingkaran" + + msgid "Origin Offset" msgstr "Offset Asal" @@ -12751,6 +12893,10 @@ msgid "Parent Vertices" msgstr "Partikel" +msgid "Pose" +msgstr "Pose" + + msgid "Quaternion Rotation" msgstr "Rotasi Quaternion" @@ -12821,6 +12967,14 @@ msgid "Active Instance Object Index" msgstr "Indeks Benda Contoh Aktif" +msgid "Degrees" +msgstr "Derajat" + + +msgid "How many degrees path has to curve to make another render segment" +msgstr "Berapa dejarat jalur ada ke kurva untuk membuat segmen render lain" + + msgid "Child Size" msgstr "Ukurang" @@ -14989,6 +15143,10 @@ msgid "Line Type" msgstr "Tipe Garis" +msgid "Dots" +msgstr "Titik-titik" + + msgid "UV Factor" msgstr "Faktor UV" @@ -15009,6 +15167,10 @@ msgid "Mask" msgstr "Masker" +msgid "Metaball" +msgstr "Metabola" + + msgid "Names" msgstr "Nama" @@ -15033,10 +15195,6 @@ msgid "Assign Material" msgstr "Tugaskan Bahan" -msgid "Metaball" -msgstr "Metabola" - - msgid "Light" msgstr "Cahaya" @@ -17377,24 +17535,12 @@ msgid "Channel Key" msgstr "Kunci Saluran" -msgid "RGB color space" -msgstr "Spasi warna RGB" - - -msgid "HSV color space" -msgstr "Spasi warna HSV" - - -msgid "YUV color space" -msgstr "Spasi warna YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "Spasi warna YCbCr" +msgid "High" +msgstr "Tinggi" msgid "Algorithm" @@ -17417,6 +17563,10 @@ msgid "Limit by maximum of other channels" msgstr "Batasi oleh maksimum saluran lain" +msgid "Low" +msgstr "Rendah" + + msgid "Values lower than this setting are 100% keyed" msgstr "Nilai lebih rendah dari pengaturan ini dikuncikan 100%" @@ -17713,26 +17863,6 @@ msgid "Mode of color processing" msgstr "Mode pemrosesan warna" -msgid "Use RGB color processing" -msgstr "Menggunakan pemrosesan warna RGB" - - -msgid "Use HSV color processing" -msgstr "Menggunakan pemrosesan warna HSV" - - -msgid "Use HSL color processing" -msgstr "Menggunakan pemrosesan warna HSL" - - -msgid "Use YCbCr color processing" -msgstr "Menggunakan pemrosesan warna YCbCr" - - -msgid "Use YUV color processing" -msgstr "Menggunakan pemrosesan warna YUV" - - msgid "Color space used for YCbCrA processing" msgstr "Ruang warna yang digunakan untuk pemrosesan YCbCrA" @@ -17997,6 +18127,10 @@ msgid "Distance Key" msgstr "Kunci Jarak" +msgid "RGB color space" +msgstr "Spasi warna RGB" + + msgid "Buffer Edge Mode" msgstr "Modus Sunting" @@ -18041,6 +18175,10 @@ msgid "Ghosts" msgstr "Hantu" +msgid "Simple star filter: add 45 degree rotation offset" +msgstr "Filter bintang sederhana: tambah offset rotasi 45 derajat" + + msgid "ID Mask" msgstr "Masker ID" @@ -18271,6 +18409,14 @@ msgid "tanh(A)" msgstr "tanh(A)" +msgid "Convert from degrees to radians" +msgstr "Mengonversi dari derajat menjadi radian" + + +msgid "Convert from radians to degrees" +msgstr "Mengonversi dari radian menjadi derajat" + + msgid "Movie Distortion" msgstr "Distorsi Film" @@ -18367,10 +18513,6 @@ msgid "Relative Frame" msgstr "Hapus" -msgid "Wrapping" -msgstr "Membungkus" - - msgid "X Axis" msgstr "Axis X" @@ -19281,6 +19423,10 @@ msgid "Breakdown" msgstr "Rincian (Breakdown)" +msgid "Moving Hold" +msgstr "Pindah Tahan" + + msgid "Extreme" msgstr "Ekstrim" @@ -20701,6 +20847,22 @@ msgid "Resize the image" msgstr "Ubah ukuran gambar" +msgid "Amount of rotation in degrees (90, 180, 270)" +msgstr "Jumlah rotasi dalam derajat (90, 180, 270)" + + +msgid "Rotate 90 degrees clockwise" +msgstr "Putar 90 derajat searah jarum jam" + + +msgid "Rotate 180 degrees clockwise" +msgstr "Putar 180 derajat searah jarum jam" + + +msgid "Rotate 270 degrees clockwise" +msgstr "Putar 270 derajat searah jarum jam" + + msgctxt "Operator" msgid "Sample Color" msgstr "Sampel Warna" @@ -23302,14 +23464,38 @@ msgid "Active Vertex" msgstr "Vertex Aktif" +msgid "Mouse Position X" +msgstr "Posisi X Tetikus" + + +msgid "Position of the mouse used for \"Surface\" mode" +msgstr "Posisi tetikus digunakan untuk mode \"Permukaan\"" + + +msgid "Mouse Position Y" +msgstr "Posisi Y Tetikus" + + msgid "Distance within which symmetrical vertices are merged" msgstr "Jarak dalam dimana simpul yang simetris telah digabungkan" +msgid "Extrude Mode" +msgstr "Mode Ekstrusi" + + +msgid "Use Cursor for Depth" +msgstr "Gunakan Kursor untuk Kedalaman" + + msgid "Grab UVs" msgstr "Mengambil UV" +msgid "Relax Method" +msgstr "Metode Tenang" + + msgctxt "Operator" msgid "Change Effect Type" msgstr "Ganti Tipe Efek" @@ -24129,6 +24315,10 @@ msgid "Pinned islands are locked in place" msgstr "Pulau yang disematkan terkunci di tempatnya" +msgid "Only 90 degree rotations are allowed" +msgstr "Hanya rotasi 90 derajat yang diperbolehkan" + + msgid "Paste selected UV vertices" msgstr "Tempel simpul yang terpilih" @@ -25053,6 +25243,10 @@ msgid "Instancing" msgstr "Percontohan" +msgid "All Custom" +msgstr "Kustom Semua" + + msgid "Scene Instancing" msgstr "Percontohan Adegan" @@ -25707,6 +25901,10 @@ msgid "Load user interface setup when loading .blend files" msgstr "Muat setup antarmuka pengguna saat memuat dokumen .blend" +msgid "Use full 6 degrees of freedom by default" +msgstr "Gunakan semua 6 dejarat kebebasan secara default" + + msgid "NDOF View Rotation" msgstr "Gerakan" @@ -26428,6 +26626,10 @@ msgid "Show Red Channel" msgstr "Saluran" +msgid "Zoom percentage" +msgstr "Persentase zoom" + + msgid "System Bookmarks" msgstr "Hapus" @@ -26635,6 +26837,10 @@ msgid "Shadow Blur" msgstr "Bayangan Buram" +msgid "Degrees to rotate the input" +msgstr "Derajat ke rotasi masukan" + + msgid "Blur Width" msgstr "Lebar Blur" @@ -26899,6 +27105,10 @@ msgid "Metric" msgstr "Metrik" +msgid "Use degrees for measuring angles and rotations" +msgstr "Gunakan derajat untuk mengukur sudut dan rotasi" + + msgid "Radians" msgstr "Radian" @@ -26943,6 +27153,10 @@ msgid "Direction that the light is shining" msgstr "Arah yang cahaya bersinar" +msgid "Strength Curve" +msgstr "Kurva Kekuatan" + + msgid "Index number of the vertex group" msgstr "Indeks jumlah kelompok vertex" @@ -27584,6 +27798,10 @@ msgid "Export..." msgstr "Expor..." +msgid "Search by Name" +msgstr "Mencari berdasarkan Nama" + + msgid "API Defined" msgstr "API yang Terdefinisi" @@ -27592,6 +27810,14 @@ msgid "3D View" msgstr "Tampilan 3D" +msgid "No active bone to copy from" +msgstr "Tidak ada tulang aktif untuk disalin dari" + + +msgid "No selected bones to copy to" +msgstr "Tidak ada tulang terseleksi untuk disalin" + + msgid "Could not make new image" msgstr "Tidak dapat membuat gambar baru" @@ -29883,6 +30109,11 @@ msgid "Sharp Vertices" msgstr "Menajamkan Simpul" +msgctxt "Operator" +msgid "Degree Ā°" +msgstr "Derajat Ā°" + + msgctxt "Operator" msgid "Set Roll" msgstr "Adegan" @@ -30123,20 +30354,8 @@ msgid "Relax Pose" msgstr "Pose Rileks" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "Sumbu [X]/Y/Z saja (X ke kosong)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Sumbu X/[Y]/Z saja (Y ke kosong)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "Sumbu X/Y/[Z] saja (Z ke kosong)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = Batasan Sumbu" +msgid "Cancel" +msgstr "Batal" msgid "No keyframes to slide between" @@ -30188,10 +30407,6 @@ msgid "Active layer is locked or hidden" msgstr "Layer aktif terkunci atau tersembunyi" -msgid "Cancel" -msgstr "Batal" - - msgid "%s: %s" msgstr "%s: %s" @@ -30490,6 +30705,10 @@ msgid "New" msgstr "Baru" +msgid "File Not Found" +msgstr "Dokumen Tidak Ditemukan" + + msgid "Anim Player" msgstr "Putar Animasi" @@ -30984,14 +31203,6 @@ msgid "Missing surface mesh" msgstr "Jala permukaan tidak ada" -msgid "ON" -msgstr "ON" - - -msgid "OFF" -msgstr "OFF" - - msgid "GPencil Interpolation: " msgstr "GPensil Interpolasi: " @@ -31824,6 +32035,10 @@ msgid "Inverted" msgstr "Terbalik" +msgid "Skip" +msgstr "Lewati" + + msgid "All geometry groups as separate instances" msgstr "Semua kelompok geometri sebagai contoh-contoh terpisah" @@ -31903,6 +32118,10 @@ msgid "View Distance" msgstr "Tampilkan Jarak" +msgid "Increase or decrease the amount of displacement" +msgstr "Menambah atau mengurangi jumlah perpindahan" + + msgid "Transparency" msgstr "Transparansi" @@ -31916,19 +32135,31 @@ msgstr "Nama" msgid "Is Camera Ray" -msgstr "Kamera" +msgstr "Adalah Sinar Kamera" msgid "Is Shadow Ray" -msgstr "Tekstur" +msgstr "Adalah Sinar Bayangan" msgid "Is Glossy Ray" msgstr "Warna" +msgid "Is Singular Ray" +msgstr "Adalah Sinar Tunggal" + + +msgid "Is Reflection Ray" +msgstr "Adalah Sinar Refleksi" + + msgid "Is Transmission Ray" -msgstr "Orientasi Transformasi" +msgstr "Adalah Sinar Transmisi" + + +msgid "The amount of translation along each axis" +msgstr "Jumlah translasi sepanjang tiap sumbu" msgid "Color1" @@ -31971,6 +32202,10 @@ msgid "Patterns" msgstr "Adegan" +msgid "Texture Node Editor" +msgstr "Editor Simpul Tekstur" + + msgid "Bricks 1" msgstr "Batu Bata 1" @@ -32008,7 +32243,7 @@ msgstr "iSkala" msgid "Image too small" -msgstr "Penyunting Gambar" +msgstr "Gambar terlalu kecil" msgid "Cannot render, no camera" @@ -32055,7 +32290,7 @@ msgstr "Efek Gelombang" msgid "Blender File View" -msgstr "Menampilkan Berkas Blender" +msgstr "Tampilan Dokumen Blender" msgid "Allow Execution" @@ -32082,6 +32317,10 @@ msgid "Save changes before closing?" msgstr "Simpan perubahan sebelum tutup?" +msgid "Startup file saved" +msgstr "Dokumen permulaan tersimpan" + + msgid "Context window not set" msgstr "Warna Standar" @@ -32146,6 +32385,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "ON" + + +msgid "OFF" +msgstr "OFF" + + msgid "Set Debug Value" msgstr "Mengatur Nilai Debug" diff --git a/locale/po/it.po b/locale/po/it.po index 0ba56569bfd3..869ba5982839 100644 --- a/locale/po/it.po +++ b/locale/po/it.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2025-01-12 22:56+0000\n" "Last-Translator: 32437w5k7 <32437w5k7@mozmail.com>\n" "Language-Team: Italian \n" @@ -18283,10 +18283,6 @@ msgid "Display the object's name" msgstr "Mostra il nome dell'oggetto" -msgid "Shape Key Lock" -msgstr "Blocco Chiave Forma" - - msgid "Display Texture Space" msgstr "Mostra Spazio Texture" @@ -23438,6 +23434,14 @@ msgid "Material slot name" msgstr "Nome dello slot materiale" +msgid "Metaball" +msgstr "Metaball" + + +msgid "Show/Hide" +msgstr "Mostra/Nascondi" + + msgid "Names" msgstr "Nomi" @@ -23446,10 +23450,6 @@ msgid "Bone Roll" msgstr "Rollio Osso" -msgid "Show/Hide" -msgstr "Mostra/Nascondi" - - msgid "Clean Up" msgstr "Ripulisci" @@ -23522,10 +23522,6 @@ msgid "Assign Material" msgstr "Assegna Materiale" -msgid "Metaball" -msgstr "Metaball" - - msgid "Light" msgstr "Luce" @@ -29066,10 +29062,6 @@ msgid "Channel Key" msgstr "Canale Chiave" -msgid "RGB color space" -msgstr "Spazio Colore RGB" - - msgid "YCbCr" msgstr "YCbCr" @@ -29558,6 +29550,10 @@ msgid "Distance Key" msgstr "Chiave Distanza" +msgid "RGB color space" +msgstr "Spazio Colore RGB" + + msgid "Double Edge Mask" msgstr "Maschera Doppio Lato" @@ -29982,10 +29978,6 @@ msgid "Translate" msgstr "Trasla" -msgid "Wrapping" -msgstr "Mappatura" - - msgid "X Axis" msgstr "Asse X" @@ -39460,6 +39452,14 @@ msgid "Reset viewable area to show selected strips range" msgstr "Ripristina l'area visibile per mostrare gli spezzoni selezionati" +msgid "Source color" +msgstr "Colore sorgente" + + +msgid "Gamma Corrected" +msgstr "Gamma Corretto" + + msgctxt "Operator" msgid "Add File Node" msgstr "Aggiungi Nodo File" @@ -45320,14 +45320,6 @@ msgid "Drop colors to buttons" msgstr "Assegna colori ai bottoni" -msgid "Source color" -msgstr "Colore sorgente" - - -msgid "Gamma Corrected" -msgstr "Gamma Corretto" - - msgctxt "Operator" msgid "Edit Source" msgstr "Modifica Sorgente" @@ -47637,10 +47629,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Utilizza solo modificatori di deformazione (disabilita temporaneamente i modificatori di generazione salvo Multi-Risoluzione)" -msgid "UV Sculpting" -msgstr "Scultura UV" - - msgid "Restrict" msgstr "Restringi" @@ -56335,6 +56323,10 @@ msgid "Color of the light's specular highlight" msgstr "Colore della luce speculare brillante" +msgid "UV Sculpting" +msgstr "Scultura UV" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Gruppo di vertici, utilizzato per deformare l'armatura e per altri usi" @@ -61188,6 +61180,10 @@ msgid "No active Keying Set to use" msgstr "Nessun Gruppo Chiavi attivo da utilizzare" +msgid "Cancel" +msgstr "Annulla" + + msgid "No keyframes to slide between" msgstr "Nessun keyframe tra cui scorrere" @@ -61328,10 +61324,6 @@ msgid "Nothing selected" msgstr "Nessuna selezione" -msgid "Cancel" -msgstr "Annulla" - - msgid "Could not resolve path '%s'" msgstr "Impossibile risolvere il percorso '%s'" @@ -62841,14 +62833,6 @@ msgid "File not found '%s'" msgstr "File non trovato '%s'" -msgid "ON" -msgstr "ON" - - -msgid "OFF" -msgstr "OFF" - - msgid "Active group is locked, aborting" msgstr "Il gruppo attivo ĆØ bloccato, comando annullato" @@ -63246,14 +63230,6 @@ msgid "No F-Modifiers to paste" msgstr "Nessun Modificatore-F da incollare" -msgid "Decimate Keyframes" -msgstr "Decima Keyframes" - - -msgid "Ease Keys" -msgstr "Allevia Chiavi (Keys)" - - msgid "Select Slot" msgstr "Seleziona Slot" @@ -65314,6 +65290,14 @@ msgid "dbl-" msgstr "doppio-" +msgid "ON" +msgstr "ON" + + +msgid "OFF" +msgstr "OFF" + + msgid "unsupported format" msgstr "formato non supportato" diff --git a/locale/po/ja.po b/locale/po/ja.po index 89d181ee3bc8..0eb7270c44c3 100644 --- a/locale/po/ja.po +++ b/locale/po/ja.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-25 06:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-02-01 10:56+0000\n" "Last-Translator: Satoshi Yamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -371,6 +371,11 @@ msgid "Show Expanded" msgstr "ę‹”å¼µč”Øē¤ŗ" +msgctxt "ID" +msgid "Target ID Type" +msgstr "ć‚æćƒ¼ć‚²ćƒƒćƒˆIDć‚æ悤惗" + + msgctxt "ID" msgid "Action" msgstr "ć‚¢ć‚Æć‚·ćƒ§ćƒ³" @@ -26168,10 +26173,6 @@ msgid "Display the object's name" msgstr "ć‚Ŗ惖ć‚ø悧ć‚Æćƒˆåć‚’č”Øē¤ŗć—ć¾ć™" -msgid "Shape Key Lock" -msgstr "ć‚·ć‚§ć‚¤ćƒ—ć‚­ćƒ¼å›ŗ定" - - msgid "Only show the active shape key at full value" msgstr "ć‚¢ć‚Æćƒ†ć‚£ćƒ–ć‚·ć‚§ć‚¤ćƒ—ć‚­ćƒ¼ć®ćæć‚’ęœ€å¤§å€¤ć§č”Øē¤ŗć—ć¾ć™" @@ -34504,6 +34505,14 @@ msgid "Editor menu containing buttons" msgstr "惜ć‚æćƒ³ć‚’å«ć‚€ć‚Øćƒ‡ć‚£ć‚æćƒ¼ćƒ”ćƒ‹ćƒ„ćƒ¼" +msgid "Metaball" +msgstr "惔ć‚æćƒœćƒ¼ćƒ«" + + +msgid "Show/Hide" +msgstr "č”Øē¤ŗ/隠恙" + + msgid "Names" msgstr "名前" @@ -34512,10 +34521,6 @@ msgid "Bone Roll" msgstr "ćƒœćƒ¼ćƒ³ćƒ­ćƒ¼ćƒ«" -msgid "Show/Hide" -msgstr "č”Øē¤ŗ/隠恙" - - msgid "Clean Up" msgstr "ć‚ÆćƒŖćƒ¼ćƒ³ć‚¢ćƒƒćƒ—" @@ -34604,10 +34609,6 @@ msgid "Assign Material" msgstr "惞惆ćƒŖć‚¢ćƒ«ć‚’å‰²ć‚Šå½“ć¦" -msgid "Metaball" -msgstr "惔ć‚æćƒœćƒ¼ćƒ«" - - msgid "Light" msgstr "ćƒ©ć‚¤ćƒˆ" @@ -44757,30 +44758,14 @@ msgid "Create matte based on differences in color channels" msgstr "ć‚«ćƒ©ćƒ¼ćƒćƒ£ćƒ³ćƒćƒ«ć®é•ć„ć‚’å…ƒć«ćƒžćƒƒćƒˆć‚’ē”Ÿęˆć—ć¾ć™" -msgid "RGB color space" -msgstr "RGB č‰²ē©ŗ間" - - -msgid "HSV color space" -msgstr "HSV č‰²ē©ŗ間" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "YUV č‰²ē©ŗ間" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "YCbCr č‰²ē©ŗ間" - - msgctxt "Color" msgid "Limit Channel" msgstr "ćƒćƒ£ćƒ³ćƒćƒ«ć§åˆ¶é™" @@ -45304,26 +45289,6 @@ msgid "Mode of color processing" msgstr "č‰²ć®å‡¦ē†ćƒ¢ćƒ¼ćƒ‰" -msgid "Use RGB color processing" -msgstr "RGB ć‚«ćƒ©ćƒ¼å‡¦ē†ć‚’ä½æē”Ø" - - -msgid "Use HSV color processing" -msgstr "HSV ć‚«ćƒ©ćƒ¼å‡¦ē†ć‚’ä½æē”Ø" - - -msgid "Use HSL color processing" -msgstr "HSL ć‚«ćƒ©ćƒ¼å‡¦ē†ć‚’ä½æē”Ø" - - -msgid "Use YCbCr color processing" -msgstr "YCbCr ć‚«ćƒ©ćƒ¼å‡¦ē†ć‚’ä½æē”Ø" - - -msgid "Use YUV color processing" -msgstr "YUV ć‚«ćƒ©ćƒ¼å‡¦ē†ć‚’ä½æē”Ø" - - msgid "Color space used for YCbCrA processing" msgstr "YCbCrA 処ē†ć§ä½æē”Øć•ć‚Œć‚‹č‰²ē©ŗ間" @@ -45787,6 +45752,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "å„ć‚«ćƒ©ćƒ¼é–“ć®3Dč·é›¢ć‚’å…ƒć«ćƒžćƒƒćƒˆć‚’ē”Ÿęˆć—ć¾ć™" +msgid "RGB color space" +msgstr "RGB č‰²ē©ŗ間" + + msgid "YCbCr suppression" msgstr "YCbCr ć§ęŠ‘åˆ¶ć—ć¾ć™" @@ -47276,42 +47245,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "ē§»å‹•ć«ē›øåƾ値(兄力ē”»åƒć‚µć‚¤ć‚ŗ恮åÆ¾ć™ć‚‹å‰²åˆ)悒ä½æē”Øć—ć¾ć™" -msgid "Wrapping" -msgstr "ćƒ©ćƒƒćƒ”ćƒ³ć‚°" - - -msgid "Wrap image on a specific axis" -msgstr "ē”»åƒć‚’ęŒ‡å®šć®č»øć§ćƒ«ćƒ¼ćƒ—ć—ć¾ć™" - - -msgid "No wrapping on X and Y" -msgstr "Xč»øćØYč»øć§ćƒ©ćƒƒćƒ”ćƒ³ć‚°ć—ć¾ć›ć‚“" - - msgid "X Axis" msgstr "Xč»ø" -msgid "Wrap all pixels on the X axis" -msgstr "å…Ø惔ć‚Æć‚»ćƒ«ć‚’ X č»øć§ćƒ©ćƒƒćƒ—ć—ć¾ć™" - - msgid "Y Axis" msgstr "Yč»ø" -msgid "Wrap all pixels on the Y axis" -msgstr "å…Ø惔ć‚Æć‚»ćƒ«ć‚’ Y č»øć§ćƒ©ćƒƒćƒ—ć—ć¾ć™" - - msgid "Both Axes" msgstr "äø”ę–¹ć®č»ø" -msgid "Wrap all pixels on both axes" -msgstr "å…Ø惔ć‚Æć‚»ćƒ«ć‚’äø”ę–¹ć®č»øć§ćƒ©ćƒƒćƒ—ć—ć¾ć™" - - msgid "Map values to colors with the use of a gradient" msgstr "ć‚°ćƒ©ćƒ‡ćƒ¼ć‚·ćƒ§ćƒ³ć‚’ä½æē”Øć—å€¤ć‚’č‰²ć«å‰²ć‚Šå½“ć¦ć¾ć™" @@ -48987,6 +48932,10 @@ msgid "Retrieve a unit length vector indicating the direction pointing away from msgstr "å„č¦ē“ ć®å½¢ēŠ¶ć‹ć‚‰é›¢ć‚Œć‚‹ę–¹å‘ć‚’ē¤ŗć™å˜ä½ćƒ™ć‚Æćƒˆćƒ«ć‚’å–å¾—ć—ć¾ć™" +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "ć“ć®ćƒŽćƒ¼ćƒ‰ć®å¾“ę„ć®ęŒ™å‹•ćØåˆć‚ć›ć‚‹ćŸć‚ļ¼Œé¢ć‚³ćƒ¼ćƒŠćƒ¼ćƒ‰ćƒ”ć‚¤ćƒ³ć§åøøć«é¢ć®ę³•ē·šć‚’ä½æē”Øć—ć¾ć™" + + msgid "Output a single object" msgstr "単äø€ć‚Ŗ惖ć‚ø悧ć‚Æ惈悒å‡ŗåŠ›ć—ć¾ć™" @@ -63047,6 +62996,18 @@ msgstr "" "ē„”åŠ¹ę™‚ćÆē¾åœØć®ćƒ•ćƒ¬ćƒ¼ćƒ ć®ćƒćƒ¼ć‚ŗć‚’é™ę­¢ćƒćƒ¼ć‚ŗćØ恗恦ä½æē”Øć—ć¾ć™" +msgid "Sampling Interpolation Fallback" +msgstr "ć‚µćƒ³ćƒ—ćƒŖćƒ³ć‚°č£œé–“ćƒ•ć‚©ćƒ¼ćƒ«ćƒćƒƒć‚Æ" + + +msgid "Linear interpolation between keyframes" +msgstr "ć‚­ćƒ¼ćƒ•ćƒ¬ćƒ¼ćƒ é–“ć‚’ē·šå½¢č£œé–“ć—ć¾ć™" + + +msgid "No interpolation between keyframes" +msgstr "ć‚­ćƒ¼ćƒ•ćƒ¬ćƒ¼ćƒ é–“ć‚’č£œé–“ć—ć¾ć›ć‚“" + + msgid "Shared Accessors" msgstr "å…±ęœ‰ć‚¢ć‚Æ悻悵" @@ -72087,6 +72048,22 @@ msgid "Add a collection info node to the current node editor" msgstr "ē¾åœØć®ćƒŽćƒ¼ćƒ‰ć‚Øćƒ‡ć‚£ć‚æćƒ¼ć«ć‚³ćƒ¬ć‚Æć‚·ćƒ§ćƒ³ęƒ…å ±ćƒŽćƒ¼ćƒ‰ć‚’čæ½åŠ ć—ć¾ć™" +msgid "Source color" +msgstr "ć‚½ćƒ¼ć‚¹ć‚«ćƒ©ćƒ¼" + + +msgid "Gamma Corrected" +msgstr "ć‚¬ćƒ³ćƒžč£œę­£ęøˆ" + + +msgid "The source color is gamma corrected" +msgstr "ć‚¬ćƒ³ćƒžč£œę­£ęøˆć®ć‚½ćƒ¼ć‚¹ć‚«ćƒ©ćƒ¼" + + +msgid "Has Alpha" +msgstr "ć‚¢ćƒ«ćƒ•ć‚”ć®ęœ‰ē„”" + + msgctxt "Operator" msgid "Add File Node" msgstr "ćƒ•ć‚”ć‚¤ćƒ«ćƒŽćƒ¼ćƒ‰ć‚’čæ½åŠ " @@ -84986,18 +84963,6 @@ msgid "Drop colors to buttons" msgstr "惜ć‚æćƒ³ć«č‰²ć‚’ćƒ‰ćƒ­ćƒƒćƒ—ć—ć¾ć™" -msgid "Source color" -msgstr "ć‚½ćƒ¼ć‚¹ć‚«ćƒ©ćƒ¼" - - -msgid "Gamma Corrected" -msgstr "ć‚¬ćƒ³ćƒžč£œę­£ęøˆ" - - -msgid "The source color is gamma corrected" -msgstr "ć‚¬ćƒ³ćƒžč£œę­£ęøˆć®ć‚½ćƒ¼ć‚¹ć‚«ćƒ©ćƒ¼" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "惞惆ćƒŖć‚¢ćƒ«ć‚¹ćƒ­ćƒƒćƒˆć«ćƒžćƒ†ćƒŖć‚¢ćƒ«ć‚’ćƒ‰ćƒ­ćƒƒćƒ—" @@ -89708,10 +89673,6 @@ msgid "Meters" msgstr "ćƒ”ćƒ¼ćƒˆćƒ«" -msgid "Scene meters per unit to 1.0" -msgstr "ć‚·ćƒ¼ćƒ³ć®ćƒ¦ćƒ‹ćƒƒćƒˆęÆŽć®ćƒ”ćƒ¼ćƒˆćƒ«ę•°ć‚’1.0ć«ć—ć¾ć™" - - msgid "Kilometers" msgstr "ć‚­ćƒ­ćƒ”ćƒ¼ćƒˆćƒ«" @@ -89728,6 +89689,10 @@ msgid "Scene meters per unit to 0.01" msgstr "ć‚·ćƒ¼ćƒ³ć®ćƒ¦ćƒ‹ćƒƒćƒˆęÆŽć®ćƒ”ćƒ¼ćƒˆćƒ«ę•°ć‚’0.01ć«ć—ć¾ć™" +msgid "Scene meters per unit to 0.001" +msgstr "ć‚·ćƒ¼ćƒ³ć®ćƒ¦ćƒ‹ćƒƒćƒˆęÆŽć®ćƒ”ćƒ¼ćƒˆćƒ«ę•°ć‚’0.001ć«ć—ć¾ć™" + + msgid "Inches" msgstr "ć‚¤ćƒ³ćƒ" @@ -89756,10 +89721,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "ć‚·ćƒ¼ćƒ³ć®ćƒ¦ćƒ‹ćƒƒćƒˆęÆŽć®ćƒ”ćƒ¼ćƒˆćƒ«ę•°ć«ć‚«ć‚¹ć‚æćƒ å€¤ć‚’ęŒ‡å®šć—ć¾ć™" -msgid "Convert World Material" -msgstr "ćƒÆćƒ¼ćƒ«ćƒ‰ćƒžćƒ†ćƒŖć‚¢ćƒ«ć‚’å¤‰ę›" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "" "ćƒÆćƒ¼ćƒ«ćƒ‰ćƒžćƒ†ćƒŖć‚¢ćƒ«ć‚’ USD ćƒ‰ćƒ¼ćƒ ćƒ©ć‚¤ćƒˆć«å¤‰ę›ć—ć¾ć™ļ¼Ž\n" @@ -90118,10 +90079,6 @@ msgid "Add all imported objects to a new collection" msgstr "ć‚¤ćƒ³ćƒćƒ¼ćƒˆć—ćŸå…Øć‚Ŗ惖ć‚ø悧ć‚Æćƒˆć‚’ę–°č¦ć‚³ćƒ¬ć‚Æć‚·ćƒ§ćƒ³ć«čæ½åŠ ć—ć¾ć™" -msgid "Create World Material" -msgstr "ćƒÆćƒ¼ćƒ«ćƒ‰ćƒžćƒ†ćƒŖć‚¢ćƒ«ć‚’ä½œęˆ" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "ęœ€åˆć«č¦‹ć¤ć‘ćŸ USD ćƒ‰ćƒ¼ćƒ ćƒ©ć‚¤ćƒˆć‚’ćƒÆćƒ¼ćƒ«ćƒ‰čƒŒę™Æć‚·ć‚§ćƒ¼ćƒ€ćƒ¼ć«å¤‰ę›ć—ć¾ć™" @@ -91209,19 +91166,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "å¤‰å½¢ćƒ¢ćƒ‡ć‚£ćƒ•ć‚”ć‚¤ć‚¢ćƒ¼ć®ćæä½æē”Øļ¼ˆäø€ę™‚ēš„ć«ćƒžćƒ«ćƒćƒ¬ć‚¾ćƒŖćƒ„ćƒ¼ć‚·ćƒ§ćƒ³ä»„å¤–ć®ē”Ÿęˆē³»ćƒ¢ćƒ‡ć‚£ćƒ•ć‚”ć‚¤ć‚¢ćƒ¼ć‚’OFF恫ļ¼‰ć—ć¾ć™" -msgid "UV Sculpting" -msgstr "UVć‚¹ć‚«ćƒ«ćƒ—ćƒˆ" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "å¼·ć•ę›²ē·šćƒ—ćƒŖć‚»ćƒƒćƒˆ" - - -msgid "Strength Curve" -msgstr "å¼·ć•ę›²ē·š" - - msgid "Properties of vertex and weight paint mode" msgstr "頂ē‚¹ćØć‚¦ć‚§ć‚¤ćƒˆćƒšć‚¤ćƒ³ćƒˆćƒ¢ćƒ¼ćƒ‰ć®ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£" @@ -98728,6 +98672,10 @@ msgid "If non-zero, the maximum value for an indirect sample, higher values will msgstr "ļ¼ä»„å¤–ć§é–“ęŽ„ć‚µćƒ³ćƒ—ćƒ«ć®ęœ€å¤§å€¤ļ¼Žå¤šę•°ć®ćƒŽć‚¤ć‚ŗćØåŽęŸć®é…ć•ć‚’å›žéæ恙悋恟悁ļ¼Œē²¾åŗ¦ć‚’ēŠ ē‰²ć«ć—ļ¼Œć“ć‚Œć‚ˆć‚Šå¤§ćć„å€¤ć‚’ęø›ć‚‰ć—ć¾ć™" +msgid "The number of samples to render in this subset" +msgstr "ć“ć®ć‚µćƒ–ć‚»ćƒƒćƒˆå†…ć§ć®ćƒ¬ćƒ³ćƒ€ćƒŖćƒ³ć‚°ć®ć‚µćƒ³ćƒ—ćƒ«ę•°" + + msgid "Number of samples to render for each pixel" msgstr "å„ćƒ”ć‚Æć‚»ćƒ«ć‚’ćƒ¬ćƒ³ćƒ€ćƒŖćƒ³ć‚°ć™ć‚‹ćŸć‚ć®ć‚µćƒ³ćƒ—ćƒ«ę•°" @@ -103190,6 +103138,10 @@ msgid "Retiming Key Selection Status" msgstr "ćƒŖć‚æć‚¤ćƒŸćƒ³ć‚°ć‚­ćƒ¼ć®éøꊞēŠ¶ę…‹" +msgid "All Strips" +msgstr "å…Øć‚¹ćƒˆćƒŖ惃惗" + + msgid "Show Missing Media" msgstr "ę¬ ć‘ćŸćƒ”ćƒ‡ć‚£ć‚¢ć‚’č”Øē¤ŗ" @@ -107476,6 +107428,10 @@ msgid "Animation start offset (trim start)" msgstr "ć‚¢ćƒ‹ćƒ”ćƒ¼ć‚·ćƒ§ćƒ³é–‹å§‹ć‚Ŗćƒ•ć‚»ćƒƒćƒˆ" +msgid "Color Mix Strip" +msgstr "ć‚«ćƒ©ćƒ¼ćƒŸćƒƒć‚Æć‚¹ć‚¹ćƒˆćƒŖ惃惗" + + msgid "Color Strip" msgstr "ć‚«ćƒ©ćƒ¼ć‚¹ćƒˆćƒŖ惃惗" @@ -107488,10 +107444,22 @@ msgid "Effect Strip color" msgstr "ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖćƒƒćƒ—ć®č‰²" +msgid "Cross Strip" +msgstr "ć‚Æćƒ­ć‚¹ć‚¹ćƒˆćƒŖ惃惗" + + msgid "Cross Sequence" msgstr "ć‚Æćƒ­ć‚¹ć‚·ćƒ¼ć‚±ćƒ³ć‚¹" +msgid "Gamma Cross Strip" +msgstr "ć‚¬ćƒ³ćƒžć‚Æćƒ­ć‚¹ć‚¹ćƒˆćƒŖ惃惗" + + +msgid "Gaussian Blur Strip" +msgstr "ć‚¬ć‚¦ć‚·ć‚¢ćƒ³ć¼ć‹ć—ć‚¹ćƒˆćƒŖ惃惗" + + msgid "Sequence strip creating a gaussian blur" msgstr "ć‚¬ć‚¦ć‚·ć‚¢ćƒ³ć¼ć‹ć—ć‚’ä½œęˆć™ć‚‹ć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚¹ćƒˆćƒŖ惃惗" @@ -107504,6 +107472,10 @@ msgid "Size of the blur along Y axis" msgstr "Yč»øć®ć¼ć‹ć—ć‚µć‚¤ć‚ŗ" +msgid "Glow Strip" +msgstr "ć‚°ćƒ­ćƒ¼ć‚¹ćƒˆćƒŖ惃惗" + + msgid "Sequence strip creating a glow effect" msgstr "ć‚°ćƒ­ćƒ¼ć‚Ø惕悧ć‚Æćƒˆć‚’ä½œęˆć™ć‚‹ć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚¹ćƒˆćƒŖ惃惗" @@ -107620,6 +107592,10 @@ msgid "Anchor X" msgstr "ć‚¢ćƒ³ć‚«ćƒ¼ X" +msgid "Vertical position of the text box relative to Location" +msgstr "ć€Œä½ē½®ć€ć«åÆ¾ć™ć‚‹ćƒ†ć‚­ć‚¹ćƒˆćƒœćƒƒć‚Æć‚¹ć®åž‚ē›“位ē½®" + + msgid "Box Color" msgstr "惜惃ć‚Æć‚¹ć‚«ćƒ©ćƒ¼" @@ -107840,6 +107816,18 @@ msgid "Sequence strip to group other strips as a single sequence strip" msgstr "ä»–ć®ć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚’ć‚°ćƒ«ćƒ¼ćƒ—åŒ–ć—ļ¼Œäø€ć¤ć®ć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚¹ćƒˆćƒŖ惃惗ćØć—ć¦ę‰±ć†ć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚ÆćƒŖ惃惗" +msgid "(Deprecated: Replaced by '.strips') Strips nested in meta strip" +msgstr "ļ¼ˆå»ƒę­¢äŗˆå®šļ¼š'.strips' 恧ē½®ćę›ćˆć‚‰ć‚Œć¾ć™ļ¼‰ćƒ”ć‚æć‚¹ćƒˆćƒŖćƒƒćƒ—å†…ć®å…„ć‚Œå­ć®ć‚¹ćƒˆćƒŖ惃惗" + + +msgid "Strips nested in meta strip" +msgstr "惔ć‚æć‚¹ćƒˆćƒŖćƒƒćƒ—å†…ć®å…„ć‚Œå­ć®ć‚¹ćƒˆćƒŖ惃惗" + + +msgid "MovieClip Strip" +msgstr "動ē”»ć‚ÆćƒŖćƒƒćƒ—ć‚¹ćƒˆćƒŖ惃惗" + + msgid "Sequence strip to load a video from the clip editor" msgstr "ć‚ÆćƒŖ惃惗ć‚Øćƒ‡ć‚£ć‚æćƒ¼ć‹ć‚‰ćƒ“ćƒ‡ć‚Ŗ恫čŖ­ćæč¾¼ć¾ć‚Œć‚‹ć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚¹ćƒˆćƒŖ惃惗" @@ -109967,6 +109955,18 @@ msgid "Selected Strips" msgstr "éøęŠžć‚¹ćƒˆćƒŖ惃惗" +msgid "Text strip editing selection" +msgstr "ćƒ†ć‚­ć‚¹ćƒˆć‚¹ćƒˆćƒŖćƒƒćƒ—ć®ē·Ø集恮éøꊞ" + + +msgid "Text Strip Cursor" +msgstr "ćƒ†ć‚­ć‚¹ćƒˆć‚¹ćƒˆćƒŖćƒƒćƒ—ć‚«ćƒ¼ć‚½ćƒ«" + + +msgid "Text strip editing cursor" +msgstr "ćƒ†ć‚­ć‚¹ćƒˆć‚¹ćƒˆćƒŖćƒƒćƒ—ć®ē·Øé›†ć®ć‚«ćƒ¼ć‚½ćƒ«" + + msgid "Transition Strip" msgstr "ćƒˆćƒ©ćƒ³ć‚øć‚·ćƒ§ćƒ³ć‚¹ćƒˆćƒŖ惃惗" @@ -111949,6 +111949,19 @@ msgid "Enable this light in solid shading mode" msgstr "ć‚½ćƒŖćƒƒćƒ‰ć‚·ć‚§ćƒ¼ćƒ‡ć‚£ćƒ³ć‚°ćƒ¢ćƒ¼ćƒ‰ć§ć“ć®ćƒ©ć‚¤ćƒˆć‚’ęœ‰åŠ¹ć«ć—ć¾ć™" +msgid "UV Sculpting" +msgstr "UVć‚¹ć‚«ćƒ«ćƒ—ćƒˆ" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "å¼·ć•ę›²ē·šćƒ—ćƒŖć‚»ćƒƒćƒˆ" + + +msgid "Strength Curve" +msgstr "å¼·ć•ę›²ē·š" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "頂ē‚¹ć‚°ćƒ«ćƒ¼ćƒ—ļ¼Žć‚¢ćƒ¼ćƒžćƒćƒ„ć‚¢å¤‰å½¢ć‚„ćć®ä»–ć®ē›®ēš„恫ä½æē”Øć•ć‚Œć¾ć™" @@ -118138,6 +118151,10 @@ msgid "glTF 2.0 (.glb/.gltf)" msgstr "glTF 2.0 (.glb/.gltf)" +msgid "Bones & Skin" +msgstr "ćƒœćƒ¼ćƒ³ćØć‚¹ć‚­ćƒ³" + + msgid "This is the least efficient of the available forms, and should only be used when required." msgstr "恓悌ćÆęœ€ä½ŽåŠ¹ēŽ‡ć®å½¢å¼ćŖ恟悁ļ¼Œåæ…要ćŖꙂ恮ćæä½æē”Øć—ć¦ćć ć•ć„." @@ -121471,6 +121488,10 @@ msgid "Sample Bias" msgstr "ć‚µćƒ³ćƒ—ćƒ«ćƒć‚¤ć‚¢ć‚¹" +msgid "Brush Asset (Unsaved)" +msgstr "ćƒ–ćƒ©ć‚·ć‚¢ć‚»ćƒƒćƒˆļ¼ˆęœŖäæå­˜ļ¼‰" + + msgid "Edge to Edge" msgstr "äø­é–“ē‚¹" @@ -123377,6 +123398,21 @@ msgid "At Cursor" msgstr "ć‚«ćƒ¼ć‚½ćƒ«ä½ē½®ć«" +msgctxt "Operator" +msgid "Unwrap Angle Based" +msgstr "ć‚¢ćƒ³ć‚°ćƒ«ćƒ™ćƒ¼ć‚¹ć§å±•é–‹" + + +msgctxt "Operator" +msgid "Unwrap Conformal" +msgstr "ē­‰č§’ć§å±•é–‹" + + +msgctxt "Operator" +msgid "Unwrap Minimum Stretch" +msgstr "ęœ€å°ć‚¹ćƒˆćƒ¬ćƒƒćƒć§å±•é–‹" + + msgctxt "Operator" msgid "Unpin" msgstr "ćƒ”ćƒ³ē•™ć‚ć‚’č§£é™¤" @@ -128329,6 +128365,10 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "ćƒ¬ćƒ³ćƒ€ćƒ¼ć‚Øćƒ©ćƒ¼ļ¼ˆ%sļ¼‰ć€Œ%s怍恌äæå­˜ć§ćć¾ć›ć‚“" +msgid "Failed to create stereo image buffer" +msgstr "ć‚¹ćƒ†ćƒ¬ć‚Ŗē”»åƒćƒćƒƒćƒ•ć‚”ć®ä½œęˆć«å¤±ę•—ć—ć¾ć—ćŸ" + + msgid "ipos" msgstr "Ipo" @@ -130034,6 +130074,18 @@ msgid "Cannot pose libdata" msgstr "ćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆćƒćƒ¼ć‚øćƒ³ć‚°ć§ćć¾ć›ć‚“" +msgid "Show Original Pose" +msgstr "å…ƒć®ćƒćƒ¼ć‚ŗ悒č”Øē¤ŗ" + + +msgid "Show Blended Pose" +msgstr "ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒćƒ¼ć‚ŗ悒č”Øē¤ŗ" + + +msgid "Flip Pose" +msgstr "ćƒćƒ¼ć‚ŗć‚’åč»¢" + + msgid "Pose lib is only for armatures in pose mode" msgstr "ćƒćƒ¼ć‚ŗćƒ©ć‚¤ćƒ–ćƒ©ćƒŖćÆćƒćƒ¼ć‚ŗćƒ¢ćƒ¼ćƒ‰äø­ć®ć‚¢ćƒ¼ćƒžćƒćƒ„ć‚¢ć®ćæęœ‰åŠ¹" @@ -130070,48 +130122,8 @@ msgid "Sliding-Tool" msgstr "ć‚¹ćƒ©ć‚¤ćƒ‡ć‚£ćƒ³ć‚°ćƒ„ćƒ¼ćƒ«" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "[X]/Y/Z č»ø恮ćæļ¼ˆX 恧ć‚ÆćƒŖć‚¢ļ¼‰" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "X/[Y]/Z č»ø恮ćæļ¼ˆY 恧ć‚ÆćƒŖć‚¢ļ¼‰" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "X/Y/[Z] č»ø恮ćæļ¼ˆZ 恧ć‚ÆćƒŖć‚¢ļ¼‰" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Zļ¼šč»ø制限" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - 位ē½®ć®ćæļ¼ˆG 恧ć‚ÆćƒŖć‚¢ļ¼‰| %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - å›žč»¢ć®ćæļ¼ˆR 恧ć‚ÆćƒŖć‚¢ļ¼‰| %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - ę‹”å¤§ēø®å°ć®ćæļ¼ˆS 恧ć‚ÆćƒŖć‚¢ļ¼‰| %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - ćƒ™ćƒ³ćƒ‡ć‚£ćƒœćƒ¼ćƒ³ć®ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć®ćæļ¼ˆB 恧ć‚ÆćƒŖć‚¢ļ¼‰| %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - ć‚«ć‚¹ć‚æćƒ ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£ć®ćæļ¼ˆC 恧ć‚ÆćƒŖć‚¢ļ¼‰| %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/[C] - ćƒˆćƒ©ćƒ³ć‚¹ćƒ•ć‚©ćƒ¼ćƒ /ćƒ—ćƒ­ćƒ‘ćƒ†ć‚£čØ­å®šć‚’åˆ¶é™" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - ćƒœćƒ¼ćƒ³ć®č”Øē¤ŗ/非č”Øē¤ŗåˆ‡ć‚Šę›æ恈" +msgid "Cancel" +msgstr "ć‚­ćƒ£ćƒ³ć‚»ćƒ«" msgid "No keyframes to slide between" @@ -130697,10 +130709,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "ć‚¢ć‚Æćƒ†ć‚£ćƒ–ć‚Ŗ惖ć‚ø悧ć‚Æ惈ćŖ恗ļ¼Œć¾ćŸćÆ悰ćƒŖćƒ¼ć‚¹ćƒšćƒ³ć‚·ćƒ«ć‚Ŗ惖ć‚ø悧ć‚Æ惈恧ćÆć‚ć‚Šć¾ć›ć‚“" -msgid "Cancel" -msgstr "ć‚­ćƒ£ćƒ³ć‚»ćƒ«" - - msgid "Active Vertex Group is locked" msgstr "ć‚¢ć‚Æćƒ†ć‚£ćƒ–é ‚ē‚¹ć‚°ćƒ«ćƒ¼ćƒ—ćÆ惭惃ć‚Æäø­ć§ć™" @@ -130737,6 +130745,14 @@ msgid "Can only pick from the 3D viewport or the outliner" msgstr "å–å¾—ć§ćć‚‹ć®ćÆ3Dćƒ“ćƒ„ćƒ¼ćƒćƒ¼ćƒˆć¾ćŸćÆć‚¢ć‚¦ćƒˆćƒ©ć‚¤ćƒŠćƒ¼ć‹ć‚‰ć®ćæ恧恙" +msgid "Drag to continue sampling, release when done" +msgstr "ćƒ‰ćƒ©ćƒƒć‚°ć§ć‚µćƒ³ćƒ—ćƒŖćƒ³ć‚°ć‚’ē¶™ē¶šļ¼ŒćƒŖćƒŖćƒ¼ć‚¹ć§å®Œäŗ†" + + +msgid "Press 'Enter' to sample outside of a Blender window" +msgstr "Blender ć‚¦ć‚£ćƒ³ćƒ‰ć‚¦å¤–ć§å–å¾—ć™ć‚‹ć«ćÆ[Enter]ć‚’ęŠ¼ć—ć¦ćć ć•ć„" + + msgid "Could not resolve path '%s'" msgstr "ćƒ‘ć‚¹ć€Œ%sć€ć‚’č§£ę±ŗć§ćć¾ć›ć‚“ć§ć—ćŸ" @@ -132147,6 +132163,10 @@ msgid "Outer" msgstr "外偓" +msgid "Miter Profile Shape" +msgstr "ē•™ć‚ē¶™ćŽę–­é¢ć®å½¢ēŠ¶" + + msgid "Intersection Type" msgstr "äŗ¤å·®ć‚æ悤惗" @@ -132503,6 +132523,10 @@ msgid "SoundTrack" msgstr "ć‚µć‚¦ćƒ³ćƒ‰" +msgid "Empty Fill" +msgstr "ē©ŗć§ćƒ•ć‚£ćƒ«" + + msgctxt "Light" msgid "Volume" msgstr "惜ćƒŖćƒ„ćƒ¼ćƒ " @@ -132812,6 +132836,10 @@ msgid "No UV layer named \"%s\" found in the object \"%s\"" msgstr "怌%s怍ćØ恄恆UVćƒ¬ć‚¤ćƒ¤ćƒ¼ćÆć‚Ŗ惖ć‚ø悧ć‚Æ惈怌%sć€ć«ćÆć‚ć‚Šć¾ć›ć‚“" +msgid "Object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "ć‚Ŗ惖ć‚ø悧ć‚Æ惈怌%sć€ćŒč©•ä¾”ęøˆćæć‚·ćƒ¼ćƒ³ć«ć‚ć‚Šć¾ć›ć‚“ļ¼Žęć‚‰ćéžč”Øē¤ŗ恧恙" + + msgid "Error baking from object \"%s\"" msgstr "ć‚Ŗ惖ć‚ø悧ć‚Æ惈怌%sć€ć‹ć‚‰ć®ćƒ™ć‚¤ć‚Æ恫ć‚Øćƒ©ćƒ¼ćŒē™ŗē”Ÿć—ć¾ć—ćŸ" @@ -134206,6 +134234,10 @@ msgid "Join Areas" msgstr "ć‚ØćƒŖć‚¢ć‚’ēµ±åˆ" +msgid "Replace this area" +msgstr "恓恮ć‚ØćƒŖć‚¢ć‚’ē½®ę›" + + msgid "A narrow vertical area interferes with this operation" msgstr "ēø¦é•·ć®ē‹­ć„ć‚ØćƒŖć‚¢ćŒé‚Ŗé­”ć§ę“ä½œć§ćć¾ć›ć‚“" @@ -134503,18 +134535,6 @@ msgid "UV map or surface attachment is invalid" msgstr "UV ćƒžćƒƒćƒ—ć¾ćŸćÆć‚µćƒ¼ćƒ•ć‚§ć‚¹ćøć®ę¤ćˆä»˜ć‘ćŒē„”åŠ¹ć§ć™" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "ćƒ•ć‚£ćƒ«: [Esc]/RMB:ć‚­ćƒ£ćƒ³ć‚»ćƒ«ļ¼ŒLMB:ćƒ•ć‚£ćƒ«ļ¼ŒMMB:å»¶é•·ć®čŖæę•“ļ¼Œ[S]:ćƒ¢ćƒ¼ćƒ‰åˆ‡ć‚Šę›æ恈ļ¼Œ[D]:ć‚¹ćƒˆćƒ­ćƒ¼ć‚Æč”ēŖ | ćƒ¢ćƒ¼ćƒ‰:{}ļ¼Œč”ēŖ {}ļ¼Œé•·ć•:{:.3f}" - - -msgid "ON" -msgstr "ON" - - -msgid "OFF" -msgstr "OFF" - - msgid "No Grease Pencil frame to draw weight on" msgstr "ć‚¦ć‚§ć‚¤ćƒˆć‚’ćƒ‰ćƒ­ćƒ¼ć™ć‚‹ć‚°ćƒŖćƒ¼ć‚¹ćƒšćƒ³ć‚·ćƒ«ćƒ•ćƒ¬ćƒ¼ćƒ ćŒć‚ć‚Šć¾ć›ć‚“" @@ -135593,42 +135613,6 @@ msgid "Deleted %u drivers" msgstr "%u ć®ćƒ‰ćƒ©ć‚¤ćƒćƒ¼ć‚’å‰Šé™¤ć—ć¾ć—ćŸ" -msgid "Decimate Keyframes" -msgstr "ć‚­ćƒ¼ćƒ•ćƒ¬ćƒ¼ćƒ ć‚’ęø›é‡" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - ć‚·ćƒ£ćƒ¼ćƒ—ć‚’å¤‰ę›“" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - ć‚«ćƒ¼ćƒ–ćƒ™ćƒ³ćƒ‰ć‚’å¤‰ę›“" - - -msgid "Ease Keys" -msgstr "ć‚­ćƒ¼ć‚’ć‚¤ćƒ¼ć‚ŗ" - - -msgid "Shear Keys" -msgstr "ć‚­ćƒ¼ć‚’ć›ć‚“ę–­" - - -msgid "D - Toggle Direction" -msgstr "D - ę–¹å‘åˆ‡ć‚Šę›æ恈" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - 右ē«Æ悒åŸŗęŗ–ć«ć‚¹ć‚±ćƒ¼ćƒŖćƒ³ć‚°" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - å·¦ē«Æ悒åŸŗęŗ–ć«ć‚¹ć‚±ćƒ¼ćƒŖćƒ³ć‚°" - - -msgid "Scale from Neighbor Keys" -msgstr "éš£ć®ć‚­ćƒ¼ć§ć‚¹ć‚±ćƒ¼ćƒ«" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "å…ƒć®ć‚«ćƒ¼ćƒ–ć‹ć‚‰å¤–ć‚Œć‚‹ć“ćØć®ć§ćć‚‹čØ±å®¹é‡ć‚’ęŒ‡å®šć—ļ¼ŒF ć‚«ćƒ¼ćƒ–ć‚’ęø›é‡ć—ć¾ć™" @@ -136949,6 +136933,46 @@ msgid "Can't reload with running modal operators" msgstr "å®Ÿč”Œäø­ć®ćƒ¢ćƒ¼ćƒ€ćƒ«ć‚Ŗćƒšćƒ¬ćƒ¼ć‚æćƒ¼ć®ę‰€ē‚ŗ恧ćƒŖćƒ­ćƒ¼ćƒ‰ć§ćć¾ć›ć‚“" +msgid "Add an add blend mode effect strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒ¢ćƒ¼ćƒ‰ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add a subtract blend mode effect strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ęø›ē®—ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒ¢ćƒ¼ćƒ‰ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add an alpha over blend mode effect strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ć‚¢ćƒ«ćƒ•ć‚”ć‚Ŗćƒ¼ćƒćƒ¼ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒ¢ćƒ¼ćƒ‰ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add an alpha under blend mode effect strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ć‚¢ćƒ«ćƒ•ć‚”ć‚¢ćƒ³ćƒ€ćƒ¼ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒ¢ćƒ¼ćƒ‰ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add a gamma cross transition strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ć‚¬ćƒ³ćƒžć‚Æćƒ­ć‚¹ć®ćƒˆćƒ©ćƒ³ć‚øć‚·ćƒ§ćƒ³ć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add a multiply blend mode effect strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ä¹—ē®—ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒ¢ćƒ¼ćƒ‰ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add an alpha over drop blend mode effect strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ć‚¢ćƒ«ćƒ•ć‚”ć‚Ŗćƒ¼ćƒćƒ¼ćƒ‰ćƒ­ćƒƒćƒ—ćƒ–ćƒ¬ćƒ³ćƒ‰ćƒ¢ćƒ¼ćƒ‰ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add a wipe transition strip for two selected strips with video content" +msgstr "äŗŒć¤ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ćƒÆć‚¤ćƒ—ć®ćƒˆćƒ©ćƒ³ć‚øć‚·ćƒ§ćƒ³ć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add a glow effect strip for a single selected strip with video content" +msgstr "単äø€ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ć‚°ćƒ­ćƒ¼ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + +msgid "Add a transform effect strip for a single selected strip with video content" +msgstr "単äø€ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ćƒˆćƒ©ćƒ³ć‚¹ćƒ•ć‚©ćƒ¼ćƒ ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + msgid "Add a color strip to the sequencer" msgstr "ć‚·ćƒ¼ć‚±ćƒ³ć‚µćƒ¼ć«ć‚«ćƒ©ćƒ¼ć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" @@ -136961,6 +136985,10 @@ msgid "Add an adjustment layer effect strip to the sequencer" msgstr "ć‚·ćƒ¼ć‚±ćƒ³ć‚µćƒ¼ć«čŖæę•“ćƒ¬ć‚¤ćƒ¤ćƒ¼ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" +msgid "Add a gaussian blur effect strip for a single selected strip with video content" +msgstr "単äø€ć®å‹•ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮éøęŠžć‚¹ćƒˆćƒŖćƒƒćƒ—ć«ć‚¬ć‚¦ć‚·ć‚¢ćƒ³ć¼ć‹ć—ć®ć‚Ø惕悧ć‚Æćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" + + msgid "Add a text strip to the sequencer" msgstr "ć‚·ćƒ¼ć‚±ćƒ³ć‚µćƒ¼ć«ćƒ†ć‚­ć‚¹ćƒˆć‚¹ćƒˆćƒŖ惃惗悒čæ½åŠ ć—ć¾ć™" @@ -137017,6 +137045,14 @@ msgid "MetaStrip" msgstr "惔ć‚æć‚¹ćƒˆćƒŖ惃惗" +msgid "Exactly 2 selected sequence strips with video content are needed" +msgstr "動ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮恂悋éøęŠžć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚¹ćƒˆćƒŖćƒƒćƒ—ćŒć”ć‚‡ć†ć©ļ¼’恤åæ…要恧恙" + + +msgid "Exactly one selected sequence strip with video content is needed" +msgstr "動ē”»ć‚³ćƒ³ćƒ†ćƒ³ćƒ„恮恂悋éøęŠžć‚·ćƒ¼ć‚±ćƒ³ć‚¹ć‚¹ćƒˆćƒŖćƒƒćƒ—ćŒć”ć‚‡ć†ć©ļ¼‘恤恠恑åæ…要恧恙" + + msgid "Cannot reassign inputs: strip has no inputs" msgstr "å…„åŠ›ćŒå†å‰²ć‚Šå½“ć¦ć§ćć¾ć›ć‚“ļ¼šć‚¹ćƒˆćƒŖćƒƒćƒ—ć«å…„åŠ›ćŒć‚ć‚Šć¾ć›ć‚“" @@ -138151,11 +138187,19 @@ msgstr "[Shift] - 高ē²¾åŗ¦ę“ä½œćŒęœ‰åŠ¹" msgid "Shift - Hold for precision" -msgstr "[Shift] - ćƒ›ćƒ¼ćƒ«ćƒ‰ć§é«˜ē²¾åŗ¦" +msgstr "[Shift] - ęŠ¼ć—ćŖćŒć‚‰ć§é«˜ē²¾åŗ¦" msgid " | [Ctrl] - Increments active" -msgstr " | [Ctrl] - 増ęø›ę“ä½œćŒęœ‰åŠ¹" +msgstr " | [Ctrl] - å®šę•°å¢—ęø›ćŒęœ‰åŠ¹" + + +msgid "Overshoot" +msgstr "ć‚Ŗćƒ¼ćƒćƒ¼ć‚·ćƒ„ćƒ¼ćƒˆ" + + +msgid "Overshoot Disabled" +msgstr "ć‚Ŗćƒ¼ćƒćƒ¼ć‚·ćƒ„ćƒ¼ćƒˆē„”効" msgid "Unpack File" @@ -139285,6 +139329,10 @@ msgid "Sizes must be greater than zero" msgstr "悵悤ć‚ŗćÆļ¼ć‚ˆć‚Šå¤§ććć—ć¦ćć ć•ć„" +msgid "Length of reorder indices must be the same as the number of curves" +msgstr "äø¦ć¹ę›æćˆć‚‹ć‚¤ćƒ³ćƒ‡ćƒƒć‚Æć‚¹ć®é•·ć•ćÆć‚«ćƒ¼ćƒ–ćØåŒć˜ć«ć—ć¦ćć ć•ć„" + + msgid "Dependency graph update requested during evaluation" msgstr "č©•ä¾”äø­ć«ä¾å­˜ć‚°ćƒ©ćƒ•ć®ę›“ꖰ恌ćƒŖć‚Æć‚Øć‚¹ćƒˆć•ć‚Œć¾ć—ćŸ" @@ -141000,7 +141048,7 @@ msgid "Clipping" msgstr "ć‚ÆćƒŖćƒƒćƒ”ćƒ³ć‚°" -msgid "Level Viewport" +msgid "Levels Viewport" msgstr "ćƒ“ćƒ„ćƒ¼ćƒćƒ¼ćƒˆć®ćƒ¬ćƒ™ćƒ«ę•°" @@ -141138,6 +141186,10 @@ msgid "Built without Remesh modifier" msgstr "ćƒŖćƒ”ćƒƒć‚·ćƒ„ćƒ¢ćƒ‡ć‚£ćƒ•ć‚”ć‚¤ć‚¢ćƒ¼ćŖć—ć§ćƒ“ćƒ«ćƒ‰ć•ć‚Œć¦ć„ć¾ć™" +msgid "Zero scale cannot be solved" +msgstr "ć‚¹ć‚±ćƒ¼ćƒ«ļ¼ćÆč§£ę±ŗć§ćć¾ć›ć‚“" + + msgid "Axis Object" msgstr "č»øć‚Ŗ惖ć‚ø悧ć‚Æ惈" @@ -141219,10 +141271,6 @@ msgid "Adaptive Subdivision" msgstr "適åæœć‚µćƒ–ćƒ‡ć‚£ćƒ“ć‚øćƒ§ćƒ³" -msgid "Levels Viewport" -msgstr "ćƒ“ćƒ„ćƒ¼ćƒćƒ¼ćƒˆć®ćƒ¬ćƒ™ćƒ«ę•°" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "꜀ēµ‚ć‚¹ć‚±ćƒ¼ćƒ« - ćƒ¬ćƒ³ćƒ€ćƒ¼: %.2f pxļ¼Œćƒ“ćƒ„ćƒ¼: %.2f px" @@ -141490,6 +141538,14 @@ msgid "Prefilter:" msgstr "ćƒ—ćƒ¬ćƒ•ć‚£ćƒ«ć‚æćƒ¼:" +msgid "Quality:" +msgstr "品č³Ŗ:" + + +msgid "Disabled. Built without OpenImageDenoise" +msgstr "ē„”効ļ¼ŽOpenImageDenoise ćŖć—ć§ćƒ“ćƒ«ćƒ‰ć•ć‚Œć¦ć„ć¾ć™" + + msgid "Image 1" msgstr "ē”»åƒ 1" @@ -141554,6 +141610,34 @@ msgid "Glare" msgstr "ć‚°ćƒ¬ć‚¢" +msgid "The image with the generated glare added" +msgstr "ē”Ÿęˆć—ćŸć‚°ćƒ¬ć‚¢ć‚’čæ½åŠ ć—ćŸē”»åƒ" + + +msgid "The generated glare" +msgstr "ē”Ÿęˆć—ćŸć‚°ćƒ¬ć‚¢" + + +msgid "The smoothness of the extracted highlights" +msgstr "ęŠ½å‡ŗ" + + +msgid "Adjusts the brightness of the glare" +msgstr "ć‚°ćƒ¬ć‚¢ć®č¼åŗ¦ć‚’čŖæę•“ć—ć¾ć™" + + +msgid "Adjusts the saturation of the glare" +msgstr "ć‚°ćƒ¬ć‚¢ć®å½©åŗ¦ć‚’čŖæę•“ć—ć¾ć™" + + +msgid "The number of streaks" +msgstr "å…‰ć®ē­‹ć®ę•°" + + +msgid "The number of ghosts for Ghost glare or the quality and spread of Glare for Streaks and Simple Star" +msgstr "ć‚“ćƒ¼ć‚¹ćƒˆć‚°ćƒ¬ć‚¢ć§ćÆć‚“ćƒ¼ć‚¹ćƒˆć®ę•°ļ¼Œå…‰ć®ē­‹ćØ単ē“”ćŖę˜Ÿåž‹ć§ćÆ品č³ŖćØåŗƒćŒć‚Š" + + msgid "Streak fade-out factor" msgstr "å…‰ć®ē­‹ćŒćƒ•ć‚§ćƒ¼ćƒ‰ć‚¢ć‚¦ćƒˆć™ć‚‹äæ‚ę•°" @@ -141602,10 +141686,6 @@ msgid "Offset Y" msgstr "ć‚Ŗćƒ•ć‚»ćƒƒćƒˆ Y" -msgid "Undistortion" -msgstr "ę­Ŗćæ除去" - - msgid "Dot" msgstr "内ē©" @@ -142645,10 +142725,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "ć—ćć„å€¤ć‚ˆć‚Šå¤§ćć„å€¤ćÆē”Ÿęˆćƒ”ćƒƒć‚·ćƒ„ć®å†…éƒØ" -msgid "Has Alpha" -msgstr "ć‚¢ćƒ«ćƒ•ć‚”ć®ęœ‰ē„”" - - msgid "Frame Count" msgstr "ćƒ•ćƒ¬ćƒ¼ćƒ ę•°" @@ -144312,6 +144388,14 @@ msgstr "" "ļ¼ˆć‚³ćƒ¼ćƒˆ IOR ć«ä¾å­˜ļ¼‰" +msgid "Intensity of the sheen layer, which simulates very small fibers on the surface" +msgstr "č”Ø面äøŠć®éžåøøć«å°ć•ćŖē¹Šē¶­ć‚’ć‚·ćƒŸćƒ„ćƒ¬ćƒ¼ćƒˆć™ć‚‹ļ¼Œć‚·ćƒ¼ćƒ³ćƒ¬ć‚¤ćƒ¤ćƒ¼ć®å¼·åŗ¦" + + +msgid "Color of the sheen reflection" +msgstr "ć‚·ćƒ¼ćƒ³åå°„ć®č‰²" + + msgid "Color of light emission from the surface" msgstr "č”Øé¢ć‹ć‚‰ę”¾å°„ć™ć‚‹å…‰ć®č‰²" @@ -144322,6 +144406,10 @@ msgstr "" "ę”¾å°„ć‚«ćƒ©ćƒ¼ćØ完å…Øć«åŒć˜ć«ćŖ悋恓ćØ恌äæčØ¼ć•ć‚Œć¦ć„ć¾ć™" +msgid "Index of refraction (IOR) of the thin film" +msgstr "č–„č†œć®å±ˆęŠ˜ēŽ‡ļ¼ˆIORļ¼‰" + + msgid "IOR Level" msgstr "IORćƒ¬ćƒ™ćƒ«" @@ -145519,6 +145607,14 @@ msgid "drag-" msgstr "ćƒ‰ćƒ©ćƒƒć‚°" +msgid "ON" +msgstr "ON" + + +msgid "OFF" +msgstr "OFF" + + msgid "Set Debug Value" msgstr "ćƒ‡ćƒćƒƒć‚°å€¤čح定" diff --git a/locale/po/ka.po b/locale/po/ka.po index 15612ee7c0d7..8d105571ba8c 100644 --- a/locale/po/ka.po +++ b/locale/po/ka.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-24 09:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-01-29 12:21+0000\n" "Last-Translator: Tamar \n" "Language-Team: Georgian \n" "Language: ka\n" @@ -439,6 +439,11 @@ msgid "Expanded state of the slot" msgstr "įƒ”įƒšįƒįƒ¢įƒ˜įƒ” įƒ’įƒįƒœįƒ•įƒ įƒŖįƒįƒ‘įƒ˜įƒšįƒ˜ įƒ›įƒ“įƒ’įƒįƒ›įƒįƒ įƒ”įƒįƒ‘įƒ" +msgctxt "ID" +msgid "Target ID Type" +msgstr "įƒ”įƒįƒ”įƒ£įƒ įƒ•įƒ”įƒšįƒ˜ ID-įƒ” įƒ¢įƒ˜įƒžįƒ˜" + + msgctxt "ID" msgid "Action" msgstr "įƒ„įƒ›įƒ”įƒ“įƒ”įƒ‘įƒ" @@ -25966,10 +25971,6 @@ msgid "Display the object's name" msgstr "įƒįƒ”įƒįƒ®įƒ” įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜įƒ” įƒ”įƒįƒ®įƒ”įƒšįƒ˜" -msgid "Shape Key Lock" -msgstr "įƒ¤įƒįƒ įƒ›įƒ˜įƒ” įƒ”įƒįƒšįƒ˜įƒ” įƒ‘įƒšįƒįƒ™įƒ˜" - - msgid "Only show the active shape key at full value" msgstr "įƒ”įƒ įƒ£įƒšįƒ˜ įƒ›įƒœįƒ˜įƒØįƒ•įƒœįƒ”įƒšįƒįƒ‘įƒ˜įƒ— įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ¤įƒįƒ įƒ›įƒ˜įƒ” įƒįƒ„įƒ¢įƒ˜įƒ£įƒ įƒ˜ įƒ”įƒįƒšįƒ˜ įƒįƒ©įƒ•įƒ”įƒœįƒ”" @@ -34304,6 +34305,14 @@ msgid "Editor menu containing buttons" msgstr "įƒ įƒ”įƒ“įƒįƒ„įƒ¢įƒįƒ įƒ˜įƒ” įƒ›įƒ”įƒœįƒ˜įƒ£, įƒ įƒįƒ›įƒ”įƒšįƒ˜įƒŖ įƒ¦įƒ˜įƒšįƒįƒ™įƒ”įƒ‘įƒ” įƒØįƒ”įƒ˜įƒŖįƒįƒ•įƒ”" +msgid "Metaball" +msgstr "įƒ›įƒ”įƒ¢įƒįƒ‘įƒ£įƒ įƒ—įƒ˜" + + +msgid "Show/Hide" +msgstr "įƒ©įƒ•įƒ”įƒœįƒ”įƒ‘įƒ/įƒ“įƒįƒ›įƒįƒšįƒ•įƒ" + + msgid "Names" msgstr "įƒ”įƒįƒ®įƒ”įƒšįƒ”įƒ‘įƒ˜" @@ -34312,10 +34321,6 @@ msgid "Bone Roll" msgstr "įƒ«įƒ•įƒšįƒ˜įƒ” įƒ¢įƒ įƒ˜įƒįƒšįƒ˜" -msgid "Show/Hide" -msgstr "įƒ©įƒ•įƒ”įƒœįƒ”įƒ‘įƒ/įƒ“įƒįƒ›įƒįƒšįƒ•įƒ" - - msgid "Clean Up" msgstr "įƒ’įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒ" @@ -34404,10 +34409,6 @@ msgid "Assign Material" msgstr "įƒ›įƒįƒ”įƒįƒšįƒ˜įƒ” įƒ›įƒ˜įƒ™įƒ£įƒ—įƒ•įƒœįƒ”įƒ‘įƒ" -msgid "Metaball" -msgstr "įƒ›įƒ”įƒ¢įƒįƒ‘įƒ£įƒ įƒ—įƒ˜" - - msgid "Light" msgstr "įƒ”įƒ˜įƒœįƒįƒ—įƒšįƒ”" @@ -44489,30 +44490,14 @@ msgid "Create matte based on differences in color channels" msgstr "įƒØįƒ”įƒ„įƒ›įƒ”įƒœįƒ˜ įƒ™įƒįƒØįƒ” įƒ¤įƒ”įƒ įƒ—įƒ įƒįƒ įƒ®įƒ”įƒ‘įƒ” įƒØįƒįƒ įƒ˜įƒ” įƒ”įƒ®įƒ•įƒįƒįƒ‘įƒ˜įƒ” įƒ›įƒ˜įƒ®įƒ”įƒ“įƒ•įƒ˜įƒ—" -msgid "RGB color space" -msgstr "RGB įƒ¤įƒ”įƒ įƒ˜įƒ—įƒ˜ įƒ”įƒ˜įƒ•įƒ įƒŖįƒ”" - - -msgid "HSV color space" -msgstr "HSV įƒ¤įƒ”įƒ įƒ˜įƒ—įƒ˜ įƒ”įƒ˜įƒ•įƒ įƒŖįƒ”" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "YUV įƒ¤įƒ”įƒ įƒ˜įƒ—įƒ˜ įƒ”įƒ˜įƒ•įƒ įƒŖįƒ”" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "YCbCr įƒ¤įƒ”įƒ įƒ˜įƒ—įƒ˜ įƒ”įƒ˜įƒ•įƒ įƒŖįƒ”" - - msgctxt "Color" msgid "Limit Channel" msgstr "įƒšįƒ˜įƒ›įƒ˜įƒ¢įƒ˜įƒ” įƒįƒ įƒ®įƒ˜" @@ -45036,26 +45021,6 @@ msgid "Mode of color processing" msgstr "įƒ¤įƒ”įƒ įƒ˜įƒ” įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ˜įƒ” įƒ įƒ”įƒŸįƒ˜įƒ›įƒ˜" -msgid "Use RGB color processing" -msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” RGB įƒ¤įƒ”įƒ įƒ˜įƒ” įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ" - - -msgid "Use HSV color processing" -msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” HSV įƒ¤įƒ”įƒ įƒ˜įƒ” įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ" - - -msgid "Use HSL color processing" -msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” HSL įƒ¤įƒ”įƒ įƒ˜įƒ” įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ" - - -msgid "Use YCbCr color processing" -msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” YCbCr įƒ¤įƒ”įƒ įƒ˜įƒ” įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ" - - -msgid "Use YUV color processing" -msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” YUV įƒ¤įƒ”įƒ įƒ˜įƒ” įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ" - - msgid "Color space used for YCbCrA processing" msgstr "YCbCrA įƒ“įƒįƒ›įƒ£įƒØįƒįƒ•įƒ”įƒ‘įƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ” įƒ’įƒįƒ›įƒįƒ§įƒ”įƒœįƒ”įƒ‘įƒ£įƒšįƒ˜ įƒ¤įƒ”įƒ įƒ˜įƒ—įƒ˜ įƒ”įƒ˜įƒ•įƒ įƒŖįƒ”" @@ -45513,6 +45478,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "įƒØįƒ”įƒ„įƒ›įƒ”įƒœįƒ˜ įƒ™įƒįƒØįƒ” įƒ¤įƒ”įƒ įƒ—įƒ įƒØįƒįƒ įƒ˜įƒ” 3įƒ’ įƒ›įƒįƒœįƒ«įƒ˜įƒšįƒ–įƒ” įƒ“įƒįƒ§įƒ įƒ“įƒœįƒįƒ‘įƒ˜įƒ—" +msgid "RGB color space" +msgstr "RGB įƒ¤įƒ”įƒ įƒ˜įƒ—įƒ˜ įƒ”įƒ˜įƒ•įƒ įƒŖįƒ”" + + msgid "YCbCr suppression" msgstr "YCbCr įƒ“įƒįƒ—įƒ įƒ’įƒ£įƒœįƒ•įƒ" @@ -46979,42 +46948,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” įƒØįƒ”įƒ¤įƒįƒ įƒ“įƒ”įƒ‘įƒ˜įƒ—įƒ˜ (įƒØįƒ”įƒœįƒįƒ¢įƒįƒœįƒ˜ įƒ’įƒįƒ›įƒįƒ”įƒįƒ®įƒ£įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ–įƒįƒ›įƒ˜įƒ” įƒ¬įƒ˜įƒšįƒįƒ“įƒ˜) įƒ›įƒœįƒ˜įƒØįƒ•įƒœįƒ”įƒšįƒįƒ‘įƒ”įƒ‘įƒ˜ įƒ’įƒįƒ“įƒįƒįƒ“įƒ’įƒ˜įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ’įƒįƒœįƒ”įƒįƒ”įƒįƒ–įƒ¦įƒ•įƒ įƒįƒ“" -msgid "Wrapping" -msgstr "įƒ’įƒįƒ įƒ”įƒØįƒ”įƒ›įƒįƒ®įƒ•įƒ”įƒ•įƒ" - - -msgid "Wrap image on a specific axis" -msgstr "įƒØįƒ”įƒ›įƒįƒįƒ®įƒ•įƒ˜įƒ” įƒ’įƒįƒ›įƒįƒ”įƒįƒ®įƒ£įƒšįƒ”įƒ‘įƒ įƒ™įƒįƒœįƒ™įƒ įƒ”įƒ¢įƒ£įƒš įƒ¦įƒ”įƒ įƒ«įƒ–įƒ”" - - -msgid "No wrapping on X and Y" -msgstr "įƒØįƒ”įƒ›įƒįƒ®įƒ•įƒ”įƒ•įƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ” X-įƒ”įƒ įƒ“įƒ Y-įƒ–įƒ”" - - msgid "X Axis" msgstr "X įƒ¦įƒ”įƒ įƒ«įƒ˜" -msgid "Wrap all pixels on the X axis" -msgstr "įƒ§įƒ•įƒ”įƒšįƒ įƒžįƒ˜įƒ„įƒ”įƒ”įƒšįƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ”įƒ›įƒįƒ®įƒ•įƒ”įƒ•įƒ X įƒ¦įƒ”įƒ įƒ«įƒ–įƒ”" - - msgid "Y Axis" msgstr "Y įƒ¦įƒ”įƒ įƒ«įƒ˜" -msgid "Wrap all pixels on the Y axis" -msgstr "įƒ§įƒ•įƒ”įƒšįƒ įƒžįƒ˜įƒ„įƒ”įƒ”įƒšįƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ”įƒ›įƒįƒ®įƒ•įƒ”įƒ•įƒ Y įƒ¦įƒ”įƒ įƒ«įƒ–įƒ”" - - msgid "Both Axes" msgstr "įƒįƒ įƒ˜įƒ•įƒ” įƒ¦įƒ”įƒ įƒ«įƒ˜" -msgid "Wrap all pixels on both axes" -msgstr "įƒØįƒ”įƒ›įƒįƒįƒ®įƒ•įƒ˜įƒ” įƒ§įƒ•įƒ”įƒšįƒ įƒžįƒ˜įƒ„įƒ”įƒ”įƒšįƒ˜ įƒįƒ įƒ˜įƒ•įƒ” įƒ¦įƒ”įƒ įƒ«įƒ”" - - msgid "Map values to colors with the use of a gradient" msgstr "įƒ’įƒįƒįƒœįƒįƒ¬įƒ˜įƒšįƒ” įƒ›įƒœįƒ˜įƒØįƒ•įƒœįƒ”įƒšįƒįƒ‘įƒ”įƒ‘įƒ˜ įƒ¤įƒ”įƒ įƒ”įƒ‘įƒ–įƒ” įƒ’įƒ įƒįƒ“įƒ˜įƒ”įƒœįƒ¢įƒ˜įƒ” įƒ’įƒįƒ›įƒįƒ§įƒ”įƒœįƒ”įƒ‘įƒ˜įƒ—" @@ -48673,6 +48618,14 @@ msgid "Retrieve a unit length vector indicating the direction pointing away from msgstr "įƒįƒ›įƒįƒ˜įƒ¦įƒ” įƒ”įƒ įƒ—įƒ”įƒ£įƒšįƒ˜įƒ” įƒ”įƒ˜įƒ’įƒ įƒ«įƒ˜įƒ” įƒ•įƒ”įƒ„įƒ¢įƒįƒ įƒ˜, įƒ įƒįƒ›įƒ”įƒšįƒ˜įƒŖ įƒ›įƒ˜įƒ£įƒ—įƒ˜įƒ—įƒ”įƒ‘įƒ” įƒ—įƒ˜įƒ—įƒįƒ”įƒ£įƒš įƒ”įƒšįƒ”įƒ›įƒ”įƒœįƒ¢įƒ—įƒįƒœ įƒ’įƒ”įƒįƒ›įƒ”įƒ¢įƒ įƒ˜įƒ˜įƒ” įƒ”įƒįƒžįƒ˜įƒ įƒ˜įƒ”įƒžįƒ˜įƒ įƒ įƒ›įƒ˜įƒ›įƒįƒ įƒ—įƒ£įƒšįƒ”įƒ‘įƒ˜įƒ—" +msgid "Flat Corner Normals" +msgstr "įƒ™įƒ£įƒ—įƒ®įƒ˜įƒ” įƒ‘įƒ įƒ¢įƒ§įƒ”įƒšįƒ˜ įƒœįƒįƒ įƒ›įƒįƒšįƒ”įƒ‘įƒ˜" + + +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "įƒ§įƒįƒ•įƒ”įƒšįƒ—įƒ•įƒ˜įƒ” įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” įƒ¬įƒįƒ®įƒœįƒįƒ’įƒ˜įƒ” įƒœįƒįƒ įƒ›įƒįƒšįƒ”įƒ‘įƒ˜ įƒ¬įƒįƒ®įƒœįƒįƒ’įƒ˜įƒ” įƒ™įƒ£įƒ—įƒ®įƒ˜įƒ” įƒ”įƒįƒ›įƒįƒ„įƒ›įƒ”įƒ“įƒ įƒįƒ įƒ”įƒįƒšįƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ”, įƒ™įƒ•įƒįƒœįƒ«įƒ˜įƒ” įƒ«įƒ•įƒ”įƒš įƒ„įƒŖįƒ”įƒ•įƒįƒ–įƒ” įƒ›įƒ˜įƒ”įƒįƒ“įƒįƒ’įƒ”įƒ‘įƒ˜įƒ—" + + msgid "Output a single object" msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ¢įƒįƒœįƒ” įƒ”įƒ įƒ—įƒ˜ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜" @@ -62563,6 +62516,22 @@ msgid "Export armatures using rest position as joints' rest pose. When off, curr msgstr "įƒ“įƒįƒįƒ”įƒ„įƒ”įƒžįƒįƒ įƒ¢įƒ˜įƒ įƒ” įƒįƒ įƒ›įƒįƒ¢įƒ£įƒ įƒ”įƒ‘įƒ˜, įƒ įƒįƒ›įƒšįƒ”įƒ‘įƒ˜įƒŖ įƒ£įƒ«įƒ įƒįƒįƒ‘įƒ˜įƒ” įƒžįƒįƒ–įƒ˜įƒŖįƒ˜įƒįƒ” įƒ”įƒįƒ®įƒ”įƒ įƒ”įƒ‘įƒ˜įƒ” įƒ£įƒ«įƒ įƒįƒįƒ‘įƒ˜įƒ” įƒžįƒįƒ–įƒįƒ“ įƒ˜įƒ§įƒ”įƒœįƒ”įƒ‘įƒ”įƒœ. įƒ įƒįƒŖįƒ įƒ’įƒįƒ›įƒįƒ įƒ—įƒ£įƒšįƒ˜įƒ, įƒ›įƒ˜įƒ›įƒ“įƒ˜įƒœįƒįƒ įƒ” įƒ™įƒįƒ“įƒ įƒ˜įƒ” įƒžįƒįƒ–įƒ įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ”įƒ‘įƒ įƒ£įƒ«įƒ įƒįƒįƒ‘įƒ˜įƒ” įƒžįƒįƒ–įƒįƒ“" +msgid "Sampling Interpolation Fallback" +msgstr "įƒ”įƒ”įƒ›įƒžįƒšįƒ˜įƒ įƒ”įƒ‘įƒ˜įƒ” įƒ”įƒįƒ—įƒįƒ“įƒįƒ įƒ˜įƒ’įƒ įƒ˜įƒœįƒ¢įƒ”įƒ įƒžįƒįƒšįƒįƒŖįƒ˜įƒ" + + +msgid "Interpolation fallback for sampled animations, when the property is not keyed" +msgstr "įƒ”įƒįƒ—įƒįƒ“įƒįƒ įƒ˜įƒ’įƒ įƒ˜įƒœįƒ¢įƒ”įƒ įƒžįƒįƒšįƒįƒŖįƒ˜įƒ įƒ”įƒ”įƒ›įƒžįƒšįƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜ įƒįƒœįƒ˜įƒ›įƒįƒŖįƒ˜įƒ”įƒ‘įƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ”, įƒ įƒįƒŖįƒ įƒ—įƒ•įƒ˜įƒ”įƒ”įƒ‘įƒ įƒ©įƒįƒ”įƒįƒšįƒ˜įƒšįƒ˜ įƒįƒ įƒįƒ" + + +msgid "Linear interpolation between keyframes" +msgstr "įƒ¬įƒ įƒ¤įƒ˜įƒ•įƒ˜ įƒ˜įƒœįƒ¢įƒ”įƒ įƒžįƒįƒšįƒįƒŖįƒ˜įƒ įƒ”įƒįƒ™įƒ•įƒįƒœįƒ«įƒ įƒ¤įƒįƒ–įƒ”įƒ‘įƒ” įƒØįƒįƒ įƒ˜įƒ”" + + +msgid "No interpolation between keyframes" +msgstr "įƒ”įƒįƒ™įƒ•įƒįƒœįƒ«įƒ įƒ¤įƒįƒ–įƒ”įƒ‘įƒ” įƒØįƒįƒ įƒ˜įƒ” įƒ˜įƒœįƒ¢įƒ”įƒ įƒžįƒįƒšįƒįƒŖįƒ˜įƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ”" + + msgid "Shared Accessors" msgstr "įƒ”įƒįƒ–įƒ˜įƒįƒ įƒ įƒįƒ„įƒ”įƒ”įƒ”įƒįƒ įƒ”įƒ‘įƒ˜" @@ -71619,6 +71588,22 @@ msgid "Add a collection info node to the current node editor" msgstr "įƒ“įƒįƒįƒ›įƒįƒ¢įƒ” įƒ™įƒįƒšįƒ”įƒ„įƒŖįƒ˜įƒ˜įƒ” įƒ˜įƒœįƒ¤įƒįƒ” įƒ™įƒ•įƒįƒœįƒ«įƒ˜ įƒ›įƒ˜įƒ›įƒ“įƒ˜įƒœįƒįƒ įƒ” įƒ™įƒ•įƒįƒœįƒ«įƒ”įƒ‘įƒ˜įƒ” įƒ įƒ”įƒ“įƒįƒ„įƒ¢įƒįƒ įƒ”" +msgid "Source color" +msgstr "įƒ¬įƒ§įƒįƒ įƒįƒ” įƒ¤įƒ”įƒ įƒ˜" + + +msgid "Gamma Corrected" +msgstr "įƒ’įƒįƒ›įƒ įƒ™įƒįƒ įƒ”įƒ„įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜" + + +msgid "The source color is gamma corrected" +msgstr "įƒ¬įƒ§įƒįƒ įƒįƒ” įƒ¤įƒ”įƒ įƒ˜ įƒ’įƒįƒ›įƒ įƒ™įƒįƒ įƒ”įƒ„įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜įƒ" + + +msgid "Has Alpha" +msgstr "įƒįƒ„įƒ•įƒ” įƒįƒšįƒ¤įƒ" + + msgctxt "Operator" msgid "Add File Node" msgstr "įƒ¤įƒįƒ˜įƒšįƒ˜įƒ” įƒ™įƒ•įƒįƒœįƒ«įƒ˜įƒ” įƒ“įƒįƒ›įƒįƒ¢įƒ”įƒ‘įƒ" @@ -84451,18 +84436,6 @@ msgid "Drop colors to buttons" msgstr "įƒ“įƒįƒ§įƒįƒ įƒ” įƒ¤įƒ”įƒ įƒ”įƒ‘įƒ˜ įƒ¦įƒ˜įƒšįƒįƒ™įƒ”įƒ‘įƒ–įƒ”" -msgid "Source color" -msgstr "įƒ¬įƒ§įƒįƒ įƒįƒ” įƒ¤įƒ”įƒ įƒ˜" - - -msgid "Gamma Corrected" -msgstr "įƒ’įƒįƒ›įƒ įƒ™įƒįƒ įƒ”įƒ„įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜" - - -msgid "The source color is gamma corrected" -msgstr "įƒ¬įƒ§įƒįƒ įƒįƒ” įƒ¤įƒ”įƒ įƒ˜ įƒ’įƒįƒ›įƒ įƒ™įƒįƒ įƒ”įƒ„įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜įƒ" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "įƒ›įƒįƒ”įƒįƒšįƒ˜įƒ” įƒ“įƒįƒ’įƒ“įƒ”įƒ‘įƒ įƒ›įƒįƒ”įƒįƒšįƒ”įƒ‘įƒ˜įƒ” įƒ”įƒšįƒįƒ¢įƒ”įƒ‘įƒØįƒ˜" @@ -87159,6 +87132,11 @@ msgid "Lattices" msgstr "įƒ’įƒ˜įƒ”įƒįƒ”įƒ”įƒ‘įƒ˜" +msgctxt "ID" +msgid "Lights" +msgstr "įƒ”įƒ˜įƒœįƒįƒ—įƒšįƒ”įƒ”įƒ‘įƒ˜" + + msgctxt "ID" msgid "Light Probes" msgstr "įƒ”įƒ˜įƒœįƒįƒ—įƒšįƒ˜įƒ” įƒ–įƒįƒœįƒ“įƒ”įƒ‘įƒ˜" @@ -89177,10 +89155,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "įƒ“įƒįƒįƒ“įƒ’įƒ˜įƒœįƒ” įƒ›įƒįƒ įƒ’įƒ”įƒ‘įƒ£įƒšįƒ˜ įƒ”įƒ˜įƒ“įƒ˜įƒ“įƒ” įƒ”įƒŖįƒ”įƒœįƒ˜įƒ” įƒ›įƒ”įƒ¢įƒ  įƒ”įƒ įƒ—įƒ”įƒ£įƒšįƒØįƒ˜" -msgid "Convert World Material" -msgstr "įƒ”įƒįƒ›įƒ§įƒįƒ įƒįƒ” įƒ›įƒįƒ”įƒįƒšįƒ˜įƒ” įƒ™įƒįƒœįƒ•įƒ”įƒ įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "įƒ“įƒįƒįƒ™įƒįƒœįƒ•įƒ”įƒ įƒ¢įƒ˜įƒ įƒ” įƒ”įƒįƒ›įƒ§įƒįƒ įƒįƒ” įƒ›įƒįƒ”įƒįƒšįƒ USD-įƒ” įƒ—įƒįƒ¦įƒįƒ•įƒįƒœ įƒ’įƒįƒœįƒįƒ—įƒ”įƒ‘įƒįƒ“. įƒįƒ›įƒŸįƒįƒ›įƒįƒ“ įƒ›įƒ§įƒØįƒįƒįƒ‘įƒ” įƒ›įƒįƒ įƒ¢įƒ˜įƒ• įƒ›įƒįƒ¢įƒ”įƒ įƒ˜įƒįƒšįƒ”įƒ‘įƒ–įƒ”, įƒ įƒįƒ›įƒšįƒ”įƒ‘įƒ˜įƒŖ įƒØįƒ”įƒ“įƒ’įƒ”įƒ‘įƒ įƒ¤įƒįƒœįƒ˜įƒ” įƒ˜įƒ”įƒ įƒ¤įƒ”įƒ įƒ—įƒįƒœ įƒ“įƒįƒ™įƒįƒ•įƒØįƒ˜įƒ įƒ”įƒ‘įƒ£įƒš įƒ’įƒįƒ įƒ”įƒ›įƒįƒ” įƒ¢įƒ”įƒ„įƒ”įƒ¢įƒ£įƒ įƒ˜įƒ”įƒ’įƒįƒœ, įƒ¢įƒ”įƒ„įƒ”įƒ¢įƒ£įƒ įƒ˜įƒ” įƒ¤įƒ”įƒ įƒ˜įƒ” įƒįƒ įƒįƒ”įƒįƒ•įƒįƒšįƒ“įƒ”įƒ‘įƒ£įƒšįƒ įƒ•įƒ”įƒ„įƒ¢įƒįƒ įƒ£įƒšįƒ˜ įƒ’įƒįƒ›įƒ įƒįƒ•įƒšįƒ”įƒ‘įƒ˜įƒ—" @@ -89534,10 +89508,6 @@ msgid "Add all imported objects to a new collection" msgstr "įƒ“įƒįƒįƒ›įƒįƒ¢įƒ” įƒ§įƒ•įƒ”įƒšįƒ įƒ˜įƒ›įƒžįƒįƒ įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ įƒįƒ®įƒįƒš įƒ™įƒįƒšįƒ”įƒ„įƒŖįƒ˜įƒįƒØįƒ˜" -msgid "Create World Material" -msgstr "įƒ”įƒįƒ›įƒ§įƒįƒ įƒįƒ” įƒ›įƒįƒ”įƒįƒšįƒ˜įƒ” įƒØįƒ”įƒ„įƒ›įƒœįƒ" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "įƒ“įƒįƒįƒ™įƒįƒœįƒ•įƒ”įƒ įƒ¢įƒ˜įƒ įƒ” įƒžįƒ˜įƒ įƒ•įƒ”įƒšįƒ˜ įƒįƒ¦įƒ›įƒįƒ©įƒ”įƒœįƒ˜įƒšįƒ˜ USD įƒ—įƒįƒ¦įƒ˜įƒ” įƒ”įƒ˜įƒœįƒįƒ—įƒšįƒ” įƒ”įƒįƒ›įƒ§įƒįƒ įƒįƒ” įƒ¤įƒįƒœįƒ˜įƒ” įƒ˜įƒ”įƒ įƒ¤įƒ”įƒ įƒØįƒ˜" @@ -90641,19 +90611,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "įƒ’įƒįƒ›įƒįƒ˜įƒ§įƒ”įƒœįƒ” įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ“įƒ”įƒ¤įƒįƒ įƒ›įƒįƒŖįƒ˜įƒ˜įƒ” įƒ›įƒįƒ“įƒ˜įƒ¤įƒ˜įƒ™įƒįƒ¢įƒįƒ įƒ˜ (įƒ“įƒ įƒįƒ”įƒ‘įƒ˜įƒ— įƒ’įƒįƒ—įƒ˜įƒØįƒ” įƒįƒ’įƒ”įƒ‘įƒ˜įƒ” įƒ§įƒ•įƒ”įƒšįƒ įƒ›įƒįƒ“įƒ˜įƒ¤įƒ˜įƒ™įƒįƒ¢įƒįƒ įƒ˜ įƒ›įƒ įƒįƒ•įƒįƒšįƒ’įƒįƒ įƒ©įƒ”įƒ•įƒįƒ“įƒįƒ‘įƒ˜įƒ” įƒ’įƒįƒ įƒ“įƒ)" -msgid "UV Sculpting" -msgstr "UV-įƒ˜įƒ” įƒ«įƒ”įƒ įƒ¬įƒ•įƒ" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "įƒ”įƒ˜įƒ«įƒšįƒ˜įƒ”įƒ įƒ˜įƒ” įƒ¬įƒ˜įƒ įƒ˜įƒ” įƒ¬įƒ˜įƒœįƒįƒ”įƒ¬įƒįƒ įƒ˜ įƒ™įƒįƒœįƒ¤įƒ˜įƒ’įƒ£įƒ įƒįƒŖįƒ˜įƒ" - - -msgid "Strength Curve" -msgstr "įƒ”įƒ˜įƒ«įƒšįƒ˜įƒ”įƒ įƒ˜įƒ” įƒ¬įƒ˜įƒ įƒ˜" - - msgid "Properties of vertex and weight paint mode" msgstr "įƒ¬įƒ•įƒ”įƒ įƒįƒ”įƒ‘įƒ˜įƒ”įƒ įƒ“įƒ įƒ¬įƒįƒœįƒ˜įƒ” įƒ®įƒįƒ¢įƒ•įƒ˜įƒ” įƒ įƒ”įƒŸįƒ˜įƒ›įƒ˜įƒ” įƒ—įƒ•įƒ˜įƒ”įƒ”įƒ‘įƒ”įƒ‘įƒ˜" @@ -102429,10 +102386,18 @@ msgid "Retiming Key Selection Status" msgstr "įƒ“įƒ įƒįƒØįƒ˜ įƒ®įƒ”įƒšįƒįƒ®įƒšįƒ įƒ’įƒįƒœįƒįƒ¬įƒ˜įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ”įƒįƒšįƒ˜įƒ” įƒ›įƒįƒœįƒ˜įƒØįƒ•įƒœįƒ˜įƒ” įƒ”įƒ¢įƒįƒ¢įƒ£įƒ”įƒ˜" +msgid "(Deprecated: Replaced by '.strips') Top-level strips only" +msgstr "(įƒįƒ įƒįƒ įƒ”įƒ™įƒįƒ›įƒ”įƒœįƒ“įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜įƒ: įƒ©įƒįƒœįƒįƒŖįƒ•įƒšįƒ”įƒ‘įƒ£įƒšįƒ˜įƒ '.strips'-įƒ˜įƒ” įƒ›įƒ˜įƒ”įƒ ) įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ–įƒ”įƒ“įƒ įƒ“įƒįƒœįƒ˜įƒ” įƒšįƒ”įƒœįƒ¢įƒ”įƒ‘įƒ˜" + + msgid "All Strips" msgstr "įƒ§įƒ•įƒ”įƒšįƒ įƒšįƒ”įƒœįƒ¢įƒ" +msgid "(Deprecated: Replaced by '.strips_all') All strips, recursively including those inside metastrips" +msgstr "(įƒįƒ įƒįƒ įƒ”įƒ™įƒįƒ›įƒ”įƒœįƒ“įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜įƒ: įƒ©įƒįƒœįƒįƒŖįƒ•įƒšįƒ”įƒ‘įƒ£įƒšįƒ˜įƒ '.strips_all'-įƒ˜įƒ” įƒ›įƒ˜įƒ”įƒ ) įƒ§įƒ•įƒ”įƒšįƒ įƒšįƒ”įƒœįƒ¢įƒ˜, įƒ›įƒįƒ— įƒØįƒįƒ įƒ˜įƒ” įƒ›įƒ”įƒ¢įƒįƒšįƒ”įƒœįƒ¢įƒ”įƒ‘įƒØįƒ˜ įƒ›įƒ“įƒ”įƒ‘įƒįƒ įƒ”įƒ”įƒ‘įƒ˜įƒ” įƒ įƒ”įƒ™įƒ£įƒ įƒ”įƒ˜įƒ£įƒšįƒįƒ“ įƒ©įƒįƒ—įƒ•įƒšįƒ˜įƒ—" + + msgid "Show Missing Media" msgstr "įƒ“įƒįƒ™įƒįƒ įƒ’įƒ£įƒšįƒ˜ įƒ›įƒ”įƒ“įƒ˜įƒ˜įƒ” įƒ©įƒ•įƒ”įƒœįƒ”įƒ‘įƒ" @@ -107173,6 +107138,10 @@ msgid "Sequence strip to group other strips as a single sequence strip" msgstr "įƒ—įƒįƒœįƒįƒ›įƒ˜įƒ›įƒ“įƒ”įƒ•įƒ įƒįƒ‘įƒ˜įƒ” įƒšįƒ”įƒœįƒ¢įƒ˜ įƒ”įƒ®įƒ•įƒ įƒšįƒ”įƒœįƒ¢įƒ”įƒ‘įƒ˜įƒ” įƒ”įƒ įƒ— įƒ—įƒįƒœįƒįƒ›įƒ˜įƒ›įƒ“įƒ”įƒ•įƒ įƒįƒ‘įƒ˜įƒ” įƒšįƒ”įƒœįƒ¢įƒįƒ“ įƒ“įƒįƒ”įƒįƒÆįƒ’įƒ£įƒ¤įƒ”įƒ‘įƒšįƒįƒ“" +msgid "(Deprecated: Replaced by '.strips') Strips nested in meta strip" +msgstr "(įƒįƒ įƒįƒ įƒ”įƒ™įƒįƒ›įƒ”įƒœįƒ“įƒ˜įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜įƒ: įƒ©įƒįƒœįƒįƒŖįƒ•įƒšįƒ”įƒ‘įƒ£įƒšįƒ˜įƒ '.strips'-įƒ˜įƒ” įƒ›įƒ˜įƒ”įƒ ) įƒ›įƒ”įƒ¢įƒ įƒšįƒ”įƒœįƒ¢įƒØįƒ˜ įƒ©įƒįƒ“įƒ’įƒ›įƒ£įƒšįƒ˜ įƒšįƒ”įƒœįƒ¢įƒ”įƒ‘įƒ˜" + + msgid "Strips nested in meta strip" msgstr "įƒ©įƒįƒ“įƒ’įƒ›įƒ£įƒšįƒ˜ įƒšįƒ”įƒœįƒ¢įƒ”įƒ‘įƒ˜ įƒ›įƒ”įƒ¢įƒ įƒšįƒ”įƒœįƒ¢įƒØįƒ˜" @@ -111349,6 +111318,19 @@ msgid "Enable this light in solid shading mode" msgstr "įƒ©įƒįƒ įƒ—įƒ” įƒ”įƒ” įƒ”įƒ˜įƒœįƒįƒ—įƒšįƒ” įƒ›įƒ§įƒįƒ įƒ˜ įƒØįƒ”įƒ¤įƒ”įƒ įƒįƒ“įƒ”įƒ‘įƒ˜įƒ” įƒ įƒ”įƒŸįƒ˜įƒ›įƒØįƒ˜" +msgid "UV Sculpting" +msgstr "UV-įƒ˜įƒ” įƒ«įƒ”įƒ įƒ¬įƒ•įƒ" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "įƒ”įƒ˜įƒ«įƒšįƒ˜įƒ”įƒ įƒ˜įƒ” įƒ¬įƒ˜įƒ įƒ˜įƒ” įƒ¬įƒ˜įƒœįƒįƒ”įƒ¬įƒįƒ įƒ˜ įƒ™įƒįƒœįƒ¤įƒ˜įƒ’įƒ£įƒ įƒįƒŖįƒ˜įƒ" + + +msgid "Strength Curve" +msgstr "įƒ”įƒ˜įƒ«įƒšįƒ˜įƒ”įƒ įƒ˜įƒ” įƒ¬įƒ˜įƒ įƒ˜" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "įƒ¬įƒ•įƒ”įƒ įƒįƒ—įƒ įƒÆįƒ’įƒ£įƒ¤įƒ˜, įƒ’įƒįƒ›įƒįƒ§įƒ”įƒœįƒ”įƒ‘įƒ£įƒšįƒ˜ įƒįƒ įƒ›įƒįƒ¢įƒ£įƒ įƒ˜įƒ” įƒ“įƒ”įƒ¤įƒįƒ įƒ›įƒ˜įƒ įƒ”įƒ‘įƒ˜įƒ”įƒ įƒ“įƒ įƒ”įƒ®įƒ•įƒ įƒ“įƒįƒœįƒ˜įƒØįƒœįƒ£įƒšįƒ”įƒ‘įƒ”įƒ‘įƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ”" @@ -117107,6 +117089,10 @@ msgid "Work Relative to some Object" msgstr "įƒ˜įƒ›įƒ£įƒØįƒįƒ•įƒ” įƒ įƒįƒ˜įƒ›įƒ” įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ—įƒįƒœ įƒ¤įƒįƒ įƒ“įƒįƒ‘įƒįƒØįƒ˜" +msgid "No 'Relative To' object found, set one explicitly or make sure there is an active object" +msgstr "'įƒØįƒ”įƒ¤įƒįƒ įƒ“įƒ”įƒ‘įƒ˜įƒ—įƒ˜' įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ įƒœįƒįƒžįƒįƒ•įƒœįƒ˜ įƒįƒ įƒįƒ, įƒ“įƒįƒįƒ§įƒ”įƒœįƒ”, įƒįƒœ įƒ“įƒįƒ įƒ¬įƒ›įƒ£įƒœįƒ“įƒ˜, įƒ įƒįƒ› įƒįƒ„įƒ¢įƒ˜įƒ£įƒ įƒ˜ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ įƒįƒ įƒ”įƒ”įƒ‘įƒįƒ‘įƒ”" + + msgid "Select an object or pose bone" msgstr "įƒ›įƒįƒœįƒ˜įƒØįƒœįƒ” įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜, įƒįƒœ įƒžįƒįƒ–įƒ˜įƒ” įƒ«įƒ•įƒįƒšįƒ˜" @@ -117724,6 +117710,10 @@ msgid "No glTF Animation" msgstr "glTF įƒįƒœįƒ˜įƒ›įƒįƒŖįƒ˜įƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ”" +msgid "Please disable/enable 'action filter' to refresh the list" +msgstr "įƒ—įƒ£ įƒØįƒ”įƒ˜įƒ«įƒšįƒ”įƒ‘įƒ, įƒ’įƒįƒ—įƒ˜įƒØįƒ”/įƒ©įƒįƒ įƒ—įƒ” 'įƒ„įƒ›įƒ”įƒ“įƒ”įƒ‘įƒ˜įƒ” įƒ¤įƒ˜įƒšįƒ¢įƒ įƒ˜' įƒ”įƒ˜įƒ˜įƒ” įƒ’įƒįƒœįƒ”įƒįƒįƒ®įƒšįƒ”įƒ‘įƒšįƒįƒ“" + + msgid "No Actions in .blend file" msgstr ".blend įƒ¤įƒįƒ˜įƒšįƒØįƒ˜ įƒ„įƒ›įƒ”įƒ“įƒ”įƒ‘įƒ”įƒ‘įƒ˜ įƒįƒ įƒįƒ" @@ -121887,6 +121877,10 @@ msgid "Bake All Light Probe Volumes" msgstr "įƒ’įƒįƒ›įƒįƒįƒŖįƒ®įƒ•įƒ” įƒ§įƒ•įƒ”įƒšįƒ įƒ”įƒ˜įƒœįƒįƒ—įƒšįƒ˜įƒ” įƒ–įƒįƒœįƒ“įƒ˜įƒ” įƒ›įƒįƒŖįƒ£įƒšįƒįƒ‘įƒ" +msgid "Compositing Node Tree" +msgstr "įƒ™įƒįƒ›įƒžįƒįƒ–įƒ˜įƒ¢įƒ˜įƒ įƒ”įƒ‘įƒ˜įƒ” įƒ™įƒ•įƒįƒœįƒ«įƒįƒ•įƒįƒœįƒ˜ įƒ®įƒ”" + + msgctxt "Operator" msgid "Export to File" msgstr "įƒ”įƒ„įƒ”įƒžįƒįƒ įƒ¢įƒ˜ įƒ¤įƒįƒ˜įƒšįƒįƒ“" @@ -127913,6 +127907,10 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "įƒ įƒ”įƒœįƒ“įƒ”įƒ įƒ˜įƒ” įƒØįƒ”įƒŖįƒ“įƒįƒ›įƒ (%s) įƒØįƒ”įƒœįƒįƒ®įƒ•įƒ įƒØįƒ”įƒ£įƒ«įƒšįƒ”įƒ‘įƒ”įƒšįƒ˜įƒ: '%s'" +msgid "Failed to create stereo image buffer" +msgstr "įƒ”įƒ¢įƒ”įƒ įƒ”įƒ įƒ’įƒįƒ›įƒįƒ”įƒįƒ®įƒ£įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ‘įƒ£įƒ¤įƒ”įƒ įƒ˜ įƒ•įƒ”įƒ  įƒØįƒ”įƒ˜įƒ„įƒ›įƒœįƒ" + + msgid "ipos" msgstr "ipos" @@ -129616,6 +129614,18 @@ msgid "Cannot pose libdata" msgstr "įƒ‘įƒ˜įƒ‘įƒšįƒ˜įƒįƒ—įƒ”įƒ™įƒ˜įƒ” įƒ›įƒįƒœįƒįƒŖįƒ”įƒ›įƒ—įƒ įƒžįƒįƒ–įƒ˜įƒ įƒ”įƒ‘įƒ įƒØįƒ”įƒ£įƒ«įƒšįƒ”įƒ‘įƒ”įƒšįƒ˜įƒ" +msgid "Show Original Pose" +msgstr "įƒįƒ įƒ˜įƒ’įƒ˜įƒœįƒįƒšįƒ˜ įƒžįƒįƒ–įƒ˜įƒ” įƒ©įƒ•įƒ”įƒœįƒ”įƒ‘įƒ" + + +msgid "Show Blended Pose" +msgstr "įƒØįƒ”įƒ–įƒįƒ•įƒ”įƒ‘įƒ£įƒšįƒ˜ įƒžįƒįƒ–įƒ˜įƒ” įƒ©įƒ•įƒ”įƒœįƒ”įƒ‘įƒ" + + +msgid "Flip Pose" +msgstr "įƒžįƒįƒ–įƒ˜įƒ” įƒØįƒ”įƒ¢įƒ įƒ˜įƒįƒšįƒ”įƒ‘įƒ" + + msgid "Pose lib is only for armatures in pose mode" msgstr "įƒžįƒįƒ–įƒ”įƒ‘įƒ˜įƒ” įƒ‘įƒ˜įƒ‘įƒšįƒ˜įƒįƒ—įƒ”įƒ™įƒ įƒ›įƒ®įƒįƒšįƒįƒ“ įƒžįƒįƒ–įƒ˜įƒ įƒ”įƒ‘įƒ˜įƒ” įƒ įƒ”įƒŸįƒ˜įƒ›įƒØįƒ˜ įƒ›įƒ§įƒįƒ¤įƒ˜ įƒįƒ įƒ›įƒįƒ¢įƒ£įƒ įƒ”įƒ‘įƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ”įƒįƒ" @@ -129652,48 +129662,8 @@ msgid "Sliding-Tool" msgstr "įƒ’įƒįƒŖįƒ£įƒ įƒ”įƒ‘įƒ˜įƒ”-įƒ®įƒ”įƒšįƒ”įƒįƒ¬įƒ§įƒ" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "įƒ›įƒ®įƒįƒšįƒįƒ“ [X]/Y/Z įƒ¦įƒ”įƒ įƒ«įƒ˜ (X įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "įƒ›įƒ®įƒįƒšįƒįƒ“ X/[Y]/Z įƒ¦įƒ”įƒ įƒ«įƒ˜ (Y įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "įƒ›įƒ®įƒįƒšįƒįƒ“ X/Y/[Z] įƒ¦įƒ”įƒ įƒ«įƒ˜ (Z įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = įƒ¦įƒ”įƒ įƒ«įƒ˜įƒ” įƒØįƒ”įƒ‘įƒįƒ įƒ™įƒ•įƒ" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ›įƒ“įƒ”įƒ‘įƒįƒ įƒ”įƒįƒ‘įƒ (G įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ‘įƒ įƒ£įƒœįƒ•įƒ (R įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ›įƒįƒ”įƒØįƒ¢įƒįƒ‘įƒ˜ (S įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ“įƒ įƒ”įƒ™įƒįƒ“įƒ˜ įƒ«įƒ•įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ—įƒ•įƒ˜įƒ”įƒ”įƒ‘įƒ”įƒ‘įƒ˜ (B įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ›įƒįƒ įƒ’įƒ”įƒ‘įƒ£įƒšįƒ˜ įƒ—įƒ•įƒ˜įƒ”įƒ”įƒ‘įƒ”įƒ‘įƒ˜ (C įƒ’įƒįƒ”įƒįƒ”įƒ£įƒ¤įƒ—įƒįƒ•įƒ”įƒ‘įƒšįƒįƒ“) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - įƒØįƒ”įƒ–įƒ¦įƒ£įƒ“įƒ•įƒ įƒ’įƒįƒ įƒ“įƒįƒ„įƒ›įƒœįƒ˜įƒ—/įƒ—įƒ•įƒ˜įƒ”įƒ”įƒ‘įƒįƒ—įƒ įƒœįƒįƒ™įƒ įƒ”įƒ‘įƒ˜įƒ—" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - įƒ’įƒįƒ“įƒįƒ įƒ—įƒ” įƒ«įƒ•įƒšįƒ˜įƒ” įƒ®įƒ˜įƒšįƒ£įƒšįƒįƒ‘įƒ" +msgid "Cancel" +msgstr "įƒ’įƒįƒ£įƒ„įƒ›įƒ”įƒ‘įƒ" msgid "No keyframes to slide between" @@ -130117,6 +130087,10 @@ msgid "Node group's first output must be a geometry" msgstr "įƒ™įƒ•įƒįƒœįƒ«įƒ—įƒ įƒÆįƒ’įƒ£įƒ¤įƒ˜įƒ” įƒžįƒ˜įƒ įƒ•įƒ”įƒšįƒ˜ įƒ’įƒįƒ›įƒįƒœįƒįƒ¢įƒįƒœįƒ˜ įƒ’įƒ”įƒįƒ›įƒ”įƒ¢įƒ įƒ˜įƒ įƒ£įƒœįƒ“įƒ įƒ˜įƒ§įƒįƒ”" +msgid "Place Next Stroke Vertex" +msgstr "įƒ›įƒįƒœįƒįƒ”įƒ›įƒ˜įƒ” įƒ›įƒįƒ›įƒ“įƒ”įƒ•įƒœįƒ įƒ¬įƒ•įƒ”įƒ įƒįƒ” įƒ’įƒįƒœįƒ—įƒįƒ•įƒ”įƒ”įƒ‘įƒ" + + msgid "Erase" msgstr "įƒ¬įƒįƒØįƒšįƒ" @@ -130277,10 +130251,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "įƒįƒ„įƒ¢įƒ˜įƒ£įƒ įƒ˜ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ įƒįƒ  įƒįƒ įƒ˜įƒ”, įƒįƒœ įƒįƒ„įƒ¢įƒ˜įƒ£įƒ įƒ˜ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ įƒ’įƒ įƒ˜įƒ– įƒ¤įƒ”įƒœįƒ”įƒ˜įƒšįƒ˜įƒ” įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ įƒįƒ įƒįƒ" -msgid "Cancel" -msgstr "įƒ’įƒįƒ£įƒ„įƒ›įƒ”įƒ‘įƒ" - - msgid "Panning" msgstr "įƒžįƒįƒœįƒįƒ įƒįƒ›įƒ˜įƒ įƒ”įƒ‘įƒ" @@ -131743,6 +131713,10 @@ msgid "Icosphere" msgstr "įƒįƒ²įƒ™įƒįƒ”įƒ¤įƒ”įƒ įƒ" +msgid "Profile Shape" +msgstr "įƒžįƒ įƒįƒ¤įƒ˜įƒšįƒ˜įƒ” įƒ¤įƒįƒ įƒ›įƒ" + + msgid "Harden" msgstr "įƒ’įƒįƒ›įƒįƒ’įƒ įƒ”įƒ‘įƒ" @@ -131751,6 +131725,10 @@ msgid "Outer" msgstr "įƒ’įƒįƒ įƒ”įƒ—įƒ" +msgid "Miter Profile Shape" +msgstr "įƒØįƒ”įƒžįƒ˜įƒ įƒįƒžįƒ˜įƒ įƒ”įƒ‘įƒ˜įƒ” įƒžįƒ įƒįƒ¤įƒ˜įƒšįƒ˜įƒ” įƒ¤įƒįƒ įƒ›įƒ" + + msgid "Intersection Type" msgstr "įƒ’įƒįƒ“įƒįƒ™įƒ•įƒ”įƒ—įƒ˜įƒ” įƒ¢įƒ˜įƒžįƒ˜" @@ -132448,6 +132426,18 @@ msgid "No UV layer named \"%s\" found in the object \"%s\"" msgstr "UV įƒØįƒ įƒ” įƒ”įƒįƒ®įƒ”įƒšįƒįƒ“ \"%s\" įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒØįƒ˜ \"%s\" įƒœįƒįƒžįƒįƒ•įƒœįƒ˜ įƒįƒ įƒįƒ" +msgid "Cage object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "įƒ’įƒįƒšįƒ˜įƒ˜įƒ” įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ \"%s\" įƒØįƒ”įƒ¤įƒįƒ”įƒ”įƒ‘įƒ£įƒš įƒ”įƒŖįƒ”įƒœįƒįƒØįƒ˜ įƒ•įƒ”įƒ  įƒ›įƒįƒ˜įƒ«įƒ”įƒ‘įƒœįƒ, įƒØįƒ”įƒ”įƒįƒ«įƒšįƒįƒ, įƒ“įƒįƒ›įƒįƒšįƒ£įƒšįƒ˜įƒ" + + +msgid "Object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜ \"%s\" įƒØįƒ”įƒ¤įƒįƒ”įƒ”įƒ‘įƒ£įƒš įƒ”įƒŖįƒ”įƒœįƒįƒØįƒ˜ įƒ•įƒ”įƒ  įƒ›įƒįƒ˜įƒ«įƒ”įƒ‘įƒœįƒ, įƒØįƒ”įƒ”įƒįƒ«įƒšįƒįƒ, įƒ“įƒįƒ›įƒįƒšįƒ£įƒšįƒ˜įƒ" + + +msgid "Failed to access mesh from object \"%s\", ensure it's visible while rendering" +msgstr "įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜įƒ“įƒįƒœ \"%s\" įƒ›įƒ”įƒØįƒ–įƒ” įƒ¬įƒ•įƒ“įƒįƒ›įƒ įƒ•įƒ”įƒ  įƒ’įƒįƒœįƒ®įƒįƒ įƒŖįƒ˜įƒ”įƒšįƒ“įƒ, įƒ“įƒįƒ įƒ¬įƒ›įƒ£įƒœįƒ“įƒ˜, įƒ įƒįƒ› įƒ įƒ”įƒœįƒ“įƒ”įƒ įƒ˜įƒ” įƒ“įƒ įƒįƒ” įƒ®įƒ˜įƒšįƒ£įƒšįƒ˜įƒ" + + msgid "Error baking from object \"%s\"" msgstr "įƒØįƒ”įƒŖįƒ“įƒįƒ›įƒ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜įƒ“įƒįƒœ \"%s\" įƒŖįƒ®įƒįƒ‘įƒ˜įƒ” įƒ“įƒ įƒįƒ”" @@ -134158,18 +134148,6 @@ msgid "UV map or surface attachment is invalid" msgstr "UV įƒ įƒ£įƒ™įƒ, įƒįƒœ įƒ–įƒ”įƒ“įƒįƒžįƒ˜įƒ įƒ–įƒ” įƒ›įƒ˜įƒ›įƒįƒ’įƒ įƒ”įƒ‘įƒ įƒ£įƒ•įƒįƒ įƒ’įƒ˜įƒ”įƒ˜įƒ" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "įƒØįƒ”įƒ•įƒ”įƒ”įƒ‘įƒ: ESC/įƒ›įƒįƒ įƒÆįƒ•įƒ”įƒœįƒ įƒ¦įƒ˜įƒšįƒįƒ™įƒ˜ įƒ’įƒįƒ”įƒįƒ£įƒ„įƒ›įƒ”įƒ‘įƒšįƒįƒ“, įƒ›įƒįƒ įƒŖįƒ®įƒ”įƒœįƒ įƒ¦įƒ˜įƒšįƒįƒ™įƒ˜ įƒØįƒ”įƒ”įƒįƒ•įƒ”įƒ”įƒ‘įƒįƒ“, įƒØįƒ£įƒ įƒ¦įƒ˜įƒšįƒįƒ™įƒ˜ įƒ’įƒįƒ¤įƒįƒ įƒ—įƒįƒ”įƒ‘įƒ˜įƒ” įƒ“įƒįƒ”įƒįƒ įƒ”įƒ’įƒ£įƒšįƒ˜įƒ įƒ”įƒ‘įƒšįƒįƒ“, S: įƒ įƒ”įƒŸįƒ˜įƒ›įƒ˜įƒ” įƒØįƒ”įƒ”įƒįƒŖįƒ•įƒšįƒ”įƒšįƒįƒ“, D: įƒ›įƒįƒœįƒįƒ”įƒ›įƒ˜įƒ” įƒØįƒ”įƒÆįƒįƒ®įƒ”įƒ‘įƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ” | įƒ įƒ”įƒŸįƒ˜įƒ›įƒ˜: {}, įƒØįƒ”įƒÆįƒįƒ®įƒ”įƒ‘įƒ {}, įƒ”įƒ˜įƒ’įƒ įƒ«įƒ”: {:.3f}" - - -msgid "ON" -msgstr "ON" - - -msgid "OFF" -msgstr "OFF" - - msgid "No Grease Pencil frame to draw weight on" msgstr "įƒ’įƒ įƒ˜įƒ– įƒ¤įƒ”įƒœįƒ”įƒ˜įƒšįƒ˜įƒ” įƒ¬įƒįƒœįƒ”įƒ‘įƒ˜įƒ” įƒ“įƒįƒ”įƒįƒ®įƒįƒ¢įƒ˜ įƒ™įƒįƒ“įƒ įƒ˜ įƒįƒ  įƒįƒ įƒ”įƒ”įƒ‘įƒįƒ‘įƒ”" @@ -134465,6 +134443,10 @@ msgid "Action must have at least one keyframe or F-Modifier" msgstr "įƒ„įƒ›įƒ”įƒ“įƒ”įƒ‘įƒįƒ” įƒ£įƒœįƒ“įƒ įƒ’įƒįƒįƒ©įƒœįƒ“įƒ”įƒ” įƒ›įƒ˜įƒœįƒ˜įƒ›įƒ£įƒ› įƒ”įƒ įƒ—įƒ˜ įƒ”įƒįƒ™įƒ•įƒįƒœįƒ«įƒ įƒ¤įƒįƒ–įƒ, įƒįƒœ F-įƒ›įƒįƒ“įƒ˜įƒ¤įƒ˜įƒ™įƒįƒ¢įƒįƒ įƒ˜" +msgid "Action+Slot has already been stashed" +msgstr "įƒ„įƒ›įƒ“įƒ”įƒ‘įƒ + įƒ”įƒšįƒįƒ¢įƒ˜ įƒ£įƒ™įƒ•įƒ” įƒ›įƒįƒ įƒįƒ’įƒØįƒ˜įƒ" + + msgid "Could not find current NLA Track" msgstr "įƒ›įƒ˜įƒ›įƒ“įƒ˜įƒœįƒįƒ įƒ” NLA įƒ‘įƒ˜įƒšįƒ˜įƒ™įƒ˜ įƒ•įƒ”įƒ  įƒ›įƒįƒ˜įƒ«įƒ”įƒ‘įƒœįƒ" @@ -134701,6 +134683,10 @@ msgid "Cannot read '%s': %s" msgstr "įƒ¬įƒįƒ£įƒ™įƒ˜įƒ—įƒ®įƒ•įƒįƒ“įƒ˜įƒ '%s': %s" +msgid "Place Marker" +msgstr "įƒ›įƒįƒ įƒ™įƒ”įƒ įƒ˜įƒ” įƒ’įƒįƒœįƒ—įƒįƒ•įƒ”įƒ”įƒ‘įƒ" + + msgid "Delete selected tracks?" msgstr "įƒ¬įƒįƒ•įƒØįƒįƒšįƒ įƒ›įƒįƒœįƒ˜įƒØįƒœįƒ£įƒšįƒ˜ įƒ™įƒ•įƒšįƒ”įƒ‘įƒ˜?" @@ -135258,42 +135244,6 @@ msgid "Deleted %u drivers" msgstr "įƒ¬įƒįƒ˜įƒØįƒįƒšįƒ %u įƒ“įƒ įƒįƒ˜įƒ•įƒ”įƒ įƒ˜" -msgid "Decimate Keyframes" -msgstr "įƒ”įƒįƒ™įƒ•įƒįƒœįƒ«įƒ įƒ¤įƒįƒ–įƒ”įƒ‘įƒ˜įƒ” įƒ“įƒ”įƒŖįƒ˜įƒ›įƒ˜įƒ įƒ”įƒ‘įƒ" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - įƒ”įƒ˜įƒ›įƒ™įƒ•įƒ”įƒ—įƒ įƒ˜įƒ” įƒ›įƒįƒ“įƒ˜įƒ¤įƒ˜įƒŖįƒ˜įƒ įƒ”įƒ‘įƒ" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - įƒ¬įƒ˜įƒ įƒ˜įƒ” įƒ›įƒįƒ¦įƒ£įƒœįƒ•įƒ˜įƒ” įƒ›įƒįƒ“įƒ˜įƒ¤įƒ˜įƒŖįƒ˜įƒ įƒ”įƒ‘įƒ" - - -msgid "Ease Keys" -msgstr "įƒįƒ©įƒ„įƒįƒ įƒ”įƒ‘įƒ-įƒØįƒ”įƒœįƒ”įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ”įƒįƒšįƒ”įƒ‘įƒ˜" - - -msgid "Shear Keys" -msgstr "įƒ”įƒįƒšįƒ”įƒ‘įƒ˜įƒ” įƒ«įƒ•įƒ įƒ" - - -msgid "D - Toggle Direction" -msgstr "D - įƒ›įƒ˜įƒ›įƒįƒ įƒ—įƒ£įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ’įƒįƒ“įƒįƒ įƒ—įƒ•įƒ" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - įƒ›įƒįƒ”įƒØįƒ¢įƒįƒ‘įƒ˜įƒ įƒ”įƒ‘įƒ įƒ›įƒįƒ įƒÆįƒ•įƒ”įƒœįƒ įƒ‘įƒįƒšįƒįƒ“įƒįƒœ" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - įƒ›įƒįƒ”įƒØįƒ¢įƒįƒ‘įƒ˜įƒ įƒ”įƒ‘įƒ įƒ›įƒįƒ įƒŖįƒ®įƒ”įƒœįƒ įƒ‘įƒįƒšįƒįƒ“įƒįƒœ" - - -msgid "Scale from Neighbor Keys" -msgstr "įƒ›įƒįƒ”įƒØįƒ¢įƒįƒ‘įƒ˜įƒ įƒ”įƒ‘įƒ įƒ›įƒ”įƒ–įƒįƒ‘įƒ”įƒšįƒ˜ įƒ”įƒįƒšįƒ”įƒ‘įƒ˜įƒ“įƒįƒœ" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "įƒ“įƒįƒįƒ“įƒ”įƒŖįƒ˜įƒ›įƒ˜įƒ įƒ” F-įƒ¬įƒ˜įƒ įƒ”įƒ‘įƒ˜ įƒ˜įƒ›įƒ˜įƒ” įƒ›įƒ˜įƒ—įƒ˜įƒ—įƒ”įƒ‘įƒ˜įƒ—, įƒ—įƒ£ įƒ įƒįƒ›įƒ“įƒ”įƒœįƒįƒ“ įƒØįƒ”įƒ£įƒ«įƒšįƒ˜įƒįƒ— įƒ’įƒįƒ“įƒįƒ˜įƒ®įƒįƒ įƒįƒœ įƒįƒ įƒ˜įƒ’įƒ˜įƒœįƒįƒšįƒ˜ įƒ¬įƒ˜įƒ įƒ˜įƒ”įƒ’įƒįƒœ" @@ -137907,6 +137857,14 @@ msgid " | Ctrl - Hold for increments" msgstr " | Ctrl - įƒ“įƒįƒ™įƒįƒ•įƒ”įƒ‘įƒ įƒ˜įƒœįƒ™įƒ įƒ”įƒ›įƒ”įƒœįƒ¢įƒ”įƒ‘įƒ˜įƒ”įƒ—įƒ•įƒ˜įƒ”" +msgid "Overshoot" +msgstr "įƒ’įƒįƒ“įƒįƒŖįƒ“įƒ”įƒœįƒ" + + +msgid "Overshoot Disabled" +msgstr "įƒ’įƒįƒ“įƒįƒŖįƒ“įƒ”įƒœįƒ įƒ’įƒįƒ—įƒ˜įƒØįƒ£įƒšįƒ˜įƒ" + + msgid "Unpack File" msgstr "įƒ¤įƒįƒ˜įƒšįƒ˜įƒ” įƒįƒ›įƒįƒšįƒįƒ’įƒ”įƒ‘įƒ" @@ -138000,6 +137958,14 @@ msgid "Pinned vertices can be selected in Vertex Mode only" msgstr "įƒ©įƒįƒ›įƒįƒ’įƒ įƒ”įƒ‘įƒ£įƒšįƒ˜ įƒ¬įƒ•įƒ”įƒ įƒįƒ”įƒ‘įƒ˜įƒ” įƒ›įƒįƒœįƒ˜įƒØįƒ•įƒœįƒ įƒ›įƒ®įƒįƒšįƒįƒ“ įƒ¬įƒ•įƒ”įƒ įƒįƒ—įƒ įƒ įƒ”įƒŸįƒ˜įƒ›įƒØįƒ˜ įƒØįƒ”įƒ˜įƒ«įƒšįƒ”įƒ‘įƒ" +msgid "Switch Island" +msgstr "įƒ™įƒ£įƒœįƒ«įƒ£įƒšįƒ˜įƒ” įƒØįƒ”įƒŖįƒ•įƒšįƒ" + + +msgid "Midpoints" +msgstr "įƒØįƒ£įƒįƒ¬įƒ”įƒ įƒ¢įƒ˜įƒšįƒ”įƒ‘įƒ˜" + + msgid "Could not initialize stitching on any selected object" msgstr "įƒ•įƒ”įƒ įƒŖįƒ”įƒ įƒ—įƒ˜ įƒ›įƒįƒœįƒ˜įƒØįƒœįƒ£įƒšįƒ˜ įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜įƒ” įƒ™įƒ”įƒ įƒ•įƒ˜įƒ” įƒ˜įƒœįƒ˜įƒŖįƒ˜įƒįƒšįƒ˜įƒ–įƒįƒŖįƒ˜įƒ įƒ•įƒ”įƒ  įƒ›įƒįƒ®įƒ”įƒ įƒ®įƒ“įƒ" @@ -140864,8 +140830,8 @@ msgid "Clipping" msgstr "įƒ›įƒįƒ™įƒ•įƒ”įƒŖįƒ" -msgid "Level Viewport" -msgstr "įƒ”įƒįƒ įƒ™įƒ›įƒšįƒ˜įƒ” įƒ“įƒįƒœįƒ”" +msgid "Levels Viewport" +msgstr "įƒ”įƒįƒ įƒ™įƒ›įƒšįƒ˜įƒ” įƒ“įƒįƒœįƒ”įƒ”įƒ‘įƒ˜" msgid "Unsubdivide" @@ -141002,6 +140968,14 @@ msgid "Built without Remesh modifier" msgstr "įƒįƒ’įƒ”įƒ‘įƒ£įƒšįƒ˜įƒ įƒ›įƒ”įƒØįƒ˜įƒ” įƒ’įƒįƒ įƒ“įƒįƒ”įƒįƒ®įƒ•įƒ˜įƒ” įƒ›įƒįƒ“įƒ˜įƒ¤įƒ˜įƒ™įƒįƒ¢įƒįƒ įƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ”" +msgid "Zero voxel size cannot be solved" +msgstr "įƒœįƒ£įƒšįƒįƒ•įƒįƒœįƒ˜ įƒ•įƒįƒ„įƒ”įƒ”įƒšįƒ£įƒ įƒ˜ įƒ–įƒįƒ›įƒ įƒ•įƒ”įƒ  įƒįƒ›įƒįƒ˜įƒ®įƒ”įƒœįƒ”įƒ‘įƒ" + + +msgid "Zero scale cannot be solved" +msgstr "įƒœįƒ£įƒšįƒįƒ•įƒįƒœįƒ˜ įƒ›įƒįƒ”įƒØįƒ¢įƒįƒ‘įƒ˜ įƒ•įƒ”įƒ  įƒįƒ›įƒįƒ˜įƒ®įƒ”įƒœįƒ”įƒ‘įƒ" + + msgid "Axis Object" msgstr "įƒ¦įƒ”įƒ įƒ«įƒ˜įƒ” įƒįƒ‘įƒ˜įƒ”įƒ„įƒ¢įƒ˜" @@ -141083,10 +141057,6 @@ msgid "Adaptive Subdivision" msgstr "įƒįƒ“įƒįƒžįƒ¢įƒ˜įƒ įƒ”įƒ‘įƒįƒ“įƒ˜ įƒ“įƒįƒ§įƒįƒ¤įƒ" -msgid "Levels Viewport" -msgstr "įƒ”įƒįƒ įƒ™įƒ›įƒšįƒ˜įƒ” įƒ“įƒįƒœįƒ”įƒ”įƒ‘įƒ˜" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "įƒ”įƒįƒ‘įƒįƒšįƒįƒ įƒ›įƒįƒ”įƒØįƒ¢įƒįƒ‘įƒ˜: įƒ įƒ”įƒœįƒ“įƒ”įƒ įƒ˜ %.2f px, įƒ”įƒįƒ įƒ™įƒ›įƒ”įƒšįƒ˜ %.2f px" @@ -141358,6 +141328,14 @@ msgid "Quality:" msgstr "įƒ®įƒįƒ įƒ˜įƒ”įƒ®įƒ˜:" +msgid "Disabled. Built without OpenImageDenoise" +msgstr "įƒ’įƒįƒ—įƒ˜įƒØįƒ£įƒšįƒ˜. įƒįƒ˜įƒ’įƒ OpenImageDenoise-įƒ˜įƒ” įƒ’įƒįƒ įƒ”įƒØįƒ”" + + +msgid "Disabled. Platform not supported" +msgstr "įƒ’įƒįƒ—įƒ˜įƒØįƒ£įƒšįƒ˜. įƒžįƒšįƒįƒ¢įƒ¤įƒįƒ įƒ›įƒ įƒ›įƒ®įƒįƒ įƒ“įƒįƒ£įƒ­įƒ”įƒ įƒ”įƒšįƒ˜įƒ" + + msgid "Image 1" msgstr "įƒ’įƒįƒ›įƒįƒ”įƒįƒ®įƒ£įƒšįƒ”įƒ‘įƒ 1" @@ -141486,6 +141464,10 @@ msgid "ID value" msgstr "ID įƒ›įƒœįƒ˜įƒØįƒ•įƒœįƒ”įƒšįƒįƒ‘įƒ" +msgid "Render passes in the Viewport compositor are only supported in EEVEE" +msgstr "įƒ”įƒįƒ įƒ™įƒ›įƒšįƒ˜įƒ” įƒ™įƒįƒ›įƒžįƒįƒ–įƒ˜įƒ¢įƒįƒ įƒØįƒ˜ įƒ įƒ”įƒœįƒ“įƒ”įƒ įƒ˜įƒ” įƒ’įƒįƒ“įƒįƒ•įƒšįƒ”įƒ‘įƒ˜įƒ” įƒ›įƒ®įƒįƒ įƒ“įƒįƒ­įƒ”įƒ įƒ įƒ›įƒ®įƒįƒšįƒįƒ“ EEVEE-įƒ” įƒįƒ„įƒ•įƒ”" + + msgid "Viewport compositor setup not fully supported" msgstr "įƒ”įƒįƒ įƒ™įƒ›įƒšįƒ˜įƒ” įƒ™įƒįƒ›įƒžįƒįƒ–įƒ˜įƒ¢įƒįƒ įƒ˜įƒ” įƒ“įƒįƒ§įƒ”įƒœįƒ”įƒ‘įƒ£įƒšįƒ˜ įƒžįƒįƒ įƒįƒ›įƒ”įƒ¢įƒ įƒ”įƒ‘įƒ˜ įƒ”įƒ įƒ£įƒšįƒįƒ“ įƒ›įƒ®įƒįƒ įƒ“įƒįƒ­įƒ”įƒ įƒ˜įƒšįƒ˜ įƒįƒ įƒįƒ" @@ -141526,10 +141508,6 @@ msgid "Offset Y" msgstr "įƒįƒŖįƒ“įƒ”įƒœįƒ Y-įƒ–įƒ”" -msgid "Undistortion" -msgstr "įƒ’įƒįƒ”įƒ¬įƒįƒ įƒ”įƒ‘įƒ" - - msgid "Dot" msgstr "įƒ¬įƒ”įƒ įƒ¢įƒ˜įƒšįƒ˜" @@ -142573,10 +142551,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "įƒ›įƒ˜įƒÆįƒœįƒįƒ–įƒ” įƒ“įƒ˜įƒ“įƒ˜ įƒ›įƒįƒŖįƒ£įƒšįƒįƒ‘įƒ”įƒ‘įƒ˜ įƒ¬įƒįƒ įƒ›įƒįƒ„įƒ›įƒœįƒ˜įƒšįƒ˜ įƒ›įƒ”įƒØįƒ˜įƒ” įƒØįƒ˜įƒ’įƒœįƒ˜įƒ—įƒįƒ" -msgid "Has Alpha" -msgstr "įƒįƒ„įƒ•įƒ” įƒįƒšįƒ¤įƒ" - - msgid "Frame Count" msgstr "įƒ™įƒįƒ“įƒ įƒ”įƒ‘įƒ˜įƒ” įƒ”įƒįƒ—įƒ•įƒįƒšįƒįƒ•įƒ˜" @@ -145398,6 +145372,14 @@ msgid "drag-" msgstr "įƒ’įƒįƒ—įƒ įƒ”įƒ•įƒ-" +msgid "ON" +msgstr "ON" + + +msgid "OFF" +msgstr "OFF" + + msgid "Set Debug Value" msgstr "įƒ®įƒįƒ įƒ•įƒ”įƒ–įƒ”įƒ‘įƒ˜įƒ” įƒįƒ¦įƒ›įƒįƒ¤įƒ®įƒ•įƒ įƒ˜įƒ” įƒ›įƒœįƒ˜įƒØįƒ•įƒœįƒ”įƒšįƒįƒ‘įƒ˜įƒ” įƒ“įƒįƒ§įƒ”įƒœįƒ”įƒ‘įƒ" diff --git a/locale/po/km.po b/locale/po/km.po index 3c96a0d37f1e..c9c23cf1401b 100644 --- a/locale/po/km.po +++ b/locale/po/km.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/locale/po/ko.po b/locale/po/ko.po index 16a1f849fc7d..fdf3d56d38e7 100644 --- a/locale/po/ko.po +++ b/locale/po/ko.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2023-11-14 19:14+0000\n" "Last-Translator: Lee YeonJoo \n" "Language-Team: Korean \n" @@ -17657,10 +17657,6 @@ msgid "Display the object's name" msgstr "ģ˜¤ėøŒģ ķŠøģ˜ ģ“ė¦„ģ„ ķ‘œģ‹œ" -msgid "Shape Key Lock" -msgstr "ģ…°ģ“ķ”„ ķ‚¤ė„¼ ģž źøˆ" - - msgid "Display Texture Space" msgstr "ķ…ģŠ¤ģ²˜ ź³µź°„ģ„ ķ‘œģ‹œ" @@ -23906,6 +23902,14 @@ msgid "Material slot name" msgstr "ė§¤ķ…Œė¦¬ģ–¼ ģŠ¬ė”Æ ģ“ė¦„" +msgid "Metaball" +msgstr "ė©”ķƒ€ė³¼" + + +msgid "Show/Hide" +msgstr "ķ‘œģ‹œ/ģˆØźø°źø°" + + msgid "Names" msgstr "ģ“ė¦„" @@ -23914,10 +23918,6 @@ msgid "Bone Roll" msgstr "ė³ø ė”¤" -msgid "Show/Hide" -msgstr "ķ‘œģ‹œ/ģˆØźø°źø°" - - msgid "Clean Up" msgstr "ģ •ė¦¬" @@ -23994,10 +23994,6 @@ msgid "Assign Material" msgstr "ė§¤ķ…Œė¦¬ģ–¼ģ„ ķ• ė‹¹" -msgid "Metaball" -msgstr "ė©”ķƒ€ė³¼" - - msgid "Light" msgstr "ė¼ģ“ķŠø" @@ -30587,10 +30583,6 @@ msgid "Channel Key" msgstr "ģ±„ė„ ķ‚¤" -msgid "RGB color space" -msgstr "RGB ģ»¬ėŸ¬ ź³µź°„" - - msgid "YCbCr" msgstr "YCbCr" @@ -31231,6 +31223,10 @@ msgid "Distance Key" msgstr "ź±°ė¦¬ ķ‚¤" +msgid "RGB color space" +msgstr "RGB ģ»¬ėŸ¬ ź³µź°„" + + msgid "Double Edge Mask" msgstr "ģ“ģ¤‘ ģ—ģ§€ ė§ˆģŠ¤ķ¬" @@ -32020,42 +32016,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "ģƒėŒ€ģ ģø (ģž…ė „ ģ“ėÆøģ§€ ķ¬źø°ģ˜ ģ†Œģˆ˜) ź°’ģ„ ģ‚¬ģš©ķ•˜ģ—¬ ģ˜®źø°źø°ģ„ ģ •ģ˜" -msgid "Wrapping" -msgstr "ź°ģ‹øźø°" - - -msgid "Wrap image on a specific axis" -msgstr "ģ§€ģ •ėœ ģ¶•ģ— ģ“ėÆøģ§€ė„¼ ź°ģ‹øźø°" - - -msgid "No wrapping on X and Y" -msgstr "X ė° Yģ— ź°ģ‹øźø°ź°€ ģ—†ģŒ" - - msgid "X Axis" msgstr "X ģ¶•" -msgid "Wrap all pixels on the X axis" -msgstr "X ģ¶•ģ— ģžˆėŠ” ėŖØė“  ķ”½ģ…€ģ„ ź°ģ‹øźø°" - - msgid "Y Axis" msgstr "Y ģ¶•" -msgid "Wrap all pixels on the Y axis" -msgstr "Y ģ¶•ģ— ģžˆėŠ” ėŖØė“  ķ”½ģ…€ģ„ ź°ģ‹øźø°" - - msgid "Both Axes" msgstr "ģ–‘ģŖ½ ģ¶•" -msgid "Wrap all pixels on both axes" -msgstr "ė‘ ģ¶• ģ—ģžˆėŠ” ėŖØė“  ķ”½ģ…€ģ„ ź°ģ‹øźø°" - - msgid "Vector Blur" msgstr "ė²”ķ„° ėø”ėŸ¬" @@ -44574,6 +44546,14 @@ msgid "Reset viewable area to show selected strips range" msgstr "ģ„ ķƒėœ ģŠ¤ķŠøė¦½ ė²”ģœ„ė„¼ ķ‘œģ‹œķ•˜ėŠ” ź°€ģ‹œ ģ˜ģ—­ģ„ ģž¬ģ„¤ģ •" +msgid "Source color" +msgstr "ģ†ŒģŠ¤ ģ»¬ėŸ¬" + + +msgid "Gamma Corrected" +msgstr "ź°ė§ˆ ė³“ģ •ėØ" + + msgctxt "Operator" msgid "Add File Node" msgstr "ķŒŒģ¼ ė…øė“œė„¼ ģ¶”ź°€" @@ -52111,14 +52091,6 @@ msgid "Drop colors to buttons" msgstr "ė²„ķŠ¼ģ— ģ»¬ėŸ¬ė„¼ ė“œė”­" -msgid "Source color" -msgstr "ģ†ŒģŠ¤ ģ»¬ėŸ¬" - - -msgid "Gamma Corrected" -msgstr "ź°ė§ˆ ė³“ģ •ėØ" - - msgctxt "Operator" msgid "Edit Source" msgstr "ģ†ŒģŠ¤ė„¼ ķŽøģ§‘" @@ -55435,10 +55407,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "ė³€ķ˜• ėŖØė””ķŒŒģ“ģ–“ ė§Œģ„ ģ‚¬ģš© (ė©€ķ‹°ė¦¬ģ†”ė£Øģ…˜ė„¼ ģ œģ™øķ•œ ėŖØė“  źµ¬ģ”°ģ ģø ėŖØė””ķŒŒģ“ģ–“ė„¼ ģž„ģ‹œė”œ ģ‚¬ģš© ģ¤‘ģ§€)" -msgid "UV Sculpting" -msgstr "UV ģŠ¤ģ»¬ķ”„ķŠøķ•˜źø°" - - msgid "Properties of vertex and weight paint mode" msgstr "ė²„ķ…ģŠ¤ ė° ģ›Øģ“ķŠø ķŽ˜ģøķŠø ėŖØė“œģ˜ ģ†ģ„±" @@ -68313,6 +68281,10 @@ msgid "Color of the light's specular highlight" msgstr "ė¼ģ“ķŠø ė°˜ģ‚¬ ź°•ģ”°ģ˜ ģ»¬ėŸ¬" +msgid "UV Sculpting" +msgstr "UV ģŠ¤ģ»¬ķ”„ķŠøķ•˜źø°" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "ė²„ķ…ģŠ¤ģ˜ ź·øė£¹, ģ•„ė§ˆķŠœģ–“ ė³€ķ˜• ė° źø°ķƒ€ ėŖ©ģ ģ„ ģœ„ķ•“ ģ‚¬ģš©" @@ -75157,44 +75129,8 @@ msgid "Sliding-Tool" msgstr "ģŠ¬ė¼ģ“ė”© ė„źµ¬" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "[X]/Y/Zģ¶• ė§Œ (X ģ§€ģš°źø°)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "X/[Y]/Zģ¶• ė§Œ (Y ģ§€ģš°źø°)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "X/Y/[Z]ģ¶• ė§Œ (Z ģ§€ģš°źø°)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = ģ¶• ģ œģ•½" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - ģœ„ģ¹˜ ė§Œ (G ģ§€ģš°źø°) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - ķšŒģ „ ė§Œ (R ģ§€ģš°źø°) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - ģ¶•ģ  ė§Œ (S ģ§€ģš°źø°) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - ė²¤ė”” ė³ø ģ†ģ„± ė§Œ (B ģ§€ģš°źø°) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - ģ‚¬ģš©ģž ģ •ģ˜ ė“±ė” ģ •ė³“ ė§Œ (C ģ§€ģš°źø°) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - ė³€ķ˜•/ģ†ģ„± ģ„¤ģ •ģœ¼ė”œ ģ œķ•œ" +msgid "Cancel" +msgstr "ģ·Øģ†Œ" msgid "No keyframes to slide between" @@ -75391,10 +75327,6 @@ msgid "Active layer is locked or hidden" msgstr "ķ™œģ„± ė ˆģ“ģ–“ź°€ ģž ź²Ø ģžˆź±°ė‚˜ ģˆØź²Øģ ø ģžˆģŠµė‹ˆė‹¤" -msgid "Cancel" -msgstr "ģ·Øģ†Œ" - - msgid "Could not resolve path '%s'" msgstr "ź²½ė”œ '%s' ģž¬ķ•“ģ„ ķ•  ģˆ˜ ģ—†ģŠµė‹ˆė‹¤" @@ -77348,14 +77280,6 @@ msgid "File not found '%s'" msgstr "ķŒŒģ¼ģ„ ģ°¾ģ„ ģˆ˜ ģ—†ėŠ” '%s'" -msgid "ON" -msgstr "ON" - - -msgid "OFF" -msgstr "OFF" - - msgid "Active group is locked, aborting" msgstr "ķ™œģ„± ź·øė£¹ģ€ ģž ź¹€, ģ¤‘ė‹Ø" @@ -77977,10 +77901,6 @@ msgid "Missing %s%s%s component(s) of euler rotation for ID='%s' and RNA-Path='% msgstr "ģ˜¤ģ¼ėŸ¬ ķšŒģ „ģ˜ ėˆ„ė½ėœ %s%s%s źµ¬ģ„± ģš”ģ†Œ(ė“¤), ID = '%s' ė° RNA ź²½ė”œ = '%s'ģ— ėŒ€ķ•œ" -msgid "Decimate Keyframes" -msgstr "ķ‚¤ ķ”„ė ˆģž„ģ„ ė°ģ‹œė©”ģ“ķŠø" - - msgid "Discard" msgstr "ķ¬źø°" @@ -80400,6 +80320,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "ON" + + +msgid "OFF" +msgstr "OFF" + + msgid "unsupported format" msgstr "ģ§€ģ›ė˜ģ§€ ģ•ŠėŠ” ķ˜•ģ‹" diff --git a/locale/po/ky.po b/locale/po/ky.po index 33dff87b91dc..1120aa34d442 100644 --- a/locale/po/ky.po +++ b/locale/po/ky.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "(b'0000000000000000000000000000000000000000')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2013-11-05 13:47+0600\n" "Last-Translator: Chyngyz Dzhumaliev \n" "Language-Team: Kirghiz \n" @@ -3391,15 +3391,15 @@ msgid "Untitled" msgstr "ŠŃ‚Ń‹ Š¶Š¾Šŗ" +msgid "Cancel" +msgstr "Š–Š¾ŠŗŠŗŠ¾ чыŠ³Š°Ń€ŃƒŃƒ" + + msgctxt "Curve" msgid "Surface" msgstr "Š‘ŠµŃ‚" -msgid "Cancel" -msgstr "Š–Š¾ŠŗŠŗŠ¾ чыŠ³Š°Ń€ŃƒŃƒ" - - msgid "%s: %s" msgstr "%s: %s" @@ -3633,14 +3633,6 @@ msgid "Stone" msgstr "Š¢Š°Ńˆ" -msgid "ON" -msgstr "өч." - - -msgid "OFF" -msgstr "ŠŗŅÆŠ¹." - - msgid "X:" msgstr "X:" @@ -3778,6 +3770,14 @@ msgid "W4" msgstr "W4" +msgid "ON" +msgstr "өч." + + +msgid "OFF" +msgstr "ŠŗŅÆŠ¹." + + msgid "Import-Export" msgstr "Š˜Š¼ŠæŠ¾Ń€Ń‚-эŠŗсŠæŠ¾Ń€Ń‚" diff --git a/locale/po/lt.po b/locale/po/lt.po index 0b4dddbb2934..309d27dd5e0d 100644 --- a/locale/po/lt.po +++ b/locale/po/lt.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-11-14 16:56+0000\n" "Last-Translator: Aras Pranckevičius \n" "Language-Team: Lithuanian \n" diff --git a/locale/po/ne.po b/locale/po/ne.po index 869e229208f8..b97df78240d4 100644 --- a/locale/po/ne.po +++ b/locale/po/ne.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: \n" "Last-Translator: Yudhir Khanal \n" "Language-Team: Yudhir\n" diff --git a/locale/po/nl.po b/locale/po/nl.po index 0fec4d8f3e15..5b0a3cb14a16 100644 --- a/locale/po/nl.po +++ b/locale/po/nl.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2025-01-27 09:56+0000\n" "Last-Translator: Sander Spolspoel \n" "Language-Team: Dutch \n" @@ -2735,14 +2735,14 @@ msgid "Mask" msgstr "Mask" -msgid "Names" -msgstr "Namen" - - msgid "Show/Hide" msgstr "Toon/Verberg" +msgid "Names" +msgstr "Namen" + + msgid "Mirror" msgstr "Spiegel" @@ -8603,6 +8603,10 @@ msgid "Too many points selected: %d" msgstr "Teveel punten geselecteerd: %d" +msgid "Cancel" +msgstr "Annuleren" + + msgctxt "Curve" msgid "CurvePath" msgstr "Kromme Pad" @@ -8661,10 +8665,6 @@ msgid "Nothing selected" msgstr "Niets geselecteerd" -msgid "Cancel" -msgstr "Annuleren" - - msgid "Pin" msgstr "Prik" diff --git a/locale/po/pl.po b/locale/po/pl.po index c2b292141369..3307d6f8267b 100644 --- a/locale/po/pl.po +++ b/locale/po/pl.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-11-23 15:56+0000\n" "Last-Translator: Kacper Madej \n" "Language-Team: Polish \n" @@ -11181,6 +11181,10 @@ msgid "Mask" msgstr "Maska" +msgid "Metaball" +msgstr "Metakula" + + msgid "Show/Hide" msgstr "Pokaż/Ukryj" @@ -11221,10 +11225,6 @@ msgid "Assign Material" msgstr "Przypisanie materiału" -msgid "Metaball" -msgstr "Metakula" - - msgid "Light" msgstr "Światło" @@ -16595,10 +16595,6 @@ msgid "Transform Mode" msgstr "Tryb transformacji" -msgid "UV Sculpting" -msgstr "RzeÅŗbienie UV" - - msgid "Palette Color" msgstr "Kolor palety" @@ -18870,6 +18866,10 @@ msgid "Radius of the brush" msgstr "Promień pędzla" +msgid "UV Sculpting" +msgstr "RzeÅŗbienie UV" + + msgid "Face Orientation" msgstr "Orientacja ścian" @@ -22405,6 +22405,10 @@ msgid "Keying Set does not contain any paths" msgstr "Zestaw Kluczowania nie zawiera żadnych ścieżek" +msgid "Cancel" +msgstr "Anuluj" + + msgid "No keyframes to slide between" msgstr "Brak klatek kluczowych między ktĆ³rymi można ślizgać" @@ -22567,10 +22571,6 @@ msgid "No Grease Pencil frame to draw on" msgstr "Brak ramki Grease Pencil, na ktĆ³rej można rysować" -msgid "Cancel" -msgstr "Anuluj" - - msgid "Could not resolve path '%s'" msgstr "Nie udało się rozwiązać ścieżki '%s'" @@ -24394,14 +24394,6 @@ msgid "Duplicate Current" msgstr "Duplikuj bieżący" -msgid "ON" -msgstr "WŁ" - - -msgid "OFF" -msgstr "WYŁ" - - msgid "Active group is locked, aborting" msgstr "Aktywna grupa jest zablokowana, rezygnuję" @@ -26523,6 +26515,10 @@ msgid "Collection Masks" msgstr "Kolekcja masek" +msgid "Levels Viewport" +msgstr "Poziomy rzutni" + + msgid "Bake Path" msgstr "Wypal ścieżkę" @@ -26535,10 +26531,6 @@ msgid "Create Armature" msgstr "UtwĆ³rz szkielet" -msgid "Levels Viewport" -msgstr "Poziomy rzutni" - - msgid "VertexWeightEdit" msgstr "EdycjaWagWierzchołkĆ³w" @@ -27113,6 +27105,14 @@ msgid "Nothing indicated" msgstr "Nic nie wskazano" +msgid "ON" +msgstr "WŁ" + + +msgid "OFF" +msgstr "WYŁ" + + msgid "unsupported format" msgstr "nieobsługiwany format" diff --git a/locale/po/pt.po b/locale/po/pt.po index 5e5cf8f2ade1..b2743b2d7236 100644 --- a/locale/po/pt.po +++ b/locale/po/pt.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: Ivan Paulos TomĆ© \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-22 22:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-01-31 18:56+0000\n" "Last-Translator: Duarte Ramos \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -442,6 +442,11 @@ msgid "Expanded state of the slot" msgstr "Estando de expansĆ£o do compartimento" +msgctxt "ID" +msgid "Target ID Type" +msgstr "Tipo de ID Alvo" + + msgctxt "ID" msgid "Action" msgstr "AĆ§Ć£o" @@ -25969,10 +25974,6 @@ msgid "Display the object's name" msgstr "Mostra o nome do objecto." -msgid "Shape Key Lock" -msgstr "Trancar Forma Chave" - - msgid "Only show the active shape key at full value" msgstr "Mostrar apenas a Forma Chave activa no valor mĆ”ximo" @@ -32426,6 +32427,16 @@ msgid "Keyframe" msgstr "Fotograma Chave" +msgctxt "Action" +msgid "Breakdown" +msgstr "DecomposiĆ§Ć£o" + + +msgctxt "Action" +msgid "Moving Hold" +msgstr "Imobilidade" + + msgctxt "Action" msgid "Extreme" msgstr "Extremos" @@ -34297,6 +34308,14 @@ msgid "Editor menu containing buttons" msgstr "Menu de editor contendo botƵes" +msgid "Metaball" +msgstr "Esfera-meta" + + +msgid "Show/Hide" +msgstr "Mostrar ou ocultar" + + msgid "Names" msgstr "Nomes" @@ -34305,10 +34324,6 @@ msgid "Bone Roll" msgstr "Rolagem do osso" -msgid "Show/Hide" -msgstr "Mostrar ou ocultar" - - msgid "Clean Up" msgstr "Limpeza" @@ -34397,10 +34412,6 @@ msgid "Assign Material" msgstr "Aplicar Material" -msgid "Metaball" -msgstr "Esfera-meta" - - msgid "Light" msgstr "Leve" @@ -44482,30 +44493,14 @@ msgid "Create matte based on differences in color channels" msgstr "Criar mĆ”scara com base nas diferenƧas entre canais de cor" -msgid "RGB color space" -msgstr "EspaƧo de cores (RGB)" - - -msgid "HSV color space" -msgstr "EspaƧo de cor HSV" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "EspaƧo de cor YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "EspaƧo de cor YCbCr" - - msgctxt "Color" msgid "Limit Channel" msgstr "Limitar Canal" @@ -45029,26 +45024,6 @@ msgid "Mode of color processing" msgstr "Modo de processamento de cor" -msgid "Use RGB color processing" -msgstr "Usar processamento de cor RGB" - - -msgid "Use HSV color processing" -msgstr "Usar processamento de cor HSV" - - -msgid "Use HSL color processing" -msgstr "Usar processamento de cor HSL" - - -msgid "Use YCbCr color processing" -msgstr "Usar processamento de cor YCbCr" - - -msgid "Use YUV color processing" -msgstr "Usar processamento de cor YUV" - - msgid "Color space used for YCbCrA processing" msgstr "EspaƧo de cor usado para processamento YCbCrA" @@ -45506,6 +45481,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "Criar mĆ”scara com base na distĆ¢ncia 3D entre cores" +msgid "RGB color space" +msgstr "EspaƧo de cores (RGB)" + + msgid "YCbCr suppression" msgstr "SupressĆ£o YCbCr" @@ -45678,6 +45657,10 @@ msgid "Amount of Color Modulation, modulates colors of streaks and ghosts for a msgstr "Quantidade de modulaĆ§Ć£o de cor, modula as cores dos raios e fantasmas para um efeito de dispersĆ£o espectral." +msgid "Streak fade-out factor. (Deprecated: Use Fade input instead)" +msgstr "Factor de desvanecimento dos raios. (Descontinuado: Usar entrada de Desvanecimento)" + + msgid "Glare Type" msgstr "Tipo de ofuscamento" @@ -45702,10 +45685,30 @@ msgid "Simple Star" msgstr "Estrelas simples" +msgid "(Deprecated: Use Iterations input instead)" +msgstr "(Descontinuado: Usar entrada de IteraƧƵes)" + + +msgid "1 is original image only, 0 is exact 50/50 mix, 1 is processed image only. (Deprecated: Use Strength input instead)" +msgstr "Valor -1 apenas imagem original, valor 0 Ć© uma mistura exacta de 50/50, 1 apenas imagem processada.(Descontinuado: Usar entrada de ForƧa)" + + msgid "If not set to high quality, the effect will be applied to a low-res copy of the source image" msgstr "Caso nĆ£o definido para alta qualidade, o efeito serĆ” aplicado para uma cĆ³pia de baixa-resoluĆ§Ć£o da imagem fonte." +msgid "Glow/glare size (not actual size; relative to initial size of bright area of pixels). (Deprecated: Use Size input instead)" +msgstr "Tamanho da incandescĆŖncia ou ofuscamento (nĆ£o o tamanho actual; relativo ao tamanho inicial das Ć”reas brilhantes dos pixeis). (Descontinuado: Usar entrada de Tamanho)" + + +msgid "Total number of streaks. (Deprecated: Use Streaks input instead)" +msgstr "NĆŗmero total de raios. (Descontinuado: Usar entrada de Raios)" + + +msgid "The glare filter will only be applied to pixels brighter than this value. (Deprecated: Use Threshold input instead)" +msgstr "O filtro de ofuscamento serĆ” aplicado apenas para os pixeis mais brilhantes que este valor. (Descontinuado: Usar entrada de Limite)" + + msgid "Rotate 45" msgstr "Rotacionar 45 graus" @@ -46580,6 +46583,10 @@ msgid "Plane Track Deform" msgstr "DeformaĆ§Ć£o de rastreamento de plano" +msgid "Replace flat planes in footage by another image, detected by plane tracks from motion tracking" +msgstr "Substituir superfĆ­cies planas na filmagem por outra imagem, detectadas por rastreamentos planares do rastreamento de movimento" + + msgid "Posterize" msgstr "Posterizar" @@ -46648,6 +46655,18 @@ msgid "Method to use to filter rotation" msgstr "MĆ©todo usado para filtrar a rotaĆ§Ć£o." +msgid "Use Nearest interpolation" +msgstr "Usar interpolaĆ§Ć£o Mais PrĆ³ximo" + + +msgid "Use Bilinear interpolation" +msgstr "Usar interpolaĆ§Ć£o Bilinear" + + +msgid "Use Cubic B-Spline interpolation" +msgstr "Usar interpolaĆ§Ć£o B" + + msgid "Change the size of the image" msgstr "Alterar o tamanho da imagem" @@ -46672,6 +46691,22 @@ msgid "Input the current scene time in seconds or frames" msgstr "Introduzir o tempo da cena actual en segundos ou fotogramas" +msgid "Separate HSVA (Legacy)" +msgstr "Separar HSVA (Legado)" + + +msgid "Separate RGBA (Legacy)" +msgstr "Separar RGBA (Legado)" + + +msgid "Separate YCbCrA (Legacy)" +msgstr "Separar YCbCrA (Legado)" + + +msgid "Separate YUVA (Legacy)" +msgstr "Separar YUVA (Legado)" + + msgid "Separate Color" msgstr "Separar Cores" @@ -46916,42 +46951,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Usa valores relativos (em fraƧƵes do tamanho da imagem de entrada) para definir o movimento." -msgid "Wrapping" -msgstr "Envolver" - - -msgid "Wrap image on a specific axis" -msgstr "Envolve a imagem em um eixo especĆ­fico." - - -msgid "No wrapping on X and Y" -msgstr "Sem envolvimento em X e Y." - - msgid "X Axis" msgstr "Eixo X" -msgid "Wrap all pixels on the X axis" -msgstr "Envolve todos os pixeis no eixo X." - - msgid "Y Axis" msgstr "Eixo Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Envolve todos os pixeis no eixo Y." - - msgid "Both Axes" msgstr "Ambos os eixos" -msgid "Wrap all pixels on both axes" -msgstr "Envolve todos os pixeis em ambos os eixos." - - msgid "Map values to colors with the use of a gradient" msgstr "Mapear valores para cores usando um gradiente" @@ -47280,6 +47291,10 @@ msgid "Euler to Rotation" msgstr "Euler em RotaĆ§Ć£o" +msgid "Find in String" +msgstr "Encontrar em Texto" + + msgid "Float to Integer" msgstr "Flutuante em Inteiro" @@ -47901,6 +47916,10 @@ msgid "Whether to update left and right handles" msgstr "Se deve actualizar os manĆ­pulos direitos e esquerdos" +msgid "Spiral" +msgstr "Espiral" + + msgid "Generate a poly spline in a spiral shape" msgstr "Gerar uma spline poly em forma espiral" @@ -48293,6 +48312,26 @@ msgid "Show a linear gizmo in the viewport for a value" msgstr "Mostrar um manipulador linear na janela de visualizĆ§Ć£o" +msgctxt "NodeTree" +msgid "Draw Style" +msgstr "Estilo de RepresentaĆ§Ć£o" + + +msgctxt "NodeTree" +msgid "Arrow" +msgstr "Seta" + + +msgctxt "NodeTree" +msgid "Cross" +msgstr "Cruz" + + +msgctxt "NodeTree" +msgid "Box" +msgstr "ParalelepĆ­pedo" + + msgid "Transform Gizmo" msgstr "Manipulador de TransformaƧƵes" @@ -48434,6 +48473,10 @@ msgid "Retrieve the scene's active camera" msgstr "Obter a cĆ¢mara activa da cena" +msgid "Output a single collection" +msgstr "Produzir uma Ćŗnica collecĆ§Ć£o" + + msgid "Curve Handle Positions" msgstr "PosiƧƵes dos ManĆ­pulos da Curva" @@ -48462,6 +48505,10 @@ msgid "Retrieve a stable random identifier value from the \"id\" attribute on th msgstr "Obter um identificador aleatĆ³rio estĆ”vel a partir do atributo \"ID\" no domĆ­nio dos pontos, ou o Ć­ndice se o atributo nĆ£o existir" +msgid "Input an image data-block" +msgstr "Introduzir um blocos-de-dados de imagem" + + msgid "Retrieve an integer value indicating the position of each element in the list, starting at zero" msgstr "Obter um valor inteiro indicando a posiĆ§Ć£o de cada elemento na lista, comeƧando no zero" @@ -48566,10 +48613,26 @@ msgid "Named Layer Selection" msgstr "SelecĆ§Ć£o de Camada com Nome" +msgid "Output a selection of a Grease Pencil layer" +msgstr "Gerar uma selecĆ§Ć£o de camadas Grease Pencil" + + msgid "Retrieve a unit length vector indicating the direction pointing away from the geometry at each element" msgstr "Obter um vector de comprimento unitĆ”rio indicando a direcĆ§Ć£o oposta Ć  geometria a cada elemento" +msgid "Flat Corner Normals" +msgstr "Normais de Esquina Planas" + + +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "Usar sempre normais de faces para domĆ­nio de esquinas de faces" + + +msgid "Output a single object" +msgstr "Gerar um objecto Ćŗnico" + + msgid "Retrieve a vector indicating the location of each element" msgstr "Obter um vector indicando a posiĆ§Ć£o de cada elemento" @@ -48726,6 +48789,10 @@ msgid "Merge Layers" msgstr "Fundir Camadas" +msgid "Join groups of Grease Pencil layers into one" +msgstr "Juntar grupos de camadas Grease Pencil numa sĆ³" + + msgid "Determines how to choose which layers are merged" msgstr "Determinar como escolher que camadas sĆ£o juntas" @@ -50327,6 +50394,14 @@ msgid "Create a color from individual components using multiple models" msgstr "Criar uma cor a partir de componentes individuais usando vĆ”rios modelos" +msgid "Combine HSV (Legacy)" +msgstr "Combinar HSV (Legado)" + + +msgid "Combine RGB (Legacy)" +msgstr "Combinar RGB (Legado)" + + msgid "Create a vector from X, Y, and Z components" msgstr "Criar um vector dos seus componentes X, Y e Z" @@ -50551,6 +50626,10 @@ msgid "Per component factor" msgstr "Factor por componente" +msgid "Mix (Legacy)" +msgstr "Misturar (Legado)" + + msgid "Mix two input colors" msgstr "Misturar duas cores introduzidas" @@ -50763,6 +50842,14 @@ msgid "Split a color into its individual components using multiple models" msgstr "Separar uma cor nos seus componentes individuais usando mĆŗltiplos modelos" +msgid "Separate HSV (Legacy)" +msgstr "Separa HSV (Legado)" + + +msgid "Separate RGB (Legacy)" +msgstr "Separa RGB (Legado)" + + msgid "Split a vector into its X, Y, and Z components" msgstr "Separar um vector nos seus componentes X, Y e Z" @@ -50779,6 +50866,10 @@ msgstr "" "Apenas suportado no EEVEE" +msgid "Squeeze Value (Legacy)" +msgstr "Valor de Aperto (Legado)" + + msgid "Subsurface Scattering" msgstr "Espalhamento de sub-superfĆ­cie" @@ -55051,6 +55142,10 @@ msgid "Add Grease Pencil Brush Preset" msgstr "Adicionar PredefiniĆ§Ć£o De Pincel Grease Pencil" +msgid "Add or remove Grease Pencil material preset" +msgstr "Adicionar ou remover uma prĆ© definiĆ§Ć£o de material Grease Pencil" + + msgctxt "Operator" msgid "Add Grease Pencil Material Preset" msgstr "Adicionar PredefiniĆ§Ć£o de Material Grease Pencil" @@ -56873,6 +56968,15 @@ msgid "Copy the driver for the highlighted button" msgstr "Copia o controlador para o botĆ£o realƧado." +msgctxt "Operator" +msgid "Debug Channel List" +msgstr "Lista de Canais de DepuraĆ§Ć£o" + + +msgid "Log the channel list info in the terminal. This operator is only available in debug builds of Blender" +msgstr "Registar a informaĆ§Ć£o da lista de canais no terminal. Este operador estĆ” disponĆ­vel apenas em versƵes de depuraĆ§Ć£o de erros do Blender" + + msgctxt "Operator" msgid "Add Driver" msgstr "Adicionar controlador" @@ -57147,6 +57251,24 @@ msgid "Reset the horizontal view to the current scene frame range, taking the pr msgstr "Repor o campo de visĆ£o horizontal de modo a enquadrar o actual intervalo de fotogramas, tendo em conta o intervalo de prĆ©-visualizaĆ§Ć£o, se activo" +msgctxt "Operator" +msgid "Separate Slots" +msgstr "Separar Compartimentos" + + +msgid "Move all slots of the action on the active object into newly created, separate actions. All users of those slots will be reassigned to the new actions. The current action won't be deleted but will be empty and might end up having zero users" +msgstr "Mover todos os compartimentos da acĆ§Ć£o no objecto activo para novas acƧƵes separadas. Todos os utilizadores desses compartimentos serĆ£o reatribuĆ­dos Ć s novas acƧƵes. A actual acĆ§Ć£o nĆ£o serĆ” apagada mas ficarĆ” vazia e pode ficar sem utilizadores." + + +msgctxt "Operator" +msgid "Move Slots to new Action" +msgstr "Mover Compartimentos para Nova AcĆ§Ć£o" + + +msgid "Move the selected slots into a newly created action" +msgstr "Mover os compartimentos seleccionados para uma nova acĆ§Ć£o" + + msgid "Create a new action slot for this data-block, to hold its animation" msgstr "Criar um novo compartimento de acĆ§Ć£o para este bloco-de-dados, para conter a sua animaĆ§Ć£o" @@ -59560,6 +59682,15 @@ msgid "Remove Exporter" msgstr "Remover Exportador" +msgctxt "Operator" +msgid "Add Selected to Active Objects Collection" +msgstr "Adicionar Seleccionado Ć  ColecĆ§Ć£o de Objectos Activa" + + +msgid "Add selected objects to one of the collections the active-object is part of. Optionally add to \"All Collections\" to ensure selected objects are included in the same collections as the active object" +msgstr "Adicionar objectos seleccionados a uma das colecƧƵes da qual o objecto-activo faz parte. Opcionalmente adicionar a \"Todas as ColecƧƵes\" para assegurar que os objectos seleccionados sĆ£o incluĆ­dos nas mesmas colecƧƵes que o objecto activo." + + msgid "The collection to add other selected objects to" msgstr "A colecĆ§Ć£o Ć  qual adicionar outros objectos seleccionados" @@ -60781,6 +60912,10 @@ msgid "Select Control Point Row" msgstr "Selecionar coluna de pontos de controlo" +msgid "Select a row of control points including active one. Successive use on the same point switches between U/V directions" +msgstr "Seleccionar uma linha de pontos de pontos de controle incluindo o activo. UtilizaĆ§Ć£o sucessiva no mesmo ponto alterna entre direcƧƵes U/V." + + msgid "Select similar curve points by property type" msgstr "Seleciona os pontos similares das curvas pelos tipos de propriedades." @@ -61050,6 +61185,11 @@ msgid "Set if this library override data-block can be edited" msgstr "Definir se este bloco-de-dados de revogaĆ§Ć£o de biblioteca pode ser editado" +msgctxt "Operator" +msgid "Remove Preview" +msgstr "Remover PrĆ©-VisualizaĆ§Ć£o" + + msgctxt "Operator" msgid "Unlink Data-Block" msgstr "Desconectar Bloco-de-Dados" @@ -66539,6 +66679,14 @@ msgid "Reset viewable area to show selected strips range" msgstr "Redefine a Ć”rea visĆ­vel para mostrar o intervalo de faixas seleccionada." +msgid "Source color" +msgstr "A cor fonte" + + +msgid "Gamma Corrected" +msgstr "Usar correĆ§Ć£o de gama" + + msgctxt "Operator" msgid "Add File Node" msgstr "Adicionar nĆ³ de ficheiro" @@ -72822,14 +72970,6 @@ msgid "Drop colors to buttons" msgstr "Permite o despejo de cores para os botƵes." -msgid "Source color" -msgstr "A cor fonte" - - -msgid "Gamma Corrected" -msgstr "Usar correĆ§Ć£o de gama" - - msgctxt "Operator" msgid "Edit Source" msgstr "Editar fonte" @@ -75459,10 +75599,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Usa somente modificadores de deformaĆ§Ć£o (desativar temporariamente todos os modificadores construtivos exceto multirresoluĆ§Ć£o)." -msgid "UV Sculpting" -msgstr "Escultura de UVs" - - msgid "Properties of vertex and weight paint mode" msgstr "Propriedades de modo de pintura de vĆ©rtices e pintura de pesos de influĆŖncia." @@ -85282,6 +85418,10 @@ msgid "Color of the light's specular highlight" msgstr "Cor do realce especular da lĆ¢mpada." +msgid "UV Sculpting" +msgstr "Escultura de UVs" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Grupo de vĆ©rtices, usado para a deformaĆ§Ć£o por armaƧƵes de ossos dentre outras finalidades." @@ -89365,6 +89505,10 @@ msgid "Keying Set does not contain any paths" msgstr "O conjunto de inserĆ§Ć£o de chaves nĆ£o possui quaisquer caminhos." +msgid "Cancel" +msgstr "Cancelar" + + msgid "No keyframes to slide between" msgstr "Sem fotogramas chave por entre os quais deslizar." @@ -89535,10 +89679,6 @@ msgid "Nothing selected" msgstr "Nada seleccionado." -msgid "Cancel" -msgstr "Cancelar" - - msgid "Could not resolve path '%s'" msgstr "NĆ£o foi possĆ­vel resolver o caminho fornecido '%s'" @@ -91101,14 +91241,6 @@ msgid "File not found '%s'" msgstr "Ficheiro nĆ£o encontrado: '%s'" -msgid "ON" -msgstr "LIGADO" - - -msgid "OFF" -msgstr "DESLIGADO" - - msgid "Active group is locked, aborting" msgstr "Grupo activo estĆ” travado, abortando." @@ -93641,6 +93773,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "LIGADO" + + +msgid "OFF" +msgstr "DESLIGADO" + + msgid "unsupported format" msgstr "Formato nĆ£o suportado." diff --git a/locale/po/pt_BR.po b/locale/po/pt_BR.po index 32277b0c9a52..58b896201f43 100644 --- a/locale/po/pt_BR.po +++ b/locale/po/pt_BR.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: Leandro Paganelli \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-15 06:56+0000\n" "Last-Translator: Ruan da Silva Andrade \n" "Language-Team: Portuguese (Brazil) \n" @@ -15289,10 +15289,6 @@ msgid "Display the object's name" msgstr "Mostra o nome do objeto." -msgid "Shape Key Lock" -msgstr "Travar as chaves de formato" - - msgid "Display the object's texture space" msgstr "Mostra o espaƧo de textura do objeto." @@ -21336,6 +21332,14 @@ msgid "Material slot name" msgstr "Nome do compartimento do material." +msgid "Metaball" +msgstr "Meta-esfera" + + +msgid "Show/Hide" +msgstr "Mostrar ou ocultar" + + msgid "Names" msgstr "Nomes" @@ -21344,10 +21348,6 @@ msgid "Bone Roll" msgstr "Rolagem dos ossos" -msgid "Show/Hide" -msgstr "Mostrar ou ocultar" - - msgid "Clean Up" msgstr "Limpeza" @@ -21416,10 +21416,6 @@ msgid "Select Loops" msgstr "Selecionar anĆ©is" -msgid "Metaball" -msgstr "Meta-esfera" - - msgid "Light" msgstr "Luz" @@ -27109,10 +27105,6 @@ msgid "Channel Key" msgstr "Chave de canal" -msgid "RGB color space" -msgstr "EspaƧo de cores (RGB)" - - msgid "YCbCr" msgstr "YCbCr" @@ -27713,6 +27705,10 @@ msgid "Distance Key" msgstr "Chave de distĆ¢ncia" +msgid "RGB color space" +msgstr "EspaƧo de cores (RGB)" + + msgid "Double Edge Mask" msgstr "MĆ”scara de aresta dupla" @@ -28386,42 +28382,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Usa valores relativos (em fraƧƵes do tamanho da imagem de entrada) para definir o movimento." -msgid "Wrapping" -msgstr "Envolver" - - -msgid "Wrap image on a specific axis" -msgstr "Envolve a imagem em um eixo especĆ­fico." - - -msgid "No wrapping on X and Y" -msgstr "Sem envolvimento em X e Y." - - msgid "X Axis" msgstr "Eixo X" -msgid "Wrap all pixels on the X axis" -msgstr "Envolve todos os pixeis no eixo X." - - msgid "Y Axis" msgstr "Eixo Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Envolve todos os pixeis no eixo Y." - - msgid "Both Axes" msgstr "Ambos os eixos" -msgid "Wrap all pixels on both axes" -msgstr "Envolve todos os pixeis em ambos os eixos." - - msgid "Vector Blur" msgstr "Desfocagem vetorial" @@ -40119,6 +40091,14 @@ msgid "Add Node Collection" msgstr "Adicionar ColeĆ§Ć£o de NĆ³s" +msgid "Source color" +msgstr "A cor fonte" + + +msgid "Gamma Corrected" +msgstr "Usar correĆ§Ć£o de gama" + + msgctxt "Operator" msgid "Add File Node" msgstr "Adicionar nĆ³ de arquivo" @@ -47217,14 +47197,6 @@ msgid "Drop colors to buttons" msgstr "Permite o despejo de cores para os botƵes." -msgid "Source color" -msgstr "A cor fonte" - - -msgid "Gamma Corrected" -msgstr "Usar correĆ§Ć£o de gama" - - msgctxt "Operator" msgid "Drop Name" msgstr "Soltar Nome" @@ -50068,10 +50040,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Usa somente modificadores de deformaĆ§Ć£o (desabilitar temporariamente todos os modificadores construtivos exceto multirresoluĆ§Ć£o)." -msgid "UV Sculpting" -msgstr "Escultura de UVs" - - msgid "Properties of vertex and weight paint mode" msgstr "Propriedades de modo de pintura de vĆ©rtices e pintura de pesos de influĆŖncia." @@ -60710,6 +60678,10 @@ msgid "Color of the light's specular highlight" msgstr "Cor do realce especular da lĆ¢mpada." +msgid "UV Sculpting" +msgstr "Escultura de UVs" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Grupo de vĆ©rtices, usado para a deformaĆ§Ć£o por armaƧƵes de ossos dentre outras finalidades." @@ -65768,8 +65740,8 @@ msgid "Relax Pose" msgstr "Relaxar Pose" -msgid "[H] - Toggle bone visibility" -msgstr "[H] - Alterar visibilidade do osso" +msgid "Cancel" +msgstr "Cancelar" msgid "No keyframes to slide between" @@ -65938,10 +65910,6 @@ msgid "Nothing selected" msgstr "Nada selecionado." -msgid "Cancel" -msgstr "Cancelar" - - msgid "Could not resolve path '%s'" msgstr "NĆ£o foi possĆ­vel resolver o caminho fornecido '%s'" @@ -67677,14 +67645,6 @@ msgid "File not found '%s'" msgstr "Arquivo nĆ£o encontrado: '%s'" -msgid "ON" -msgstr "LIGADO" - - -msgid "OFF" -msgstr "DESLIGADO" - - msgid "Active group is locked, aborting" msgstr "Grupo ativo estĆ” travado, abortando." @@ -69949,10 +69909,6 @@ msgid "Streak fade-out factor" msgstr "Fator de saĆ­da para o esmaecimento das listras." -msgid "Undistortion" -msgstr "Sem distorƧƵes" - - msgid "Dot" msgstr "Ponto" @@ -70462,6 +70418,14 @@ msgid "dbl-" msgstr "dbl-" +msgid "ON" +msgstr "LIGADO" + + +msgid "OFF" +msgstr "DESLIGADO" + + msgid "unsupported format" msgstr "formato nĆ£o suportado" diff --git a/locale/po/ro.po b/locale/po/ro.po index aa1a2b785296..db14faad169b 100644 --- a/locale/po/ro.po +++ b/locale/po/ro.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-03-23 04:06+0000\n" "Last-Translator: Alexandru Buhnici \n" "Language-Team: Romanian \n" @@ -2575,10 +2575,6 @@ msgid "New Window" msgstr "Fereastră Nouă" -msgid "UV Sculpting" -msgstr "Sculptare UV" - - msgid "Motion Tracking" msgstr "Urmărirea mișcării" @@ -2703,6 +2699,10 @@ msgid "Nearest Marker" msgstr "Cel mai apropriat Marker" +msgid "UV Sculpting" +msgstr "Sculptare UV" + + msgid "Error Message" msgstr "Mesaj de Eroare" @@ -3076,6 +3076,10 @@ msgid "Out" msgstr "Ieșire" +msgid "Cancel" +msgstr "Anulare" + + msgid "Cannot paint stroke" msgstr "Nu se poate picta cursa" @@ -3088,10 +3092,6 @@ msgid "Nothing selected" msgstr "Nimic selectat" -msgid "Cancel" -msgstr "Anulare" - - msgctxt "Operator" msgid "Change Shortcut" msgstr "Schimbă Scurtătura" diff --git a/locale/po/ru.po b/locale/po/ru.po index e30548236284..07ac293caac4 100644 --- a/locale/po/ru.po +++ b/locale/po/ru.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-27 09:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-02-03 14:38+0000\n" "Last-Translator: Fatih Alexandr \n" "Language-Team: Russian \n" "Language: ru\n" @@ -1231,7 +1231,7 @@ msgstr "ŠŸŃ€Š¾ŃŠ¼Š¾Ń‚Ń€ Šø рŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Š½ŠøŠµ ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠ¹ msgid "Node Editor" -msgstr "Š ŠµŠ“Š°ŠŗтŠ¾Ń€ Š½Š¾Š“Š¾Š²" +msgstr "ŠŠ¾Š“Š¾Š²Ń‹Š¹ рŠµŠ“Š°ŠŗтŠ¾Ń€" msgid "Editor for node-based shading and compositing tools" @@ -1271,7 +1271,7 @@ msgstr "Š ŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Š½ŠøŠµ Š“рŠ°Š¹Š²ŠµŃ€Š¾Š² Šø ŠøŠ½Ń‚ŠµŃ€ŠæŠ¾Š»ŃŃ† msgid "Nonlinear Animation" -msgstr "Š ŠµŠ“Š°ŠŗтŠ¾Ń€ Š½ŠµŠ»ŠøŠ½ŠµŠ¹Š½Š¾Š¹ Š°Š½ŠøŠ¼Š°Ń†ŠøŠø" +msgstr "ŠŠµŠ»ŠøŠ½ŠµŠ¹Š½Š°Ń Š°Š½ŠøŠ¼Š°Ń†Šøя" msgid "Combine and layer Actions" @@ -4625,6 +4625,10 @@ msgid "Grease Pencil Brush Settings" msgstr "ŠŸŠ°Ń€Š°Š¼ŠµŃ‚ры ŠŗŠøстŠø Grease Pencil" +msgid "Settings for Grease Pencil brush" +msgstr "ŠŸŠ°Ń€Š°Š¼ŠµŃ‚ры ŠŗŠøстŠø Grease Pencil" + + msgid "Active Smooth" msgstr "Š”Š³Š»Š°Š¶ŠøŠ²Š°Š½ŠøŠµ" @@ -4790,10 +4794,20 @@ msgid "Strokes end extension for closing gaps, use zero to disable" msgstr "Š’ŠµŠ»ŠøчŠøŠ½Š° ŠæрŠ¾Š“Š»ŠµŠ½Šøя штрŠøхŠ¾Š² Š“Š»Ń Š·Š°Š¼Ń‹ŠŗŠ°Š½Šøя ŠŗŠ¾Š½Ń‚ŃƒŃ€Š¾Š², ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠ¹Ń‚Šµ 0 Š“Š»Ń Š¾Ń‚ŠŗŠ»ŃŽŃ‡ŠµŠ½Šøя" +msgctxt "Brush" +msgid "Direction" +msgstr "ŠŠ°ŠæрŠ°Š²Š»ŠµŠ½ŠøŠµ" + + msgid "Direction of the fill" msgstr "ŠŠ°ŠæрŠ°Š²Š»ŠµŠ½ŠøŠµ Š·Š°Š»ŠøŠ²ŠŗŠø" +msgctxt "Brush" +msgid "Normal" +msgstr "ŠŠ¾Ń€Š¼Š°Š»ŃŒ" + + msgid "Fill internal area" msgstr "Š—Š°Š»Šøть Š²Š½ŃƒŃ‚Ń€ŠµŠ½Š½ŃŽŃŽ Š¾Š±Š»Š°ŃŃ‚ŃŒ" @@ -5138,6 +5152,10 @@ msgid "Use tablet pressure for jitter" msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ Š“Š°Š²Š»ŠµŠ½ŠøŠµ Š½Š° ŠæŠ»Š°Š½ŃˆŠµŃ‚ Š“Š»Ń Š“рŠ¾Š¶Š°Š½Šøя" +msgid "Keep Caps" +msgstr "Š”Š¾Ń…Ń€Š°Š½ŃŃ‚ŃŒ ŠŗŠ¾Š½Ń†Ń‹" + + msgid "Keep the caps as they are and don't flatten them when erasing" msgstr "Š”Š¾Ń…Ń€Š°Š½ŃŃ‚ŃŒ ŠŗŠ¾Š½Ń†Ń‹ тŠ°ŠŗŠøŠ¼Šø, ŠŗŠ°ŠŗŠøŠµ Š¾Š½Šø ŠµŃŃ‚ŃŒ, Šø Š½Šµ сŠæряŠ¼Š»ŃŃ‚ŃŒ Šøх ŠæрŠø стŠøрŠ°Š½ŠøŠø" @@ -6791,7 +6809,7 @@ msgstr "ŠŸŃ€ŠµŠ¾Š±Ń€Š°Š·Š¾Š²Š°Š½ŠøŠµ Š²ŠøŠ“Š°" msgid "View used when converting image to a display space" -msgstr "Š’ŠøŠ“, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Ń‹Š¹ ŠæрŠø ŠŗŠ¾Š½Š²ŠµŃ€Ń‚Š°Ń†ŠøŠø ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя Š² Š² ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ Š¾Ń‚Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя" +msgstr "Š’ŠøŠ“, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Ń‹Š¹ ŠæрŠø ŠŗŠ¾Š½Š²ŠµŃ€Ń‚Š°Ń†ŠøŠø ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя Š² ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ Š¾Ń‚Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя" msgid "Do not perform any color transform on display, use old non-color managed technique for display" @@ -8770,7 +8788,7 @@ msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ цŠµŠ»Šø, уŠŗŠ°Š·Š°Š½Š½Ń‹Šµ Š² ŠæŠ°Š½ŠµŠ»Šø Š¾ msgid "Shrinkwrap Constraint" -msgstr "ŠžŠ³Ń€Š°Š½ŠøчŠøтŠµŠ»ŃŒ Ā«Š¾Š±Ń‚яŠ³ŠøŠ²Š°Š½ŠøŠµĀ»" +msgstr "ŠžŠ³Ń€Š°Š½ŠøчŠøтŠµŠ»ŃŒ \"ŠžŠ±Ń‚яŠ³ŠøŠ²Š°Š½ŠøŠµ\"" msgid "Create constraint-based shrinkwrap relationship" @@ -13442,6 +13460,10 @@ msgid "Add camera background image" msgstr "Š”Š¾Š±Š°Š²Šøть фŠ¾Š½Š¾Š²Š¾Šµ ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠµ ŠŗŠ°Š¼ŠµŃ€Ń‹" +msgid "Add empty image" +msgstr "Š”Š¾Š±Š°Š²Šøть ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠµ-ŠæустышŠŗу" + + msgid "File Select Entry" msgstr "Š’Ń‹Š±ŠøрŠ°ŠµŠ¼Ń‹Š¹ фŠ°Š¹Š»" @@ -17110,6 +17132,10 @@ msgid "Type of ID block that action can be used on - DO NOT CHANGE UNLESS YOU KN msgstr "Š¢ŠøŠæ ID-Š±Š»Š¾ŠŗŠ°, с ŠŗŠ¾Ń‚Š¾Ń€Ń‹Š¼ Š¼Š¾Š¶ŠµŃ‚ ŠøсŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒŃŃ этŠ¾ Š“ŠµŠ¹ŃŃ‚Š²ŠøŠµ. ŠŠµ ŠøŠ·Š¼ŠµŠ½ŃŠ¹Ń‚Šµ этŠ¾ Š·Š½Š°Ń‡ŠµŠ½ŠøŠµ, ŠµŃŠ»Šø Š½Šµ уŠ²ŠµŃ€ŠµŠ½Ń‹ Š² сŠ²Š¾Šøх Š“ŠµŠ¹ŃŃ‚Š²Šøях" +msgid "Is Empty" +msgstr "ŠŸŃƒŃŃ‚Š¾Šµ" + + msgid "Layers" msgstr "Š”Š»Š¾Šø" @@ -17492,6 +17518,11 @@ msgid "Bend" msgstr "Š˜Š·Š¾Š³Š½ŃƒŃ‚ŃŒ" +msgctxt "Brush" +msgid "Expand" +msgstr "Š Š°ŃŃˆŠøрŠøть" + + msgctxt "Brush" msgid "Inflate" msgstr "Š Š°Š·Š“уть" @@ -17507,10 +17538,18 @@ msgid "Twist" msgstr "Š”ŠŗручŠøŠ²Š°Š½ŠøŠµ" +msgid "How the brush falloff is applied across the boundary" +msgstr "ŠšŠ°Šŗ ŠæрŠøŠ¼ŠµŠ½ŃŠµŃ‚ся сŠæŠ°Š“ ŠŗŠøстŠø ŠæŠ¾ Š²ŃŠµŠ¹ Š³Ń€Š°Š½ŠøцŠµ" + + msgid "Applies the same deformation in the entire boundary" msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½ŃŠµŃ‚ Š¾Š“ŠøŠ½Š°ŠŗŠ¾Š²ŃƒŃŽ Š“ŠµŃ„Š¾Ń€Š¼Š°Ń†Šøю ŠæŠ¾ Š²ŃŠµŠ¹ Š³Ń€Š°Š½ŠøцŠµ" +msgid "Brush Radius" +msgstr "Š Š°Š“Šøус ŠŗŠøстŠø" + + msgid "Applies the deformation in a localized area limited by the brush radius" msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½ŃŠµŃ‚ Š“ŠµŃ„Š¾Ń€Š¼Š°Ń†Šøю Š² Š»Š¾ŠŗŠ°Š»ŠøŠ·Š¾Š²Š°Š½Š½Š¾Š¹ Š¾Š±Š»Š°ŃŃ‚Šø, Š¾Š³Ń€Š°Š½ŠøчŠµŠ½Š½Š¾Š¹ рŠ°Š“ŠøусŠ¾Š¼ ŠŗŠøстŠø" @@ -17519,6 +17558,10 @@ msgid "Loop" msgstr "Š—Š°Ń†ŠøŠŗŠ»Šøть" +msgid "Applies the brush falloff in a loop pattern" +msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½ŃŠµŃ‚ сŠæŠ°Š“ ŠŗŠøстŠø Š² Š²ŠøŠ“Šµ ŠæŠµŃ‚Š»Šø" + + msgid "Applies the falloff radius in a loop pattern, inverting the displacement direction in each pattern repetition" msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½ŃŠµŃ‚ рŠ°Š“Šøус сŠæŠ°Š“Š° Š² цŠøŠŗŠ»ŠøчŠµŃŠŗŠ¾Š¼ шŠ°Š±Š»Š¾Š½Šµ, ŠøŠ½Š²ŠµŃ€Ń‚Šøруя Š½Š°ŠæрŠ°Š²Š»ŠµŠ½ŠøŠµ сŠ¼ŠµŃ‰ŠµŠ½Šøя ŠæрŠø ŠŗŠ°Š¶Š“Š¾Š¼ ŠæŠ¾Š²Ń‚Š¾Ń€ŠµŠ½ŠøŠø шŠ°Š±Š»Š¾Š½Š°" @@ -17560,6 +17603,21 @@ msgid "Drag" msgstr "ŠŸŠµŃ€ŠµŃ‚Š°ŃŠŗŠøŠ²Š°Š½ŠøŠµ" +msgctxt "Brush" +msgid "Push" +msgstr "ŠžŃ‚Ń‚Š°Š»ŠŗŠøŠ²Š°Š½ŠøŠµ" + + +msgctxt "Brush" +msgid "Pinch Point" +msgstr "Š¢Š¾Ń‡ŠŗŠ° щŠøŠæŠŗŠ°" + + +msgctxt "Brush" +msgid "Pinch Perpendicular" +msgstr "ŠŸŠµŃ€ŠæŠµŠ½Š“ŠøŠŗуŠ»ŃŃ€Š½Ń‹Š¹ щŠøŠæŠ¾Šŗ" + + msgctxt "Brush" msgid "Snake Hook" msgstr "Š—Š¼ŠµŠøŠ½Ń‹Š¹ ŠŗрюŠŗ" @@ -17978,11 +18036,21 @@ msgid "File path to brush icon" msgstr "ŠŸŃƒŃ‚ŃŒ Šŗ фŠ°Š¹Š»Ńƒ Š·Š½Š°Ń‡ŠŗŠ° ŠŗŠøстŠø" +msgctxt "Brush" +msgid "Soften" +msgstr "Š”Š¼ŃŠ³Ń‡ŠµŠ½ŠøŠµ" + + msgctxt "Brush" msgid "Smear" msgstr "Š Š°Š·Š¼Š°Š·Ń‹Š²Š°Š½ŠøŠµ" +msgctxt "Brush" +msgid "Mask" +msgstr "ŠœŠ°ŃŠŗŠ°" + + msgid "Number of input samples to average together to smooth the brush stroke" msgstr "ŠšŠ¾Š»ŠøчŠµŃŃ‚Š²Š¾ Š²Š²Š¾Š“Š½Ń‹Ń… сэŠ¼ŠæŠ»Š¾Š² Š“Š»Ń усрŠµŠ“Š½ŠµŠ½Šøя ŠæрŠø сŠ³Š»Š°Š¶ŠøŠ²Š°Š½ŠøŠø штрŠøхŠ° ŠŗŠøстŠø" @@ -18184,6 +18252,11 @@ msgid "Clay Thumb" msgstr "ŠœŠ°Š·Š¾Šŗ Š³Š»ŠøŠ½Ń‹" +msgctxt "Brush" +msgid "Layer" +msgstr "Š”Š»Š¾Š¹" + + msgctxt "Brush" msgid "Blob" msgstr "ŠšŠ°ŠæŠ»Ń" @@ -18199,11 +18272,26 @@ msgid "Flatten" msgstr "Š’Ń‹Ń€Š°Š²Š½ŠøŠ²Š°Š½ŠøŠµ" +msgctxt "Brush" +msgid "Scrape" +msgstr "Š¦Š°Ń€Š°ŠæŠøŠ½Š°" + + +msgctxt "Brush" +msgid "Multi-plane Scrape" +msgstr "ŠœŠ½Š¾Š³Š¾ŠæŠ»Š¾ŃŠŗŠ¾ŃŃ‚Š½Š¾Š¹ сŠŗрŠµŠ±Š¾Šŗ" + + msgctxt "Brush" msgid "Pinch" msgstr "Š©ŠøŠæŠ¾Šŗ" +msgctxt "Brush" +msgid "Elastic Deform" +msgstr "Š­Š»Š°ŃŃ‚ŠøчŠ½Š°Ń Š“ŠµŃ„Š¾Ń€Š¼Š°Ń†Šøя" + + msgctxt "Brush" msgid "Thumb" msgstr "ŠœŠ°Š·Š¾Šŗ" @@ -18229,6 +18317,16 @@ msgid "Boundary" msgstr "Š“Ń€Š°Š½ŠøцŠ°" +msgctxt "Brush" +msgid "Cloth" +msgstr "Š¢ŠŗŠ°Š½ŃŒ" + + +msgctxt "Brush" +msgid "Simplify" +msgstr "Š£ŠæрŠ¾Ń‰ŠµŠ½ŠøŠµ" + + msgctxt "Brush" msgid "Draw Face Sets" msgstr "Š ŠøсŠ¾Š²Š°Ń‚ŃŒ Š½Š°Š±Š¾Ń€Ń‹ Š³Ń€Š°Š½ŠµŠ¹" @@ -18313,6 +18411,11 @@ msgid "How powerful the effect of the brush is when applied" msgstr "Š”ŠøŠ»Š° эффŠµŠŗтŠ° ŠæрŠøŠ¼ŠµŠ½ŠµŠ½Šøя ŠŗŠøстŠø" +msgctxt "GPencil" +msgid "Stroke Method" +msgstr "ŠœŠµŃ‚Š¾Š“ штрŠøхŠ°" + + msgid "Apply paint on each mouse move step" msgstr "ŠŠ°Š½Š¾ŃŠøть ŠŗрŠ°ŃŠŗу Š½Š° ŠŗŠ°Š¶Š“Š¾Š¼ шŠ°Š³Šµ Š“Š²ŠøŠ¶ŠµŠ½Šøя ŠŗурсŠ¾Ń€Š°" @@ -18330,6 +18433,11 @@ msgid "Limit brush application to the distance specified by spacing" msgstr "ŠžŠ³Ń€Š°Š½ŠøчŠøть ŠæрŠøŠ¼ŠµŠ½ŠµŠ½ŠøŠµ штрŠøхŠ° Š½Š° рŠ°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ, Š·Š°Š“Š°Š½Š½Š¾Šµ ŠøŠ½Ń‚ŠµŃ€Š²Š°Š»Š¾Š¼" +msgctxt "GPencil" +msgid "Airbrush" +msgstr "ŠšŃ€Š°ŃŠŗŠ¾Ń€Š°ŃŠæыŠ»ŠøтŠµŠ»ŃŒ" + + msgid "Keep applying paint effect while holding mouse (spray)" msgstr "ŠŸŃ€Š¾Š“Š¾Š»Š¶Š°Ń‚ŃŒ ŠæрŠøŠ¼ŠµŠ½ŃŃ‚ŃŒ эффŠµŠŗт рŠøсŠ¾Š²Š°Š½Šøя ŠæрŠø уŠ“ŠµŃ€Š¶Š°Š½ŠøŠø ŠŗŠ½Š¾ŠæŠŗŠø Š¼Ń‹ŃˆŠø (сŠæрŠµŠ¹)" @@ -18610,6 +18718,10 @@ msgid "Smooths the edges of the strokes" msgstr "Š”Š³Š»Š°Š¶ŠøŠ²Š°Ń‚ŃŒ ŠŗрŠ°Ń штрŠøхŠ¾Š²" +msgid "Use this brush in Grease Pencil drawing mode" +msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ эту ŠŗŠøсть Š² рŠµŠ¶ŠøŠ¼Šµ рŠøсŠ¾Š²Š°Š½Šøя Grease Pencil" + + msgid "Use this brush in texture paint mode" msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ эту ŠŗŠøсть Š² рŠµŠ¶ŠøŠ¼Šµ тŠµŠŗстурŠøрŠ¾Š²Š°Š½Šøя" @@ -18766,6 +18878,10 @@ msgid "Automatically adjust strength to give consistent results for different sp msgstr "ŠŠ²Ń‚Š¾Š¼Š°Ń‚ŠøчŠµŃŠŗŠ°Ń рŠµŠ³ŃƒŠ»ŠøрŠ¾Š²ŠŗŠ° ŠøŠ½Ń‚ŠµŠ½ŃŠøŠ²Š½Š¾ŃŃ‚Šø Š“Š»Ń ŠæŠ¾Š“Š“ŠµŃ€Š¶Š°Š½Šøя сŠ¾Š³Š»Š°ŃŠ¾Š²Š°Š½Š½Š¾ŃŃ‚Šø рŠµŠ·ŃƒŠ»ŃŒŃ‚Š°Ń‚Š¾Š² Š½Š° рŠ°Š·Š½Ń‹Ń… ŠøŠ½Ń‚ŠµŃ€Š²Š°Š»Š°Ń…" +msgid "Use this brush in Grease Pencil vertex color mode" +msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ эту ŠŗŠøсть Š² рŠµŠ¶ŠøŠ¼Šµ рŠøсŠ¾Š²Š°Š½Šøя Š²ŠµŃ€ŃˆŠøŠ½ с Grease Pencil" + + msgid "Use Pressure for Wet Persistence" msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ Š“Š°Š²Š»ŠµŠ½ŠøŠµ Š“Š»Ń сŠ¾ŃŃ‚Š¾ŃŠ½Šøя Š²Š»Š°Š¶Š½Š¾ŃŃ‚Šø" @@ -20721,6 +20837,10 @@ msgid "2D Layers" msgstr "2D-сŠ»Š¾Šø" +msgid "Display strokes using Grease Pencil layers to define order" +msgstr "ŠžŃ‚Š¾Š±Ń€Š°Š¶Š°Ń‚ŃŒ штрŠøхŠø ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŃ сŠ»Š¾Šø Grease Pencil, чтŠ¾Š±Ń‹ Š¾ŠæрŠµŠ“ŠµŠ»Šøть Šøх ŠæŠ¾Ń€ŃŠ“Š¾Šŗ Š½Š°Š»Š¾Š¶ŠµŠ½Šøя" + + msgid "3D Location" msgstr "3D-ŠŸŠ¾Š»Š¾Š¶ŠµŠ½ŠøŠµ" @@ -22756,7 +22876,7 @@ msgstr "Š“Ń€ŃƒŠæŠæŠ° Š½Š¾Š“ ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŃ‚ся Š² Š¾Š±ŃŠŠµŠŗтŠ½Š¾Š¼ рŠµ msgid "Sculpt" -msgstr "Š”ŠŗуŠ»ŃŒŠæтурŠ°" +msgstr "Š”ŠŗуŠ»ŃŒŠæтŠøŠ½Š³" msgid "The node group is used in sculpt mode" @@ -23067,6 +23187,11 @@ msgid "Origin offset distance" msgstr "Š Š°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ сŠ¼ŠµŃ‰ŠµŠ½Šøя Š¾Ń€ŠøŠ“Š¶ŠøŠ½Š°" +msgctxt "Image" +msgid "Empty Image Side" +msgstr "Š”тŠ¾Ń€Š¾Š½Š° ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя-ŠæустышŠŗŠø" + + msgid "Show front/back side" msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚ŃŒ ŠæŠµŃ€ŠµŠ“Š½ŃŽŃŽ/Š·Š°Š“Š½ŃŽŃŽ стŠ¾Ń€Š¾Š½Ń‹" @@ -23545,10 +23670,6 @@ msgid "Display the object's name" msgstr "ŠžŃ‚Š¾Š±Ń€Š°Š¶Š°Ń‚ŃŒ ŠøŠ¼Ń Š¾Š±ŃŠŠµŠŗтŠ°" -msgid "Shape Key Lock" -msgstr "Š¤ŠøŠŗсŠøрŠ¾Š²Š°Ń‚ŃŒ ŠŗŠ»ŃŽŃ‡ фŠ¾Ń€Š¼Ń‹" - - msgid "Display Texture Space" msgstr "ŠžŃ‚Š¾Š±Ń€Š°Š¶Š°Ń‚ŃŒ тŠµŠŗстурŠ½Š¾Šµ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾" @@ -30883,6 +31004,14 @@ msgid "Material slot name" msgstr "Š˜Š¼Ń сŠ»Š¾Ń‚Š° Š¼Š°Ń‚ŠµŃ€ŠøŠ°Š»Š°" +msgid "Metaball" +msgstr "ŠœŠµŃ‚Š°ŃŃ„ŠµŃ€Š°" + + +msgid "Show/Hide" +msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚ŃŒ/сŠŗрыть" + + msgid "Names" msgstr "ŠŠ°Š·Š²Š°Š½Šøя" @@ -30891,10 +31020,6 @@ msgid "Bone Roll" msgstr "ŠšŃ€ŠµŠ½ ŠŗŠ¾ŃŃ‚Šø" -msgid "Show/Hide" -msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚ŃŒ/сŠŗрыть" - - msgid "Clean Up" msgstr "ŠŸŃ€ŠøŠ²ŠµŃŃ‚Šø Š² ŠæŠ¾Ń€ŃŠ“Š¾Šŗ" @@ -30979,10 +31104,6 @@ msgid "Assign Material" msgstr "ŠŠ°Š·Š½Š°Ń‡Šøть Š¼Š°Ń‚ŠµŃ€ŠøŠ°Š»" -msgid "Metaball" -msgstr "ŠœŠµŃ‚Š°ŃŃ„ŠµŃ€Š°" - - msgid "Light" msgstr "Š”Š²ŠµŃ‚" @@ -31611,6 +31732,11 @@ msgid "Parent" msgstr "Š Š¾Š“ŠøтŠµŠ»ŃŒ" +msgctxt "Operator" +msgid "Empty" +msgstr "ŠŸŃƒŃŃ‚Ń‹ŃˆŠŗŠ°" + + msgid "Clone Layer" msgstr "ŠšŠ»Š¾Š½ŠøрŠ¾Š²Š°Ń‚ŃŒ сŠ»Š¾Š¹" @@ -32624,7 +32750,7 @@ msgstr "ŠžŠ±ŃŠŠµŠŗт ŠŗрŠøŠ²Š¾Š¹, Š²Š“Š¾Š»ŃŒ ŠŗŠ¾Ń‚Š¾Ń€Š¾Š¹ Š½ŠµŠ¾Š±Ń…Š¾Š“ŠøŠ¼ msgid "End Cap" -msgstr "ŠšŠ¾Š½. эŠ»ŠµŠ¼ŠµŠ½Ń‚" +msgstr "ŠšŠ¾Š½ŠµŃ‡Š½Ń‹Š¹ эŠ»ŠµŠ¼ŠµŠ½Ń‚" msgid "Mesh object to use as an end cap" @@ -32672,7 +32798,7 @@ msgstr "ŠŸŃ€ŠµŠ“ŠµŠ»ŃŒŠ½Š¾Šµ рŠ°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ, Š½Š° ŠŗŠ¾Ń‚Š¾Ń€Š¾Š¼ ŠæрŠ¾Šø msgid "Object Offset" -msgstr "Š”Š¼ŠµŃ‰Š°Ń‚ŃŒ ŠæŠ¾ Š¾Š±ŃŠŠµŠŗту" +msgstr "Š”Š¼ŠµŃ‰ŠµŠ½ŠøŠµ ŠæŠ¾ Š¾Š±ŃŠŠµŠŗту" msgid "Use the location and rotation of another object to determine the distance and rotational change between arrayed items" @@ -32704,7 +32830,7 @@ msgstr "Š Š°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ Š¼ŠµŠ¶Š“у эŠ»ŠµŠ¼ŠµŠ½Ń‚Š°Š¼Šø Š¼Š°ŃŃŠøŠ²Š° Š¾Ń‚ msgid "Start Cap" -msgstr "ŠŠ°Ń‡. эŠ»ŠµŠ¼ŠµŠ½Ń‚" +msgstr "ŠŠ°Ń‡Š°Š»ŃŒŠ½Ń‹Š¹ эŠ»ŠµŠ¼ŠµŠ½Ń‚" msgid "Mesh object to use as a start cap" @@ -32808,7 +32934,7 @@ msgstr "Š£ŃŃ‚Š°Š½Š¾Š²Šøть тŠ²Ń‘Ń€Š“Š¾ŃŃ‚ŃŒ Š³Ń€Š°Š½ŠµŠ¹ Š½Š° Š²ŃŠµ Š³Ń€Š° msgid "Harden Normals" -msgstr "Š“Ń€ŃƒŠ±Ń‹Šµ Š½Š¾Ń€Š¼Š°Š»Šø" +msgstr "Š£ŠŗрŠµŠæŠøть Š½Š¾Ń€Š¼Š°Š»Šø" msgid "Match normals of new faces to adjacent faces" @@ -33817,6 +33943,11 @@ msgid "Use un-subdivide face reduction" msgstr "Š£Š¼ŠµŠ½ŃŒŃˆŠøть ŠŗŠ¾Š»ŠøчŠµŃŃ‚Š²Š¾ Š³Ń€Š°Š½ŠµŠ¹, устрŠ°Š½ŠøŠ² ŠæŠ¾Š“рŠ°Š·Š“ŠµŠ»ŠµŠ½Šøя" +msgctxt "Mesh" +msgid "Planar" +msgstr "ŠŸŠ»Š°Š½Š°Ń€Š½Š¾" + + msgid "Dissolve geometry to form planar polygons" msgstr "ŠžŠ±ŃŠŠµŠ“ŠøŠ½ŃŃ‚ŃŒ сŠ¾ŃŠµŠ“Š½ŠøŠµ Š¼Š½Š¾Š³Š¾ŃƒŠ³Š¾Š»ŃŒŠ½ŠøŠŗŠø Š² тŠ¾Š¹ Š¶Šµ ŠæŠ»Š¾ŃŠŗŠ¾ŃŃ‚Šø Š² Š¾Š“ŠøŠ½ Š±Š¾Š»ŃŒŃˆŠ¾Š¹ Š¼Š½Š¾Š³Š¾ŃƒŠ³Š¾Š»ŃŒŠ½ŠøŠŗ" @@ -34006,6 +34137,11 @@ msgid "Canvas" msgstr "Š„Š¾Š»ŃŃ‚" +msgctxt "Simulation" +msgid "Brush" +msgstr "ŠšŠøсть" + + msgid "EdgeSplit Modifier" msgstr "ŠœŠ¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€ рŠ°Š·Š“ŠµŠ»ŠµŠ½Šøя рёŠ±ŠµŃ€" @@ -35027,7 +35163,7 @@ msgstr "ŠŸŠ¾Š“Š“ŠµŃ€Š¶ŠøŠ²Š°Ń‚ŃŒ фŠ¾Ń€Š¼Ńƒ" msgid "Shrinkwrap Modifier" -msgstr "ŠœŠ¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€ Shrinkwrap" +msgstr "ŠœŠ¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€ \"ŠžŠ±Ń‚яŠ³ŠøŠ²Š°Š½ŠøŠµ\"" msgid "Auxiliary Target" @@ -35078,6 +35214,10 @@ msgid "Allow vertices to move in the positive direction of axis" msgstr "Š Š°Š·Ń€ŠµŃˆŠøть ŠæŠµŃ€ŠµŠ¼ŠµŃ‰ŠµŠ½ŠøŠµ Š²ŠµŃ€ŃˆŠøŠ½ Š² ŠæŠ¾Š»Š¾Š¶ŠøтŠµŠ»ŃŒŠ½Š¾Š¼ Š½Š°ŠæрŠ°Š²Š»ŠµŠ½ŠøŠø Š¾ŃŠø" +msgid "Wrap Method" +msgstr "ŠœŠµŃ‚Š¾Š“ Š¾Š±Ń‚яŠ³ŠøŠ²Š°Š½Šøя" + + msgid "Shrink the mesh to the nearest target surface" msgstr "ŠŸŃ€ŠøтяŠ½ŃƒŃ‚ŃŒ Š¼ŠµŃˆ Šŗ Š±Š»ŠøŠ¶Š°Š¹ŃˆŠøŠ¼ тŠ¾Ń‡ŠŗŠ°Š¼ Š½Š° ŠæŠ¾Š²ŠµŃ€Ń…Š½Š¾ŃŃ‚Šø цŠµŠ»ŠµŠ²Š¾Š³Š¾ Š¾Š±ŃŠŠµŠŗтŠ°" @@ -35774,6 +35914,14 @@ msgid "Keep Corners" msgstr "Š”Š¾Ń…Ń€Š°Š½ŃŃ‚ŃŒ уŠ³Š»Ń‹" +msgid "Smooth boundaries, but corners are kept sharp" +msgstr "Š”Š³Š»Š°Š“Šøть Š³Ń€Š°Š½Šøцы, Š½Š¾ уŠ³Š»Ń‹ Š¾ŃŃ‚Š°Š²Š»ŃŃ‚ŃŒ Š¾ŃŃ‚рыŠ¼Šø" + + +msgid "Smooth boundaries, including corners" +msgstr "Š”Š³Š»Š°Š“Šøть Š³Ń€Š°Š½Šøцы, Š²ŠŗŠ»ŃŽŃ‡Š°Ń уŠ³Š»Ń‹" + + msgid "Store multires displacements outside the .blend file, to save memory" msgstr "Š„рŠ°Š½Šøть сŠ¼ŠµŃ‰ŠµŠ½Šøя Š¼ŃƒŠ»ŃŒŃ‚ŠøрŠ°Š·Ń€ŠµŃˆŠµŠ½Šøя Š¾Ń‚Š“ŠµŠ»ŃŒŠ½Š¾ Š¾Ń‚ фŠ°Š¹Š»Š° .blend, чтŠ¾Š±Ń‹ сэŠŗŠ¾Š½Š¾Š¼Šøть ŠæŠ°Š¼ŃŃ‚ŃŒ" @@ -35830,8 +35978,24 @@ msgid "Use mesh crease information to sharpen edges or corners" msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ ŠøŠ½Ń„Š¾Ń€Š¼Š°Ń†Šøю Š¾ сŠŗŠ»Š°Š“ŠŗŠ°Ń… Š“Š»Ń Š·Š°Š¾ŃŃ‚Ń€ŠµŠ½Šøя рёŠ±ŠµŃ€ ŠøŠ»Šø уŠ³Š»Š¾Š²" +msgid "Use Custom Normals" +msgstr "ŠŸŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŠµŠ»ŃŒŃŠŗŠøŠµ Š½Š¾Ń€Š¼Š°Š»Šø" + + +msgid "Interpolates existing custom normals to resulting mesh" +msgstr "Š˜Š½Ń‚ŠµŃ€ŠæŠ¾Š»ŠøруŠµŃ‚ сущŠµŃŃ‚Š²ŃƒŃŽŃ‰ŠøŠµ ŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŠµŠ»ŃŒŃŠŗŠøŠµ Š½Š¾Ń€Š¼Š°Š»Šø Š² рŠµŠ·ŃƒŠ»ŃŒŃ‚ŠøрующŠøŠ¹ Š¼ŠµŃˆ" + + +msgid "Sculpt Base Mesh" +msgstr "Š”ŠŗуŠ»ŃŒŠæтŠøть Š±Š°Š·Š¾Š²Ń‹Š¹ Š¼ŠµŃˆ" + + +msgid "Make Sculpt Mode tools deform the base mesh while previewing the displacement of higher subdivision levels" +msgstr "Š˜Š½ŃŃ‚Ń€ŃƒŠ¼ŠµŠ½Ń‚Ń‹ рŠµŠ¶ŠøŠ¼Š° сŠŗуŠ»ŃŒŠæтŠøŠ½Š³Š° Š“ŠµŃ„Š¾Ń€Š¼Šøруют Š±Š°Š·Š¾Š²Ń‹Š¹ Š¼ŠµŃˆ, Š¾Š“Š½Š¾Š²Ń€ŠµŠ¼ŠµŠ½Š½Š¾ ŠæрŠ¾ŃŠ¼Š°Ń‚Ń€ŠøŠ²Š°Ń сŠ¼ŠµŃ‰ŠµŠ½ŠøŠµ Š±Š¾Š»ŠµŠµ Š²Ń‹ŃŠ¾ŠŗŠøх урŠ¾Š²Š½ŠµŠ¹ ŠæŠ¾Š“рŠ°Š·Š“ŠµŠ»ŠµŠ½Šøя" + + msgid "UV Smooth" -msgstr "UV-сŠ³Š»Š°Š¶ŠøŠ²Š°Š½ŠøŠµ" +msgstr "UV-Š”Š³Š»Š°Š¶ŠøŠ²Š°Š½ŠøŠµ" msgid "Controls how smoothing is applied to UVs" @@ -35854,6 +36018,10 @@ msgid "UVs are smoothed, corners on discontinuous boundary and junctions of 3 or msgstr "UV сŠ³Š»Š°Š¶ŠµŠ½Ń‹, уŠ³Š»Ń‹ Š½Š° ŠæрŠµŃ€Ń‹Š²Šøстых Š³Ń€Š°Š½ŠøцŠ°Ń… Šø стыŠŗŠø 3 ŠøŠ»Šø Š±Š¾Š»ŠµŠµ Š¾Š±Š»Š°ŃŃ‚ŠµŠ¹ Š¾ŃŃ‚Š°ŃŽŃ‚ся Š¾ŃŃ‚рыŠ¼Šø" +msgid "Keep Corners, Junctions, Concave" +msgstr "Š”Š¾Ń…Ń€Š°Š½ŃŃ‚ŃŒ уŠ³Š»Ń‹, стыŠŗŠø, Š²Š¾Š³Š½ŃƒŃ‚Š¾ŃŃ‚Šø" + + msgid "UVs are smoothed, corners on discontinuous boundary, junctions of 3 or more regions and darts and concave corners are kept sharp" msgstr "UV сŠ³Š»Š°Š¶ŠµŠ½Ń‹, уŠ³Š»Ń‹ Š½Š° ŠæрŠµŃ€Ń‹Š²Šøстых Š³Ń€Š°Š½ŠøцŠ°Ń…, стыŠŗŠø 3 ŠøŠ»Šø Š±Š¾Š»ŠµŠµ Š¾Š±Š»Š°ŃŃ‚ŠµŠ¹, Š° тŠ°ŠŗŠ¶Šµ Š²Ń‹ŃŃ‚ŃƒŠæы Šø Š²Š¾Š³Š½ŃƒŃ‚Ń‹Šµ уŠ³Š»Ń‹ Š¾ŃŃ‚Š°ŃŽŃ‚ся Š¾ŃŃ‚рыŠ¼Šø" @@ -39375,26 +39543,10 @@ msgid "Channel Key" msgstr "ŠšŠ»ŃŽŃ‡ ŠŗŠ°Š½Š°Š»Š°" -msgid "RGB color space" -msgstr "Š¦Š²ŠµŃ‚Š¾Š²Š¾Šµ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ RGB" - - -msgid "HSV color space" -msgstr "Š¦Š²ŠµŃ‚Š¾Š²Š¾Šµ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ HSV" - - -msgid "YUV color space" -msgstr "Š¦Š²ŠµŃ‚Š¾Š²Š¾Šµ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "Š¦Š²ŠµŃ‚Š¾Š²Š¾Šµ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ YCbCr" - - msgid "Limit by this channel's value" msgstr "ŠžŠ³Ń€Š°Š½ŠøчŠøть ŠæŠ¾ Š·Š½Š°Ń‡ŠµŠ½Šøю этŠ¾Š³Š¾ ŠŗŠ°Š½Š°Š»Š°" @@ -40213,6 +40365,10 @@ msgid "Distance Key" msgstr "ŠšŠ»ŃŽŃ‡ рŠ°ŃŃŃ‚Š¾ŃŠ½Šøя" +msgid "RGB color space" +msgstr "Š¦Š²ŠµŃ‚Š¾Š²Š¾Šµ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Š¾ RGB" + + msgid "YCbCr suppression" msgstr "ŠŸŠ¾Š“Š°Š²Š»ŠµŠ½ŠøŠµ YCbCr" @@ -41467,42 +41623,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ Š¾Ń‚Š½Š¾ŃŠøтŠµŠ»ŃŒŠ½Ń‹Šµ Š·Š½Š°Ń‡ŠµŠ½Šøя (Š² Š“Š¾Š»ŃŃ… Š¾Ń‚ рŠ°Š·Š¼ŠµŃ€Š° Š²Ń…Š¾Š“Š½Š¾Š³Š¾ ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя) Š“Š»Ń Š¾ŠæрŠµŠ“ŠµŠ»ŠµŠ½Šøя ŠæŠµŃ€ŠµŠ½Š¾ŃŠ°" -msgid "Wrapping" -msgstr "ŠžŠ±Š¾Ń€Š¾Ń‚" - - -msgid "Wrap image on a specific axis" -msgstr "ŠžŠ±Š¾Ń€Š°Ń‡ŠøŠ²Š°Ń‚ŃŒ ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠµ ŠæрŠø Š²Ń‹Ń…Š¾Š“Šµ Š·Š° ŠµŠ³Š¾ Š³Ń€Š°Š½Šøцы ŠæŠ¾ Š·Š°Š“Š°Š½Š½Ń‹Š¼ Š¾ŃŃŠ¼" - - -msgid "No wrapping on X and Y" -msgstr "ŠŠµ Š¾Š±Š¾Ń€Š°Ń‡ŠøŠ²Š°Ń‚ŃŒ ŠæŠ¾ X Šø Y" - - msgid "X Axis" msgstr "ŠžŃŃŒ X" -msgid "Wrap all pixels on the X axis" -msgstr "ŠžŠ±Š¾Ń€Š°Ń‡ŠøŠ²Š°Ń‚ŃŒ Š²ŃŠµ ŠæŠøŠŗсŠµŠ»Šø ŠæŠ¾ Š¾ŃŠø X" - - msgid "Y Axis" msgstr "ŠžŃŃŒ Y" -msgid "Wrap all pixels on the Y axis" -msgstr "ŠžŠ±Š¾Ń€Š°Ń‡ŠøŠ²Š°Ń‚ŃŒ Š²ŃŠµ ŠæŠøŠŗсŠµŠ»Šø ŠæŠ¾ Š¾ŃŠø Y" - - msgid "Both Axes" msgstr "ŠžŠ±Šµ Š¾ŃŠø" -msgid "Wrap all pixels on both axes" -msgstr "ŠžŠ±Š¾Ń€Š°Ń‡ŠøŠ²Š°Ń‚ŃŒ Š²ŃŠµ ŠæŠøŠŗсŠµŠ»Šø ŠæŠ¾ Š¾Š±ŠµŠøŠ¼ Š¾ŃŃŠ¼" - - msgid "Map values to colors with the use of a gradient" msgstr "ŠžŃ‚Š¾Š±Ń€Š°Š·Šøть Š·Š½Š°Ń‡ŠµŠ½Šøя цŠ²ŠµŃ‚Š¾Š² с ŠøсŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Š½ŠøŠµŠ¼ Š³Ń€Š°Š“ŠøŠµŠ½Ń‚Š°" @@ -42520,7 +42652,11 @@ msgstr "ŠŸŃ€ŠµŠ¾Š±Ń€Š°Š·Š¾Š²Š°Ń‚ŃŒ сŠ»Š¾Šø Grease Pencil Š² эŠŗŠ·ŠµŠ¼ŠæŠ»ŃŃ€ msgid "Image Info" -msgstr "Š˜Š½Ń„Š¾Ń€Š¼Š°Ń†Šøя ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя" +msgstr "Š˜Š½Ń„Š¾Ń€Š¼Š°Ń†Šøя Š¾Š± ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠø" + + +msgid "Retrieve information about an image" +msgstr "ŠŸŠ¾Š»ŃƒŃ‡Šøть ŠøŠ½Ń„Š¾Ń€Š¼Š°Ń†Šøю Š¾Š± ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠø" msgctxt "Image" @@ -43184,6 +43320,10 @@ msgid "Calculate normals perpendicular to the Z axis and the curve tangent. If a msgstr "Š Š°ŃŃŃ‡ŠøтŠ°Ń‚ŃŒ Š½Š¾Ń€Š¼Š°Š»Šø, ŠæŠµŃ€ŠæŠµŠ½Š“ŠøŠŗуŠ»ŃŃ€Š½Ń‹Šµ Š¾ŃŠø Z Šø ŠŗŠ°ŃŠ°Ń‚ŠµŠ»ŃŒŠ½Š¾Š¹ ŠŗрŠøŠ²Š¾Š¹. Š•ŃŠ»Šø ряŠ“ тŠ¾Ń‡ŠµŠŗ Š²ŠµŃ€Ń‚ŠøŠŗŠ°Š»ŃŒŠ½Ń‹Š¹, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŃ‚ся Š¾ŃŃŒ X." +msgid "Use the stored custom normal attribute as the final normals" +msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ сŠ¾Ń…Ń€Š°Š½Ń‘Š½Š½Ń‹Š¹ ŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŠµŠ»ŃŒŃŠŗŠøŠ¹ Š°Ń‚Ń€ŠøŠ±ŃƒŃ‚ Š½Š¾Ń€Š¼Š°Š»Šø Š² ŠŗŠ°Ń‡ŠµŃŃ‚Š²Šµ ŠæрŠøŠ¼ŠµŃ€Š° Š“Š»Ń Š¾ŠŗŠ¾Š½Ń‡Š°Ń‚ŠµŠ»ŃŒŠ½Ń‹Ń… Š½Š¾Ń€Š¼Š°Š»ŠµŠ¹" + + msgid "Set Curve Radius" msgstr "Š£ŃŃ‚Š°Š½Š¾Š²Šøть рŠ°Š“Šøус ŠŗрŠøŠ²Š¾Š¹" @@ -49882,6 +50022,10 @@ msgid "Delete the active brush asset" msgstr "Š£Š“Š°Š»Šøть Š°ŠŗтŠøŠ²Š½Ń‹Š¹ Š°ŃŃŠµŃ‚ ŠŗŠøстŠø" +msgid "Edit asset information like the catalog, preview image, tags, or author" +msgstr "Š ŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Ń‚ŃŒ ŠøŠ½Ń„Š¾Ń€Š¼Š°Ń†Šøю Š¾Š± Š°ŃŃŠµŃ‚Šµ, тŠ°Šŗую ŠŗŠ°Šŗ ŠøŠ½Ń„Š¾Ń€Š¼Š°Ń†Šøю Š¾ ŠŗŠ°Ń‚Š°Š»Š¾Š³Šµ, ŠøŠ·Š¾Š±Ń€Š°Š¶ŠµŠ½ŠøŠø ŠæрŠµŠ“Š²Š°Ń€ŠøтŠµŠ»ŃŒŠ½Š¾Š³Š¾ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š°, тŠµŠ³Š°Ń… ŠøŠ»Šø Š°Š²Ń‚Š¾Ń€Šµ" + + msgid "Enable Multi-View" msgstr "Š’ŠŗŠ»ŃŽŃ‡Šøть ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€ Š½ŠµŃŠŗŠ¾Š»ŃŒŠŗŠøх Š²ŠøŠ“Š¾Š²" @@ -52336,6 +52480,15 @@ msgid "Flush edit data from active editing modes" msgstr "Š”ŠæустŠøть Š“Š°Š½Š½Ń‹Šµ рŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Š½Šøя ŠøŠ· Š°ŠŗтŠøŠ²Š½Ń‹Ń… рŠµŠ¶ŠøŠ¼Š¾Š² рŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Š½Šøя" +msgctxt "Operator" +msgid "Remove Preview" +msgstr "Š£Š“Š°Š»Šøть ŠæрŠµŠ“ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€" + + +msgid "Remove the preview of this data-block" +msgstr "Š£Š“Š°Š»Šøть ŠæрŠµŠ“Š²Š°Ń€ŠøтŠµŠ»ŃŒŠ½Ń‹Š¹ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€ этŠ¾Š³Š¾ Š±Š»Š¾ŠŗŠ° Š“Š°Š½Š½Ń‹Ń…" + + msgid "Remove a usage of a data-block, clearing the assignment" msgstr "Š£Š“Š°Š»Šøть ŠøсŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Š½ŠøŠµ Š±Š»Š¾ŠŗŠ° Š“Š°Š½Š½Ń‹Ń…, Š¾Ń‡ŠøстŠøŠ² Š½Š°Š·Š½Š°Ń‡ŠµŠ½ŠøŠµ" @@ -53097,6 +53250,10 @@ msgid "Export armatures using rest position as joints' rest pose. When off, curr msgstr "Š­ŠŗсŠæŠ¾Ń€Ń‚ŠøрŠ¾Š²Š°Ń‚ŃŒ Š°Ń€Š¼Š°Ń‚ŃƒŃ€Ńƒ, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŃ ŠæŠ¾Š»Š¾Š¶ŠµŠ½ŠøŠµ ŠæŠ¾ŠŗŠ¾Ń Š² ŠŗŠ°Ń‡ŠµŃŃ‚Š²Šµ ŠæŠ¾Š·Ń‹ ŠæŠ¾ŠŗŠ¾Ń сустŠ°Š²Š¾Š². Š•ŃŠ»Šø Š²Ń‹ŠŗŠ»ŃŽŃ‡ŠµŠ½Š¾, тŠµŠŗущŠ°Ń ŠæŠ¾Š·Š° ŠŗŠ°Š“рŠ° ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŃ‚ся ŠŗŠ°Šŗ ŠæŠ¾Š·Š° ŠæŠ¾ŠŗŠ¾Ń" +msgid "Sampling Interpolation Fallback" +msgstr "Š˜Š½Ń‚ŠµŃ€ŠæŠ¾Š»ŃŃ†Šøя сэŠ¼ŠæŠ»ŠøрŠ¾Š²Š°Š½Šøя (рŠµŠ·ŠµŃ€Š²Š½Š°Ń)" + + msgid "Skinning" msgstr "Š”ŠŗŠøŠ½Š½ŠøŠ½Š³" @@ -53293,6 +53450,14 @@ msgid "Play" msgstr "Š’Š¾ŃŠæрŠ¾ŠøŠ·Š²ŠµŃŃ‚Šø" +msgid "Print" +msgstr "Š’Ń‹Š²ŠµŃŃ‚Šø" + + +msgid "Print this file" +msgstr "Š Š°ŃŠæŠµŃ‡Š°Ń‚Š°Ń‚ŃŒ этŠ¾Ń‚ фŠ°Š¹Š»" + + msgid "Install" msgstr "Š£ŃŃ‚Š°Š½Š¾Š²Šøть" @@ -59977,6 +60142,18 @@ msgid "Add a collection info node to the current node editor" msgstr "Š”Š¾Š±Š°Š²Šøть Š½Š¾Š“у \"ŠøŠ½Ń„Š¾Ń€Š¼Š°Ń†Šøя Š¾ ŠŗŠ¾Š»Š»ŠµŠŗцŠøŠø\" Š² тŠµŠŗущŠøŠ¹ Š½Š¾Š“Š¾Š²Ń‹Š¹ рŠµŠ“Š°ŠŗтŠ¾Ń€" +msgid "Source color" +msgstr "Š˜ŃŃ…Š¾Š“Š½Ń‹Š¹ цŠ²ŠµŃ‚" + + +msgid "Gamma Corrected" +msgstr "Š” Š³Š°Š¼Š¼Š°-ŠŗŠ¾Ń€Ń€ŠµŠŗцŠøŠµŠ¹" + + +msgid "Has Alpha" +msgstr "Š” Š°Š»ŃŒŃ„Š°-ŠŗŠ°Š½Š°Š»Š¾Š¼" + + msgctxt "Operator" msgid "Add File Node" msgstr "Š”Š¾Š±Š°Š²Šøть Š½Š¾Š“у фŠ°Š¹Š»Š°" @@ -61393,6 +61570,15 @@ msgid "Stroke offset for the Line Art modifier" msgstr "Š”Š¼ŠµŃ‰ŠµŠ½ŠøŠµ штрŠøхŠ¾Š² Š“Š»Ń Š¼Š¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Š° Line Art" +msgid "Create an empty Grease Pencil object" +msgstr "Š”Š¾Š·Š“Š°Ń‚ŃŒ ŠæустŠ¾Š¹ Š¾Š±ŃŠŠµŠŗт Grease Pencil" + + +msgctxt "Operator" +msgid "Stroke" +msgstr "ŠØтрŠøх" + + msgid "Create a simple stroke with basic colors" msgstr "Š”Š¾Š·Š“Š°Ń‚ŃŒ ŠæрŠ¾ŃŃ‚Š¾Š¹ штрŠøх с Š±Š°Š·Š¾Š²Ń‹Š¼Šø цŠ²ŠµŃ‚Š°Š¼Šø" @@ -62111,7 +62297,7 @@ msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½Šøть Š¾ŃŠ½Š¾Š²Ńƒ Š¼ŃƒŠ»ŃŒŃ‚ŠøрŠ°Š·Ń€ŠµŃˆŠµŠ½Šøя" msgid "Modify the base mesh to conform to the displaced mesh" -msgstr "ŠœŠ¾Š“ŠøфŠøцŠøрŠ¾Š²Š°Ń‚ŃŒ Š±Š°Š·Š¾Š²Ń‹Š¹ Š¼ŠµŃˆ Š“Š»Ń сŠ¾Š¾Ń‚Š²ŠµŃ‚стŠ²Šøя сŠ¼ŠµŃ‰ŠµŠ½Šøю Š¼ŠµŃˆŠ°" +msgstr "ŠœŠ¾Š“ŠøфŠøцŠøрŠ¾Š²Š°Ń‚ŃŒ Š±Š°Š·Š¾Š²Ń‹Š¹ Š¼ŠµŃˆ Š“Š»Ń сŠ¾Š¾Ń‚Š²ŠµŃ‚стŠ²Šøя Š²Ń‹ŠæŠ¾Š»Š½ŠµŠ½Š½Š¾Š¼Ńƒ сŠ¼ŠµŃ‰ŠµŠ½Šøю Š¼ŠµŃˆŠ°" msgctxt "Operator" @@ -62185,6 +62371,10 @@ msgid "Unsubdivide" msgstr "Š£Š±Ń€Š°Ń‚ŃŒ ŠæŠ¾Š“рŠ°Š·Š“ŠµŠ»ŠµŠ½ŠøŠµ" +msgid "Rebuild a lower subdivision level of the current base mesh" +msgstr "ŠŸŠµŃ€ŠµŃŃ‚Ń€Š¾Šøть Š½Š° Š±Š¾Š»ŠµŠµ Š½ŠøŠ·ŠŗŠøŠ¹ урŠ¾Š²ŠµŠ½ŃŒ ŠæŠ¾Š“рŠ°Š·Š“ŠµŠ»ŠµŠ½Šøя тŠµŠŗущŠµŠ³Š¾ Š±Š°Š·Š¾Š²Š¾Š³Š¾ Š¼ŠµŃˆŠ°" + + msgctxt "Operator" msgid "Bake Ocean" msgstr "Š—Š°ŠæŠµŃ‡ŃŒ Š¾ŠŗŠµŠ°Š½" @@ -63286,6 +63476,10 @@ msgid "Invert the lock state of all vertex groups" msgstr "ŠžŠ±Ń€Š°Ń‚Šøть сŠ¾ŃŃ‚Š¾ŃŠ½ŠøŠµ Š·Š°Š¼ŠŗŠ° Š“Š»Ń Š²ŃŠµŃ… Š³Ń€ŃƒŠæŠæ Š²ŠµŃ€ŃˆŠøŠ½" +msgid "Apply the action based on vertex group selection" +msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½Šøть Š“ŠµŠ¹ŃŃ‚Š²ŠøŠµ Š½Š° Š¾ŃŠ½Š¾Š²Šµ Š²Ń‹Š±Š¾Ń€Š° Š³Ń€ŃƒŠæŠæы Š²ŠµŃ€ŃˆŠøŠ½" + + msgctxt "Operator" msgid "Mirror Vertex Group" msgstr "ŠžŃ‚Š·ŠµŃ€ŠŗŠ°Š»Šøть Š³Ń€ŃƒŠæŠæу Š²ŠµŃ€ŃˆŠøŠ½" @@ -69341,14 +69535,6 @@ msgid "Drop colors to buttons" msgstr "ŠŸŠµŃ€ŠµŃ‚Š°Ń‰Šøть цŠ²ŠµŃ‚ Š½Š° ŠŗŠ½Š¾ŠæŠŗŠø" -msgid "Source color" -msgstr "Š˜ŃŃ…Š¾Š“Š½Ń‹Š¹ цŠ²ŠµŃ‚" - - -msgid "Gamma Corrected" -msgstr "Š” Š³Š°Š¼Š¼Š°-ŠŗŠ¾Ń€Ń€ŠµŠŗцŠøŠµŠ¹" - - msgid "Drag material to Material slots in Properties" msgstr "ŠŸŠµŃ€ŠµŃ‚Š°Ń‰ŠøтŠµ Š¼Š°Ń‚ŠµŃ€ŠøŠ°Š» Š² сŠ»Š¾Ń‚Ń‹ Š¼Š°Ń‚ŠµŃ€ŠøŠ°Š»Š¾Š² Š² сŠ²Š¾Š¹ŃŃ‚Š²Š°Ń…" @@ -73652,10 +73838,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ тŠ¾Š»ŃŒŠŗŠ¾ Š“ŠµŃ„Š¾Ń€Š¼ŠøрующŠøŠµ Š¼Š¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Ń‹ (Š²Ń€ŠµŠ¼ŠµŠ½Š½Š¾ Š¾Ń‚ŠŗŠ»ŃŽŃ‡Šøть Š²ŃŠµ ŠæŠ¾Ń€Š¾Š¶Š“Š°ŃŽŃ‰ŠøŠµ Š¼Š¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Ń‹, ŠŗрŠ¾Š¼Šµ Š¼Š¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Š° Š¼ŃƒŠ»ŃŒŃ‚ŠøрŠ°Š·Ń€ŠµŃˆŠµŠ½Šøя)" -msgid "UV Sculpting" -msgstr "UV-сŠŗуŠ»ŃŒŠæтŠøŠ½Š³" - - msgid "Properties of vertex and weight paint mode" msgstr "Š”Š²Š¾Š¹ŃŃ‚Š²Š° рŠµŠ¶ŠøŠ¼Š¾Š² рŠøсŠ¾Š²Š°Š½Šøя Š½Š° Š²ŠµŃ€ŃˆŠøŠ½Š°Ń… Šø рŠøсŠ¾Š²Š°Š½Šøя Š²ŠµŃŠ¾Š²" @@ -73721,7 +73903,7 @@ msgstr "ŠŸŃ€Š¾Ń…Š¾Š“ рŠµŠ½Š“ŠµŃ€Š°" msgid "Compositor" -msgstr "ŠšŠ¾Š¼ŠæŠ¾Š·ŠøтŠ¾Ń€" +msgstr "ŠšŠ¾Š¼ŠæŠ¾ĢŠ·ŠøтŠ¾Ń€" msgid "Overlays" @@ -73997,6 +74179,10 @@ msgid "Acceleration Structure" msgstr "Š”труŠŗтурŠ° усŠŗŠ¾Ń€ŠµŠ½Šøя" +msgid "Denoise Nodes" +msgstr "ŠŠ¾Š“ы шуŠ¼Š¾ŠæŠ¾Š“Š°Š²Š»ŠµŠ½Šøя" + + msgid "Final Render" msgstr "Š¤ŠøŠ½Š°Š»ŃŒŠ½Ń‹Š¹ рŠµŠ½Š“ŠµŃ€" @@ -80215,6 +80401,10 @@ msgid "Maximum roughness to use the tracing pipeline for. Higher roughness surfa msgstr "ŠœŠ°ŠŗсŠøŠ¼Š°Š»ŃŒŠ½Š°Ń шŠµŃ€Š¾Ń…Š¾Š²Š°Ń‚Š¾ŃŃ‚ŃŒ, Š“Š»Ń ŠŗŠ¾Ń‚Š¾Ń€Š¾Š¹ Š¼Š¾Š¶Š½Š¾ ŠøсŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ ŠŗŠ¾Š½Š²ŠµŠ¹ŠµŃ€ трŠ°ŃŃŠøрŠ¾Š²ŠŗŠø. ŠŸŠ¾Š²ŠµŃ€Ń…Š½Š¾ŃŃ‚Šø с Š±Š¾Š»ŠµŠµ Š²Ń‹ŃŠ¾ŠŗŠ¾Š¹ шŠµŃ€Š¾Ń…Š¾Š²Š°Ń‚Š¾ŃŃ‚ŃŒŃŽ Š±ŃƒŠ“ут ŠøсŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŃŒ Š±Ń‹ŃŃ‚Ń€ŃƒŃŽ Š°ŠæŠæрŠ¾ŠŗсŠøŠ¼Š°Ń†Šøю Š³Š»Š¾Š±Š°Š»ŃŒŠ½Š¾Š³Š¾ Š¾ŃŠ²ŠµŃ‰ŠµŠ½Šøя (Š“Šž/GI). Š—Š½Š°Ń‡ŠµŠ½ŠøŠµ 1 Š¾Ń‚ŠŗŠ»ŃŽŃ‡Šøт Š±Ń‹ŃŃ‚Ń€Š¾Šµ ŠæрŠøŠ±Š»ŠøŠ¶ŠµŠ½ŠøŠµ Š“Šž." +msgid "Enable noise reduction techniques for raytraced effects" +msgstr "Š’ŠŗŠ»ŃŽŃ‡Šøть Š¼ŠµŃ‚Š¾Š“ы шуŠ¼Š¾ŠæŠ¾Š“Š°Š²Š»ŠµŠ½Šøя Š“Š»Ń эффŠµŠŗтŠ¾Š² трŠ°ŃŃŠøрŠ¾Š²ŠŗŠø Š»ŃƒŃ‡ŠµŠ¹" + + msgid "Region in a subdivided screen area" msgstr "Š ŠµŠ³ŠøŠ¾Š½ Š² рŠ°Š·Š“ŠµŠ»Ń‘Š½Š½Š¾Š¼ ŠæрŠ¾ŃŃ‚Ń€Š°Š½ŃŃ‚Š²Šµ эŠŗрŠ°Š½Š°" @@ -80608,6 +80798,22 @@ msgid "Minimum Y value for the render region" msgstr "ŠœŠøŠ½ŠøŠ¼Š°Š»ŃŒŠ½Š¾Šµ Š·Š½Š°Ń‡ŠµŠ½ŠøŠµ Y Š“Š»Ń Š¾Š±Š»Š°ŃŃ‚Šø рŠµŠ½Š“ŠµŃ€Š°" +msgid "Compositor Final Denoise Quality" +msgstr "Š¤ŠøŠ½Š°Š»ŃŒŠ½Š¾Šµ ŠŗŠ°Ń‡ŠµŃŃ‚Š²Š¾ шуŠ¼Š¾ŠæŠ¾Š“Š°Š²Š°Š½Šøя ŠŗŠ¾Š¼ŠæŠ¾ĢŠ·ŠøтŠ¾Ń€Š°" + + +msgid "The quality used by denoise nodes during the compositing of final renders if the nodes' quality option is set to Follow Scene" +msgstr "ŠšŠ°Ń‡ŠµŃŃ‚Š²Š¾, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Š¾Šµ Š½Š¾Š“Š°Š¼Šø шуŠ¼Š¾ŠæŠ¾Š“Š°Š²Š»ŠµŠ½Šøя Š²Š¾ Š²Ń€ŠµŠ¼Ń ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠøŠ½Š³Š° фŠøŠ½Š°Š»ŃŒŠ½Ń‹Ń… рŠµŠ½Š“ŠµŃ€Š¾Š², ŠµŃŠ»Šø ŠæŠ°Ń€Š°Š¼ŠµŃ‚Ń€ ŠŗŠ°Ń‡ŠµŃŃ‚Š²Š° Š½Š¾Š“ устŠ°Š½Š¾Š²Š»ŠµŠ½ Š½Š° \"ŠŠ°ŃŃ‚Ń€Š¾Š¹ŠŗŠø сцŠµŠ½Ń‹\"" + + +msgid "Compositor Preview Denoise Quality" +msgstr "ŠšŠ°Ń‡ŠµŃŃ‚Š²Š¾ ŠæрŠµŠ“Š²Š°Ń€ŠøтŠµŠ»ŃŒŠ½Š¾Š³Š¾ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š° ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠøŠ½Š³Š° шуŠ¼Š¾ŠæŠ¾Š“Š°Š²Š»ŠµŠ½Šøя" + + +msgid "The quality used by denoise nodes during viewport and interactive compositing if the nodes' quality option is set to Follow Scene" +msgstr "ŠšŠ°Ń‡ŠµŃŃ‚Š²Š¾, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Š¾Šµ Š½Š¾Š“Š°Š¼Šø шуŠ¼Š¾ŠæŠ¾Š“Š°Š²Š»ŠµŠ½Šøя Š²Š¾ Š²Ń€ŠµŠ¼Ń ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠøŠ½Š³Š° Š²ŃŒŃŽŠæŠ¾Ń€Ń‚Š° Šø ŠøŠ½Ń‚ŠµŃ€Š°ŠŗтŠøŠ²Š½Š¾Š³Š¾ ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠøŠ½Š³Š°, ŠµŃŠ»Šø ŠæŠ°Ń€Š°Š¼ŠµŃ‚Ń€ ŠŗŠ°Ń‡ŠµŃŃ‚Š²Š° Š½Š¾Š“ устŠ°Š½Š¾Š²Š»ŠµŠ½ Š½Š° \"ŠŠ°ŃŃ‚Ń€Š¾Š¹ŠŗŠø сцŠµŠ½Ń‹\"" + + msgid "Compositor Device" msgstr "Š£ŃŃ‚Ń€Š¾Š¹ŃŃ‚Š²Š¾ ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠøŠ½Š³Š°" @@ -80617,11 +80823,11 @@ msgstr "GPU" msgid "Compositor Precision" -msgstr "Š¢Š¾Ń‡Š½Š¾ŃŃ‚ŃŒ ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠ¾Ń€Š°" +msgstr "Š¢Š¾Ń‡Š½Š¾ŃŃ‚ŃŒ ŠŗŠ¾Š¼ŠæŠ¾ĢŠ·ŠøтŠ¾Ń€Š°" msgid "The precision of compositor intermediate result" -msgstr "Š¢Š¾Ń‡Š½Š¾ŃŃ‚ŃŒ ŠæрŠ¾Š¼ŠµŠ¶ŃƒŃ‚Š¾Ń‡Š½Š¾Š³Š¾ рŠµŠ·ŃƒŠ»ŃŒŃ‚Š°Ń‚Š° ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠ¾Ń€Š°" +msgstr "Š¢Š¾Ń‡Š½Š¾ŃŃ‚ŃŒ ŠæрŠ¾Š¼ŠµŠ¶ŃƒŃ‚Š¾Ń‡Š½Š¾Š³Š¾ рŠµŠ·ŃƒŠ»ŃŒŃ‚Š°Ń‚Š° ŠŗŠ¾Š¼ŠæŠ¾ĢŠ·ŠøтŠ¾Ń€Š°" msgid "Full precision for final renders, half precision otherwise" @@ -89509,6 +89715,10 @@ msgid "Color of the light's specular highlight" msgstr "Š¦Š²ŠµŃ‚ Š·ŠµŃ€ŠŗŠ°Š»ŃŒŠ½Š¾Š³Š¾ Š¾ŃŠ²ŠµŃ‰ŠµŠ½Šøя (Š±Š»ŠøŠŗŠ°)" +msgid "UV Sculpting" +msgstr "UV-сŠŗуŠ»ŃŒŠæтŠøŠ½Š³" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Š“Ń€ŃƒŠæŠæŠ° Š²ŠµŃ€ŃˆŠøŠ½, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Š°Ń ŠæрŠø Š“ŠµŃ„Š¾Ń€Š¼ŠøрŠ¾Š²Š°Š½ŠøŠø Š°Ń€Š¼Š°Ń‚ŃƒŃ€Ń‹ Šø Š“руŠ³Šøх цŠµŠ»ŠµŠ¹" @@ -90337,7 +90547,7 @@ msgstr "ŠœŠµŃ‚Š¾Š“ Š¾Ń‚Š¾Š±Ń€Š°Š¶ŠµŠ½Šøя/шŠµŠ¹Š“ŠøŠ½Š³Š° Š¾Š±ŃŠŠµŠŗтŠ¾Š² Š² 3 msgid "The compositor is enabled only in camera view" -msgstr "ŠšŠ¾Š¼ŠæŠ¾Š·ŠøтŠ¾Ń€ Š¾Ń†ŠµŠ½ŠøŠ²Š°ŠµŃ‚ся тŠ¾Š»ŃŒŠŗŠ¾ Š² рŠµŠ¶ŠøŠ¼Šµ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š° ŠŗŠ°Š¼ŠµŃ€Ń‹" +msgstr "ŠšŠ¾Š¼ŠæŠ¾ĢŠ·ŠøтŠ¾Ń€ Š¾Ń†ŠµŠ½ŠøŠ²Š°ŠµŃ‚ся тŠ¾Š»ŃŒŠŗŠ¾ Š² рŠµŠ¶ŠøŠ¼Šµ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š° ŠŗŠ°Š¼ŠµŃ€Ń‹" msgid "Use depth of field on viewport using the values from the active camera" @@ -91684,6 +91894,15 @@ msgid "Toggle Clamp Overlap" msgstr "ŠŸŠµŃ€ŠµŠŗŠ»ŃŽŃ‡Šøть Š¾ŃŃ‚Š°Š½Š¾Š²Šŗу ŠæрŠø Š½Š°ŃŠ»Š¾ŠµŠ½ŠøŠø" +msgctxt "WindowManager" +msgid "Toggle Harden Normals" +msgstr "ŠŸŠµŃ€ŠµŠŗŠ»ŃŽŃ‡Šøть уŠŗрŠµŠæŠ»ŠµŠ½ŠøŠµ Š½Š¾Ń€Š¼Š°Š»ŠµŠ¹" + + +msgid "Toggle harden normals flag" +msgstr "ŠŸŠµŃ€ŠµŠŗŠ»ŃŽŃ‡Šøть фŠ»Š°Š¶Š¾Šŗ уŠŗрŠµŠæŠ»ŠµŠ½Šøя Š½Š¾Ń€Š¼Š°Š»ŠµŠ¹" + + msgctxt "WindowManager" msgid "Change Outer Miter" msgstr "Š˜Š·Š¼ŠµŠ½Šøть Š²Š½ŠµŃˆŠ½ŠµŠµ сŠ¾ŠµŠ“ŠøŠ½ŠµŠ½ŠøŠµ" @@ -91884,6 +92103,11 @@ msgid "NLA Editor" msgstr "Š ŠµŠ“Š°ŠŗтŠ¾Ń€ ŠŠ›Š" +msgctxt "WindowManager" +msgid "NLA Tracks" +msgstr "ŠŠ›Š-Š¢Ń€ŠµŠŗŠø" + + msgctxt "WindowManager" msgid "NLA Generic" msgstr "ŠŠ›Š: Š¾Š±Ń‰ŠµŠµ" @@ -92129,6 +92353,11 @@ msgid "Clip Dopesheet Editor" msgstr "Š ŠµŠ“Š°ŠŗтŠ¾Ń€ эŠŗсŠæŠ¾Š·ŠøцŠøŠ¾Š½Š½Š¾Š³Š¾ Š»ŠøстŠ° Š²ŠøŠ“ŠµŠ¾Ń„Ń€Š°Š³Š¼ŠµŠ½Ń‚Š°" +msgctxt "WindowManager" +msgid "Grease Pencil Brush Stroke" +msgstr "ŠØтрŠøх ŠŗŠøстŠø Grease Pencil" + + msgctxt "WindowManager" msgid "Mask Editing" msgstr "Š ŠµŠ“Š°ŠŗтŠøрŠ¾Š²Š°Š½ŠøŠµ Š¼Š°ŃŠ¾Šŗ" @@ -92324,6 +92553,11 @@ msgid "Rotate Normals" msgstr "ŠŸŠ¾Š²ŠµŃ€Š½ŃƒŃ‚ŃŒ Š½Š¾Ń€Š¼Š°Š»Šø" +msgctxt "WindowManager" +msgid "Navigate" +msgstr "ŠŠ°Š²ŠøŠ³Š°Ń†Šøя" + + msgctxt "WindowManager" msgid "Eyedropper Modal Map" msgstr "ŠœŠ¾Š“Š°Š»ŃŒŠ½Š°Ń ŠŗŠ°Ń€Ń‚Š° ŠæŠøŠæŠµŃ‚ŠŗŠø" @@ -93169,6 +93403,10 @@ msgid "Successfully generated: \"{:s}\"" msgstr "Š£ŃŠæŠµŃˆŠ½Š¾ сŠ³ŠµŠ½ŠµŃ€ŠøрŠ¾Š²Š°Š½Š¾: \"{:s}\"" +msgid "Use the plus button to add list entries" +msgstr "Š˜ŃŠæŠ¾Š»ŃŒŠ·ŃƒŠ¹Ń‚Šµ ŠŗŠ½Š¾ŠæŠŗу \"ŠæŠ»ŃŽŃ\", чтŠ¾Š±Ń‹ Š“Š¾Š±Š°Š²Šøть Š² сŠæŠøсŠ¾Šŗ Š·Š°ŠæŠøсŠø" + + msgid "WARNING: preferences are lost when add-on is disabled, be sure to use \"Save Persistent\" if you want to keep your settings!" msgstr "ŠŸŃ€ŠµŠ“уŠæрŠµŠ¶Š“ŠµŠ½ŠøŠµ: Š½Š°ŃŃ‚Ń€Š¾Š¹ŠŗŠø тŠµŃ€ŃŃŽŃ‚ся ŠæрŠø Š¾Ń‚ŠŗŠ»ŃŽŃ‡ŠµŠ½ŠøŠø Š°Š“Š“Š¾Š½Š°, ŠæŠ¾ŃŃ‚Š¾Š¼Ńƒ ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠ¹Ń‚Šµ Š²Š½ŠµŃˆŠ½ŠµŠµ сŠ¾Ń…Ń€Š°Š½ŠµŠ½ŠøŠµ, ŠµŃŠ»Šø хŠ¾Ń‚ŠøтŠµ сŠ¾Ń…Ń€Š°Š½Šøть Š½Š°ŃŃ‚Ń€Š¾Š¹ŠŗŠø!" @@ -95249,6 +95487,14 @@ msgid "Jittered Shadows" msgstr "Š”Ń€Š¾Š¶Š°Š½ŠøŠµ тŠµŠ½ŠµŠ¹" +msgid "Preview Quality" +msgstr "ŠšŠ°Ń‡ŠµŃŃ‚Š²Š¾ ŠæрŠµŠ“ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š°" + + +msgid "Final Quality" +msgstr "Š¤ŠøŠ½Š°Š»ŃŒŠ½Š¾Šµ ŠŗŠ°Ń‡ŠµŃŃ‚Š²Š¾" + + msgid "Shadow Pool" msgstr "Š¢ŠµŠ½ŠµŠ²Š¾Š¹ ŠæуŠ»" @@ -96825,6 +97071,11 @@ msgid "Unmute Deselected Strips" msgstr "Š’ŠŗŠ»ŃŽŃ‡Šøть Š½ŠµŠ²Ń‹Š“ŠµŠ»ŠµŠ½Š½Ń‹Šµ Š“Š¾Ń€Š¾Š¶ŠŗŠø" +msgctxt "Operator" +msgid "All Transforms" +msgstr "Š’сŠµ трŠ°Š½ŃŃ„Š¾Ń€Š¼Š°Ń†ŠøŠø" + + msgctxt "Operator" msgid "Scale To Fit" msgstr "ŠœŠ°ŃŃˆŃ‚Š°Š±ŠøрŠ¾Š²Š°Ń‚ŃŒ Š“Š¾ Š²Š¼ŠµŃ‰ŠµŠ½Šøя" @@ -97083,7 +97334,7 @@ msgstr "" msgid "Miter Outer" -msgstr "Š”Š¾ŠµŠ“ŠøŠ½ŠµŠ½ŠøŠµ Š’Š½ŠµŃˆŠ½ŠµŠµ" +msgstr "Š”Š¾ŠµŠ“ŠøŠ½ŠµŠ½ŠøŠµ - Š’Š½ŠµŃˆŠ½ŠµŠµ" msgid "Intersections" @@ -100888,44 +101139,8 @@ msgid "Sliding-Tool" msgstr "Š˜Š½ŃŃ‚Ń€ŃƒŠ¼ŠµŠ½Ń‚ сŠŗŠ¾Š»ŃŒŠ¶ŠµŠ½Šøя" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "Š¢Š¾Š»ŃŒŠŗŠ¾ Š¾ŃŃŒ [X]/Y/Z (X Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Š¢Š¾Š»ŃŒŠŗŠ¾ Š¾ŃŃŒ X/[Y]/Z (Y Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "Š¢Š¾Š»ŃŒŠŗŠ¾ Š¾ŃŃŒ X/Y/[Z] (Z Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = ŠæрŠøŠ²ŃŠ·ŠŗŠ° ŠæŠ¾ Š¾ŃŠø" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C ā€” тŠ¾Š»ŃŒŠŗŠ¾ ŠæŠ¾Š»Š¾Š¶ŠµŠ½ŠøŠµ (G Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C ā€” тŠ¾Š»ŃŒŠŗŠ¾ Š²Ń€Š°Ń‰ŠµŠ½ŠøŠµ (R Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C ā€” тŠ¾Š»ŃŒŠŗŠ¾ Š¼Š°ŃŃˆŃ‚Š°Š± (S Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C ā€” тŠ¾Š»ŃŒŠŗŠ¾ сŠ²Š¾Š¹ŃŃ‚Š²Š° сŠ³ŠøŠ±Š°ŠµŠ¼Ń‹Ń… ŠŗŠ¾ŃŃ‚ŠµŠ¹ (B Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] ā€” тŠ¾Š»ŃŒŠŗŠ¾ Š½Š°ŃŃ‚Ń€Š°ŠøŠ²Š°ŠµŠ¼Ń‹Šµ сŠ²Š¾Š¹ŃŃ‚Š²Š° (C Š“Š»Ń Š¾Ń‚Š¼ŠµŠ½Ń‹) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C ā€” Š¾Š³Ń€Š°Š½ŠøчŠøть Š½Š°Š±Š¾Ń€ ŠæрŠµŠ¾Š±Ń€Š°Š·Š¾Š²Š°Š½ŠøŠ¹/сŠ²Š¾Š¹ŃŃ‚Š²" +msgid "Cancel" +msgstr "ŠžŃ‚Š¼ŠµŠ½Š°" msgid "No keyframes to slide between" @@ -101260,10 +101475,6 @@ msgid "Baked strokes are cleared" msgstr "Š—Š°ŠæŠµŃ‡Ń‘Š½Š½Ń‹Šµ штрŠøхŠø уŠ“Š°Š»ŃŃŽŃ‚ся" -msgid "Cancel" -msgstr "ŠžŃ‚Š¼ŠµŠ½Š°" - - msgid "Active Vertex Group is locked" msgstr "ŠŠŗтŠøŠ²Š½Š°Ń Š³Ń€ŃƒŠæŠæŠ° Š²ŠµŃ€ŃˆŠøŠ½ Š·Š°Š±Š»Š¾ŠŗŠøрŠ¾Š²Š°Š½Š°" @@ -102223,6 +102434,10 @@ msgid "Outer" msgstr "Š”Š½Š°Ń€ŃƒŠ¶Šø" +msgid "Miter Profile Shape" +msgstr "Š¤Š¾Ń€Š¼Š° ŠæрŠ¾Ń„ŠøŠ»Ń сŠ¾ŠµŠ“ŠøŠ½ŠµŠ½Šøя" + + msgid "Intersection Type" msgstr "Š¢ŠøŠæ ŠæŠµŃ€ŠµŃŠµŃ‡ŠµŠ½Šøя" @@ -103909,14 +104124,6 @@ msgid "UV map or surface attachment is invalid" msgstr "ŠŠµŠ“Š¾ŠæустŠøŠ¼Š°Ń UV-ŠŗŠ°Ń€Ń‚Š° ŠøŠ»Šø ŠæрŠøŠŗрŠµŠæŠ»ŠµŠ½ŠøŠµ Šŗ ŠæŠ¾Š²ŠµŃ€Ń…Š½Š¾ŃŃ‚Šø" -msgid "ON" -msgstr "Š²ŠŗŠ»." - - -msgid "OFF" -msgstr "Š²Ń‹ŠŗŠ»." - - msgid "Active group is locked, aborting" msgstr "ŠŠŗтŠøŠ²Š½Š°Ń Š³Ń€ŃƒŠæŠæŠ° Š·Š°Š±Š»Š¾ŠŗŠøрŠ¾Š²Š°Š½Š°, Š¾ŠæŠµŃ€Š°Ń†Šøя ŠæрŠµŃ€Š²Š°Š½Š°" @@ -104678,18 +104885,6 @@ msgid "XYZ rotations not equally keyed for ID='%s' and RNA-Path='%s'" msgstr "Š’Ń€Š°Ń‰ŠµŠ½Šøя XYZ Š½Šµ Š¾Š“ŠøŠ½Š°ŠŗŠ¾Š²Š¾ Š·Š°ŠæрŠ¾Š³Ń€Š°Š¼Š¼ŠøрŠ¾Š²Š°Š½Ń‹ (ŠŗŠµŠøŠ½Š³) Š“Š»Ń ID='%s' Šø RNA-Path='%s'" -msgid "Decimate Keyframes" -msgstr "Š£ŠæрŠ¾ŃŃ‚Šøть ŠŗŠ»ŃŽŃ‡ŠµŠ²Ń‹Šµ ŠŗŠ°Š“ры" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - Š˜Š·Š¼ŠµŠ½Šøть ŠøŠ·Š³ŠøŠ± ŠŗрŠøŠ²Š¾Š¹" - - -msgid "Shear Keys" -msgstr "ŠšŠ»ŃŽŃ‡Šø сŠ“Š²ŠøŠ³Š°" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "Š£Š¼ŠµŠ½ŃŒŃˆŠøть F-ŠŗрŠøŠ²Ń‹Šµ, уŠŗŠ°Š·Š°Š², Š½Š°ŃŠŗŠ¾Š»ŃŒŠŗŠ¾ Š¾Š½Šø Š¼Š¾Š³ŃƒŃ‚ Š¾Ń‚ŠŗŠ»Š¾Š½ŃŃ‚ŃŒŃŃ Š¾Ń‚ ŠøсхŠ¾Š“Š½Š¾Š¹ ŠŗрŠøŠ²Š¾Š¹" @@ -105031,7 +105226,7 @@ msgstr " ŠŠ°Š·Š²Š°Š½Š½Ń‹Šµ Š°Ń‚Ń€ŠøŠ±ŃƒŃ‚Ń‹" msgid "Render size too large for GPU, use CPU compositor instead" -msgstr "Š Š°Š·Š¼ŠµŃ€ рŠµŠ½Š“ŠµŃ€ŠøŠ½Š³Š° сŠ»ŠøшŠŗŠ¾Š¼ Š²ŠµŠ»ŠøŠŗ Š“Š»Ń GPU, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠ¹Ń‚Šµ Š²Š¼ŠµŃŃ‚Š¾ Š½ŠµŠ³Š¾ CPU-ŠŗŠ¾Š¼ŠæŠ¾Š·ŠøтŠ¾Ń€" +msgstr "Š Š°Š·Š¼ŠµŃ€ рŠµŠ½Š“ŠµŃ€ŠøŠ½Š³Š° сŠ»ŠøшŠŗŠ¾Š¼ Š²ŠµŠ»ŠøŠŗ Š“Š»Ń GPU, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠ¹Ń‚Šµ Š²Š¼ŠµŃŃ‚Š¾ Š½ŠµŠ³Š¾ CPU-ŠŗŠ¾Š¼ŠæŠ¾ĢŠ·ŠøтŠ¾Ń€" msgid "Not inside node group" @@ -106175,10 +106370,18 @@ msgid "Overwrite %s" msgstr "ŠŸŠµŃ€ŠµŠ·Š°ŠæŠøсŠ°Ń‚ŃŒ %s" +msgid "Failed to remove preview: no ID in context (incorrect context?)" +msgstr "ŠŠµ уŠ“Š°Š»Š¾ŃŃŒ уŠ“Š°Š»Šøть ŠæрŠµŠ“Š²Š°Ń€ŠøтŠµŠ»ŃŒŠ½Ń‹Š¹ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€: Š² ŠŗŠ¾Š½Ń‚ŠµŠŗстŠµ Š½ŠµŃ‚ ŠøŠ“ŠµŠ½Ń‚ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Š° (Š½ŠµŠ²ŠµŃ€Š½Ń‹Š¹ ŠŗŠ¾Š½Ń‚ŠµŠŗст?)" + + msgid "Data-block type does not support fake user" msgstr "Š¢ŠøŠæ Š±Š»Š¾ŠŗŠ° Š“Š°Š½Š½Ń‹Ń… Š½Šµ ŠæŠ¾Š“Š“ŠµŃ€Š¶ŠøŠ²Š°ŠµŃ‚ фŠøŠŗтŠøŠ²Š½Ń‹Ń… ŠæŠ¾Š»ŃŒŠ·Š¾Š²Š°Ń‚ŠµŠ»ŠµŠ¹" +msgid "No preview available to remove" +msgstr "ŠŠµŃ‚ Š“Š¾ŃŃ‚ŃƒŠæŠ½Š¾Š³Š¾ ŠæрŠµŠ“Š²Š°Ń€ŠøтŠµŠ»ŃŒŠ½Š¾Š³Š¾ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š° Š“Š»Ń уŠ“Š°Š»ŠµŠ½Šøя" + + msgctxt "Operator" msgid "Circle Select (Extend)" msgstr "Š’Ń‹Š“ŠµŠ»ŠµŠ½ŠøŠµ Š¾ŠŗруŠ¶Š½Š¾ŃŃ‚ŃŒŃŽ (рŠ°ŃŃˆŠøрŠµŠ½ŠøŠµ)" @@ -106425,6 +106628,10 @@ msgid "F-Curve data path empty, invalid argument" msgstr "ŠŸŃƒŃŃ‚Š¾Š¹ Šæуть Šŗ Š“Š°Š½Š½Ń‹Š¼ Š“Š»Ń F-ŠŗрŠøŠ²Š¾Š¹, Š½ŠµŠ²ŠµŃ€Š½Ń‹Š¹ Š°Ń€Š³ŃƒŠ¼ŠµŠ½Ń‚" +msgid "Invalid slot name '%s': name must not be empty." +msgstr "ŠŠµŠ“Š¾ŠæустŠøŠ¼Š¾Šµ ŠøŠ¼Ń сŠ»Š¾Ń‚Š° '%s': ŠøŠ¼Ń Š½Šµ Š“Š¾Š»Š¶Š½Š¾ Š±Ń‹Ń‚ŃŒ ŠæустыŠ¼." + + msgid "F-Curve '%s[%d]' already exists in this channelbag" msgstr "F-ŠŗрŠøŠ²Š°Ń '%s[%d]' уŠ¶Šµ сущŠµŃŃ‚Š²ŃƒŠµŃ‚ Š² этŠ¾Š¼ ŠæŠ°ŠŗŠµŃ‚Šµ ŠŗŠ°Š½Š°Š»Š¾Š²" @@ -106449,6 +106656,10 @@ msgid "Timeline marker '%s' not found in action '%s'" msgstr "ŠœŠ°Ń€ŠŗŠµŃ€ Š²Ń€ŠµŠ¼ŠµŠ½Š½Š¾Š¹ шŠŗŠ°Š»Ń‹ Ā«%sĀ» Š½Šµ Š½Š°Š¹Š“ŠµŠ½ Š“Š»Ń Š“ŠµŠ¹ŃŃ‚Š²Šøя Ā«%sĀ»" +msgid "Action slot display names cannot be empty" +msgstr "ŠžŃ‚Š¾Š±Ń€Š°Š¶Š°ŠµŠ¼Ń‹Šµ ŠøŠ¼ŠµŠ½Š° сŠ»Š¾Ń‚Š¾Š² Š“ŠµŠ¹ŃŃ‚Š²ŠøŠ¹ Š½Šµ Š¼Š¾Š³ŃƒŃ‚ Š±Ń‹Ń‚ŃŒ ŠæустыŠ¼Šø" + + msgid "Keying set path could not be added" msgstr "ŠŸŃƒŃ‚ŃŒ ŠŗŠ»ŃŽŃ‡ŠµŠ²Š¾Š³Š¾ Š½Š°Š±Š¾Ń€Š° Š½Šµ Š¼Š¾Š¶ŠµŃ‚ Š±Ń‹Ń‚ŃŒ Š“Š¾Š±Š°Š²Š»ŠµŠ½" @@ -107115,6 +107326,11 @@ msgid "Tilt CCW" msgstr "ŠŠ°ŠŗŠ»Š¾Š½ ŠæрŠ¾Ń‚ŠøŠ² чŠ°ŃŠ¾Š²Š¾Š¹" +msgctxt "UI_Events_KeyMaps" +msgid "Plus" +msgstr "ŠŸŠ»ŃŽŃ" + + msgctxt "UI_Events_KeyMaps" msgid "View 1" msgstr "Š’ŠøŠ“ 1" @@ -107214,14 +107430,30 @@ msgid "Bone Envelopes" msgstr "ŠžŠ±Ń‘ртŠŗŠø ŠŗŠ¾ŃŃ‚Šø" +msgid "First and Last Copies" +msgstr "ŠŸŠµŃ€Š²ŃƒŃŽ Šø ŠæŠ¾ŃŠ»ŠµŠ“Š½ŃŽŃŽ ŠŗŠ¾ŠæŠøŠø" + + msgid "Offset U" msgstr "Š”Š¼ŠµŃ‰ŠµŠ½ŠøŠµ ŠæŠ¾ U" +msgid "Cap Start" +msgstr "Š­Š»ŠµŠ¼ŠµŠ½Ń‚ - ŠŠ°Ń‡Š°Š»Š¾" + + msgid "The offset is too small, we cannot generate the amount of geometry it would require" msgstr "Š”Š¼ŠµŃ‰ŠµŠ½ŠøŠµ сŠ»ŠøшŠŗŠ¾Š¼ Š¼Š°Š»ŠµŠ½ŃŒŠŗŠ¾Šµ, Š¼Ń‹ Š½Šµ Š¼Š¾Š¶ŠµŠ¼ сŠ¾Š·Š“Š°Ń‚ŃŒ Š½ŠµŠ¾Š±Ń…Š¾Š“ŠøŠ¼Š¾Šµ ŠŗŠ¾Š»ŠøчŠµŃŃ‚Š²Š¾ Š³ŠµŠ¾Š¼ŠµŃ‚Ń€ŠøŠø" +msgid "Miter Shape" +msgstr "Š¤Š¾Ń€Š¼Š° сŠ¾ŠµŠ“ŠøŠ½ŠµŠ½Šøя" + + +msgid "Cannot execute, fast solver and empty collection" +msgstr "ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ Š²Ń‹ŠæŠ¾Š»Š½Šøть, Š±Ń‹ŃŃ‚рыŠ¹ рŠµŃˆŠ°Ń‚ŠµŠ»ŃŒ Šø ŠæустŠ°Ń ŠŗŠ¾Š»Š»ŠµŠŗцŠøя" + + msgid "Cannot execute boolean operation" msgstr "ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ Š²Ń‹ŠæŠ¾Š»Š½Šøть Š»Š¾Š³ŠøчŠµŃŠŗую Š¾ŠæŠµŃ€Š°Ń†Šøю" @@ -107274,6 +107506,10 @@ msgid "Recenter" msgstr "ŠŸŠµŃ€ŠµŃ†ŠµŠ½Ń‚Ń€ŠøрŠ¾Š²Š°Ń‚ŃŒ" +msgid "Vertex group '%s' is not valid, or maybe empty" +msgstr "Š“Ń€ŃƒŠæŠæŠ° Š²ŠµŃ€ŃˆŠøŠ½ '%s' Š½ŠµŠ“Š¾ŠæустŠøŠ¼Š° ŠøŠ»Šø Š¼Š¾Š¶ŠµŃ‚ Š±Ń‹Ń‚ŃŒ ŠæустŠ¾Š¹" + + msgid "LaplacianSmooth" msgstr "Š›Š°ŠæŠ»Š°ŃŠ¾Š²Š¾Š”Š³Š»Š°Š¶ŠøŠ²Š°Š½ŠøŠµ" @@ -107352,8 +107588,8 @@ msgid "Clipping" msgstr "ŠžŃ‚сŠµŃ‡ŠµŠ½ŠøŠµ" -msgid "Level Viewport" -msgstr "Š£Ń€Š¾Š²ŠµŠ½ŃŒ ŠæрŠ¾ŃŠ¼Š¾Ń‚Ń€Š°" +msgid "Levels Viewport" +msgstr "Š£Ń€Š¾Š²Š½Šø - Š’ŃŒŃŽŠæŠ¾Ń€Ń‚" msgid "Unsubdivide" @@ -107361,7 +107597,7 @@ msgstr "Š£Š±Ń€Š°Ń‚ŃŒ ŠæŠ¾Š“рŠ°Š·Š“ŠµŠ»ŠµŠ½ŠøŠµ" msgid "Delete Higher" -msgstr "Š£Š“Š°Š»Šøть урŠ¾Š²ŠµŠ½ŃŒ Š²Ń‹ŃˆŠµ" +msgstr "Š£Š“Š°Š»Šøть урŠ¾Š²Š½Šø Š²Ń‹ŃˆŠµ тŠµŠŗущŠµŠ³Š¾" msgid "Reshape" @@ -107369,7 +107605,7 @@ msgstr "Š˜Š·Š¼ŠµŠ½Šøть фŠ¾Ń€Š¼Ńƒ" msgid "Apply Base" -msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½Šøть Š±Š°Š·Š¾Š²Ń‹Š¹ урŠ¾Š²ŠµŠ½ŃŒ" +msgstr "ŠŸŃ€ŠøŠ¼ŠµŠ½Šøть Šŗ Š±Š°Š·Š¾Š²Š¾Š¼Ńƒ Š¼ŠµŃˆŃƒ" msgid "Rebuild Subdivisions" @@ -107400,6 +107636,10 @@ msgid "Output Attributes" msgstr "Š’Ń‹Š²Š¾Š“ŠøŠ¼Ń‹Šµ Š°Ń‚Ń€ŠøŠ±ŃƒŃ‚Ń‹" +msgid "Manage" +msgstr "Š£ŠæрŠ°Š²Š»ŠµŠ½ŠøŠµ" + + msgid "Cannot load the baked data" msgstr "ŠŠµŠ²Š¾Š·Š¼Š¾Š¶Š½Š¾ Š·Š°Š³Ń€ŃƒŠ·Šøть Š·Š°ŠæŠµŃ‡Ń‘Š½Š½Ń‹Šµ Š“Š°Š½Š½Ń‹Šµ" @@ -107489,10 +107729,6 @@ msgid "Adaptive Subdivision" msgstr "ŠŠ“Š°ŠæтŠøŠ²Š½Š¾Šµ ŠæŠ¾Š“рŠ°Š·Š“ŠµŠ»ŠµŠ½ŠøŠµ" -msgid "Levels Viewport" -msgstr "Š£Ń€Š¾Š²Š½Šø Š²ŃŒŃŽŠæŠ¾Ń€Ń‚Š°" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "ŠžŠŗŠ¾Š½Ń‡Š°Ń‚ŠµŠ»ŃŒŠ½Ń‹Š¹ Š¼Š°ŃŃˆŃ‚Š°Š±: Š ŠµŠ½Š“ŠµŃ€ŠøŠ½Š³ %.2f ŠæŠøŠŗсŠµŠ»ŠµŠ¹, Š’ŃŒŃŽŠæŠ¾Ń€Ń‚ %.2f ŠæŠøŠŗсŠµŠ»ŠµŠ¹" @@ -108140,6 +108376,10 @@ msgid "The distance between the bottom point and the X axis" msgstr "Š Š°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ Š¼ŠµŠ¶Š“у Š½ŠøŠ¶Š½ŠµŠ¹ тŠ¾Ń‡ŠŗŠ¾Š¹ Šø Š¾ŃŃŒŃŽ X" +msgid "The distance between the top point and the X axis" +msgstr "Š Š°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ Š¼ŠµŠ¶Š“у Š²ŠµŃ€Ń…Š½ŠµŠ¹ тŠ¾Ń‡ŠŗŠ¾Š¹ Šø Š¾ŃŃŒŃŽ X" + + msgid "Start Radius" msgstr "Š Š°Š“Šøус Š½Š°Ń‡Š°Š»Š°" @@ -108458,10 +108698,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Š—Š½Š°Ń‡ŠµŠ½Šøя, ŠæрŠµŠ²Ń‹ŃˆŠ°ŃŽŃ‰ŠøŠµ ŠæŠ¾Ń€Š¾Š³Š¾Š²Š¾Šµ Š·Š½Š°Ń‡ŠµŠ½ŠøŠµ, Š½Š°Ń…Š¾Š“ятся Š²Š½ŃƒŃ‚Ń€Šø сŠ³ŠµŠ½ŠµŃ€ŠøрŠ¾Š²Š°Š½Š½Š¾Š³Š¾ Š¼ŠµŃˆŠ°" -msgid "Has Alpha" -msgstr "Š” Š°Š»ŃŒŃ„Š°-ŠŗŠ°Š½Š°Š»Š¾Š¼" - - msgid "Frame Count" msgstr "Š§ŠøсŠ»Š¾ ŠŗŠ°Š“рŠ¾Š²" @@ -109041,6 +109277,10 @@ msgid "Splits the elements of the input geometry into groups which can be sample msgstr "Š Š°Š·Š“ŠµŠ»ŃŠµŃ‚ эŠ»ŠµŠ¼ŠµŠ½Ń‚Ń‹ Š²Ń…Š¾Š“Š½Š¾Š¹ Š³ŠµŠ¾Š¼ŠµŃ‚Ń€ŠøŠø Š½Š° Š³Ń€ŃƒŠæŠæы, ŠŗŠ¾Ń‚Š¾Ń€Ń‹Šµ Š¼Š¾Š¶Š½Š¾ сэŠ¼ŠæŠ»ŠøрŠ¾Š²Š°Ń‚ŃŒ ŠæŠ¾ Š¾Ń‚Š“ŠµŠ»ŃŒŠ½Š¾ŃŃ‚Šø" +msgid "Whether the sampling was successful. It can fail when the sampled group is empty" +msgstr "Š‘Ń‹Š» Š»Šø сэŠ¼ŠæŠ»ŠøŠ½Š³ усŠæŠµŃˆŠ½Ń‹Š¼. ŠžŠ½ Š¼Š¾Š¶ŠµŃ‚ Š½Šµ срŠ°Š±Š¾Ń‚Š°Ń‚ŃŒ, ŠµŃŠ»Šø Š²Ń‹Š±Ń€Š°Š½Š½Š°Ń Š³Ń€ŃƒŠæŠæŠ° ŠæустŠ°" + + msgid "Source Position" msgstr "Š˜ŃŃ…Š¾Š“Š½Š¾Šµ ŠæŠ¾Š»Š¾Š¶ŠµŠ½ŠøŠµ" @@ -110092,6 +110332,10 @@ msgid "Wave Effect" msgstr "Š­Ń„Ń„ŠµŠŗт Š²Š¾Š»Š½" +msgid "window_managers" +msgstr "Š¾ŠŗŠ¾Š½Š½Ń‹Šµ_Š¼ŠµŠ½ŠµŠ“Š¶ŠµŃ€Ń‹" + + msgid "Dragging {} files" msgstr "ŠŸŠµŃ€ŠµŃ‚Š°ŃŠŗŠøŠ²Š°Š½ŠøŠµ {} фŠ°Š¹Š»Š¾Š²" @@ -110280,6 +110524,14 @@ msgid "drag-" msgstr "Š·Š°Ń…Š²Š°Ń‚-" +msgid "ON" +msgstr "Š²ŠŗŠ»." + + +msgid "OFF" +msgstr "Š²Ń‹ŠŗŠ»." + + msgid "Set Debug Value" msgstr "Š£ŃŃ‚Š°Š½Š¾Š²Šøть урŠ¾Š²ŠµŠ½ŃŒ Š¾Ń‚Š»Š°Š“ŠŗŠø" @@ -111860,6 +112112,14 @@ msgid "Surface geometry used for shrinkwrap" msgstr "Š“ŠµŠ¾Š¼ŠµŃ‚Ń€Šøя ŠæŠ¾Š²ŠµŃ€Ń…Š½Š¾ŃŃ‚Šø, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Š°Ń Š“Š»Ń ŠæрŠøŠŗŠ»ŠµŠøŠ²Š°Š½Šøя (Š¾Š±Ń‘ртыŠ²Š°Š½Šøя)" +msgid "Surface object used for shrinkwrap" +msgstr "ŠŸŠ¾Š²ŠµŃ€Ń…Š½Š¾ŃŃ‚ŃŒ, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Š°Ń Š“Š»Ń ŠæрŠøŠŗŠ»ŠµŠøŠ²Š°Š½Šøя" + + +msgid "Distance from the surface used for shrinkwrap" +msgstr "Š Š°ŃŃŃ‚Š¾ŃŠ½ŠøŠµ Š¾Ń‚ ŠæŠ¾Š²ŠµŃ€Ń…Š½Š¾ŃŃ‚Šø, ŠøсŠæŠ¾Š»ŃŒŠ·ŃƒŠµŠ¼Š¾Š¹ Š“Š»Ń сŠŗŠ»ŠµŠøŠ²Š°Š½Šøя" + + msgid "Smoothing Steps" msgstr "Š”туŠæŠµŠ½Šø сŠ³Š»Š°Š¶ŠøŠ²Š°Š½Šøя" diff --git a/locale/po/sk.po b/locale/po/sk.po index 1fe09a36ea0d..4b29d793a77c 100644 --- a/locale/po/sk.po +++ b/locale/po/sk.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-21 08:24+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-01-29 07:32+0000\n" "Last-Translator: Jozef Matta \n" "Language-Team: Slovak \n" "Language: sk\n" @@ -439,6 +439,11 @@ msgid "Expanded state of the slot" msgstr "RozÅ”Ć­renĆ½ stav zĆ”suvky" +msgctxt "ID" +msgid "Target ID Type" +msgstr "Typ ID cieľa" + + msgctxt "ID" msgid "Action" msgstr "Akcia" @@ -25966,10 +25971,6 @@ msgid "Display the object's name" msgstr "ZobrazĆ­ nĆ”zov objektu" -msgid "Shape Key Lock" -msgstr "ZamknĆŗÅ„ kľĆŗčovĆ½ tvar" - - msgid "Only show the active shape key at full value" msgstr "ZobrazĆ­ len plnĆŗ hodnotu aktĆ­vneho kľĆŗčovĆ©ho tvaru" @@ -34304,6 +34305,14 @@ msgid "Editor menu containing buttons" msgstr "Ponuka editora obsahujĆŗca tlačidlĆ”" +msgid "Metaball" +msgstr "Meta guľa" + + +msgid "Show/Hide" +msgstr "UkĆ”zaÅ„/skryÅ„" + + msgid "Names" msgstr "NĆ”zvy" @@ -34312,10 +34321,6 @@ msgid "Bone Roll" msgstr "KĆ½vanie kosti" -msgid "Show/Hide" -msgstr "UkĆ”zaÅ„/skryÅ„" - - msgid "Clean Up" msgstr "PrečistiÅ„" @@ -34404,10 +34409,6 @@ msgid "Assign Material" msgstr "PriradiÅ„ materiĆ”l" -msgid "Metaball" -msgstr "Meta guľa" - - msgid "Light" msgstr "Svetlo" @@ -44489,30 +44490,14 @@ msgid "Create matte based on differences in color channels" msgstr "VytvorĆ­ matovanie na zĆ”klade rozdielov vo farebnĆ½ch kanĆ”loch" -msgid "RGB color space" -msgstr "FarebnĆ½ priestor RGB" - - -msgid "HSV color space" -msgstr "Priestor HSV farby" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "Priestor YUV farby" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "Priestor YCbCr farby" - - msgctxt "Color" msgid "Limit Channel" msgstr "Limit kanĆ”la" @@ -45036,26 +45021,6 @@ msgid "Mode of color processing" msgstr "Režim spracovania farieb" -msgid "Use RGB color processing" -msgstr "PoužiÅ„ spracovanie farieb RGB" - - -msgid "Use HSV color processing" -msgstr "PoužiÅ„ spracovanie farieb HSV" - - -msgid "Use HSL color processing" -msgstr "PoužiÅ„ spracovania farieb HSL" - - -msgid "Use YCbCr color processing" -msgstr "PoužiÅ„ spracovanie farieb YCbCr" - - -msgid "Use YUV color processing" -msgstr "PoužiÅ„ spracovanie farieb YUV" - - msgid "Color space used for YCbCrA processing" msgstr "FarebnĆ½ priestor použitĆ½ na spracovanie YCbCrA" @@ -45513,6 +45478,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "VytvorĆ­ matovanie na zĆ”klade 3D vzdialenosti medzi farbami" +msgid "RGB color space" +msgstr "FarebnĆ½ priestor RGB" + + msgid "YCbCr suppression" msgstr "PotlĆ”Äanie YCbCr" @@ -46979,42 +46948,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Použije relatĆ­vnu hodnotu (zlomok veľkosti vstupnĆ©ho obrĆ”zka) na definovanie premiestnenia" -msgid "Wrapping" -msgstr "PokrĆ½vanie" - - -msgid "Wrap image on a specific axis" -msgstr "Pokryje obrĆ”zok na konkrĆ©tne osi" - - -msgid "No wrapping on X and Y" -msgstr "Bez pokrytia na X a Y" - - msgid "X Axis" msgstr "Os X" -msgid "Wrap all pixels on the X axis" -msgstr "Pokryje vÅ”etky pixely na osi X" - - msgid "Y Axis" msgstr "Os Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Pokryje vÅ”etky pixely na osi Y" - - msgid "Both Axes" msgstr "Obe osi" -msgid "Wrap all pixels on both axes" -msgstr "Pokryje vÅ”etky pixely na oboch osiach" - - msgid "Map values to colors with the use of a gradient" msgstr "Mapuje hodnoty na farby použitĆ­m stupňovitosti" @@ -48673,6 +48618,14 @@ msgid "Retrieve a unit length vector indicating the direction pointing away from msgstr "ZĆ­skava vektor jednotkovej dÄŗžky udĆ”vajĆŗceho smer smerujĆŗci od geometrie pri každom prvku" +msgid "Flat Corner Normals" +msgstr "NormĆ”ly plochĆ©ho rohu" + + +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "Vždy pouÅ¾Ć­vajte normĆ”ly plĆ“Å”ky pre domĆ©nu rohu plĆ“Å”ky, čo zodpovedĆ” starĆ©mu sprĆ”vaniu uzla" + + msgid "Output a single object" msgstr "VĆ½stup jednĆ©ho objektu" @@ -62563,6 +62516,22 @@ msgid "Export armatures using rest position as joints' rest pose. When off, curr msgstr "Exportuje armatĆŗry s použitĆ­m kľudovej polohy ako kľudovej polohy kÄŗbov. Ak je vypnutĆ©, ako kľudovĆ” poloha sa použije aktuĆ”lna poloha snĆ­mky" +msgid "Sampling Interpolation Fallback" +msgstr "SpƤtnĆ” vƤzba interpolĆ”cie snĆ­mania" + + +msgid "Interpolation fallback for sampled animations, when the property is not keyed" +msgstr "SpƤtnĆ” vƤzba interpolĆ”cie pre snĆ­manĆ© animĆ”cie, keď vlastnosÅ„ nie je kľĆŗčovanĆ”" + + +msgid "Linear interpolation between keyframes" +msgstr "LineĆ”rna interpolĆ”cia medzi kľĆŗčovĆ½mi snĆ­mkami" + + +msgid "No interpolation between keyframes" +msgstr "Bez interpolĆ”cie medzi kľĆŗčovĆ½mi snĆ­mkami" + + msgid "Shared Accessors" msgstr "ZdieľanĆ© prĆ­stupy" @@ -71619,6 +71588,22 @@ msgid "Add a collection info node to the current node editor" msgstr "PridĆ” uzol informĆ”cie kolekcie do aktuĆ”lneho editora uzlov" +msgid "Source color" +msgstr "ZdrojovĆ” farba" + + +msgid "Gamma Corrected" +msgstr "Gama korekcia" + + +msgid "The source color is gamma corrected" +msgstr "ZdrojovĆ” farba je s gama korekciou" + + +msgid "Has Alpha" +msgstr "MĆ” alfa" + + msgctxt "Operator" msgid "Add File Node" msgstr "PridaÅ„ uzol sĆŗboru" @@ -84451,18 +84436,6 @@ msgid "Drop colors to buttons" msgstr "Nanesie farby na tlačidlĆ”" -msgid "Source color" -msgstr "ZdrojovĆ” farba" - - -msgid "Gamma Corrected" -msgstr "Gama korekcia" - - -msgid "The source color is gamma corrected" -msgstr "ZdrojovĆ” farba je s gama korekciou" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "PustiÅ„ materiĆ”l v zĆ”suvkĆ”ch materiĆ”lu" @@ -87159,6 +87132,11 @@ msgid "Lattices" msgstr "DrĆ“tenĆ© mriežky" +msgctxt "ID" +msgid "Lights" +msgstr "SvetlĆ”" + + msgctxt "ID" msgid "Light Probes" msgstr "SnĆ­mače svetla" @@ -89177,10 +89155,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "Zadanie vlastnej hodnoty metrov scĆ©ny na jednotku" -msgid "Convert World Material" -msgstr "KonvertovaÅ„ materiĆ”l sveta" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "Konvertuje materiĆ”l sveta na svetlo kupoly USD. V sĆŗčasnosti funguje pre jednoduchĆ© materiĆ”ly pozostĆ”vajĆŗce z textĆŗry prostredia pripojenej k tieňovaču pozadia s voliteľnĆ½m vektorovĆ½m nĆ”sobenĆ­m farby textĆŗry" @@ -89534,10 +89508,6 @@ msgid "Add all imported objects to a new collection" msgstr "PridĆ” vÅ”etky importovanĆ© objekty do novej kolekcie" -msgid "Create World Material" -msgstr "VytvoriÅ„ materiĆ”l sveta" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "Konvertuje prvĆ© objavenĆ© svetlo kupoly USD na tieňovač pozadia sveta" @@ -90641,19 +90611,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Použije iba modifikĆ”tory deformĆ”cie (dočasnĆ© vypnutie vÅ”etkĆ½ch modifikĆ”torov konÅ”trukcie okrem viacnĆ”sobnĆ©ho rozkladu)" -msgid "UV Sculpting" -msgstr "UV tvarovanie" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "Predvoľba krivky pevnosti" - - -msgid "Strength Curve" -msgstr "Krivka pevnosti" - - msgid "Properties of vertex and weight paint mode" msgstr "Vlastnosti vrcholu a režim maľovania vĆ”hy" @@ -102429,10 +102386,18 @@ msgid "Retiming Key Selection Status" msgstr "Stav vĆ½beru časovacieho kľĆŗča" +msgid "(Deprecated: Replaced by '.strips') Top-level strips only" +msgstr "(ZastaranĆ©: nahradenĆ© prĆ­ponou '.strips') Len pĆ”sy najvyŔŔej Ćŗrovne" + + msgid "All Strips" msgstr "VÅ”etky pĆ”sy" +msgid "(Deprecated: Replaced by '.strips_all') All strips, recursively including those inside metastrips" +msgstr "(zastaranĆ©: nahradenĆ© prĆ­kazom '.strips_all') VÅ”etky pĆ”sy, rekurzĆ­vne vrĆ”tane pĆ”sov vnĆŗtri metapĆ”sov" + + msgid "Show Missing Media" msgstr "ZobraziÅ„ chĆ½bajĆŗce mĆ©diĆ”" @@ -107173,6 +107138,10 @@ msgid "Sequence strip to group other strips as a single sequence strip" msgstr "SekvenčnĆ½ pĆ”s na zoskupenie inĆ½ch pĆ”sov ako jednoduchĆ© sekvenčnĆ© pĆ”sy" +msgid "(Deprecated: Replaced by '.strips') Strips nested in meta strip" +msgstr "(ZastaranĆ©: nahradenĆ© prĆ­ponou '.strips') PĆ”sy vnorenĆ© do meta pĆ”su" + + msgid "Strips nested in meta strip" msgstr "PĆ”sy vnorenĆ© do meta-pĆ”su" @@ -111349,6 +111318,19 @@ msgid "Enable this light in solid shading mode" msgstr "PovolĆ­ toto svetlo v režime plnĆ©ho tieňovania" +msgid "UV Sculpting" +msgstr "UV tvarovanie" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "Predvoľba krivky pevnosti" + + +msgid "Strength Curve" +msgstr "Krivka pevnosti" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Skupina vrcholov, pouÅ¾Ć­vanĆ” na deformĆ”ciu a inĆ© Ćŗčely" @@ -117107,6 +117089,10 @@ msgid "Work Relative to some Object" msgstr "PrĆ”ca vo vzÅ„ahu k nejakĆ©mu objektu" +msgid "No 'Relative To' object found, set one explicitly or make sure there is an active object" +msgstr "NenaÅ”iel sa žiadny objekt ' RelatĆ­vne na', nastavte ho explicitne alebo sa uistite, že existuje aktĆ­vny objekt" + + msgid "Select an object or pose bone" msgstr "Vyberie objekt alebo pĆ³zu kosti" @@ -117724,6 +117710,10 @@ msgid "No glTF Animation" msgstr "Bez glTF animĆ”cie" +msgid "Please disable/enable 'action filter' to refresh the list" +msgstr "ZakĆ”Å¾te/povoľte 'filter akciĆ­' na obnovenie zoznamu" + + msgid "No Actions in .blend file" msgstr "Žiadne akcie v .blend sĆŗbore" @@ -121887,6 +121877,10 @@ msgid "Bake All Light Probe Volumes" msgstr "Zapečie vÅ”etky objemy snĆ­mačov svetla" +msgid "Compositing Node Tree" +msgstr "Strom kompozičnĆ½ch uzlov" + + msgctxt "Operator" msgid "Export to File" msgstr "ExportovaÅ„ do sĆŗboru" @@ -127913,6 +127907,10 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "Chyba prekreslenia (%s) nemožno uložiÅ„: '%s'" +msgid "Failed to create stereo image buffer" +msgstr "Nepodarilo sa vytvoriÅ„ zĆ”sobnĆ­k stereo obrĆ”zku" + + msgid "ipos" msgstr "hroty" @@ -129616,6 +129614,18 @@ msgid "Cannot pose libdata" msgstr "Nemožno Ćŗdaje knižnice pĆ³zy" +msgid "Show Original Pose" +msgstr "ZobraziÅ„ pĆ“vodnĆŗ pĆ³zu" + + +msgid "Show Blended Pose" +msgstr "ZobraziÅ„ prelĆ­nanĆŗ pĆ³zu" + + +msgid "Flip Pose" +msgstr "PreklopiÅ„ pĆ³zu" + + msgid "Pose lib is only for armatures in pose mode" msgstr "Knižnica pĆ³zy je len pre armatĆŗry v režime pĆ³zy" @@ -129652,48 +129662,8 @@ msgid "Sliding-Tool" msgstr "NĆ”stroje posĆŗvania" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "Iba os [X]/Y/Z (X na zmazanie)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Iba os X/[Y]/Z (Y n zmazanie)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "Iba os X/Y/[Z] (Z na zmazanie)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = vynĆŗtenie osi" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "Iba umiestnenie [U]/R/M/K/V (U na zmazanie) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "Iba rotĆ”cia U/[R]/M/K/V (R na zmazanie) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "Iba mierka U/R/[M]/K/V (M na zmazanie) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "Iba vlastnosti ohybu kostĆ­ U/R/M/[K]/V (K na zmazanie) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "Iba uÅ¾Ć­vateľskĆ© vlastnosti U/R/M/K/]V (V na zmazanie) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "Limit transformĆ”cie/nastavenie vlastnostĆ­ G/R/M/K/V" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - PrepĆ­naÅ„ viditeľnosti kostĆ­" +msgid "Cancel" +msgstr "ZruÅ”iÅ„" msgid "No keyframes to slide between" @@ -130117,6 +130087,10 @@ msgid "Node group's first output must be a geometry" msgstr "PrvĆ½m vĆ½stupom skupiny uzlov musĆ­ byÅ„ geometria" +msgid "Place Next Stroke Vertex" +msgstr "UmiestniÅ„ ďalÅ”Ć­ vrchol Å„ahu" + + msgid "Erase" msgstr "ZmazaÅ„" @@ -130277,10 +130251,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "Žiadny aktĆ­vny objekt, alebo aktĆ­vny objekt nie je objektom Grease Pencil" -msgid "Cancel" -msgstr "ZruÅ”iÅ„" - - msgid "Panning" msgstr "PanoramatickĆ½ posuv" @@ -131743,6 +131713,10 @@ msgid "Icosphere" msgstr "Mnohosten" +msgid "Profile Shape" +msgstr "Tvar profilu" + + msgid "Harden" msgstr "TvrdĆ”" @@ -131751,6 +131725,10 @@ msgid "Outer" msgstr "VonkajÅ”Ć­" +msgid "Miter Profile Shape" +msgstr "Sklon tvaru profilu" + + msgid "Intersection Type" msgstr "Typ priesečnĆ­ka" @@ -132448,6 +132426,18 @@ msgid "No UV layer named \"%s\" found in the object \"%s\"" msgstr "V objekte \"%s\" sa nenaÅ”la žiadna UV vrstva s nĆ”zvom \"%s\"" +msgid "Cage object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "Objekt klietky \"%s\" sa nenaÅ”iel v hodnotenej scĆ©ne, mĆ“Å¾e byÅ„ skrytĆ½" + + +msgid "Object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "Objekt \"%s\" sa nenaÅ”iel v hodnotenej scĆ©ne, mĆ“Å¾e byÅ„ skrytĆ½" + + +msgid "Failed to access mesh from object \"%s\", ensure it's visible while rendering" +msgstr "Zlyhal prĆ­stup k sieti z objektu \"%s\", zaistite, aby bola viditeľnĆ” počas prekresľovania" + + msgid "Error baking from object \"%s\"" msgstr "Chyba zapečenia objektu \"%s\"" @@ -134158,18 +134148,6 @@ msgid "UV map or surface attachment is invalid" msgstr "Pripojenie UV mapy alebo povrchu je neplatnĆ©" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "VĆ½plň: ESC/PTM zruÅ”iÅ„, ĽTM vyplniÅ„, STM nastaviÅ„ rozÅ”Ć­renie, S: prepĆ­nanie režimu, D: kolĆ­zia Å„ahu | Režim: {}, KolĆ­zia {}, DÄŗžka: {:.3f}" - - -msgid "ON" -msgstr "Zap" - - -msgid "OFF" -msgstr "VYP" - - msgid "No Grease Pencil frame to draw weight on" msgstr "Žiadna snĆ­mka Grease Pencil pre maľovanie vĆ”hy" @@ -134465,6 +134443,10 @@ msgid "Action must have at least one keyframe or F-Modifier" msgstr "Akcia musĆ­ maÅ„ aspoň jednu kľĆŗčovĆŗ snĆ­mku alebo modifikĆ”tor funkcie" +msgid "Action+Slot has already been stashed" +msgstr "Akcia+zĆ”suvka už bola uschovanĆ”" + + msgid "Could not find current NLA Track" msgstr "Nepodarilo sa nĆ”jsÅ„ aktuĆ”lnu stopu NLA" @@ -134701,6 +134683,10 @@ msgid "Cannot read '%s': %s" msgstr "Nemožno načƭtaÅ„ '%s': %s" +msgid "Place Marker" +msgstr "Označovač miesta" + + msgid "Delete selected tracks?" msgstr "OdstrĆ”niÅ„ vybranĆ© stopy?" @@ -135258,42 +135244,6 @@ msgid "Deleted %u drivers" msgstr "OdstrĆ”nenĆ© %u ovlĆ”dače" -msgid "Decimate Keyframes" -msgstr "ZdecimovaÅ„ kľĆŗčovĆ© snĆ­mky" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - UpraviÅ„ ostrosÅ„" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - UpraviÅ„ ohyb krivky" - - -msgid "Ease Keys" -msgstr "ĽahkĆ© kľĆŗče" - - -msgid "Shear Keys" -msgstr "Strih kľĆŗčov" - - -msgid "D - Toggle Direction" -msgstr "D - PrepĆ­nač smeru" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Mierka z pravĆ©ho konca" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Mierka z ľavĆ©ho konca" - - -msgid "Scale from Neighbor Keys" -msgstr "Mierka od susednĆ½ch kľĆŗčov" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "ZnĆ­Å¾te počet F-kriviek určenĆ­m, ako veľmi sa mĆ“Å¾u odchĆ½liÅ„ od pĆ“vodnej krivky" @@ -137907,6 +137857,14 @@ msgid " | Ctrl - Hold for increments" msgstr " | Ctrl - PridržaÅ„ pre prĆ­rastky" +msgid "Overshoot" +msgstr "Presah" + + +msgid "Overshoot Disabled" +msgstr "ZakĆ”zanĆ½ presah" + + msgid "Unpack File" msgstr "RozbaliÅ„ sĆŗbor" @@ -138000,6 +137958,14 @@ msgid "Pinned vertices can be selected in Vertex Mode only" msgstr "PripnutĆ© vrcholy možno vybraÅ„ len v režime vrcholov" +msgid "Switch Island" +msgstr "PrepĆ­nač ostrovov" + + +msgid "Midpoints" +msgstr "StrednĆ© body" + + msgid "Could not initialize stitching on any selected object" msgstr "Nepodarilo sa inicializovaÅ„ zoÅ”itie na žiadnom vybranom objekte" @@ -140864,8 +140830,8 @@ msgid "Clipping" msgstr "OrezĆ”vanie" -msgid "Level Viewport" -msgstr "ƚroveň zĆ”beru" +msgid "Levels Viewport" +msgstr "ƚrovne zĆ”beru" msgid "Unsubdivide" @@ -141002,6 +140968,14 @@ msgid "Built without Remesh modifier" msgstr "ZostavenĆ© bez modifikĆ”tora PretvoriÅ„ povrchovĆŗ sieÅ„" +msgid "Zero voxel size cannot be solved" +msgstr "NulovĆ” veľkosÅ„ voxelu sa nedĆ” vyrieÅ”iÅ„" + + +msgid "Zero scale cannot be solved" +msgstr "NulovĆ” mierka sa nedĆ” vyrieÅ”iÅ„" + + msgid "Axis Object" msgstr "Objekt osi" @@ -141083,10 +141057,6 @@ msgid "Adaptive Subdivision" msgstr "AdaptĆ­vne delenie" -msgid "Levels Viewport" -msgstr "ƚrovne zĆ”beru" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "FinĆ”lna mierka: Prekreslenie %.2f px, ZĆ”ber %.2f px" @@ -141358,6 +141328,14 @@ msgid "Quality:" msgstr "Kvalita:" +msgid "Disabled. Built without OpenImageDenoise" +msgstr "ZakĆ”zanĆ©. ZostavenĆ© bez OpenImageDenoise" + + +msgid "Disabled. Platform not supported" +msgstr "ZakĆ”zanĆ©. Platforma nie je podporovanĆ”" + + msgid "Image 1" msgstr "ObrĆ”zok 1" @@ -141486,6 +141464,10 @@ msgid "ID value" msgstr "Hodnota ID" +msgid "Render passes in the Viewport compositor are only supported in EEVEE" +msgstr "Prechody prekresľovania v kompozĆ­tore zĆ”beru sĆŗ podporovanĆ© len v EEVEE" + + msgid "Viewport compositor setup not fully supported" msgstr "Nastavenie kompozĆ­tora zĆ”beru nie je plne podporovanĆ©" @@ -141526,10 +141508,6 @@ msgid "Offset Y" msgstr "Posuv Y" -msgid "Undistortion" -msgstr "Bez skreslenia" - - msgid "Dot" msgstr "Bodka" @@ -142573,10 +142551,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Hodnoty vĆ¤ÄÅ”ie ako prahovĆ” hodnota sĆŗ vnĆŗtri vygenerovanej povrchovej siete" -msgid "Has Alpha" -msgstr "MĆ” alfa" - - msgid "Frame Count" msgstr "Počet snĆ­mok" @@ -145398,6 +145372,14 @@ msgid "drag-" msgstr "Å„ahaÅ„-" +msgid "ON" +msgstr "Zap" + + +msgid "OFF" +msgstr "VYP" + + msgid "Set Debug Value" msgstr "NastaviÅ„ hodnotu ladenia" diff --git a/locale/po/sl.po b/locale/po/sl.po index 801fa6e6bc1d..cc17ff5cea8d 100644 --- a/locale/po/sl.po +++ b/locale/po/sl.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-26 00:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-01-30 15:41+0000\n" "Last-Translator: Gorazd Gorup \n" "Language-Team: Slovenian \n" "Language: sl\n" @@ -11799,10 +11799,18 @@ msgid "Location of tail end of the bone" msgstr "Lega repa kosti" +msgid "All effector's weight" +msgstr "Vse vplivnikove uteži" + + msgid "Use For Growing Hair" msgstr "Uporabi za rast dlake" +msgid "Use force fields when growing hair" +msgstr "Pri razraŔčanju dlak uporabi polja sil" + + msgid "Boid" msgstr "Član jate" @@ -11811,10 +11819,18 @@ msgid "Charge" msgstr "Naboj" +msgid "Charge effector weight" +msgstr "Spremeni utež vplivnika" + + msgid "Effector Collection" msgstr "Zbirka vplivnikov" +msgid "Limit effectors to this collection" +msgstr "Omeji vplivnike na to zbirko" + + msgid "Curve Guide" msgstr "Krivuljna vodnica" @@ -11823,26 +11839,58 @@ msgid "Drag" msgstr "Vleka" +msgid "Drag effector weight" +msgstr "Utež upornega vplivnika" + + msgid "Force" msgstr "Sila" +msgid "Force effector weight" +msgstr "Utež vplivnika sil" + + +msgid "Global gravity weight" +msgstr "Utež globalne težnosti" + + msgid "Harmonic" msgstr "Harmonično nihanje" +msgid "Harmonic effector weight" +msgstr "Utež harmoničnega vplivnika" + + msgid "Lennard-Jones" msgstr "Lennard-Jones" +msgid "Lennard-Jones effector weight" +msgstr "Utež Lennard-Jonesovega vplivnika" + + msgid "Magnetic" msgstr "Magnet" +msgid "Magnetic effector weight" +msgstr "Utež magnetnega vplivnika" + + msgid "Fluid Flow" msgstr "Kapljevinski tok" +msgid "Fluid Flow effector weight" +msgstr "Utež vplivnika pretoka kapljevine" + + +msgid "Texture effector weight" +msgstr "Utež vplivnika teksture" + + msgid "Turbulence" msgstr "Turbulenca" @@ -11859,14 +11907,34 @@ msgid "Enum Item Definition" msgstr "Definicija elementa naÅ”tevne strukture" +msgid "Description of the item's purpose" +msgstr "Opis namena elementa" + + msgid "Identifier" msgstr "Identifikator" +msgid "Unique name used in the code and scripting" +msgstr "Edinstveno ime, uporabljeno v kodi in programih" + + +msgid "Human readable name" +msgstr "Človeku razumljivo ime" + + +msgid "Value of the item" +msgstr "Vrednost elementa" + + msgid "F-Curve" msgstr "F-krivulja" +msgid "F-Curve defining values of a period of time" +msgstr "F-krivulja, ki definira vrednosti po času" + + msgid "RNA Array Index" msgstr "Indeks polja RNA" @@ -12717,14 +12785,34 @@ msgid "Size" msgstr "Velikost" +msgid "Size of the turbulence" +msgstr "Velikost turbulence" + + msgid "Domain Object" msgstr "Domenski objekt" +msgid "Select domain object of the smoke simulation" +msgstr "Izbere domenski objekt simulacije dima" + + +msgid "Strength of force field" +msgstr "Moč polja sil" + + +msgid "Texture to use as force" +msgstr "Tekstura, ki jo uporabi za silo" + + msgid "Texture Mode" msgstr "Teksturni način" +msgid "How the texture effect is calculated (RGB and Curl need a RGB texture, else Gradient will be used instead)" +msgstr "Kako se računa učinek teksture (RGB in Kodranje delujeta le za barvno teksturo, drugače je uporabljen Gradient)" + + msgid "Curl" msgstr "Kodranje" @@ -12737,10 +12825,38 @@ msgid "Nabla" msgstr "Nabla" +msgid "Defines size of derivative offset used for calculating gradient and curl" +msgstr "Definira velikost odvodnega odmika za računanje gradienta in kodranja" + + msgid "Type of field" msgstr "Vrsta polja" +msgid "Create a force that acts as a boid's predators or target" +msgstr "Ustvari silo, ki članu jate predstavlja plenilca ali tarčo" + + +msgid "Create a force that dampens motion" +msgstr "Ustvari silo, ki zaduÅ”i gibanje" + + +msgid "Create a force based on fluid simulation velocities" +msgstr "Ustvari silo, ki temelji na hitrostih simulacije kapljevine" + + +msgid "Radial field toward the center of object" +msgstr "Radialno polje proti srediŔču objekta" + + +msgid "Forcefield based on the Lennard-Jones potential" +msgstr "Polje sil, ki temelji na Lennard-Jonesovem potencialu" + + +msgid "Forcefield depends on the speed of the particles" +msgstr "Polje sil je odvisno od hitrosti delcev" + + msgid "2D" msgstr "2D" @@ -13834,6 +13950,22 @@ msgid "Flow Behavior" msgstr "ObnaÅ”anje pretoka" +msgid "Add fluid to simulation" +msgstr "Simulaciji doda kapljevino" + + +msgid "Delete fluid from simulation" +msgstr "IzbriÅ”e kapljevino iz simulacije" + + +msgid "Only use given geometry for fluid" +msgstr "Za kapljevino uporabi zgolj dano geometrijo" + + +msgid "Change how fluid is emitted" +msgstr "Spremeni način oddajanja tekočine" + + msgid "Flow Type" msgstr "Vrsta pretoka" @@ -15851,7 +15983,7 @@ msgstr "Rotiranje/zvijanje" msgid "Scale/Translate" -msgstr "Skaliranje/premestitev" +msgstr "Skaliraj / premesti" msgid "Squash & Stretch" @@ -20485,7 +20617,7 @@ msgstr "Minimum korakov" msgid "Translate Roots" -msgstr "Premakni korene" +msgstr "Premesti korene" msgid "Auto Step" @@ -22927,6 +23059,14 @@ msgid "Mask" msgstr "Maska" +msgid "Metaball" +msgstr "Metažoga" + + +msgid "Show/Hide" +msgstr "Pokaži / skrij" + + msgid "Names" msgstr "Imena" @@ -22935,10 +23075,6 @@ msgid "Bone Roll" msgstr "Zasukaj kost" -msgid "Show/Hide" -msgstr "Pokaži / skrij" - - msgid "Clean Up" msgstr "Počisti" @@ -23015,10 +23151,6 @@ msgid "Assign Material" msgstr "Dodeli material" -msgid "Metaball" -msgstr "Metažoga" - - msgid "Light" msgstr "Luč" @@ -26273,78 +26405,222 @@ msgid "Render Undistorted" msgstr "Upodobi nepopačeno" +msgid "Movie tracking data" +msgstr "Podatki o obrisovanju posnetkov" + + +msgid "Active Object Index" +msgstr "Indeks aktivnega objekta" + + +msgid "Index of active object" +msgstr "Indeks aktivnega objekta" + + +msgid "Collection of objects in this tracking data object" +msgstr "Zbirka objektov v tem objektu obrisovalnih podatkov" + + msgid "Plane Tracks" msgstr "Ravninski obrisi" +msgid "Collection of plane tracks in this tracking data object. Deprecated, use objects[name].plane_tracks" +msgstr "Zbirka ravninskih obrisov v tem objektu obrisovalnih podatkov. Zastarelo, namesto tega uporabite objects[name].plane_tracks" + + msgid "Tracks" msgstr "Obrisi" +msgid "Collection of tracks in this tracking data object. Deprecated, use objects[name].tracks" +msgstr "Zbirka obrisov v tem objektu obrisovalnih podatkov. Zastarelo, namesto tega uporabite objects[name].tracks" + + +msgid "Movie tracking camera data" +msgstr "Obrisovalni podatki o kameri" + + msgid "K1" msgstr "K1" +msgid "First coefficient of fourth order Brown-Conrady radial distortion" +msgstr "Prvi koeficient Brown-Conradyjevega radialnega popačenja četrtega reda" + + msgid "K2" msgstr "K2" +msgid "Second coefficient of fourth order Brown-Conrady radial distortion" +msgstr "Drugi koeficient Brown-Conradyjevega radialnega popačenja četrtega reda" + + msgid "K3" msgstr "K3" +msgid "Third coefficient of fourth order Brown-Conrady radial distortion" +msgstr "Tretji koeficient Brown-Conradyjevega radialnega popačenja četrtega reda" + + msgid "K4" msgstr "K4" +msgid "Fourth coefficient of fourth order Brown-Conrady radial distortion" +msgstr "Četrti koeficient Brown-Conradyjevega radialnega popačenja četrtega reda" + + msgid "P1" msgstr "P1" +msgid "First coefficient of second order Brown-Conrady tangential distortion" +msgstr "Prvi koeficient Brown-Conradyjevega tangencialnega popačenja drugega reda" + + msgid "P2" msgstr "P2" +msgid "Second coefficient of second order Brown-Conrady tangential distortion" +msgstr "Drugi koeficient Brown-Conradyjevega tangencialnega popačenja drugega reda" + + msgid "Distortion Model" msgstr "Model popačenja" +msgid "Distortion model used for camera lenses" +msgstr "Model popačenja za leče na kameri" + + msgid "Polynomial" msgstr "Polinomsko" +msgid "Radial distortion model which fits common cameras" +msgstr "Model radialnega popačenja, ki ustreza običajnim kameram" + + msgid "Divisions" msgstr "Delitve" +msgid "Division distortion model which better represents wide-angle cameras" +msgstr "Model delitvenega popačenja, ki bolje zastopa Å”irokokotne objektive" + + msgid "Nuke" msgstr "Nuke" +msgid "Nuke distortion model" +msgstr "Model popačenja Nuke" + + msgid "Brown" msgstr "Brownovo" +msgid "Brown-Conrady distortion model" +msgstr "Brown-Conradyjev model popačenja" + + +msgid "First coefficient of second order division distortion" +msgstr "Prvi koeficient delitvenega popačenja drugega reda" + + +msgid "Second coefficient of second order division distortion" +msgstr "Drugi koeficient delitvenega popačenja drugega reda" + + +msgid "Camera's focal length" +msgstr "GoriŔčna razdalja kamere" + + +msgid "First coefficient of third order polynomial radial distortion" +msgstr "Prvi koeficient polinomskega radialnega popačenja tretjega reda" + + +msgid "Second coefficient of third order polynomial radial distortion" +msgstr "Drugi koeficient polinomskega radialnega popačenja tretjega reda" + + +msgid "Third coefficient of third order polynomial radial distortion" +msgstr "Tretji koeficient polinomskega radialnega popačenja tretjega reda" + + +msgid "First coefficient of second order Nuke distortion" +msgstr "Prvi koeficient popačenja Nuke drugega reda" + + +msgid "Second coefficient of second order Nuke distortion" +msgstr "Drugi koeficient popačenja Nuke drugega reda" + + +msgid "Pixel Aspect Ratio" +msgstr "Prikazno razmerje piksla" + + +msgid "Pixel aspect ratio" +msgstr "Prikazno razmerje piksla" + + msgid "Principal Point" msgstr "Glavna točka" +msgid "Optical center of lens" +msgstr "Optično srediŔče leče" + + +msgid "Optical center of lens in pixels" +msgstr "Optično srediŔče leče v pikslih" + + msgid "Sensor" msgstr "Senzor" +msgid "Width of CCD sensor in millimeters" +msgstr "Å irina senzorja CCD v milimetrih" + + msgid "Units" msgstr "Enote" +msgid "Units used for camera focal length" +msgstr "Enote za goriŔčno razdaljo kamere" + + msgid "px" msgstr "px" +msgid "Use pixels for units of focal length" +msgstr "Uporabi piksle kot enoto goriŔčne razdalje" + + msgid "mm" msgstr "mm" +msgid "Use millimeters for units of focal length" +msgstr "Uporabi milimetre kot enoto goriŔčne razdalje" + + +msgid "Movie Tracking Dopesheet" +msgstr "Obrisovalni animacijski načrt" + + +msgid "Match-moving dopesheet data" +msgstr "Obrisovalni podatki v animacijskem načrtu" + + msgid "Display Hidden" msgstr "Prikaži skrito" @@ -26353,14 +26629,50 @@ msgid "Dopesheet Sort Field" msgstr "RazvrŔčanje" +msgid "Method to be used to sort channels in dopesheet view" +msgstr "Metoda razvrstitve kanalov v urejevalniku animacijskega načrta" + + +msgid "Sort channels by their names" +msgstr "Razvrsti kanale po imenih" + + msgid "Longest" msgstr "Najdlje trajajoče" +msgid "Sort channels by longest tracked segment" +msgstr "Razvrsti kanale po najdlje obrisanem segmentu" + + msgid "Total" msgstr "Skupaj" +msgid "Sort channels by overall amount of tracked segments" +msgstr "Razvrsti kanale po skupni količini obrisanih segmentov" + + +msgid "Sort channels by average reprojection error of tracks after solve" +msgstr "Razvrsti kanale glede na povprečno napako ponovne projekcije obrisov po izračunani reÅ”itvi" + + +msgid "Sort channels by first frame number" +msgstr "Razvrsti kanale po Å”tevilki prvega okvirja" + + +msgid "Sort channels by last frame number" +msgstr "Razvrsti kanale po Å”tevilki zadnjega okvirja" + + +msgid "Invert Dopesheet Sort" +msgstr "Obrni razvrŔčanje v načrtu" + + +msgid "Invert sort order of dopesheet channels" +msgstr "Obrne razvrstitev kanalov v animacijskem načrtu" + + msgid "Keyframed" msgstr "Animirano s ključi" @@ -28370,7 +28682,7 @@ msgstr "Absolutni okvir" msgid "Translate" -msgstr "Premik" +msgstr "Premesti" msgid "Offset an image" @@ -28381,42 +28693,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Premestitev definiraj z relativnimi vrednostmi (delež velikosti vhodne slike)" -msgid "Wrapping" -msgstr "Ovijanje" - - -msgid "Wrap image on a specific axis" -msgstr "Ovije sliko na podani osi" - - -msgid "No wrapping on X and Y" -msgstr "Brez ovijanja na X in Y" - - msgid "X Axis" msgstr "Os X" -msgid "Wrap all pixels on the X axis" -msgstr "Ovije vse piksle na osi X" - - msgid "Y Axis" msgstr "Os Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Ovije vse piksle na osi Y" - - msgid "Both Axes" msgstr "Obe osi" -msgid "Wrap all pixels on both axes" -msgstr "Ovije vse piksle na obeh oseh" - - msgid "Vector Blur" msgstr "Vektorski zabris" @@ -29568,7 +29856,7 @@ msgstr "Komponente" msgid "Translate Instances" -msgstr "Premakni primerke" +msgstr "Premesti primerke" msgid "Trim Curve" @@ -37372,6 +37660,18 @@ msgid "Add Node Collection" msgstr "Dodaj zbirko vozliŔč" +msgid "Source color" +msgstr "Izvorna barva" + + +msgid "Gamma Corrected" +msgstr "Gama korigirano" + + +msgid "Has Alpha" +msgstr "Ima prosojnost" + + msgctxt "Operator" msgid "Add Material" msgstr "Dodaj material" @@ -41696,14 +41996,6 @@ msgid "Copy to Selected" msgstr "Kopiraj na izbor" -msgid "Source color" -msgstr "Izvorna barva" - - -msgid "Gamma Corrected" -msgstr "Gama korigirano" - - msgctxt "Operator" msgid "Edit Source" msgstr "Uredi izvor" @@ -43646,10 +43938,6 @@ msgid "Yards" msgstr "Jardi" -msgid "Convert World Material" -msgstr "Pretvori material sveta" - - msgid "Namespace" msgstr "Imenski prostor" @@ -44280,14 +44568,6 @@ msgid "Use Deform Only" msgstr "Uporabi samo deformacije" -msgid "UV Sculpting" -msgstr "Kiparjenje UV" - - -msgid "Strength Curve" -msgstr "Krivulja moči" - - msgid "Restrict" msgstr "Omeji" @@ -49140,10 +49420,22 @@ msgid "Live Edit" msgstr "Urejaj v živo" +msgid "3D View far clipping distance" +msgstr "Prirez elementov v 3D pogledu od te razdalje proti neskončnosti" + + +msgid "3D View near clipping distance (perspective view only)" +msgstr "Prirez elementov v 3D pogledu od glediŔča do podane razdalje (velja samo za perspektivno projekcijo)" + + msgid "Lens" msgstr "Leča" +msgid "Viewport lens angle" +msgstr "Krivina glediŔčne leče v 3D pogledu" + + msgid "3D View center is locked to the cursor's position" msgstr "SrediŔče 3D pogleda je priklenjeno na položaj kazalca" @@ -49360,6 +49652,10 @@ msgid "Use Local Camera" msgstr "Uporabi lokalno kamero" +msgid "Use a local camera in this view, rather than scene's active camera" +msgstr "V tem pogledu uporabi lokalno kamero namesto aktivne kamere na sceni" + + msgid "Local Collections" msgstr "Lokalne zbirke" @@ -50062,6 +50358,14 @@ msgid "Clean Files After Install" msgstr "Počisti datoteke po namestitvi" +msgid "UV Sculpting" +msgstr "Kiparjenje UV" + + +msgid "Strength Curve" +msgstr "Krivulja moči" + + msgid "Group Index" msgstr "Indeks skupine" @@ -60382,6 +60686,10 @@ msgid "Blend to Neighbor" msgstr "Preliv v soseda" +msgid "Cancel" +msgstr "Prekliči" + + msgid "Asset Shelf Panel" msgstr "PloŔča police s sredstvi" @@ -60453,10 +60761,6 @@ msgid "No active layer" msgstr "Ni aktivne plasti" -msgid "Cancel" -msgstr "Prekliči" - - msgid "Active vertex group is locked" msgstr "Aktivna skupina ogliŔč je zaklenjena" @@ -61648,14 +61952,6 @@ msgid "screen" msgstr "zaslon" -msgid "ON" -msgstr "VKLOP" - - -msgid "OFF" -msgstr "IZKLOP" - - msgctxt "GPencil" msgid "Interpolation" msgstr "Interpolacija" @@ -63025,7 +63321,7 @@ msgid "Clipping" msgstr "Rezanje" -msgid "Level Viewport" +msgid "Levels Viewport" msgstr "Nivoji za 3D pogled" @@ -63156,10 +63452,6 @@ msgid "Output Vertex Groups" msgstr "Izhodne skupine ogliŔč" -msgid "Levels Viewport" -msgstr "Nivoji za 3D pogled" - - msgid "Out of memory" msgstr "Zmanjkalo je spomina" @@ -63314,10 +63606,6 @@ msgid "Offset Y" msgstr "Odmik Y" -msgid "Undistortion" -msgstr "Odpopačenje" - - msgid "Dot" msgstr "Skalarni" @@ -63629,10 +63917,6 @@ msgid "Element" msgstr "Element" -msgid "Has Alpha" -msgstr "Ima prosojnost" - - msgid "Frame Count" msgstr "Količina okvirjev" @@ -64168,6 +64452,14 @@ msgid "drag-" msgstr "vleci-" +msgid "ON" +msgstr "VKLOP" + + +msgid "OFF" +msgstr "IZKLOP" + + msgid "Toggle System Console" msgstr "Preklopi sistemsko konzolo" diff --git a/locale/po/sr.po b/locale/po/sr.po index 8249ead29a1f..d2039b15b23c 100644 --- a/locale/po/sr.po +++ b/locale/po/sr.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2012-09-07 22:32+0100\n" "Last-Translator: Nikola Radovanovic \n" "Language-Team: Nikola Radovanovic\n" @@ -8634,6 +8634,14 @@ msgid "Material slot name" msgstr "ŠŠ°Š·ŠøŠ² сŠ»Š¾Ń‚Š° Š¼Š°Ń‚ŠµŃ€ŠøјŠ°Š»Š°" +msgid "Metaball" +msgstr "ŠœŠµŃ‚Š° Š»Š¾ŠæтŠ°" + + +msgid "Show/Hide" +msgstr "ŠŸŃ€ŠøŠŗŠ°Š¶Šø/сŠ°ŠŗрŠøј" + + msgid "Names" msgstr "Š˜Š¼ŠµŠ½Š°" @@ -8642,10 +8650,6 @@ msgid "Bone Roll" msgstr "Š Š¾Š»Š½Š° ŠŗŠ¾ŃŃ‚Šøју" -msgid "Show/Hide" -msgstr "ŠŸŃ€ŠøŠŗŠ°Š¶Šø/сŠ°ŠŗрŠøј" - - msgid "Snap" msgstr "Š›ŠµŠæљŠµŃšŠµ" @@ -8674,10 +8678,6 @@ msgid "Select Linked" msgstr "Š˜Š·Š°Š±ŠµŃ€Šø ŠæŠ¾Š²ŠµŠ·Š°Š½Š¾" -msgid "Metaball" -msgstr "ŠœŠµŃ‚Š° Š»Š¾ŠæтŠ°" - - msgid "Light" msgstr "Š”Š²ŠµŃ‚Š»Š¾ŃŃ‚" @@ -19852,10 +19852,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "ŠšŠ¾Ń€ŠøстŠø сŠ°Š¼Š¾ Š“ŠµŃ„Š¾Ń€Š¼Š°Ń†ŠøŠ¾Š½Šµ Š¼Š¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Šµ (ŠæрŠøŠ²Ń€ŠµŠ¼ŠµŠ½Š¾ ŠøсŠŗључујŠµ сŠ²Šµ ŠŗŠ¾Š½ŃŃ‚Ń€ŃƒŠŗтŠøŠ²Š½Šµ Š¼Š¾Š“ŠøфŠøŠŗŠ°Ń‚Š¾Ń€Šµ Š¾ŃŠøŠ¼ Š²ŠøшŠµ-рŠµŠ·Š¾Š»ŃƒŃ†ŠøјŠ°)" -msgid "UV Sculpting" -msgstr "UV Š²Š°Ń˜Š°ŃšŠµ" - - msgid "Properties of vertex and weight paint mode" msgstr "ŠŸŠ¾Š“ŠµŃˆŠ°Š²Š°ŃšŠµ тŠµŠ¼ŠµŠ½Š° Šø Š¼Š¾Š“Š° Š±Š¾Ń˜ŠµŃšŠ° тŠµŠ¶ŠøŠ½Šµ" @@ -23191,6 +23187,10 @@ msgid "Solid Light" msgstr "ŠžŃŠ½Š¾Š²Š½Š° сŠ²ŠµŃ‚Š»Š°" +msgid "UV Sculpting" +msgstr "UV Š²Š°Ń˜Š°ŃšŠµ" + + msgid "Group Index" msgstr "Š“Ń€ŃƒŠæŠøсŠ°Š½Š¾" @@ -24969,6 +24969,10 @@ msgid "Cannot remove built in keying set" msgstr "ŠŠµ Š¼Š¾Š³Ńƒ Š“Š° уŠŗŠ»Š¾Š½ŠøŠ¼ уŠ³Ń€Š°Ń’ŠµŠ½Ńƒ Š·Š±ŠøрŠŗу ŠŗључŠµŠ²Š°" +msgid "Cancel" +msgstr "ŠžŠ“устŠ°Š½Šø" + + msgid "No keyframes to slide between" msgstr "ŠšŃ™ŃƒŃ‡Š½Šø ŠŗŠ°Š“рŠ¾Š²Šø" @@ -25033,10 +25037,6 @@ msgid "Nothing selected" msgstr "ŠŠøштŠ° Š½ŠøјŠµ ŠøŠ·Š°Š±Ń€Š°Š½Š¾" -msgid "Cancel" -msgstr "ŠžŠ“устŠ°Š½Šø" - - msgid "Pin" msgstr "Š—Š°ŠŗŠ°Ń‡Šø" diff --git a/locale/po/sr@latin.po b/locale/po/sr@latin.po index 8ec992eaa140..a064d309ed4b 100644 --- a/locale/po/sr@latin.po +++ b/locale/po/sr@latin.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2012-09-07 22:32+0100\n" "Last-Translator: Nikola Radovanovic \n" "Language-Team: Nikola Radovanovic\n" @@ -8634,6 +8634,14 @@ msgid "Material slot name" msgstr "Naziv slota materijala" +msgid "Metaball" +msgstr "Meta lopta" + + +msgid "Show/Hide" +msgstr "Prikaži/sakrij" + + msgid "Names" msgstr "Imena" @@ -8642,10 +8650,6 @@ msgid "Bone Roll" msgstr "Rolna kostiju" -msgid "Show/Hide" -msgstr "Prikaži/sakrij" - - msgid "Snap" msgstr "Lepljenje" @@ -8674,10 +8678,6 @@ msgid "Select Linked" msgstr "Izaberi povezano" -msgid "Metaball" -msgstr "Meta lopta" - - msgid "Light" msgstr "Svetlost" @@ -19852,10 +19852,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Koristi samo deformacione modifikatore (privremeno isključuje sve konstruktivne modifikatore osim viÅ”e-rezolucija)" -msgid "UV Sculpting" -msgstr "UV vajanje" - - msgid "Properties of vertex and weight paint mode" msgstr "PodeÅ”avanje temena i moda bojenja težine" @@ -23191,6 +23187,10 @@ msgid "Solid Light" msgstr "Osnovna svetla" +msgid "UV Sculpting" +msgstr "UV vajanje" + + msgid "Group Index" msgstr "Grupisano" @@ -24969,6 +24969,10 @@ msgid "Cannot remove built in keying set" msgstr "Ne mogu da uklonim ugrađenu zbirku ključeva" +msgid "Cancel" +msgstr "Odustani" + + msgid "No keyframes to slide between" msgstr "Ključni kadrovi" @@ -25033,10 +25037,6 @@ msgid "Nothing selected" msgstr "NiÅ”ta nije izabrano" -msgid "Cancel" -msgstr "Odustani" - - msgid "Pin" msgstr "Zakači" diff --git a/locale/po/sv.po b/locale/po/sv.po index b7e6b106e5a9..971990baf1a4 100644 --- a/locale/po/sv.po +++ b/locale/po/sv.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-01-17 19:22+0000\n" "Last-Translator: Peter Simonsson \n" "Language-Team: Swedish \n" @@ -5205,14 +5205,18 @@ msgid "Mask" msgstr "Mask" -msgid "Names" -msgstr "Namn" +msgid "Metaball" +msgstr "Metaboll" msgid "Show/Hide" msgstr "Visa/dƶlj" +msgid "Names" +msgstr "Namn" + + msgid "Clean Up" msgstr "StƤda upp" @@ -5245,10 +5249,6 @@ msgid "Select More/Less" msgstr "Markera mera/mindre" -msgid "Metaball" -msgstr "Metaboll" - - msgid "Light" msgstr "Ljus" @@ -11601,10 +11601,6 @@ msgid "Dither" msgstr "Rastrering" -msgid "UV Sculpting" -msgstr "UV-skulptering" - - msgid "Active Tool" msgstr "Aktivt verktyg" @@ -13219,6 +13215,10 @@ msgid "Select Mode" msgstr "MarkeringslƤge" +msgid "UV Sculpting" +msgstr "UV-skulptering" + + msgid "Weight value of a vertex in a vertex group" msgstr "ViktningsvƤrde fƶr en verte i en vertexgrupp" @@ -15909,6 +15909,10 @@ msgid "Sculpting" msgstr "Skulptering" +msgid "Cancel" +msgstr "Avbryt" + + msgid "Path is empty, cannot save" msgstr "SƶkvƤgen Ƥr tom, kan inte spara" @@ -15925,10 +15929,6 @@ msgid "No changes to be saved" msgstr "Inga Ƥndringar att spara" -msgid "Cancel" -msgstr "Avbryt" - - msgctxt "WindowManager" msgid "Search" msgstr "Sƶk" diff --git a/locale/po/sw.po b/locale/po/sw.po index cd61da7b6aa0..05de9c2166bd 100644 --- a/locale/po/sw.po +++ b/locale/po/sw.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-07-05 18:56+0000\n" "Last-Translator: Isaac Gicheha \n" "Language-Team: Swahili \n" @@ -22229,10 +22229,6 @@ msgid "Display the object's name" msgstr "Onyesha jina la kitu" -msgid "Shape Key Lock" -msgstr "Kufuli ya Ufunguo wa Umbo" - - msgid "Only show the active shape key at full value" msgstr "Onyesha tu kitufe amilifu cha umbo kwa thamani kamili" @@ -28817,6 +28813,10 @@ msgid "Editor menu containing buttons" msgstr "Menyu ya mhariri iliyo na vitufe" +msgid "Metaball" +msgstr "Mpira wa miguu" + + msgid "Show/Hide" msgstr "Onyesha/Ficha" @@ -28845,10 +28845,6 @@ msgid "Select Linked" msgstr "Chagua Imeunganishwa" -msgid "Metaball" -msgstr "Mpira wa miguu" - - msgid "Light" msgstr "Mwanga" @@ -37758,22 +37754,6 @@ msgid "Channel Key" msgstr "Kitufe cha Chaneli" -msgid "RGB color space" -msgstr "Nafasi ya rangi ya RGB" - - -msgid "HSV color space" -msgstr "Nafasi ya rangi ya HSV" - - -msgid "YUV color space" -msgstr "Nafasi ya rangi ya YUV" - - -msgid "YCbCr color space" -msgstr "nafasi ya rangi ya YCbCr" - - msgid "Limit by this channel's value" msgstr "Kikomo kwa thamani ya kituo hiki" @@ -38170,26 +38150,6 @@ msgid "Mode of color processing" msgstr "Njia ya usindikaji wa rangi" -msgid "Use RGB color processing" -msgstr "Tumia usindikaji wa rangi ya RGB" - - -msgid "Use HSV color processing" -msgstr "Tumia usindikaji wa rangi wa HSV" - - -msgid "Use HSL color processing" -msgstr "Tumia usindikaji wa rangi wa HSL" - - -msgid "Use YCbCr color processing" -msgstr "Tumia usindikaji wa rangi wa YCbCr" - - -msgid "Use YUV color processing" -msgstr "Tumia usindikaji wa rangi ya YUV" - - msgid "Color space used for YCbCrA processing" msgstr "Nafasi ya rangi inayotumika kwa usindikaji wa YCbCrA" @@ -38503,6 +38463,10 @@ msgid "Distance Key" msgstr "Ufunguo wa Umbali" +msgid "RGB color space" +msgstr "Nafasi ya rangi ya RGB" + + msgid "YCbCr suppression" msgstr "Ukandamizaji wa YCbCr" @@ -39470,42 +39434,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Tumia thamani zinazohusiana (sehemu ya saizi ya picha ingizo) ili kufafanua tafsiri" -msgid "Wrapping" -msgstr "Kufunga" - - -msgid "Wrap image on a specific axis" -msgstr "Funga picha kwenye mhimili maalum" - - -msgid "No wrapping on X and Y" -msgstr "Hakuna kufunga X na Y" - - msgid "X Axis" msgstr "Mhimili wa X" -msgid "Wrap all pixels on the X axis" -msgstr "Funga saizi zote kwenye mhimili wa X" - - msgid "Y Axis" msgstr "Mhimili wa Y" -msgid "Wrap all pixels on the Y axis" -msgstr "Funga saizi zote kwenye mhimili wa Y" - - msgid "Both Axes" msgstr "Shoka zote mbili" -msgid "Wrap all pixels on both axes" -msgstr "Funga saizi zote kwenye shoka zote mbili" - - msgid "Map values to colors with the use of a gradient" msgstr "Thamani za ramani kwa rangi kwa kutumia gradient" @@ -60086,6 +60026,22 @@ msgid "Add a collection info node to the current node editor" msgstr "Ongeza nodi ya maelezo ya mkusanyiko kwa kihariri cha nodi ya sasa" +msgid "Source color" +msgstr "Rangi ya chanzo" + + +msgid "Gamma Corrected" +msgstr "Gamma Imesahihishwa" + + +msgid "The source color is gamma corrected" +msgstr "Rangi ya chanzo imerekebishwa kwa gamma" + + +msgid "Has Alpha" +msgstr "Ina Alfa" + + msgctxt "Operator" msgid "Add File Node" msgstr "Ongeza Nodi ya Faili" @@ -70702,18 +70658,6 @@ msgid "Drop colors to buttons" msgstr "dondosha rangi kwenye vitufe" -msgid "Source color" -msgstr "Rangi ya chanzo" - - -msgid "Gamma Corrected" -msgstr "Gamma Imesahihishwa" - - -msgid "The source color is gamma corrected" -msgstr "Rangi ya chanzo imerekebishwa kwa gamma" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "Achia Nyenzo katika nafasi za Nyenzo" @@ -75855,10 +75799,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Tumia virekebisha urekebishaji pekee (lemaza kwa muda virekebishaji vyote vya kujenga isipokuwa maazimio mengi)" -msgid "UV Sculpting" -msgstr "Uchongaji wa UV" - - msgid "Properties of vertex and weight paint mode" msgstr "Sifa za kipeo na hali ya rangi ya uzani" @@ -91971,6 +91911,10 @@ msgid "Enable this light in solid shading mode" msgstr "Washa mwangaza huu katika hali ya kivuli dhabiti" +msgid "UV Sculpting" +msgstr "Uchongaji wa UV" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Kundi la vipeo, linalotumika kwa ulemavu wa silaha na madhumuni mengine" @@ -105517,28 +105461,8 @@ msgid "Sliding-Tool" msgstr "Zana ya Kutelezesha" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "[X]/Y/Z mhimili pekee (X ili kufuta)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Mhimili wa X/[Y]/Z pekee (Y kufuta)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "mhimili wa X/Y/[Z] pekee (Z kufuta)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = Kizuizi cha Mhimili" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - Kikomo cha Kubadilisha/Kuweka Mali" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - Geuza mwonekano wa mfupa" +msgid "Cancel" +msgstr "Ghairi" msgid "No keyframes to slide between" @@ -105972,10 +105896,6 @@ msgid "Unable to find layer to add" msgstr "Haijaweza kupata safu ya kuongeza" -msgid "Cancel" -msgstr "Ghairi" - - msgid "Could not resolve path '%s'" msgstr "Haikuweza kutatua njia ya '%s'" @@ -109008,14 +108928,6 @@ msgid "UV map or surface attachment is invalid" msgstr "Ramani ya UV au kiambatisho cha uso ni batili" -msgid "ON" -msgstr "ILIYO" - - -msgid "OFF" -msgstr "ZIMA" - - msgid "Active group is locked, aborting" msgstr "Kikundi kinachoendelea kimefungwa, kinatoa mimba" @@ -109992,30 +109904,6 @@ msgid "Deleted %u drivers" msgstr "Viendeshaji %u vimefutwa" -msgid "Decimate Keyframes" -msgstr "Tambua Fremu Muhimu" - - -msgid "Shear Keys" -msgstr "Funguo za kunyoa" - - -msgid "D - Toggle Direction" -msgstr "D - Geuza Mwelekeo" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Mizani Kutoka Mwisho wa Kulia" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Mizani Kutoka Mwisho wa Kushoto" - - -msgid "Scale from Neighbor Keys" -msgstr "Mizani kutoka kwa Funguo za Jirani" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "Tambua F-Curves kwa kubainisha ni kiasi gani zinaweza kupotoka kutoka kwenye mkunjo asili." @@ -114199,8 +114087,8 @@ msgid "Clipping" msgstr "Kunakili" -msgid "Level Viewport" -msgstr "Kiwango cha kutazama cha kiwango" +msgid "Levels Viewport" +msgstr "Mtazamo wa Viwango" msgid "Unsubdivide" @@ -114393,10 +114281,6 @@ msgid "Adaptive Subdivision" msgstr "Ugawanyiko Unaobadilika" -msgid "Levels Viewport" -msgstr "Mtazamo wa Viwango" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "Kiwango cha Mwisho: Toa %.2f px, Viewport %.2f px" @@ -114671,10 +114555,6 @@ msgid "Offset Y" msgstr "Kupunguza Y" -msgid "Undistortion" -msgstr "Upotoshaji" - - msgid "Dot" msgstr "Nukta" @@ -115366,10 +115246,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Thamani kubwa kuliko kizingiti ziko ndani ya wavu uliozalishwa" -msgid "Has Alpha" -msgstr "Ina Alfa" - - msgid "Frame Count" msgstr "Hesabu ya Fremu" @@ -117255,6 +117131,14 @@ msgid "drag-" msgstr "buruta-" +msgid "ON" +msgstr "ILIYO" + + +msgid "OFF" +msgstr "ZIMA" + + msgid "unsupported format" msgstr "umbizo lisilotumika" diff --git a/locale/po/ta.po b/locale/po/ta.po index 350d78adeba6..2ecd0c24e3e9 100644 --- a/locale/po/ta.po +++ b/locale/po/ta.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-04-14 09:42+0000\n" "Last-Translator: ą®¤ą®®ą®æą®“ąÆą®ØąÆ‡ą®°ą®®ąÆ \n" "Language-Team: Tamil \n" @@ -23617,10 +23617,6 @@ msgid "Display the object's name" msgstr "ą®ŖąÆŠą®°ąÆą®³ą®æą®©ąÆ ą®ŖąÆ†ą®Æą®°ąÆˆą®•ąÆ ą®•ą®¾ą®£ąÆą®Ŗą®æ" -msgid "Shape Key Lock" -msgstr "ą®µą®æą®šąÆˆ ą®ŖąÆ‚ą®ŸąÆą®ŸąÆ ą®µą®Ÿą®æą®µ" - - msgid "Only show the active shape key at full value" msgstr "ą®šąÆ†ą®Æą®²ą®æą®²ąÆ ą®‰ą®³ąÆą®³ ą®µą®Ÿą®æą®µ ą®µą®æą®šąÆˆą®ÆąÆˆ ą®®ąÆą®“ąÆ ą®®ą®¤ą®æą®ŖąÆą®Ŗą®æą®²ąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ‡ ą®•ą®¾ą®£ąÆą®Ŗą®æ" @@ -31481,6 +31477,14 @@ msgid "Editor menu containing buttons" msgstr "ą®ŖąÆŠą®¤ąÆą®¤ą®¾ą®©ąÆą®•ą®³ąÆˆą®•ąÆ ą®•ąÆŠą®£ąÆą®Ÿ ą®¤ą®æą®°ąÆą®¤ąÆą®¤ą®æ ą®Ŗą®ŸąÆą®Ÿą®æą®Æą®²ąÆ" +msgid "Metaball" +msgstr "ą®µą®³ą®°ąÆą®šą®æą®¤ąÆˆ ą®®ą®¾ą®±ąÆą®±" + + +msgid "Show/Hide" +msgstr "ą®•ą®¾ą®ŸąÆą®ŸąÆ/ą®®ą®±ąÆˆą®•ąÆą®•" + + msgid "Names" msgstr "ą®ŖąÆ†ą®Æą®°ąÆą®•ą®³ąÆ" @@ -31489,10 +31493,6 @@ msgid "Bone Roll" msgstr "ą®Žą®²ąÆą®®ąÆą®ŖąÆ ą®°ąÆ‹ą®²ąÆ" -msgid "Show/Hide" -msgstr "ą®•ą®¾ą®ŸąÆą®ŸąÆ/ą®®ą®±ąÆˆą®•ąÆą®•" - - msgid "Clean Up" msgstr "ą®¤ąÆ‚ą®ÆąÆą®®ąÆˆ ą®šąÆ†ą®ÆąÆ" @@ -31581,10 +31581,6 @@ msgid "Assign Material" msgstr "ą®®ąÆ‚ą®²ą®ŖąÆą®ŖąÆŠą®°ąÆą®³ąÆ ą®’ą®¤ąÆą®•ąÆą®•" -msgid "Metaball" -msgstr "ą®µą®³ą®°ąÆą®šą®æą®¤ąÆˆ ą®®ą®¾ą®±ąÆą®±" - - msgid "Light" msgstr "ą®’ą®³ą®æ" @@ -41038,30 +41034,14 @@ msgid "Channel Key" msgstr "ą®šąÆ‡ą®©ą®²ąÆ ą®µą®æą®šąÆˆ" -msgid "RGB color space" -msgstr "rgb ą®µą®£ąÆą®£ ą®‡ą®Ÿą®®ąÆ" - - -msgid "HSV color space" -msgstr "hsv ą®µą®£ąÆą®£ ą®‡ą®Ÿą®®ąÆ" - - msgid "YUV" msgstr "yuv" -msgid "YUV color space" -msgstr "yuv ą®µą®£ąÆą®£ ą®‡ą®Ÿą®®ąÆ" - - msgid "YCbCr" msgstr "ycbcr" -msgid "YCbCr color space" -msgstr "ycbcr ą®µą®£ąÆą®£ ą®‡ą®Ÿą®®ąÆ" - - msgid "Limit by this channel's value" msgstr "ą®‡ą®ØąÆą®¤ ą®šąÆ‡ą®©ą®²ą®æą®©ąÆ ą®®ą®¤ą®æą®ŖąÆą®Ŗą®¾ą®²ąÆ ą®•ą®ŸąÆą®ŸąÆą®ŖąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" @@ -41482,26 +41462,6 @@ msgid "Mode of color processing" msgstr "ą®µą®£ąÆą®£ ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®• ą®®ąÆą®±ąÆˆ" -msgid "Use RGB color processing" -msgstr "rgb ą®µą®£ąÆą®£ ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®•ą®¤ąÆą®¤ąÆˆą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" - - -msgid "Use HSV color processing" -msgstr "hsv ą®µą®£ąÆą®£ ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®•ą®¤ąÆą®¤ąÆˆą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" - - -msgid "Use HSL color processing" -msgstr "hsl ą®µą®£ąÆą®£ ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®•ą®¤ąÆą®¤ąÆˆą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" - - -msgid "Use YCbCr color processing" -msgstr "ycbcr ą®µą®£ąÆą®£ ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®•ą®¤ąÆą®¤ąÆˆą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" - - -msgid "Use YUV color processing" -msgstr "yuv ą®µą®£ąÆą®£ ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®•ą®¤ąÆą®¤ąÆˆą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" - - msgid "Color space used for YCbCrA processing" msgstr "ycbcra ą®šąÆ†ą®Æą®²ą®¾ą®•ąÆą®•ą®¤ąÆą®¤ą®æą®±ąÆą®•ąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®ŖąÆą®Ŗą®ŸąÆą®®ąÆ ą®µą®£ąÆą®£ ą®‡ą®Ÿą®®ąÆ" @@ -41863,6 +41823,10 @@ msgid "Distance Key" msgstr "ą®¤ąÆ‚ą®° ą®µą®æą®šąÆˆ" +msgid "RGB color space" +msgstr "rgb ą®µą®£ąÆą®£ ą®‡ą®Ÿą®®ąÆ" + + msgid "YCbCr suppression" msgstr "ycbcr ą®…ą®Ÿą®•ąÆą®•ąÆą®®ąÆą®±ąÆˆ" @@ -43049,42 +43013,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "ą®®ąÆŠą®“ą®æą®ŖąÆ†ą®Æą®°ąÆą®ŖąÆą®ŖąÆˆ ą®µą®°ąÆˆą®Æą®±ąÆą®•ąÆą®• ą®‰ą®±ą®µą®æą®©ą®°ąÆ (ą®‰ą®³ąÆą®³ąÆ€ą®ŸąÆą®ŸąÆ ą®Ŗą®Ÿ ą®…ą®³ą®µą®æą®©ąÆ ą®Ŗą®æą®©ąÆą®©ą®®ąÆ) ą®®ą®¤ą®æą®ŖąÆą®ŖąÆą®•ą®³ąÆˆą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ" -msgid "Wrapping" -msgstr "ą®ŖąÆ‡ą®¾ą®°ąÆą®¤ąÆą®¤ą®æ" - - -msgid "Wrap image on a specific axis" -msgstr "ą®’ą®°ąÆ ą®•ąÆą®±ą®æą®ŖąÆą®Ŗą®æą®ŸąÆą®Ÿ ą®…ą®šąÆą®šą®æą®²ąÆ ą®Ŗą®Ÿą®¤ąÆą®¤ąÆˆ ą®®ą®Ÿą®æą®•ąÆą®•ą®µąÆą®®ąÆ" - - -msgid "No wrapping on X and Y" -msgstr "ą®ƒą®šąÆ ą®®ą®±ąÆą®±ąÆą®®ąÆ ą®’ą®ÆąÆ ą®‡ą®²ąÆ ą®®ą®Ÿą®•ąÆą®•ąÆą®¤ą®²ąÆ ą®‡ą®²ąÆą®²ąÆˆ" - - msgid "X Axis" msgstr "ą®ƒą®šąÆ ą®…ą®šąÆą®šąÆ" -msgid "Wrap all pixels on the X axis" -msgstr "ą®ƒą®šąÆ ą®…ą®šąÆą®šą®æą®²ąÆ ą®…ą®©ąÆˆą®¤ąÆą®¤ąÆ ą®Ŗą®æą®•ąÆą®šą®²ąÆą®•ą®³ąÆˆą®ÆąÆą®®ąÆ ą®®ą®Ÿą®æą®•ąÆą®•ą®µąÆą®®ąÆ" - - msgid "Y Axis" msgstr "ą®’ą®ÆąÆ ą®…ą®šąÆą®šąÆ" -msgid "Wrap all pixels on the Y axis" -msgstr "ą®…ą®©ąÆˆą®¤ąÆą®¤ąÆ ą®Ŗą®æą®•ąÆą®šą®²ąÆą®•ą®³ąÆˆą®ÆąÆą®®ąÆ ą®’ą®ÆąÆ ą®…ą®šąÆą®šą®æą®²ąÆ ą®®ą®Ÿą®æą®•ąÆą®•ą®µąÆą®®ąÆ" - - msgid "Both Axes" msgstr "ą®‡ą®°ą®£ąÆą®ŸąÆ ą®…ą®šąÆą®šąÆą®•ą®³ąÆą®®ąÆ" -msgid "Wrap all pixels on both axes" -msgstr "ą®…ą®©ąÆˆą®¤ąÆą®¤ąÆ ą®Ŗą®æą®•ąÆą®šą®²ąÆą®•ą®³ąÆˆą®ÆąÆą®®ąÆ ą®‡ą®°ą®£ąÆą®ŸąÆ ą®…ą®šąÆą®šąÆą®•ą®³ą®æą®²ąÆą®®ąÆ ą®®ą®Ÿą®æą®•ąÆą®•ą®µąÆą®®ąÆ" - - msgid "Map values to colors with the use of a gradient" msgstr "ą®’ą®°ąÆ ą®šą®¾ą®ÆąÆą®µąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®¾ą®ŸąÆą®ŸąÆą®Ÿą®©ąÆ ą®µą®£ąÆą®£ą®™ąÆą®•ą®³ąÆą®•ąÆą®•ąÆ ą®µą®°ąÆˆą®Ŗą®Ÿ ą®®ą®¤ą®æą®ŖąÆą®ŖąÆą®•ą®³ąÆ" @@ -64360,6 +64300,22 @@ msgid "Add a collection info node to the current node editor" msgstr "ą®¤ą®±ąÆą®ŖąÆ‹ą®¤ąÆˆą®Æ ą®®ąÆą®©ąÆˆ ą®¤ą®æą®°ąÆą®¤ąÆą®¤ą®æą®Æą®æą®²ąÆ ą®šąÆ‡ą®•ą®°ą®æą®ŖąÆą®ŖąÆ ą®šąÆ†ą®ÆąÆą®¤ą®æ ą®®ąÆą®©ąÆˆą®ÆąÆˆą®šąÆ ą®šąÆ‡ą®°ąÆą®•ąÆą®•ą®µąÆą®®ąÆ" +msgid "Source color" +msgstr "ą®®ąÆ‚ą®² ą®Øą®æą®±ą®®ąÆ" + + +msgid "Gamma Corrected" +msgstr "ą®•ą®¾ą®®ą®¾ ą®šą®°ą®æ ą®šąÆ†ą®ÆąÆą®Æą®ŖąÆą®Ŗą®ŸąÆą®Ÿą®¤ąÆ" + + +msgid "The source color is gamma corrected" +msgstr "ą®®ąÆ‚ą®² ą®Øą®æą®±ą®®ąÆ ą®•ą®¾ą®®ą®¾ ą®šą®°ą®æ ą®šąÆ†ą®ÆąÆą®Æą®ŖąÆą®Ŗą®ŸąÆą®Ÿą®¤ąÆ" + + +msgid "Has Alpha" +msgstr "ą®†ą®²ąÆą®Ŗą®¾ ą®‰ą®³ąÆą®³ą®¤ąÆ" + + msgctxt "Operator" msgid "Add File Node" msgstr "ą®•ąÆ‹ą®ŖąÆą®ŖąÆ ą®®ąÆą®©ąÆˆą®ÆąÆˆą®šąÆ ą®šąÆ‡ą®°ąÆą®•ąÆą®•ą®µąÆą®®ąÆ" @@ -75614,18 +75570,6 @@ msgid "Drop colors to buttons" msgstr "ą®ŖąÆŠą®¤ąÆą®¤ą®¾ą®©ąÆą®•ą®³ąÆą®•ąÆą®•ąÆ ą®µą®£ąÆą®£ą®™ąÆą®•ą®³ąÆˆ ą®µą®æą®ŸąÆą®™ąÆą®•ą®³ąÆ" -msgid "Source color" -msgstr "ą®®ąÆ‚ą®² ą®Øą®æą®±ą®®ąÆ" - - -msgid "Gamma Corrected" -msgstr "ą®•ą®¾ą®®ą®¾ ą®šą®°ą®æ ą®šąÆ†ą®ÆąÆą®Æą®ŖąÆą®Ŗą®ŸąÆą®Ÿą®¤ąÆ" - - -msgid "The source color is gamma corrected" -msgstr "ą®®ąÆ‚ą®² ą®Øą®æą®±ą®®ąÆ ą®•ą®¾ą®®ą®¾ ą®šą®°ą®æ ą®šąÆ†ą®ÆąÆą®Æą®ŖąÆą®Ŗą®ŸąÆą®Ÿą®¤ąÆ" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "ą®®ąÆ‚ą®²ą®ŖąÆą®ŖąÆŠą®°ąÆą®³ąÆ ą®‡ą®Ÿą®™ąÆą®•ą®³ą®æą®²ąÆ ą®®ąÆ‚ą®²ą®ŖąÆą®ŖąÆŠą®°ąÆą®³ąÆ ą®•ąÆˆą®µą®æą®Ÿą®µąÆą®®ąÆ" @@ -81082,10 +81026,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "ą®šą®æą®¤ąÆˆą®µąÆ ą®®ą®¾ą®±ąÆą®±ą®æą®Æą®®ąÆˆą®ŖąÆą®Ŗą®¾ą®³ą®°ąÆą®•ą®³ąÆˆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®µąÆą®®ąÆ (ą®Ŗą®² ą®¤ąÆ†ą®³ą®æą®µąÆą®¤ąÆą®¤ą®æą®±ą®©ąÆˆą®¤ąÆ ą®¤ą®µą®æą®° ą®…ą®©ąÆˆą®¤ąÆą®¤ąÆ ą®†ą®•ąÆą®•ą®ŖąÆ‚ą®°ąÆą®µą®®ą®¾ą®© ą®®ą®¾ą®±ąÆą®±ą®æą®•ą®³ąÆˆą®ÆąÆą®®ąÆ ą®¤ą®±ąÆą®•ą®¾ą®²ą®æą®•ą®®ą®¾ą®• ą®®ąÆą®Ÿą®•ąÆą®•ąÆ)" -msgid "UV Sculpting" -msgstr "ą®ŖąÆą®±ą®Šą®¤ą®¾ ą®šą®æą®±ąÆą®Ŗą®®ąÆ" - - msgid "Properties of vertex and weight paint mode" msgstr "ą®µąÆ†ą®°ąÆą®ŸąÆ†ą®•ąÆą®šąÆ ą®®ą®±ąÆą®±ąÆą®®ąÆ ą®Žą®ŸąÆˆ ą®µą®£ąÆą®£ą®ŖąÆą®ŖąÆ‚ą®šąÆą®šąÆ ą®Ŗą®Æą®©ąÆą®®ąÆą®±ąÆˆą®Æą®æą®©ąÆ ą®Ŗą®£ąÆą®ŖąÆą®•ą®³ąÆ" @@ -99284,6 +99224,10 @@ msgid "Enable this light in solid shading mode" msgstr "ą®¤ą®æą®Ÿ ą®Øą®æą®“ą®²ąÆ ą®Ŗą®Æą®©ąÆą®®ąÆą®±ąÆˆą®Æą®æą®²ąÆ ą®‡ą®ØąÆą®¤ ą®’ą®³ą®æą®ÆąÆˆ ą®‡ą®Æą®•ąÆą®•ą®µąÆą®®ąÆ" +msgid "UV Sculpting" +msgstr "ą®ŖąÆą®±ą®Šą®¤ą®¾ ą®šą®æą®±ąÆą®Ŗą®®ąÆ" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "ą®šąÆ†ą®™ąÆą®•ąÆą®¤ąÆą®¤ąÆą®•ą®³ą®æą®©ąÆ ą®•ąÆą®“ąÆ, ą®†ą®°ąÆą®®ąÆ‡ą®šąÆą®šą®°ąÆ ą®šą®æą®¤ąÆˆą®µąÆ ą®®ą®±ąÆą®±ąÆą®®ąÆ ą®Ŗą®æą®± ą®ØąÆ‹ą®•ąÆą®•ą®™ąÆą®•ą®³ąÆą®•ąÆą®•ą®¾ą®•ą®ŖąÆ ą®Ŗą®Æą®©ąÆą®Ŗą®ŸąÆą®¤ąÆą®¤ą®ŖąÆą®Ŗą®ŸąÆą®•ą®æą®±ą®¤ąÆ" @@ -114177,48 +114121,8 @@ msgid "Sliding-Tool" msgstr "ą®ØąÆ†ą®•ą®æą®“ąÆ-ą®•ą®°ąÆą®µą®æ" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "[x]/y/z ą®…ą®šąÆą®šąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (x ą®…ą®“ą®æą®•ąÆą®•)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "x/[y]/z ą®…ą®šąÆą®šąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (y ą®…ą®“ą®æą®•ąÆą®•)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "x/y/[z] ą®…ą®šąÆą®šąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (z ą®…ą®“ą®æą®•ąÆą®•)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "x/y/z = ą®…ą®šąÆą®šąÆ ą®•ą®ŸąÆą®ŸąÆą®ŖąÆą®Ŗą®¾ą®ŸąÆ" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[g]/r/s/b/c - ą®‡ą®°ąÆą®ŖąÆą®Ŗą®æą®Ÿą®®ąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (g ą®…ą®“ą®æą®•ąÆą®•) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "g/[r]/s/b/c - ą®šąÆą®“ą®±ąÆą®šą®æ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (r to ą®…ą®“ą®æą®•ąÆą®•) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "g/r/[s]/b/c - ą®…ą®³ą®µąÆą®•ąÆ‹ą®²ąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (ą®•ą®³ąÆˆ ą®…ą®“ą®æą®•ąÆą®•) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "g/r/s/[b]/c - ą®µą®³ąÆˆą®ØąÆą®¤ ą®Žą®²ąÆą®®ąÆą®ŖąÆ ą®Ŗą®£ąÆą®ŖąÆą®•ą®³ąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (b ą®…ą®“ą®æą®•ąÆą®•) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "g/r/s/b/[c] - ą®¤ą®©ą®æą®ŖąÆą®Ŗą®Æą®©ąÆ ą®Ŗą®£ąÆą®ŖąÆą®•ą®³ąÆ ą®®ą®ŸąÆą®ŸąÆą®®ąÆ (c ą®…ą®“ą®æą®•ąÆą®•) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "g/r/s/b/c - ą®‰ą®°ąÆą®®ą®¾ą®±ąÆą®±ą®®ąÆ/ą®šąÆŠą®¤ąÆą®¤ąÆ ą®¤ąÆŠą®•ąÆą®ŖąÆą®ŖąÆą®•ąÆą®•ą®¾ą®© ą®µą®°ą®®ąÆą®ŖąÆ" - - -msgid "[H] - Toggle bone visibility" -msgstr "[h] - ą®Žą®²ąÆą®®ąÆą®ŖąÆ ą®¤ąÆ†ą®°ą®æą®µąÆą®Øą®æą®²ąÆˆą®ÆąÆˆ ą®®ą®¾ą®±ąÆą®±ą®µąÆą®®ąÆ" +msgid "Cancel" +msgstr "ą®°ą®¤ąÆą®¤ąÆą®šąÆ†ą®ÆąÆ" msgid "No keyframes to slide between" @@ -114698,10 +114602,6 @@ msgid "Unable to find layer to add" msgstr "ą®šąÆ‡ą®°ąÆą®•ąÆą®• ą®…ą®ŸąÆą®•ąÆą®•ąÆ ą®•ą®£ąÆą®ŸąÆą®Ŗą®æą®Ÿą®æą®•ąÆą®• ą®®ąÆą®Ÿą®æą®Æą®µą®æą®²ąÆą®²ąÆˆ" -msgid "Cancel" -msgstr "ą®°ą®¤ąÆą®¤ąÆą®šąÆ†ą®ÆąÆ" - - msgid "Could not resolve path '%s'" msgstr "ą®Ŗą®¾ą®¤ąÆˆą®ÆąÆˆ '%s' ą®¤ąÆ€ą®°ąÆą®•ąÆą®• ą®®ąÆą®Ÿą®æą®Æą®µą®æą®²ąÆą®²ąÆˆ" @@ -117948,14 +117848,6 @@ msgid "UV map or surface attachment is invalid" msgstr "ą®ŖąÆą®±ą®Šą®¤ą®¾ ą®µą®°ąÆˆą®Ŗą®Ÿą®®ąÆ ą®…ą®²ąÆą®²ą®¤ąÆ ą®®ąÆ‡ą®±ąÆą®Ŗą®°ą®ŖąÆą®ŖąÆ ą®‡ą®£ąÆˆą®ŖąÆą®ŖąÆ ą®¤ą®µą®±ą®¾ą®©ą®¤ąÆ" -msgid "ON" -msgstr "ą®†ą®©ąÆ" - - -msgid "OFF" -msgstr "ą®…ą®£ąÆˆ" - - msgid "Active group is locked, aborting" msgstr "ą®šąÆ†ą®Æą®²ą®æą®²ąÆ ą®‰ą®³ąÆą®³ ą®•ąÆą®“ąÆ ą®ŖąÆ‚ą®ŸąÆą®Ÿą®ŖąÆą®Ŗą®ŸąÆą®ŸąÆą®³ąÆą®³ą®¤ąÆ, ą®•ą®°ąÆą®•ąÆą®•ą®²ąÆˆą®ŖąÆą®ŖąÆ ą®šąÆ†ą®ÆąÆą®•ą®æą®±ą®¤ąÆ" @@ -118964,30 +118856,6 @@ msgid "Deleted %u drivers" msgstr "ą®ØąÆ€ą®•ąÆą®•ą®ŖąÆą®Ŗą®ŸąÆą®Ÿą®¤ąÆ %u ą®‡ą®Æą®•ąÆą®•ą®æą®•ą®³ąÆ" -msgid "Decimate Keyframes" -msgstr "ą®•ąÆ€ą®ƒą®ŖąÆą®°ąÆ‡ą®®ąÆą®•ą®³ąÆˆ ą®…ą®“ą®æą®•ąÆą®•ą®µąÆą®®ąÆ" - - -msgid "Shear Keys" -msgstr "ą®µąÆ†ą®ŸąÆą®ŸąÆ ą®µą®æą®šąÆˆą®•ą®³ąÆ" - - -msgid "D - Toggle Direction" -msgstr "ą®Ÿą®æ - ą®¤ą®æą®šąÆˆą®ÆąÆˆ ą®®ą®¾ą®±ąÆą®±ą®µąÆą®®ąÆ" - - -msgid "[D] - Scale From Right End" -msgstr "[ą®Ÿą®æ] - ą®µą®²ą®¤ąÆ ą®®ąÆą®©ąÆˆą®Æą®æą®²ą®æą®°ąÆą®ØąÆą®¤ąÆ ą®…ą®³ą®µąÆ" - - -msgid "[D] - Scale From Left End" -msgstr "[d] - ą®‡ą®Ÿą®¤ąÆ ą®®ąÆą®©ąÆˆą®Æą®æą®²ą®æą®°ąÆą®ØąÆą®¤ąÆ ą®…ą®³ą®µąÆ" - - -msgid "Scale from Neighbor Keys" -msgstr "ą®…ą®£ąÆą®ŸąÆˆ ą®µą®æą®šąÆˆą®•ą®³ą®æą®²ą®æą®°ąÆą®ØąÆą®¤ąÆ ą®…ą®³ą®µąÆ" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "ą®…ą®šą®²ąÆ ą®µą®³ąÆˆą®µą®æą®²ą®æą®°ąÆą®ØąÆą®¤ąÆ ą®Žą®µąÆą®µą®³ą®µąÆ ą®µą®æą®²ą®• ą®®ąÆą®Ÿą®æą®ÆąÆą®®ąÆ ą®Žą®©ąÆą®Ŗą®¤ąÆˆą®•ąÆ ą®•ąÆą®±ą®æą®ŖąÆą®Ŗą®æą®ŸąÆą®µą®¤ą®©ąÆ ą®®ąÆ‚ą®²ą®®ąÆ ą®Žą®ƒą®ŖąÆ-ą®µą®³ąÆˆą®µąÆą®•ą®³ąÆˆ ą®…ą®“ą®æą®•ąÆą®•ą®µąÆą®®ąÆ" @@ -123224,8 +123092,8 @@ msgid "Clipping" msgstr "ą®•ą®æą®³ą®æą®ŖąÆą®Ŗą®æą®™ąÆ" -msgid "Level Viewport" -msgstr "ą®Øą®æą®²ąÆˆ ą®•ą®¾ą®ŸąÆą®šą®æą®Æą®•ą®®ąÆ" +msgid "Levels Viewport" +msgstr "ą®Øą®æą®²ąÆˆą®•ą®³ąÆ ą®•ą®¾ą®ŸąÆą®šą®æą®Æą®•ą®®ąÆ" msgid "Unsubdivide" @@ -123435,10 +123303,6 @@ msgid "Adaptive Subdivision" msgstr "ą®¤ą®•ą®µą®®ąÆˆą®ŖąÆą®ŖąÆ ą®¤ąÆą®£ąÆˆą®ŖąÆą®Ŗą®æą®°ą®æą®µąÆ" -msgid "Levels Viewport" -msgstr "ą®Øą®æą®²ąÆˆą®•ą®³ąÆ ą®•ą®¾ą®ŸąÆą®šą®æą®Æą®•ą®®ąÆ" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "ą®‡ą®±ąÆą®¤ą®æ ą®…ą®³ą®µąÆą®•ąÆ‹ą®²ąÆ: ą®µą®“ą®™ąÆą®•ąÆą®¤ą®²ąÆ %.2f px, viewport %.2f px" @@ -123765,10 +123629,6 @@ msgid "Offset Y" msgstr "ą®†ą®ƒą®ŖąÆą®šąÆ†ą®ŸąÆ ą®’ą®ÆąÆ" -msgid "Undistortion" -msgstr "ą®µą®æą®°ąÆ‹ą®¤ą®®ąÆ" - - msgid "Dot" msgstr "ą®ŖąÆą®³ąÆą®³ą®æ" @@ -124494,10 +124354,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "ą®µą®¾ą®šą®²ąÆˆ ą®µą®æą®Ÿ ą®ŖąÆ†ą®°ą®æą®Æ ą®®ą®¤ą®æą®ŖąÆą®ŖąÆą®•ą®³ąÆ ą®‰ą®°ąÆą®µą®¾ą®•ąÆą®•ą®ŖąÆą®Ŗą®ŸąÆą®Ÿ ą®•ą®£ąÆą®£ą®æą®•ąÆą®•ąÆą®³ąÆ ą®‰ą®³ąÆą®³ą®©" -msgid "Has Alpha" -msgstr "ą®†ą®²ąÆą®Ŗą®¾ ą®‰ą®³ąÆą®³ą®¤ąÆ" - - msgid "Frame Count" msgstr "ą®šą®ŸąÆą®Ÿ ą®Žą®£ąÆą®£ą®æą®•ąÆą®•ąÆˆ" @@ -126470,6 +126326,14 @@ msgid "drag-" msgstr "ą®‡ą®“ąÆą®µąÆˆ-" +msgid "ON" +msgstr "ą®†ą®©ąÆ" + + +msgid "OFF" +msgstr "ą®…ą®£ąÆˆ" + + msgid "unsupported format" msgstr "ą®†ą®¤ą®°ą®æą®•ąÆą®•ą®ŖąÆą®Ŗą®Ÿą®¾ą®¤ ą®µą®Ÿą®æą®µą®®ąÆ" diff --git a/locale/po/th.po b/locale/po/th.po index 9083aa8156ac..551e62616614 100644 --- a/locale/po/th.po +++ b/locale/po/th.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2019-12-08 17:40+0700\n" "Last-Translator: gongpha \n" "Language-Team: Thai Translation Team \n" @@ -1864,6 +1864,10 @@ msgid "Mask" msgstr "ąø«ąø™ą¹‰ąø²ąøąø²ąø" +msgid "Metaball" +msgstr "ą¹€ąø”ąø•ąø²ąøšąø­ąø„" + + msgid "Names" msgstr "ąøŠąø·ą¹ˆąø­" @@ -1912,10 +1916,6 @@ msgid "View Regions" msgstr "ąø‚ąø­ąøšą¹€ąø‚ąø•ąø”ąøøąø”ąø”ąø­ąø‡" -msgid "Metaball" -msgstr "ą¹€ąø”ąø•ąø²ąøšąø­ąø„" - - msgid "Light" msgstr "ą¹ąøŖąø‡" @@ -4792,6 +4792,10 @@ msgid "Key %d" msgstr "ąø„ąøµąø¢ą¹Œ %d" +msgid "Cancel" +msgstr "ąø¢ąøą¹€ąø„ąø“ąø" + + msgctxt "Curve" msgid "CurvePath" msgstr "ą¹€ąøŖą¹‰ąø™ąø—ąø²ąø‡ą¹‚ąø„ą¹‰ąø‡" @@ -4802,10 +4806,6 @@ msgid "Surface" msgstr "ąøžąø·ą¹‰ąø™ąøœąø“ąø§" -msgid "Cancel" -msgstr "ąø¢ąøą¹€ąø„ąø“ąø" - - msgid "%s: %s" msgstr "%s: %s" @@ -5039,14 +5039,6 @@ msgid "Blender Render" msgstr "ąø•ąø±ąø§ą¹€ąø£ąø™ą¹€ąø”ąø­ąø£ą¹Œąø‚ąø­ąø‡ Blender" -msgid "ON" -msgstr "ą¹€ąø›ąø“ąø”" - - -msgid "OFF" -msgstr "ąø›ąø“ąø”" - - msgid "%d x %d" msgstr "%d x %d" @@ -5284,6 +5276,14 @@ msgid "Bksp" msgstr "ąø›ąøøą¹ˆąø”ąø¢ą¹‰ąø­ąø™ąø–ąø­ąø¢ąø«ąø„ąø±ąø‡" +msgid "ON" +msgstr "ą¹€ąø›ąø“ąø”" + + +msgid "OFF" +msgstr "ąø›ąø“ąø”" + + msgid "%s '%s' not found" msgstr "ą¹„ąø”ą¹ˆąøžąøš %s '%s'" diff --git a/locale/po/tr.po b/locale/po/tr.po index 07f6d0a2ab62..13e4308dce48 100644 --- a/locale/po/tr.po +++ b/locale/po/tr.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-12-10 23:56+0000\n" "Last-Translator: bitigchi \n" "Language-Team: Turkish \n" @@ -21713,10 +21713,6 @@ msgid "Display the object's name" msgstr "Nesnenin adını gƶrĆ¼ntĆ¼le" -msgid "Shape Key Lock" -msgstr "Şekil Anahtar Kilidi" - - msgid "Only show the active shape key at full value" msgstr "Yalnızca etkin şekil anahtarını tam değerde gƶster" @@ -29250,6 +29246,14 @@ msgid "Editor menu containing buttons" msgstr "DĆ¼ÄŸmeler iƧeren dĆ¼zenleyici menĆ¼sĆ¼" +msgid "Metaball" +msgstr "Metabol" + + +msgid "Show/Hide" +msgstr "Gƶster/Gizle" + + msgid "Names" msgstr "Adlar" @@ -29258,10 +29262,6 @@ msgid "Bone Roll" msgstr "Kemik Rulosu" -msgid "Show/Hide" -msgstr "Gƶster/Gizle" - - msgid "Clean Up" msgstr "Temizle" @@ -29350,10 +29350,6 @@ msgid "Assign Material" msgstr "Malzeme Atamak" -msgid "Metaball" -msgstr "Metabol" - - msgid "Light" msgstr "Işık" @@ -38368,30 +38364,14 @@ msgid "Create matte based on differences in color channels" msgstr "Renk kanallarındaki farklılıklara dayalı mat yaratın" -msgid "RGB color space" -msgstr "RGB renk uzayı" - - -msgid "HSV color space" -msgstr "HSV renk uzayı" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "YUV renk uzayı" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "YCbCr renk uzayı" - - msgctxt "Color" msgid "Limit Channel" msgstr "Sınır Kanalı" @@ -38865,26 +38845,6 @@ msgid "Mode of color processing" msgstr "Renk işleme modu" -msgid "Use RGB color processing" -msgstr "RGB renk işlemeyi kullan" - - -msgid "Use HSV color processing" -msgstr "HSV renk işlemeyi kullanın" - - -msgid "Use HSL color processing" -msgstr "HSL renk işlemeyi kullanın" - - -msgid "Use YCbCr color processing" -msgstr "YCbCr renk işlemeyi kullanın" - - -msgid "Use YUV color processing" -msgstr "YUV renk işlemeyi kullanın" - - msgid "Color space used for YCbCrA processing" msgstr "YCbCrA işleme iƧin kullanılan renk uzayı" @@ -39278,6 +39238,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "Renkler arasındaki 3B mesafeye dayalı mat oluşturun" +msgid "RGB color space" +msgstr "RGB renk uzayı" + + msgid "YCbCr suppression" msgstr "YCbCr baskılanması" @@ -40552,42 +40516,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Ƈeviriyi tanımlamak iƧin bağıl (giriş gƶrĆ¼ntĆ¼ boyutunun kesri) değerleri kullanın" -msgid "Wrapping" -msgstr "Sarma" - - -msgid "Wrap image on a specific axis" -msgstr "Resmi belirli bir eksende sarın" - - -msgid "No wrapping on X and Y" -msgstr "X ve Y'de sarma yok" - - msgid "X Axis" msgstr "X Eks" -msgid "Wrap all pixels on the X axis" -msgstr "X eksenindeki tĆ¼m pikselleri sarın" - - msgid "Y Axis" msgstr "Y Eks" -msgid "Wrap all pixels on the Y axis" -msgstr "Y eksenindeki tĆ¼m pikselleri sarın" - - msgid "Both Axes" msgstr "Her iki eksen" -msgid "Wrap all pixels on both axes" -msgstr "Her iki eksendeki tĆ¼m pikselleri sar" - - msgid "Map values to colors with the use of a gradient" msgstr "Bir degrade kullanarak değerleri renklere eşleyin" @@ -62194,6 +62134,22 @@ msgid "Add a collection info node to the current node editor" msgstr "Mevcut dĆ¼ÄŸĆ¼m dĆ¼zenleyicisine bir koleksiyon bilgi dĆ¼ÄŸĆ¼mĆ¼ ekleyin" +msgid "Source color" +msgstr "Kaynak renk" + + +msgid "Gamma Corrected" +msgstr "Gamma DĆ¼zeltildi" + + +msgid "The source color is gamma corrected" +msgstr "Kaynak renk gama dĆ¼zeltmelidir" + + +msgid "Has Alpha" +msgstr "Alfa var" + + msgctxt "Operator" msgid "Add File Node" msgstr "Dosya DĆ¼ÄŸĆ¼mĆ¼ Ekle" @@ -73784,18 +73740,6 @@ msgid "Drop colors to buttons" msgstr "DĆ¼ÄŸmelere renk bırak" -msgid "Source color" -msgstr "Kaynak renk" - - -msgid "Gamma Corrected" -msgstr "Gamma DĆ¼zeltildi" - - -msgid "The source color is gamma corrected" -msgstr "Kaynak renk gama dĆ¼zeltmelidir" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "Malzeme yuvalarına Malzeme Bırak" @@ -77980,10 +77924,6 @@ msgid "Yards" msgstr "Metre" -msgid "Convert World Material" -msgstr "DĆ¼nya Malzemesini DƶnĆ¼ÅŸtĆ¼r" - - msgid "Use Settings for" msgstr "Ayarları Kullan" @@ -78225,10 +78165,6 @@ msgid "Add all imported objects to a new collection" msgstr "TĆ¼m iƧe aktarılan nesneleri yeni bir koleksiyona ekle" -msgid "Create World Material" -msgstr "DĆ¼nya Malzemesi Yarat" - - msgid "Import All Materials" msgstr "TĆ¼m Malzemeleri Ä°thal Et" @@ -79150,14 +79086,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Yalnızca deformasyon değiştiricileri kullan (Ƨoklu ƧƶzĆ¼nĆ¼rlĆ¼k hariƧ tĆ¼m yapıcı değiştiricileri geƧici olarak devre dışı bırak)" -msgid "UV Sculpting" -msgstr "UV Yontması" - - -msgid "Strength Curve" -msgstr "GĆ¼Ć§ Eğrisi" - - msgid "Properties of vertex and weight paint mode" msgstr "Tepe noktası ve ağırlık boyama modunun ƶzellikleri" @@ -97528,6 +97456,14 @@ msgid "Enable this light in solid shading mode" msgstr "Bu ışığı katı gƶlgeleme modunda etkinleştirin" +msgid "UV Sculpting" +msgstr "UV Yontması" + + +msgid "Strength Curve" +msgstr "GĆ¼Ć§ Eğrisi" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "ArmatĆ¼r deformasyonu ve diğer amaƧlar iƧin kullanılan kĆ¶ÅŸe grubu" @@ -113963,48 +113899,8 @@ msgid "Sliding-Tool" msgstr "Kayan Alet" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "Yalnızca [X]/Y/Z ekseni (temizlemek iƧin X)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Yalnızca X/[Y]/Z ekseni (temizlemek iƧin Y)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "Yalnızca X/Y/[Z] ekseni (temizlemek iƧin Z)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = Eksen Kısıtlaması" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - Yalnızca konum (temizlemek iƧin G) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - Yalnızca dƶndĆ¼rme (temizlemek iƧin R) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - Yalnızca ƶlƧek (temizlemek iƧin S) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - Yalnızca Bendy Bone ƶzellikleri (temizlemek iƧin B) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - Yalnızca Ɩzel Ɩzellikler (temizlemek iƧin C) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - DƶnĆ¼ÅŸtĆ¼rme/Ɩzellik KĆ¼mesi Sınırı" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - Kemik gƶrĆ¼nĆ¼rlĆ¼ÄŸĆ¼nĆ¼ değiştir" +msgid "Cancel" +msgstr "Ä°ptal" msgid "No keyframes to slide between" @@ -114495,10 +114391,6 @@ msgid "Baked strokes are cleared" msgstr "Pişmiş vuruşlar temizlendi" -msgid "Cancel" -msgstr "Ä°ptal" - - msgid "Active Vertex Group is locked" msgstr "Aktif Vertex Grubu kilitli" @@ -117882,14 +117774,6 @@ msgid "UV map or surface attachment is invalid" msgstr "UV haritası veya yĆ¼zey eki geƧersiz" -msgid "ON" -msgstr "AƇIK" - - -msgid "OFF" -msgstr "KAPALI" - - msgid "No Grease Pencil frame to draw weight on" msgstr "Ɯzerine ağırlık Ƨizmek iƧin Grease Kalem ƧerƧevesi yok" @@ -118878,42 +118762,6 @@ msgid "Deleted %u drivers" msgstr "%u sĆ¼rĆ¼cĆ¼ silindi" -msgid "Decimate Keyframes" -msgstr "Anahtar Kareleri Azalt" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - Keskinliği Değiştir" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - Eğri BĆ¼kĆ¼lmesini Değiştir" - - -msgid "Ease Keys" -msgstr "Kolaylaştırma Tuşları" - - -msgid "Shear Keys" -msgstr "Anahtarları Kırk" - - -msgid "D - Toggle Direction" -msgstr "D - Yƶn Değiştirme" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Sağ UƧtan ƖlƧek" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Sol UƧtan ƖlƧek" - - -msgid "Scale from Neighbor Keys" -msgstr "Komşu Anahtarlardan ƖlƧek" - - msgid "Cannot find keys to operate on" msgstr "Ƈalıştırmak iƧin anahtarlar bulunamıyor" @@ -123457,8 +123305,8 @@ msgid "Clipping" msgstr "Kırpma" -msgid "Level Viewport" -msgstr "Seviye GƶrĆ¼nĆ¼mĆ¼" +msgid "Levels Viewport" +msgstr "Seviyeler GƶrĆ¼nĆ¼mĆ¼" msgid "Unsubdivide" @@ -123668,10 +123516,6 @@ msgid "Adaptive Subdivision" msgstr "Uyarlanabilir Alt BƶlĆ¼m" -msgid "Levels Viewport" -msgstr "Seviyeler GƶrĆ¼nĆ¼mĆ¼" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "Son ƖlƧek: Render %.2f piksel, GƶrĆ¼ntĆ¼leme Alanı %.2f piksel" @@ -124038,10 +123882,6 @@ msgid "Offset Y" msgstr "Ofset Y" -msgid "Undistortion" -msgstr "Bozulmama" - - msgid "Dot" msgstr "Nokta" @@ -124895,10 +124735,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "Eşik değerinden bĆ¼yĆ¼k değerler oluşturulan ağın iƧindedir" -msgid "Has Alpha" -msgstr "Alfa var" - - msgid "Frame Count" msgstr "ƇerƧeve Sayısı" @@ -127048,6 +126884,14 @@ msgid "drag-" msgstr "sĆ¼rĆ¼klemek-" +msgid "ON" +msgstr "AƇIK" + + +msgid "OFF" +msgstr "KAPALI" + + msgid "unsupported format" msgstr "desteklenmeyen biƧim" diff --git a/locale/po/uk.po b/locale/po/uk.po index 907d808fa262..dd33473d0969 100644 --- a/locale/po/uk.po +++ b/locale/po/uk.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-03-13 11:04+0000\n" "Last-Translator: Bartosz \n" "Language-Team: Ukrainian \n" @@ -19983,10 +19983,6 @@ msgid "Display the object's name" msgstr "ŠŸŠ¾ŠŗŠ°Š·ŃƒŠ²Š°Ń‚Šø Š½Š°Š·Š²Ńƒ Š¾Š±'єŠŗтŠ°" -msgid "Shape Key Lock" -msgstr "Š—Š°Ń„Ń–ŠŗсуŠ²Š°Ń‚Šø ŠŗŠ»ŃŽŃ‡ фŠ¾Ń€Š¼Šø" - - msgid "Display Texture Space" msgstr "ŠŸŠ¾ŠŗŠ°Š· ŠŸŃ€Š¾ŃŃ‚Š¾Ń€Ńƒ Š¢ŠµŠŗстур" @@ -26664,6 +26660,14 @@ msgid "Material slot name" msgstr "ŠŠ°Š·Š²Š° Š³Š½Ń–Š·Š“Š° Š¼Š°Ń‚ŠµŃ€Ń–Š°Š»Ńƒ" +msgid "Metaball" +msgstr "ŠœŠµŃ‚Š°ŠŗуŠ»Ń" + + +msgid "Show/Hide" +msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚Šø/ŠæрŠøхŠ¾Š²Š°Ń‚Šø" + + msgid "Names" msgstr "ŠŠ°Š·Š²Šø" @@ -26672,10 +26676,6 @@ msgid "Bone Roll" msgstr "ŠŸŃ€Š¾ŠŗручŠµŠ½Š½Ń ŠšŃ–стŠŗŠø" -msgid "Show/Hide" -msgstr "ŠŸŠ¾ŠŗŠ°Š·Š°Ń‚Šø/ŠæрŠøхŠ¾Š²Š°Ń‚Šø" - - msgid "Clean Up" msgstr "Š’ŠøчŠøщŠµŠ½Š½Ń" @@ -26764,10 +26764,6 @@ msgid "Assign Material" msgstr "ŠŸŃ€ŠøŠ·Š½Š°Ń‡ŠøтŠø ŠœŠ°Ń‚ŠµŃ€Ń–Š°Š»" -msgid "Metaball" -msgstr "ŠœŠµŃ‚Š°ŠŗуŠ»Ń" - - msgid "Light" msgstr "Š”Š»Š°Š±ŠŗŠ¾" @@ -34369,26 +34365,10 @@ msgid "Channel Key" msgstr "ŠšŠ»ŃŽŃ‡ ŠŗŠ°Š½Š°Š»Ńƒ" -msgid "RGB color space" -msgstr "ŠšŠ¾Š»Ń–Ń€Š½ŠøŠ¹ ŠæрŠ¾ŃŃ‚Ń–Ń€ RGB" - - -msgid "HSV color space" -msgstr "ŠšŠ¾Š»Ń–Ń€Š½ŠøŠ¹ ŠæрŠ¾ŃŃ‚Ń–Ń€ HSV" - - -msgid "YUV color space" -msgstr "ŠšŠ¾Š»Ń–Ń€Š½ŠøŠ¹ ŠæрŠ¾ŃŃ‚Ń–Ń€ YUV" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "ŠšŠ¾Š»Ń–Ń€Š½ŠøŠ¹ ŠæрŠ¾ŃŃ‚Ń–Ń€ YCbCr" - - msgid "Limit by this channel's value" msgstr "ŠžŠ±Š¼ŠµŠ¶ŠøтŠø Š·Š½Š°Ń‡ŠµŠ½Š½ŃŠ¼Šø цьŠ¾Š³Š¾ ŠŗŠ°Š½Š°Š»Ńƒ" @@ -35089,6 +35069,10 @@ msgid "Distance Key" msgstr "ŠšŠ»ŃŽŃ‡ Š²Ń–Š“стŠ°Š½Ń–" +msgid "RGB color space" +msgstr "ŠšŠ¾Š»Ń–Ń€Š½ŠøŠ¹ ŠæрŠ¾ŃŃ‚Ń–Ń€ RGB" + + msgid "YCbCr suppression" msgstr "Š—Š°Š“Š°Š²Š»ŠµŠ½Š½Ń YCbCr" @@ -35930,42 +35914,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Š’ŠøŠŗŠ¾Ń€ŠøстŠ°Ń‚Šø Š²Ń–Š“Š½Š¾ŃŠ½Ń– (чŠ°ŃŃ‚ŠøŠ½Š° Š²Ń–Š“ рŠ¾Š·Š¼Ń–Ń€Ńƒ Š²Ń…Ń–Š“Š½Š¾Š³Š¾ Š·Š¾Š±Ń€Š°Š¶ŠµŠ½Š½Ń) Š·Š½Š°Ń‡ŠµŠ½Š½Ń Š“Š»Ń Š²ŠøŠ·Š½Š°Ń‡ŠµŠ½Š½Ń ŠæŠµŃ€ŠµŠ¼Ń–щŠµŠ½Š½Ń" -msgid "Wrapping" -msgstr "ŠžŠ±Š³Š¾Ń€Ń‚Š°Š½Š½Ń" - - -msgid "Wrap image on a specific axis" -msgstr "ŠžŠ±Š³Š¾Ń€Ń‚Š°Ń‚Šø Š·Š¾Š±Ń€Š°Š¶ŠµŠ½Š½Ń Š·Š° Š²ŠŗŠ°Š·Š°Š½ŠøŠ¼Šø Š¾ŃŃŠ¼Šø" - - -msgid "No wrapping on X and Y" -msgstr "ŠŠµ Š¾Š±Š³Š¾Ń€Ń‚Š°Ń‚Šø Š·Š° X тŠ° Y" - - msgid "X Axis" msgstr "Š’Ń–ŃŃŒ X" -msgid "Wrap all pixels on the X axis" -msgstr "ŠžŠ±Š³Š¾Ń€Ń‚Š°Ń‚Šø Š²ŃŃ– ŠæіŠŗсŠµŠ»Ń– Š·Š° Š²Ń–ссю X" - - msgid "Y Axis" msgstr "Š’Ń–ŃŃŒ Y" -msgid "Wrap all pixels on the Y axis" -msgstr "ŠžŠ±Š³Š¾Ń€Ń‚Š°Ń‚Šø Š²ŃŃ– ŠæіŠŗсŠµŠ»Ń– Š·Š° Š²Ń–ссю Y" - - msgid "Both Axes" msgstr "ŠžŠ±ŠøŠ“Š²Ń– Š¾ŃŃ–" -msgid "Wrap all pixels on both axes" -msgstr "ŠžŠ±Š³Š¾Ń€Ń‚Š°Ń‚Šø усі ŠæіŠŗсŠµŠ»Ń– Š·Š° Š¾Š±Š¾Š¼Š° Š¾ŃŃŠ¼Šø" - - msgid "Vector Blur" msgstr "Š’ŠµŠŗтŠ¾Ń€Š½ŠøŠ¹ рŠ¾Š·Š¼ŠøŠ²" @@ -50472,6 +50432,18 @@ msgid "Reset viewable area to show selected strips range" msgstr "Š”ŠŗŠøŠ½ŃƒŃ‚Šø Š²ŠøŠ“ŠøŠ¼Ńƒ Š¾Š±Š»Š°ŃŃ‚ŃŒ, щŠ¾Š± ŠæŠ¾ŠŗŠ°Š·Š°Ń‚Šø Š“іŠ°ŠæŠ°Š·Š¾Š½ Š²ŠøŠ±Ń€Š°Š½Šøх сŠ¼ŃƒŠ¶Š¾Šŗ" +msgid "Source color" +msgstr "ŠšŠ¾Š»Ń–Ń€ Š“Š¶ŠµŃ€ŠµŠ»Š°" + + +msgid "Gamma Corrected" +msgstr "Š“Š°Š¼Š¼Ńƒ Š²ŠøŠæрŠ°Š²Š»ŠµŠ½Š¾" + + +msgid "The source color is gamma corrected" +msgstr "Š”Š¶ŠµŃ€ŠµŠ»ŃŒŠ½ŠøŠ¹ ŠŗŠ¾Š»Ń–Ń€ є Š· ŠŗŠ¾Ń€ŠµŠŗцією Š³Š°Š¼Š¼Šø" + + msgctxt "Operator" msgid "Add File Node" msgstr "Š”Š¾Š“Š°Ń‚Šø Š²ŃƒŠ·Š¾Š» фŠ°Š¹Š»Ńƒ" @@ -59666,18 +59638,6 @@ msgid "Drop colors to buttons" msgstr "ŠŸŠµŃ€ŠµŃ‚яŠ³Ń‚Šø ŠŗŠ¾Š»ŃŒŠ¾Ń€Šø Š½Š° ŠŗŠ½Š¾ŠæŠŗŠø" -msgid "Source color" -msgstr "ŠšŠ¾Š»Ń–Ń€ Š“Š¶ŠµŃ€ŠµŠ»Š°" - - -msgid "Gamma Corrected" -msgstr "Š“Š°Š¼Š¼Ńƒ Š²ŠøŠæрŠ°Š²Š»ŠµŠ½Š¾" - - -msgid "The source color is gamma corrected" -msgstr "Š”Š¶ŠµŃ€ŠµŠ»ŃŒŠ½ŠøŠ¹ ŠŗŠ¾Š»Ń–Ń€ є Š· ŠŗŠ¾Ń€ŠµŠŗцією Š³Š°Š¼Š¼Šø" - - msgctxt "Operator" msgid "Edit Source" msgstr "Š”Š¶ŠµŃ€ŠµŠ»Š¾ рŠµŠ“Š°Š³ŃƒŠ²Š°Š½Š½Ń" @@ -63501,10 +63461,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Š’ŠøŠŗŠ¾Ń€ŠøстŠ°Ń‚Šø Š»ŠøшŠµ Š¼Š¾Š“ŠøфіŠŗŠ°Ń‚Š¾Ń€Šø Š“ŠµŃ„Š¾Ń€Š¼Š°Ń†Ń–Ń— (тŠøŠ¼Ń‡Š°ŃŠ¾Š²Šµ Š²Ń–Š“ŠŗŠ»ŃŽŃ‡ŠµŠ½Š½Ń Š²ŃŃ–Ń… Š¼Š¾Š“ŠøфіŠŗŠ°Ń‚Š¾Ń€Ń–Š² ŠŗŠ¾Š½ŃŃ‚Ń€ŃƒŃŽŠ²Š°Š½Š½Ń, Š·Š° Š²ŠøŠ½ŃŃ‚ŠŗŠ¾Š¼ Š¼ŃƒŠ»ŃŒŃ‚ŠøрŠ¾Š·Š“іŠ»ŃŒŠ½Š¾ŃŃ‚Ń–)" -msgid "UV Sculpting" -msgstr "UV-Š»Ń–ŠæŠ»ŠµŠ½Š½Ń" - - msgid "Properties of vertex and weight paint mode" msgstr "Š’Š»Š°ŃŃ‚ŠøŠ²Š¾ŃŃ‚Ń– рŠµŠ¶ŠøŠ¼Ń–Š² Š¼Š°Š»ŃŽŠ²Š°Š½Š½Ń Š²ŠµŃ€ŃˆŠøŠ½ і Š²Š°Š³Š¾Š¼Š¾ŃŃ‚ŠµŠ¹" @@ -77978,6 +77934,10 @@ msgid "Color of the light's specular highlight" msgstr "ŠšŠ¾Š»Ń–Ń€ Š“Š·ŠµŃ€ŠŗŠ°Š»ŃŒŠ½Š¾Š³Š¾ ŠæіŠ“сŠ²Ń–Ń‡ŃƒŠ²Š°Š½Š½Ń" +msgid "UV Sculpting" +msgstr "UV-Š»Ń–ŠæŠ»ŠµŠ½Š½Ń" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "Š“Ń€ŃƒŠæŠ° Š²ŠµŃ€ŃˆŠøŠ½, щŠ¾ Š²ŠøŠŗŠ¾Ń€ŠøстŠ¾Š²ŃƒŃ”Ń‚ŃŒŃŃ Š“Š»Ń Š°Ń€Š¼Š°Ń‚ŃƒŃ€Š½Š¾Š³Š¾ Š“ŠµŃ„Š¾Ń€Š¼ŃƒŠ²Š°Š½Š½Ń тŠ° іŠ½ŃˆŠøх ціŠ»ŠµŠ¹" @@ -86677,44 +86637,8 @@ msgid "Sliding-Tool" msgstr "Š—Š°ŃŃ–Š± ŠšŠ¾Š²Š·Š°Š½Š½Ń" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "[X]/Y/Z Š²Ń–ŃŃŒ Š»ŠøшŠµ (X Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "X/[Y]/Z Š²Ń–ŃŃŒ Š»ŠøшŠµ (Y Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "X/Y/[Z] Š²Ń–ŃŃŒ Š»ŠøшŠµ (Z Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = ŠŸŃ€ŠøŠ¼ŃƒŃ Š·Š° Š²Ń–ссю" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - Š»ŠøшŠµ ŠæŠ¾Š»Š¾Š¶ŠµŠ½Š½Ń (G Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - Š»ŠøшŠµ Š¾Š±ŠµŃ€Ń‚Š°Š½Š½Ń (R Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - Š»ŠøшŠµ Š¼Š°ŃŃˆŃ‚Š°Š± (S Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - Š»ŠøшŠµ Š²Š»Š°ŃŃ‚ŠøŠ²Š¾ŃŃ‚Ń– Š³Š½ŃƒŃ‚Šøх ŠŗістŠ¾Šŗ (B Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - Š»ŠøшŠµ Š²Š»Š°ŃŠ½Ń– Š²Š»Š°ŃŃ‚ŠøŠ²Š¾ŃŃ‚Ń– (C Š“Š»Ń Š·Ń‡ŠøщŠµŠ½Š½Ń) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - Š¾Š±Š¼ŠµŠ¶ŠøтŠø Š½Š°Š±Š¾Ń€Š¾Š¼ трŠ°Š½ŃŃ„Š¾Ń€Š¼/Š²Š»Š°ŃŃ‚ŠøŠ²Š¾ŃŃ‚ŠµŠ¹" +msgid "Cancel" +msgstr "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø" msgid "No keyframes to slide between" @@ -86927,10 +86851,6 @@ msgid "Unable to find layer to add" msgstr "ŠŠµŠ¼Š¾Š¶Š»ŠøŠ²Š¾ Š·Š½Š°Š¹Ń‚Šø шŠ°Ń€ Š“Š»Ń Š“Š¾Š“Š°Š½Š½Ń" -msgid "Cancel" -msgstr "Š”ŠŗŠ°ŃŃƒŠ²Š°Ń‚Šø" - - msgid "Could not resolve path '%s'" msgstr "ŠŠµŠ¼Š¾Š¶Š»ŠøŠ²Š¾ ŠæŠµŃ€ŠµŠ¾Š±Ń‡ŠøсŠ»ŠøтŠø шŠ»ŃŃ… %s" @@ -89222,14 +89142,6 @@ msgid "File not found '%s'" msgstr "Š¤Š°Š¹Š» Š½Šµ Š·Š½Š°Š¹Š“ŠµŠ½Š¾ '%s'" -msgid "ON" -msgstr "Š£Š²Ń–Š¼ŠŗŠ½." - - -msgid "OFF" -msgstr "Š’ŠøŠ¼ŠŗŠ½." - - msgid "Active group is locked, aborting" msgstr "ŠŠŗтŠøŠ²Š½Š° Š³Ń€ŃƒŠæŠ° Š·Š°Š±Š»Š¾ŠŗŠ¾Š²Š°Š½Š°, ŠæрŠøŠæŠøŠ½ŠµŠ½Š¾" @@ -89935,10 +89847,6 @@ msgid "All %d rotation channels were filtered" msgstr "Š£ŃŃ– %d ŠŗŠ°Š½Š°Š»Ń–Š² Š¾Š±ŠµŃ€Ń‚Š°Š½Š½Ń Š±ŃƒŠ»Š¾ фіŠ»ŃŒŃ‚Ń€Š¾Š²Š°Š½Š¾" -msgid "Decimate Keyframes" -msgstr "Š”ŠæрŠ¾ŃŃ‚ŠøтŠø ŠšŠ»ŃŽŃ‡ŠŗŠ°Š“рŠø" - - msgid "Discard" msgstr "Š’Ń–Š“ŠŗŠøŠ“Š°Š½Š½Ń" @@ -92141,7 +92049,7 @@ msgid "Flip UDIM" msgstr "ŠŸŠµŃ€ŠµŠ²ŠµŃ€Ń‚ UDIM" -msgid "Level Viewport" +msgid "Levels Viewport" msgstr "Š Ń–Š²Š½Ń– ŠžŠ³Š»ŃŠ“Š²Ń–ŠŗŠ½Š¾" @@ -92245,10 +92153,6 @@ msgid "Adaptive Subdivision" msgstr "ŠŠ“Š°ŠæтŠøŠ²Š½Šµ ŠŸŃ–Š“ŠæŠ¾Š“іŠ»ŠµŠ½Š½Ń" -msgid "Levels Viewport" -msgstr "Š Ń–Š²Š½Ń– ŠžŠ³Š»ŃŠ“Š²Ń–ŠŗŠ½Š¾" - - msgid "External library data" msgstr "Š”Š°Š½Ń– Š·Š¾Š²Š½Ń–ŃˆŠ½ŃŒŠ¾Ń— Š±Ń–Š±Š»Ń–Š¾Ń‚ŠµŠŗŠø" @@ -92880,6 +92784,14 @@ msgid "dbl-" msgstr "2х-" +msgid "ON" +msgstr "Š£Š²Ń–Š¼ŠŗŠ½." + + +msgid "OFF" +msgstr "Š’ŠøŠ¼ŠŗŠ½." + + msgid "unsupported format" msgstr "Š½ŠµŠæіŠ“трŠøŠ¼ŃƒŠ²Š°Š½ŠøŠ¹ фŠ¾Ń€Š¼Š°Ń‚" diff --git a/locale/po/ur.po b/locale/po/ur.po index 7ac8cf01fb9b..bbd4a0026a05 100644 --- a/locale/po/ur.po +++ b/locale/po/ur.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-09-26 13:56+0000\n" "Last-Translator: Sarfaraz Baig \n" "Language-Team: Urdu \n" @@ -25097,10 +25097,6 @@ msgid "Display the object's name" msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ®­ļ®ļŗ© ļ»”ļŗŽļ»§ ļŗŽļ® ļŗ°ļÆæļ­¼" -msgid "Shape Key Lock" -msgstr "ļ»žļ®‘ļŗ· ļƽļ® ļ»»ļ»æļŗŽļŗ— ļƼļŗŖļÆæļ» ļ®" - - msgid "Only show the active shape key at full value" msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ®­ļ®ļŗ© ļŗ®ļ­˜ ļŗ­ļŗŖļ»— ļƼļŗ­ļ»®ļ­˜ ļ»®ļ® ļŗŖļÆæļ» ļ® ļƽļ® ļ»žļ®‘ļŗ· ļ»ļŗŽļ»Œļ»“ ļ»‘ļŗ®ļŗ»" @@ -33210,6 +33206,14 @@ msgid "Editor menu containing buttons" msgstr "ļ»®ļ»ØļÆæļ»£ ļŗ®ļ­©ļƾļ®‰ļƾļŗ ļ»žļ»¤ļŗ˜ļŗøļ»£ ļŗ®ļ­˜ ļ®žļ»®ļ»Øļ­©ļŗ‘" +msgid "Metaball" +msgstr "ļ»ļŗŽļŗ‘ ļŗŽļ­©ļÆæļ»£" + + +msgid "Show/Hide" +msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ­™ļ®­ļ­¼/ļ®ŸļÆæļŗ‹ļŗŽļ®­ļ®ļŗ©" + + msgid "Names" msgstr "ļ»”ļŗŽļ»§" @@ -33218,10 +33222,6 @@ msgid "Bone Roll" msgstr "ļ»ļ»­ļŗ­ ļ»„ļ»®ļŗ‘" -msgid "Show/Hide" -msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ­™ļ®­ļ­¼/ļ®ŸļÆæļŗ‹ļŗŽļ®­ļ®ļŗ©" - - msgid "Clean Up" msgstr "ļƽļŗ‹ļŗŽļ»”ļŗ»" @@ -33310,10 +33310,6 @@ msgid "Assign Material" msgstr "ļ®Ÿļƾļŗ®ļ® ļŗ¾ļƾļ»®ļ»”ļŗ— ļŗ©ļŗļ»®ļ»£" -msgid "Metaball" -msgstr "ļ»ļŗŽļŗ‘ ļŗŽļ­©ļÆæļ»£" - - msgid "Light" msgstr "ļƽļ»Øļŗ·ļ»­ļŗ­" @@ -43249,30 +43245,14 @@ msgid "Create matte based on differences in color channels" msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ»Øļŗ‘ ļ­§ļÆæļ»£ ļŗ®ļ­˜ ļŗ©ļŗŽļÆæļ»Øļŗ‘ ļƽļ® ļ»•ļŗ®ļ»“ ļ®ŸļÆæļ»£ ļŗ°ļ» ļ»ØļÆæļ­¼ ļ»¦ļÆæļ®•ļ»§ļŗ­" -msgid "RGB color space" -msgstr "ļ®§ļ®•ļŗŸ ļƽļ® ļ®“ļ»§ļŗ­ ļƽļŗ’ļÆæļŗŸļŗ­ļŗ" - - -msgid "HSV color space" -msgstr "HSV ļ®§ļ®•ļŗŸ ļƽļ® ļ®“ļ»§ļŗ­" - - msgid "YUV" msgstr "Y ļƼļ»­ļ»®ļƾ" -msgid "YUV color space" -msgstr "Y ļ®§ļ®•ļŗŸ ļƽļ® ļ®“ļ»§ļŗ­ ļƼļ»­ļ»®ļƾ" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "YCbCr ļ®§ļ®•ļŗŸ ļƽļ® ļ®“ļ»§ļŗ­" - - msgctxt "Color" msgid "Limit Channel" msgstr "ļ®Ÿļƾļŗ®ļ® ļŗ©ļ»­ļŗŖļŗ¤ļ»£ ļ»®ļ® ļ»žļ»ØļÆæļ­¼" @@ -43775,26 +43755,6 @@ msgid "Mode of color processing" msgstr "ļ®§ļ»˜ļƾļŗ®ļ»ƒ ļŗŽļ® ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜ ļ®“ļ»§ļŗ­" -msgid "Use RGB color processing" -msgstr "ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜ ļ®“ļ»§ļŗ­ ļƽļŗ’ļÆæļŗŸļŗ­ļŗ" - - -msgid "Use HSV color processing" -msgstr "HSV ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļŗŽļ® ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜ ļ®“ļ»§ļŗ­" - - -msgid "Use HSL color processing" -msgstr "HSL ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļŗŽļ® ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜ ļ®“ļ»§ļŗ­" - - -msgid "Use YCbCr color processing" -msgstr "YCbCr ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļŗŽļ® ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜ ļ®“ļ»§ļŗ­" - - -msgid "Use YUV color processing" -msgstr "Y ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļŗŽļ® ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜ ļ®“ļ»§ļŗ­ ļƼļ»­ļ»®ļƾ" - - msgid "Color space used for YCbCrA processing" msgstr "YCbCrA ļ®§ļ®•ļŗŸ ļ»¦ļÆæļ®•ļ»§ļŗ­ ļƽļ»Ÿļŗļ»­ ļ®Æļ»§ļ»®ļ®Ø ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®“ļ»Øļŗ“ļÆæļŗ³ļ»­ļŗ®ļ­˜" @@ -44240,6 +44200,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ»Øļŗ‘ ļ­§ļÆæļ»£ ļŗ®ļ­˜ ļŗ©ļŗŽļÆæļ»Øļŗ‘ ļƽļ® ļ®Æļ» ļŗ»ļŗŽļ»“ 3D ļ»„ļŗŽļÆæļ»£ļŗ­ļŗ© ļ®Æļ® ļ®žļ»®ļ®•ļ»§ļŗ­" +msgid "RGB color space" +msgstr "ļ®§ļ®•ļŗŸ ļƽļ® ļ®“ļ»§ļŗ­ ļƽļŗ’ļÆæļŗŸļŗ­ļŗ" + + msgid "YCbCr suppression" msgstr "YCbCr ļŗŽļ»§ļŗŽļŗ‘ļŗ©" @@ -45638,42 +45602,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļ®Ÿļƾļŗ­ļŗŖļ»— (ļ®§ļŗ¼ļŗ£ ļŗŽļ® ļŗ°ļŗ‹ļŗŽļŗ³ ļŗžļÆæļ»£ļŗ ļ­§ļ­˜ ļ»„ļŗ) ļŗ­ļŗļŗ© ļ®§ļŗ˜ļŗ·ļŗ­ ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļŗ–ļŗ£ļŗŽļŗæļ»­ ļƽļ® ļ®§ļ»¤ļŗŸļŗ®ļŗ—" -msgid "Wrapping" -msgstr "ļŗŽļ»Øļ­©ļÆæļ­™ļ»Ÿ" - - -msgid "Wrap image on a specific axis" -msgstr "ļ®ŸļÆæļ­©ļÆæļ­™ļ»Ÿ ļŗ®ļ­˜ ļŗ­ļ»®ļŗ¤ļ»£ ļŗ¹ļ»®ļŗ¼ļŗØļ»£ ļ®ļƾļŗ ļ»®ļ® ļŗ®ļƾļ»®ļŗ¼ļŗ—" - - -msgid "No wrapping on X and Y" -msgstr "X ļŗ­ļ»­ļŗ Y ļ®ŸļÆæļ®©ļ»§ ļ®“ļ»Øļ­™ļƾļŗ­ ļƽļŗ‹ļ»®ļ® ļŗ®ļ­˜" - - msgid "X Axis" msgstr "ļŗ­ļ»®ļŗ¤ļ»£ ļŗ²ļ®‘ļƾļŗ" -msgid "Wrap all pixels on the X axis" -msgstr "ļ®ŸļÆæļ­©ļÆæļ­™ļ»Ÿ ļŗ®ļ­˜ ļŗ­ļ»®ļŗ¤ļ»£ X ļ»®ļ® ļŗ°ļ» ļŗ“ļ®‘ļ­˜ ļ»”ļŗŽļ»¤ļŗ—" - - msgid "Y Axis" msgstr "Y ļŗ­ļ»®ļŗ¤ļ»£" -msgid "Wrap all pixels on the Y axis" -msgstr "ļ®Ÿļƾļŗ© ļ­§ļÆæļ­™ļ»Ÿ ļŗ®ļ­˜ ļŗ­ļ»®ļŗ¤ļ»£ Y ļ»®ļ® ļŗ°ļ» ļŗ“ļ®‘ļ­˜ ļ»”ļŗŽļ»¤ļŗ—" - - msgid "Both Axes" msgstr "ļŗ­ļ»®ļŗ¤ļ»£ ļ®žļ»®ļ»§ļ»­ļŗ©" -msgid "Wrap all pixels on both axes" -msgstr "ļ®Ÿļƾļŗ© ļ­§ļÆæļ­™ļ»Ÿ ļŗ®ļ­˜ ļ®žļ»­ļŗ­ļ»®ļŗ¤ļ»£ ļ®žļ»®ļ»§ļ»­ļŗ© ļ»®ļ® ļŗ°ļ» ļŗ“ļ®‘ļ­˜ ļ»”ļŗŽļ»¤ļŗ—" - - msgid "Map values to colors with the use of a gradient" msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ»Øļŗ‘ ļ®§ļŗøļ»˜ļ»§ ļŗŽļ® ļ®žļ»­ļŗ­ļŗŖļ»— ļƽļ® ļ®žļ»®ļ®•ļ»§ļŗ­ ļ®Æļŗ³ ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļ®Æļ® ļ»„ļ»¼ļ»æļÆæļ»£" @@ -69423,6 +69363,22 @@ msgid "Add a collection info node to the current node editor" msgstr "ļ®Ÿļƾļŗ®ļ® ļ»žļ»£ļŗŽļŗ· ļ®ˆļ»®ļ»§ ļŗ•ļŗŽļ»£ļ»®ļ» ļ»Œļ»£ ļ®§ļ»‹ļ»®ļ»¤ļŗ ļ»£ ļ®ļƾļŗ ļ®ŸļÆæļ»£ ļŗ®ļ­©ļƾļ®‰ļƾļŗ ļ®ˆļ»®ļ»§ ļ®¦ļŗ©ļ»®ļŗŸļ»®ļ»£" +msgid "Source color" +msgstr "ļ®“ļ»§ļŗ­ ļŗŽļ® ļŗ¬ļŗ§ļŗŽļ»£" + + +msgid "Gamma Corrected" +msgstr "ļŗŽļÆæļ® ļŗ–ļŗ³ļŗ­ļŗ© ļ®Æļ»§ ļŗŽļ»£ļŗŽļ®”" + + +msgid "The source color is gamma corrected" +msgstr "ļ®Æļ®Ø ļŗŽļÆæļ®” ļŗŽļÆæļ® ļŗ–ļŗ³ļŗ­ļŗ© ļŗŽļ»£ļŗŽļ®” ļ®“ļ»§ļŗ­ ļŗŽļ® ļŗ¬ļŗ§ļŗŽļ»£" + + +msgid "Has Alpha" +msgstr "ļ®Æļ®Ø ļŗŽļ»”ļ»Ÿļŗ" + + msgctxt "Operator" msgid "Add File Node" msgstr "ļ®Ÿļƾļŗ®ļ® ļ»žļ»£ļŗŽļŗ· ļ®ˆļ»®ļ»§ ļ»žļŗ‹ļŗŽļ»“" @@ -81951,18 +81907,6 @@ msgid "Drop colors to buttons" msgstr "ļ®Ÿļƾļ®Œļ»®ļ®­ļ­¼ ļŗ®ļ­˜ ļ®žļ»®ļ»Øļ­©ļŗ‘ ļ»®ļ® ļ®žļ»®ļ®•ļ»§ļŗ­" -msgid "Source color" -msgstr "ļ®“ļ»§ļŗ­ ļŗŽļ® ļŗ¬ļŗ§ļŗŽļ»£" - - -msgid "Gamma Corrected" -msgstr "ļŗŽļÆæļ® ļŗ–ļŗ³ļŗ­ļŗ© ļ®Æļ»§ ļŗŽļ»£ļŗŽļ®”" - - -msgid "The source color is gamma corrected" -msgstr "ļ®Æļ®Ø ļŗŽļÆæļ®” ļŗŽļÆæļ® ļŗ–ļŗ³ļŗ­ļŗ© ļŗŽļ»£ļŗŽļ®” ļ®“ļ»§ļŗ­ ļŗŽļ® ļŗ¬ļŗ§ļŗŽļ»£" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "ļ®ŸļÆæļ»Ÿļŗļ®ˆ ļ»žļƾļŗ®ļ­©ļÆæļ»£ ļ®ŸļÆæļ»£ ļŗ²ļ­Øļ»¼ļ»æļŗ³ ļ»žļƾļŗ®ļÆæļ­©ļ»£" @@ -86472,10 +86416,6 @@ msgid "Yards" msgstr "ļŗ°ļ®”" -msgid "Convert World Material" -msgstr "ļ®Ÿļƾļŗ®ļ® ļ»žļƾļŗŖļŗ’ļŗ— ļ»®ļ® ļŗ©ļŗļ»®ļ»£ ļƽļ»¤ļ»ŸļŗŽļ»‹" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "ļ®Æļ®Ø ļŗŽļŗ—ļ»®ļ®Ø ļŗļŗ®ļŗæ ļŗ®ļ­©ļ®‘ļƾļ»­ ļƼļŗ­ļŗŽļÆæļŗ˜ļŗ§ļŗ ļŗŽļ® ļ®“ļ»§ļŗ­ ļ®Æļ® ļŗ–ļŗ§ļŗŽļŗ³ ļ®ŸļÆæļ»£ ļŗ²ļŗŸ ŲŒļ®Æļ®Ø ļƽļŗ—ļ»®ļ®Ø ļŗ–ļŗ§ļŗŽļŗ³ ļƽļ® ļ»ļ»®ļŗ£ļŗŽļ»£ ļ®ļ» ļŗ“ļ»Øļ»£ ļ®Æļŗ³ ļŗ­ļ®‰ļÆæļŗ· ļ®‰ļ»§ļŗ…ļŗļŗ®ļ®” ļ®ļÆæļŗ‘ ļ®ŸļÆæļ»£ ļŗ²ļŗŸ ŲŒļ®Æļ®Ø ļŗŽļŗ—ļŗ®ļ® ļ»”ļŗŽļ® ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļŗ©ļŗļ»®ļ»£ ļ®¦ļŗ©ļŗŽļŗ³ ļ»ļŗŽļŗ¤ļ»Ÿļŗ ļƽļ»“ ļ®Ÿļƾļŗ®ļ® ļ»žļƾļŗŖļŗ’ļŗ— ļ®ŸļÆæļ»£ ļ­§ļŗ‹ļ»»ļ»æ ļ»”ļ»­ļ®ˆ USD ļ»®ļ® ļŗ©ļŗļ»®ļ»£ ļƽļ»¤ļ»ŸļŗŽļ»‹" @@ -86797,10 +86737,6 @@ msgid "Add all imported objects to a new collection" msgstr "ļ®Ÿļƾļŗ®ļ® ļ»žļ»£ļŗŽļŗ· ļ®ŸļÆæļ»£ ļ®§ļ»‹ļ»®ļ»¤ļŗ ļ»£ ļ®ÆļŗŒļ»§ ļ®ļƾļŗ ļ»®ļ® Ų”ļŗŽļÆæļŗ·ļŗ ļ®¦ļŗŖļŗ· ļŗŖļ»£ļŗļŗ­ļŗ© ļ»”ļŗŽļ»¤ļŗ—" -msgid "Create World Material" -msgstr "ļ®ŸļÆæļŗ‹ļŗŽļ»Øļŗ‘ ļŗ©ļŗļ»®ļ»£ ļƽļ»¤ļ»ŸļŗŽļ»‹" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "ļ®Ÿļƾļŗ®ļ® ļ»žļƾļŗŖļŗ’ļŗ— ļ®ŸļÆæļ»£ ļŗ­ļ®‰ļÆæļŗ· ļ®‰ļ»§ļŗ…ļŗļŗ®ļ®” ļ®ļÆæļŗ‘ ļ®‰ļ»Ÿļŗ­ļ»­ ļ»®ļ® ļ­§ļŗ‹ļ»»ļ»æ ļ»”ļ»­ļ®ˆ USD ļ®¦ļŗŖļŗ· ļŗ–ļ»“ļŗŽļƾļŗ­ļŗ© ļƽļ» ļ®©ļ­˜" @@ -87806,14 +87742,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "(ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»Œļ»“ ļŗ®ļÆæļ» ļŗ®ļ­˜ ļŗ­ļ»®ļ»ƒ ļƽļŗæļŗ­ļŗŽļ»‹ ļ»®ļ® ļ®žļ»­ļŗ­ļŗŽļ® ļŗ®ļŗ‹ļŗŽļ»”ļƾļ®ˆļ»®ļ»£ ļƼļŗ®ļÆæļ»¤ļ»Œļŗ— ļ»”ļŗŽļ»¤ļŗ— ļ®¦ļ»­ļ»¼ļ»æļ»‹ ļ®Æļ® ļ»¦ļŗ·ļ»®ļ»Ÿļ»­ļŗ°ļƾļŗ­ ļƽļ­©ļ» ļ»£) ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļŗ®ļŗ‹ļŗŽļ»”ļƾļ®ˆļ»®ļ»£ ļ»¦ļŗøļÆæļ»£ļŗ­ļŗŽļ»”ļƾļ®ˆ ļ»‘ļŗ®ļŗ»" -msgid "UV Sculpting" -msgstr "ļƼļŗÆļŗŽļŗ³ ļ®§ļ»¤ļŗ“ļŗ ļ»£ ļƼļ»­ļ»®ļƾ" - - -msgid "Strength Curve" -msgstr "ļŗ®ļ®ļ»­ ļŗ–ļ»—ļŗŽļ»ƒ" - - msgid "Properties of vertex and weight paint mode" msgstr "ļŗ•ļŗŽļÆæļŗ»ļ»®ļŗ¼ļŗ§ ļƽļ® ļŗ­ļ»®ļ»ƒ ļ­§ļ»ØļÆæļ­˜ ļ­§ļƾļ»­ ļŗ­ļ»­ļŗ ļŗ²ļ®‘ļÆæļ­Øļŗ­ļ»­" @@ -107856,6 +107784,14 @@ msgid "Enable this light in solid shading mode" msgstr "ļ®Ÿļƾļŗ®ļ® ļ»ļŗŽļ»Œļ»“ ļ®ŸļÆæļ»£ ļŗ­ļ»®ļ»ƒ ļŗ–ļ®•ļ»§ļŗ­ ļŗ±ļ»®ļ®­ļ­Ø ļ»®ļ® ļƽļ»Øļŗ·ļ»­ļŗ­ ļŗ±ļŗ" +msgid "UV Sculpting" +msgstr "ļƼļŗÆļŗŽļŗ³ ļ®§ļ»¤ļŗ“ļŗ ļ»£ ļƼļ»­ļ»®ļƾ" + + +msgid "Strength Curve" +msgstr "ļŗ®ļ®ļ»­ ļŗ–ļ»—ļŗŽļ»ƒ" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "ļ®Æļ®Ø ļŗŽļŗ—ļ»®ļ®Ø ļ»ļŗŽļ»¤ļ»Œļŗ˜ļŗ³ļŗ ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļŗŖļŗ»ļŗŽļ»˜ļ»£ ļŗ®ļ®•ļƾļŗ© ļŗ­ļ»­ļŗ ļ»”ļŗ­ļŗŽļ»”ļƾļ®ˆ ļŗ®ļ­½ļ»£ļŗ­ļŗ ļ»®ļŗŸ ŲŒļ®¦ļ»­ļŗ®ļ®” ļŗŽļ® ļ®žļ»®ļÆæļ­Øļ»®ļ­¼" @@ -125478,48 +125414,8 @@ msgid "Sliding-Tool" msgstr "ļ»ļ»®ļ­Ø ļ®“ļ»§ļ®‰ļÆæļŗ‹ļ»¼ļ»æļŗ³" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "(ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ» X) ļŗ­ļ»®ļŗ¤ļ»£ X]/Y/Z] ļ»‘ļŗ®ļŗ»" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "(Y ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ») ļŗ­ļ»®ļŗ¤ļ»£ X/[Y]/Z ļ»‘ļŗ®ļŗ»" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "(ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ» Z) ļŗ­ļ»®ļŗ¤ļ»£ [X/Y/[Z ļ»‘ļŗ®ļŗ»" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = ļƼļŗŖļ»Øļŗ‘ļŗŽļ­˜ ļƽļ® ļŗ­ļ»®ļŗ¤ļ»£" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ» ļƽļŗŸ) ļ»”ļŗŽļ»˜ļ»£ ļ»‘ļŗ®ļŗ») | ā€Ŗ%sā€¬" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - ļŗ…ļŗŽļ»¤ļ®­ļ®” ļ»‘ļŗ®ļŗ» (R ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ») | ā€Ŗ%sā€¬" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - ļ®§ļ»§ļŗŽļ»¤ļÆæļ­˜ ļ»‘ļŗ®ļŗ» (S ļŗŽļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ») | ā€Ŗ%sā€¬" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - ļŗ•ļŗŽļÆæļŗ»ļ»®ļŗ¼ļŗ§ ļƽļ® ļ»„ļ»®ļŗ‘ ļƼļ®‰ļ»ØļÆæļŗ‘ ļ»‘ļŗ®ļŗ» (B ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»§ļŗ®ļ® ļ»‘ļŗŽļŗ») | ā€Ŗ%sā€¬" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - ļŗ°ļÆæļ­Øļŗ®ļ­˜ļŗļŗ®ļ­˜ ļŗ•ļŗ­ļ»­ļŗ®ļŗæ ļŗļŗ“ļŗ£ ļ»‘ļŗ®ļŗ» (C to Clear) | ā€Ŗ%sā€¬" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - ļŗŖļŗ£ ļƽļ® ļ­§ļÆæļŗ³ ļƽļ­Øļŗ®ļ­˜ļŗļŗ®ļ­˜/ļ»”ļŗ­ļŗŽļ»”ļŗ“ļ»§ļŗļŗ®ļ­Ø" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - ļ®Ÿļƾļŗ®ļ® ļ»žļ®”ļ»®ļ­Ø ļ»®ļ® ļŗ–ļÆæļŗ‹ļŗ®ļ»£ ļƽļ® ļ®žļ»®ļƾļ®‰ļ®Ø" +msgid "Cancel" +msgstr "ļ®Ÿļƾļŗ®ļ® ļŗ„ļ»®ļŗ“ļ»Øļ»£" msgid "No keyframes to slide between" @@ -126083,10 +125979,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "ļ®Æļ®Ø ļ®ŸļÆæļ®©ļ»§ ļ­§ļ®‘ļÆæļŗ ļŗ‘ļŗ ļ»žļŗ“ļ»Øļ­˜ ļŗ²ļƾļŗ®ļ®” ļ­§ļ®‘ļÆæļŗ ļŗ‘ļŗ ļ»®ļ­©ļ®‘ļƾļŗ ļŗŽļƾ ŲŒļ­§ļ®‘ļÆæļŗ ļŗ‘ļŗ ļ»®ļ­©ļ®‘ļƾļŗ ļƽļŗ‹ļ»®ļ®" -msgid "Cancel" -msgstr "ļ®Ÿļƾļŗ®ļ® ļŗ„ļ»®ļŗ“ļ»Øļ»£" - - msgid "Active Vertex Group is locked" msgstr "ļ®Æļ®Ø ļ»žļ»”ļ»˜ļ»£ ļ®¦ļ»­ļŗ®ļ®” ļ®Æļ»§ļ»®ļ® ļ»ļŗŽļ»Œļ»“" @@ -129791,18 +129683,6 @@ msgid "UV map or surface attachment is invalid" msgstr "ļ®Æļ®Ø ļ»‚ļ» ļ» ļ®§ļ®‘ļ» ļŗ“ļ»Øļ»£ ļŗŽļ® ļŗ¢ļ»„ļŗ³ ļŗŽļƾ ļ®§ļŗøļ»˜ļ»§ ļƼļ»­ļ»®ļƾ" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "{3f.:} :ļƽļŗ‹ļŗŽļŗ’ļ»¤ļ»Ÿ ,{} ļŗ…ļŗļŗ®ļ®‘ļ­Ø ,{} :ļ®ˆļ»®ļ»£ | ļŗ…ļŗļŗ®ļ®‘ļ­Ø ļ®Žļ»­ļŗ®ļ­©ļŗ³ļŗ :D ,ļ®ˆļ»®ļ»£ ļ®Ÿļƾļŗ®ļ® ļ­»ļŗ‹ļ»®ļŗ³ :S ,ļ»ŠļÆæļŗ³ļ»®ļŗ— ļ®Ÿļƾļŗ®ļ® ļ­§ļŗ“ļŗŸļ®‰ļƾļŗ MMB ,ļŗŽļ»§ļŗ®ļ®­ļŗ‘ LMB ,ļ®Ÿļƾļŗ®ļ® ļŗ„ļ»®ļŗ“ļ»Øļ»£ ESC/RMB :ļŗŽļ»§ļŗ®ļ®­ļŗ‘" - - -msgid "ON" -msgstr "ļ»„ļŗ" - - -msgid "OFF" -msgstr "ļ»‘ļŗ" - - msgid "No Grease Pencil frame to draw weight on" msgstr "ļ®ŸļÆæļ®©ļ»§ ļ»¢ļƾļŗ®ļ»“ Grease Penci ļƽļŗ‹ļ»®ļ® ļ®ÆļÆæļ»Ÿ ļ®Æļ® ļ®Æļ»Øļ­½ļ»ØļÆæļ®­ļ® ļ»„ļŗÆļ»­" @@ -130875,42 +130755,6 @@ msgid "Deleted %u drivers" msgstr "%u ļŗŽļÆæļ®” ļŗŽļƾļŗ© ļŗ®ļ® ļ»‘ļŗ¬ļŗ£ ļ»®ļ® ļŗÆļŗ­ļ»®ļÆæļŗ‹ļŗļŗ­ļ®ˆ" -msgid "Decimate Keyframes" -msgstr "ļŗ°ļ»¤ļƾļŗ®ļ»“ ļƽļ® ļ­§ļÆæļ»¤ļÆæļŗ“ļƾļ®ˆ" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - ļŗ–ļŗ³ļŗŽļ»”ļ»§ ļ®Ÿļƾļŗ®ļ® ļ»¢ļÆæļ»£ļŗ®ļŗ—" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - ļ®Œļ»®ļ»£ ļ»¢ļŗ§ ļ®Ÿļƾļŗ®ļ® ļ»¢ļÆæļ»£ļŗ®ļŗ—" - - -msgid "Ease Keys" -msgstr "ļ®žļŗŽļÆæļŗ‘ļŗŽļ­¼ ļƽļ»§ļŗŽļŗ³ļŗ" - - -msgid "Shear Keys" -msgstr "ļŗ°ļÆæļ® ļŗ®ļŗŒļÆæļŗ·" - - -msgid "D - Toggle Direction" -msgstr "D - ļŗ–ļ»¤ļŗ³ ļ®Ÿļƾļŗ®ļ® ļ»žļ®”ļ»®ļ­Ø" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - ļ®Æļŗ³ ļ®ŸļÆæļŗ‹ļŗļŗ© ļ®§ļ»§ļŗŽļ»¤ļÆæļ­˜ End" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - ļ®Æļŗ³ ļ®ŸļÆæļŗ‹ļŗŽļŗ‘ ļ®§ļ»§ļŗŽļ»¤ļÆæļ­˜ End" - - -msgid "Scale from Neighbor Keys" -msgstr "ļ®žļŗŽļÆæļŗ‘ļŗŽļ­¼ ļƽļŗ³ļ»­ļ®ļ­˜ ļ®Æļŗ³ ļ®§ļ»§ļŗŽļ»¤ļÆæļ­˜" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "ļ®ŸļÆæļ®Ø ļ®Æļŗ˜ļ®‘ļŗ³ ļ­§ļ®Ø ļŗŽļ»Øļŗ˜ļ® ļ®Æļŗ³ ļ»žļŗ‘ ļ»žļŗ»ļŗ ļ®¦ļ»­ ļ®§ļ® ļŗ®ļ® ļŗŽļŗ˜ļŗ‘ ļ®§ļƾ ļ»®ļ® ļ®ŸļÆæļ»¤ļŗ§-ļ»‘" @@ -136166,8 +136010,8 @@ msgid "Clipping" msgstr "ļŗŽļ»Øļŗ·ļŗļŗ®ļŗ—" -msgid "Level Viewport" -msgstr "ļ­¦ļŗ­ļ»®ļ­˜ ļ»®ļƾļ»­ ļ»ļ»®ļÆæļ»Ÿ" +msgid "Levels Viewport" +msgstr "ļ­¦ļŗ­ļ»®ļ­˜ ļ»®ļƾļ»­ ļŗ°ļ»Ÿļ»®ļÆæļ»Ÿ" msgid "Unsubdivide" @@ -136381,10 +136225,6 @@ msgid "Adaptive Subdivision" msgstr "ļ»¢ļÆæļŗ“ļ»˜ļŗ— ļƽļ» ļƾļŗ« ļƽļ»Ÿļ»®ļ®‘ļ»§ļŗ" -msgid "Levels Viewport" -msgstr "ļ­¦ļŗ­ļ»®ļ­˜ ļ»®ļƾļ»­ ļŗ°ļ»Ÿļ»®ļÆæļ»Ÿ" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "%.2fā€¬ pxŲŒ Viewport ā€Ŗ%.2fā€¬ pxā€Ŗ ļŗ­ļ®‰ļ»Øļƾļŗ­ :ļ®§ļ»§ļŗŽļ»¤ļÆæļ­˜ ļƽļ»¤ļŗ˜ļŗ£" @@ -136751,10 +136591,6 @@ msgid "Offset Y" msgstr "Y ļ­§ļÆæļŗ“ļ»“ļŗ" -msgid "Undistortion" -msgstr "ļŗŽļ»§ļŗ®ļ® ļŗ¦ļŗ“ļ»£ ļŗ®ļÆæļ»" - - msgid "Dot" msgstr "ļ­¦ļŗļ®ˆ" @@ -137702,10 +137538,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "ļ®ŸļÆæļ®Ø ļŗ­ļŗŖļ»§ļŗ ļ®Æļ® ļ»ļŗŽļŗŸ ļ®¦ļŗ©ļŗ®ļ® ļŗ­ļŗŽļÆæļŗ— ļ®Ÿļƾļŗ­ļŗŖļ»— ļƼļ®ļŗ‘ ļ®Æļŗ³ ļŗŖļŗ£" -msgid "Has Alpha" -msgstr "ļ®Æļ®Ø ļŗŽļ»”ļ»Ÿļŗ" - - msgid "Frame Count" msgstr "ļŗ­ļŗŽļ»¤ļŗ· ļ»¢ļƾļŗ®ļ»“" @@ -140367,6 +140199,14 @@ msgid "drag-" msgstr "-ļ®ŸļÆæļ­©ļÆæļŗ“ļ®­ļ®”" +msgid "ON" +msgstr "ļ»„ļŗ" + + +msgid "OFF" +msgstr "ļ»‘ļŗ" + + msgid "Set Debug Value" msgstr "Set ļ»®ļÆæļ» ļƾļ»­ ļ®“ļŗ’ļƾļ®ˆ" diff --git a/locale/po/vi.po b/locale/po/vi.po index 2aa040984542..cc2ed90743a3 100644 --- a/locale/po/vi.po +++ b/locale/po/vi.po @@ -1,9 +1,9 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" "PO-Revision-Date: 2024-12-30 20:42+0000\n" "Last-Translator: Hoang Duy Tran \n" "Language-Team: Vietnamese \n" @@ -25576,10 +25576,6 @@ msgid "Display the object's name" msgstr "Hiį»ƒn thį»‹ tĆŖn cį»§a đį»‘i tĘ°į»£ng" -msgid "Shape Key Lock" -msgstr "KhĆ³a HƬnh Mįŗ«u" - - msgid "Only show the active shape key at full value" msgstr "Duy hiį»ƒn thį»‹ hƬnh mįŗ«u đang hoįŗ”t đį»™ng į»Ÿ giĆ” trį»‹ toĆ n phįŗ§n" @@ -33589,6 +33585,14 @@ msgid "Editor menu containing buttons" msgstr "TrƬnh Ä‘Ę”n cį»§a trƬnh biĆŖn soįŗ”n cĆ³ chį»©a cĆ”c nĆŗt" +msgid "Metaball" +msgstr "SiĆŖu Cįŗ§u" + + +msgid "Show/Hide" +msgstr "Hiį»‡n/įŗØn Giįŗ„u" + + msgid "Names" msgstr "TĆŖn" @@ -33597,10 +33601,6 @@ msgid "Bone Roll" msgstr "Lăn XĘ°Ę”ng" -msgid "Show/Hide" -msgstr "Hiį»‡n/įŗØn Giįŗ„u" - - msgid "Clean Up" msgstr "Dį»n Dįŗ¹p" @@ -33689,10 +33689,6 @@ msgid "Assign Material" msgstr "įŗ¤n Đį»‹nh NguyĆŖn Vįŗ­t Liį»‡u" -msgid "Metaball" -msgstr "SiĆŖu Cįŗ§u" - - msgid "Light" msgstr "Nguį»“n/Ɓnh SĆ”ng/ĐĆØn" @@ -43668,26 +43664,10 @@ msgid "Create matte based on differences in color channels" msgstr "Tįŗ”o mĆ n chįŗÆn vįŗ½ lį»“ng dį»±a trĆŖn sį»± khĆ”c biį»‡t trong cĆ”c kĆŖnh mĆ u" -msgid "RGB color space" -msgstr "KhĆ“ng gian RGB" - - -msgid "HSV color space" -msgstr "KhĆ“ng gian HSV" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "KhĆ“ng gian YUV" - - -msgid "YCbCr color space" -msgstr "KhĆ“ng Gian YCbCr" - - msgctxt "Color" msgid "Limit Channel" msgstr "Giį»›i Hįŗ”n KĆŖnh" @@ -44190,26 +44170,6 @@ msgid "Mode of color processing" msgstr "Chįŗæ đį»™ xį»­ lĆ½ mĆ u" -msgid "Use RGB color processing" -msgstr "Sį»­ dį»„ng xį»­ lĆ½ mĆ u RGB" - - -msgid "Use HSV color processing" -msgstr "Sį»­ dį»„ng xį»­ lĆ½ mĆ u HSV" - - -msgid "Use HSL color processing" -msgstr "Sį»­ dį»„ng xį»­ lĆ½ mĆ u HSL" - - -msgid "Use YCbCr color processing" -msgstr "Sį»­ dį»„ng xį»­ lĆ½ mĆ u YCbCr" - - -msgid "Use YUV color processing" -msgstr "Sį»­ dį»„ng xį»­ lĆ½ mĆ u YUV" - - msgid "Color space used for YCbCrA processing" msgstr "KhĆ“ng gian mĆ u đʰį»£c sį»­ dį»„ng đį»ƒ xį»­ lĆ½ YCbCrA" @@ -44667,6 +44627,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "Tįŗ”o mĆ n chįŗÆn vįŗ½ lį»“ng dį»±a trĆŖn khoįŗ£ng cĆ”ch 3D giį»Æa cĆ”c mĆ u" +msgid "RGB color space" +msgstr "KhĆ“ng gian RGB" + + msgid "YCbCr suppression" msgstr "į»Øc chįŗæ YCbCr" @@ -46012,42 +45976,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "Sį»­ dį»„ng cĆ”c giĆ” trį»‹ tĘ°Ę”ng đį»‘i (phĆ¢n sį»‘ kĆ­ch thĘ°į»›c cį»§a hƬnh įŗ£nh cung cįŗ„p) đį»ƒ đį»‹nh nghÄ©a sį»± dį»‹ch chuyį»ƒn" -msgid "Wrapping" -msgstr "Lįŗ·p Lįŗ”i" - - -msgid "Wrap image on a specific axis" -msgstr "NhįŗÆc lįŗ”i hƬnh įŗ£nh trĆŖn mį»™t trį»„c chį»‰ đį»‹nh" - - -msgid "No wrapping on X and Y" -msgstr "KhĆ“ng nhįŗÆc lįŗ”i trĆŖn X vĆ  Y" - - msgid "X Axis" msgstr "Trį»„c X" -msgid "Wrap all pixels on the X axis" -msgstr "NhįŗÆc lįŗ”i toĆ n bį»™ cĆ”c điį»ƒm įŗ£nh trĆŖn trį»„c X" - - msgid "Y Axis" msgstr "Trį»„c Y" -msgid "Wrap all pixels on the Y axis" -msgstr "NhįŗÆc lįŗ”i toĆ n bį»™ cĆ”c điį»ƒm įŗ£nh trĆŖn trį»„c Y" - - msgid "Both Axes" msgstr "Cįŗ£ Hai Trį»„c" -msgid "Wrap all pixels on both axes" -msgstr "NhįŗÆc lįŗ”i toĆ n bį»™ cĆ”c điį»ƒm įŗ£nh trĆŖn cįŗ£ hai trį»„c" - - msgid "Map values to colors with the use of a gradient" msgstr "Ɓnh xįŗ” cĆ”c giĆ” trį»‹ thĆ nh mĆ u sįŗÆc bįŗ±ng cĆ”ch sį»­ dį»„ng mį»™t dį»‘c mĆ u" @@ -70300,6 +70240,22 @@ msgid "Add a collection info node to the current node editor" msgstr "ThĆŖm mį»™t nĆŗt thĆ“ng tin bį»™ sĘ°u tįŗ­p vĆ o trƬnh biĆŖn soįŗ”n nĆŗt hiį»‡n tįŗ”i" +msgid "Source color" +msgstr "MĆ u nguį»“n" + + +msgid "Gamma Corrected" +msgstr "Gamma ÄĆ£ Chį»‰nh Sį»­a" + + +msgid "The source color is gamma corrected" +msgstr "MĆ u sįŗÆc nguį»“n Ä‘Ć£ đʰį»£c chį»‰nh gamma" + + +msgid "Has Alpha" +msgstr "CĆ³ Alpha Hay KhĆ“ng" + + msgctxt "Operator" msgid "Add File Node" msgstr "ThĆŖm NĆŗt Tįŗ­p Tin" @@ -82989,18 +82945,6 @@ msgid "Drop colors to buttons" msgstr "Nhį» mĆ u vĆ o cĆ”c nĆŗt bįŗ„m" -msgid "Source color" -msgstr "MĆ u nguį»“n" - - -msgid "Gamma Corrected" -msgstr "Gamma ÄĆ£ Chį»‰nh Sį»­a" - - -msgid "The source color is gamma corrected" -msgstr "MĆ u sįŗÆc nguį»“n Ä‘Ć£ đʰį»£c chį»‰nh gamma" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "Thįŗ£ NguyĆŖn Vįŗ­t Liį»‡u vĆ o cĆ”c khe NguyĆŖn Vįŗ­t Liį»‡u" @@ -87576,10 +87520,6 @@ msgid "Feet" msgstr "PhĆ³ng thĆ­ch/Thįŗ£/Tį»± Do/Miį»…n PhĆ­" -msgid "Convert World Material" -msgstr "Chuyį»ƒn Đį»•i NguyĆŖn Vįŗ­t Liį»‡u Thįŗæ Giį»›i" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "Chuyį»ƒn đį»•i nguyĆŖn vįŗ­t liį»‡u thįŗæ giį»›i thĆ nh đĆØn vĆ²m USD. Hiį»‡n chį»‰ hoįŗ”t đį»™ng vį»›i cĆ”c vįŗ­t liį»‡u Ä‘Ę”n giįŗ£n, bao gį»“m chįŗ„t liį»‡u mĆ“i trĘ°į»ng kįŗæt nį»‘i vį»›i bį»™ tĆ“ bĆ³ng nį»n sau, vį»›i vĆ©ctĘ” tĆ¹y chį»n nhĆ¢n mĆ u chįŗ„t liį»‡u lĆŖn" @@ -87913,10 +87853,6 @@ msgid "Add all imported objects to a new collection" msgstr "ThĆŖm toĆ n bį»™ cĆ”c đį»‘i tĘ°į»£ng Ä‘Ć£ nhįŗ­p khįŗ©u vĆ o bį»™ sĘ°u tįŗ­p mį»›i" -msgid "Create World Material" -msgstr "Tįŗ”o NguyĆŖn Vįŗ­t Liį»‡u Thįŗæ Giį»›i" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "Chuyį»ƒn đį»•i Ć”nh sĆ”ng vĆ²m USD đįŗ§u tiĆŖn phĆ”t hiį»‡n đʰį»£c thĆ nh mį»™t bį»™ tĆ“ bĆ³ng nį»n sau thįŗæ giį»›i" @@ -88950,14 +88886,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "Chį»‰ sį»­ dį»„ng nhį»Æng bį»™ điį»u chį»‰nh biįŗæn dįŗ”ng mĆ  thĆ“i (tįŗ”m thį»i tįŗÆt toĆ n bį»™ cĆ”c bį»™ điį»u chį»‰nh cĆ³ tĆ­nh xĆ¢y dį»±ng ngoįŗ”i trį»« đa phĆ¢n giįŗ£i)" -msgid "UV Sculpting" -msgstr "ĐiĆŖu KhįŗÆc UV" - - -msgid "Strength Curve" -msgstr "Đʰį»ng Cong CĘ°į»ng Đį»™" - - msgid "Properties of vertex and weight paint mode" msgstr "TĆ­nh chįŗ„t cį»§a chįŗæ đį»™ điį»ƒm đį»‰nh vĆ  sĘ”n trį»ng lĘ°į»£ng" @@ -109088,6 +109016,14 @@ msgid "Enable this light in solid shading mode" msgstr "Bįŗ­t nguį»“n sĆ”ng nĆ y trong chįŗæ đį»™ chuyį»ƒn sįŗÆc lįŗ­p thį»ƒ (Solid)" +msgid "UV Sculpting" +msgstr "ĐiĆŖu KhįŗÆc UV" + + +msgid "Strength Curve" +msgstr "Đʰį»ng Cong CĘ°į»ng Đį»™" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "NhĆ³m điį»ƒm đį»‰nh, dĆ¹ng đį»ƒ biįŗæn dįŗ”ng khung rį»‘i vĆ  cĆ”c mį»„c đƭch khĆ”c" @@ -127050,48 +126986,8 @@ msgid "Sliding-Tool" msgstr "CĆ“ng Cį»„ TrĘ°į»£t Đįŗ©y" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "Duy trį»„c [X]/Y/Z mĆ  thĆ“i (X đį»ƒ xĆ³a)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "Duy trį»„c X/[Y]/Z mĆ  thĆ“i (Y đį»ƒ xĆ³a)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "Duy trį»„c X/Y/[Z] mĆ  thĆ“i (Z đį»ƒ xĆ³a)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = RĆ ng Buį»™c cį»§a Trį»„c" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - Duy vį»‹ trĆ­ (G đį»ƒ xĆ³a) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - Duy xoay chiį»u (R đį»ƒ xĆ³a) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - Duy đį»•i tį»· lį»‡ (S đį»ƒ xĆ³a) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - Duy tĆ­nh chįŗ„t cį»§a XĘ°Ę”ng Dįŗ»o (B đį»ƒ xĆ³a) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - Duy cĆ”c TĆ­nh Chįŗ„t TĆ¹y Chį»‰nh mĆ  thĆ“i (C đį»ƒ xĆ³a) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - Giį»›i hįŗ”n trong Bį»™ Biįŗæn HĆ³a/TĆ­nh Chįŗ„t mĆ  thĆ“i" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - Bįŗ­t/TįŗÆt tįŗ§m nhƬn cį»§a xĘ°Ę”ng" +msgid "Cancel" +msgstr "Hį»§y" msgid "No keyframes to slide between" @@ -127675,10 +127571,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "KhĆ“ng cĆ³ đį»‘i tĘ°į»£ng nĆ o lĆ  đang hoįŗ”t đį»™ng, hoįŗ·c đį»‘i tĘ°į»£ng đang hoįŗ”t đį»™ng khĆ“ng phįŗ£i lĆ  đį»‘i tĘ°į»£ng BĆŗt ChƬ Dįŗ§u" -msgid "Cancel" -msgstr "Hį»§y" - - msgid "Active Vertex Group is locked" msgstr "NhĆ³m Điį»ƒm Đį»‰nh Đang Hoįŗ”t Đį»™ng Ä‘Ć£ bį»‹ khĆ³a lįŗ”i rį»“i" @@ -131490,18 +131382,6 @@ msgid "UV map or surface attachment is invalid" msgstr "Ɓnh xįŗ” UV hoįŗ·c bį» mįŗ·t đƭnh kĆØm bįŗ„t hį»£p lį»‡" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "TPhį»§KĆ­n: ESC/NCP hį»§y, NCT TPhį»§KĆ­n, NCG Điį»u Chį»‰nh Nį»›i Rį»™ng, S: Đį»•i Chįŗæ Đį»™, D: NĆ©t Vįŗ½ Va Chįŗ”m | Chįŗæ Đį»™: {}, Va Chįŗ”m {}, Chiį»u DĆ i: {:.3f}" - - -msgid "ON" -msgstr "Bįŗ¬T" - - -msgid "OFF" -msgstr "Tįŗ®T" - - msgid "No Grease Pencil frame to draw weight on" msgstr "KhĆ“ng cĆ³ khung hƬnh BĆŗt ChƬ Dįŗ§u nĆ o đį»ƒ vįŗ½ trį»ng lĘ°į»£ng lĆŖn cįŗ£" @@ -132574,42 +132454,6 @@ msgid "Deleted %u drivers" msgstr "ÄĆ£ xĆ³a %u trƬnh điį»u vįŗ­n" -msgid "Decimate Keyframes" -msgstr "TiĆŖu Hao Khung KhĆ³a" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - Sį»­a Đį»•i Đį»™ SįŗÆc NĆ©t" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - Sį»­a Đį»•i Đį»™ Uį»‘n cį»§a Đʰį»ng Cong" - - -msgid "Ease Keys" -msgstr "Chįŗ­m RĆ£i HĆ³a cĆ”c KhĆ³a" - - -msgid "Shear Keys" -msgstr "XĆ“ NghiĆŖng KhĆ³a" - - -msgid "D - Toggle Direction" -msgstr "D - Chuyį»ƒn HĘ°į»›ng" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - Đį»•i Tį»· Lį»‡ Tį»« Đįŗ§u BĆŖn Phįŗ£i" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - Đį»•i Tį»· Lį»‡ Tį»« Đįŗ§u BĆŖn TrĆ”i" - - -msgid "Scale from Neighbor Keys" -msgstr "Đį»•i tį»· lį»‡ tį»« cĆ”c KhĆ³a HĆ ng XĆ³m" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "TiĆŖu hao Đʰį»ng Cong-F bįŗ±ng cĆ”ch chį»‰ đį»‹nh lĘ°į»£ng đi lį»‡ch khį»i đʰį»ng cong ban đįŗ§u mĆ  chĆŗng cĆ³ thį»ƒ lĆ  bao nhiĆŖu" @@ -137993,7 +137837,7 @@ msgid "Clipping" msgstr "CįŗÆt XĆ©n" -msgid "Level Viewport" +msgid "Levels Viewport" msgstr "Mį»©c Cį»•ng NhƬn" @@ -138212,10 +138056,6 @@ msgid "Adaptive Subdivision" msgstr "PhĆ¢n HĆ³a TĆ¹y į»Øng" -msgid "Levels Viewport" -msgstr "Mį»©c Cį»•ng NhƬn" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "Tį»· lį»‡ cuį»‘i cĆ¹ng: Kįŗæt Xuįŗ„t %.2f điį»ƒm įŗ£nh, Cį»•ng NhƬn %.2f điį»ƒm įŗ£nh" @@ -138595,10 +138435,6 @@ msgid "Offset Y" msgstr "Dį»‹ch Chuyį»ƒn Y" -msgid "Undistortion" -msgstr "KhĆ“ng Biįŗæn Dįŗ”ng" - - msgid "Dot" msgstr "TĆ­ch VĆ“ HĘ°į»›ng" @@ -139642,10 +139478,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "CĆ”c giĆ” trį»‹ lį»›n hĘ”n ngĘ°į»”ng nįŗ±m sįŗ½ nįŗ±m trong khung lĘ°į»›i sinh tįŗ”o" -msgid "Has Alpha" -msgstr "CĆ³ Alpha Hay KhĆ“ng" - - msgid "Frame Count" msgstr "Sį»‘ Khung HƬnh" @@ -142457,6 +142289,14 @@ msgid "drag-" msgstr "kĆ©o rĆŖ-" +msgid "ON" +msgstr "Bįŗ¬T" + + +msgid "OFF" +msgstr "Tįŗ®T" + + msgid "Set Debug Value" msgstr "Đįŗ·t GiĆ” Trį»‹ Điį»u Tra Lį»—i" diff --git a/locale/po/zh_HANS.po b/locale/po/zh_HANS.po index cbe50b7556c7..cb9464ca0a9f 100644 --- a/locale/po/zh_HANS.po +++ b/locale/po/zh_HANS.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-24 09:56+0000\n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-02-02 08:56+0000\n" "Last-Translator: Ye Gui \n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_HANS\n" @@ -441,6 +441,11 @@ msgid "Expanded state of the slot" msgstr "ę§½ēš„ę‰©å±•ēŠ¶ę€" +msgctxt "ID" +msgid "Target ID Type" +msgstr "ē›®ę ‡ ID ē±»åž‹" + + msgctxt "ID" msgid "Action" msgstr "åŠØ作" @@ -25968,10 +25973,6 @@ msgid "Display the object's name" msgstr "ę˜¾ē¤ŗē‰©ä½“名ē§°" -msgid "Shape Key Lock" -msgstr "å½¢ę€é”®é”å®š" - - msgid "Only show the active shape key at full value" msgstr "åœØå…Ø值äø‹åŖę˜¾ē¤ŗęæ€ę“»ēš„å½¢ę€é”®" @@ -34306,6 +34307,14 @@ msgid "Editor menu containing buttons" msgstr "åŒ…å«ęŒ‰é’®ēš„ē¼–č¾‘å™Øčœå•" +msgid "Metaball" +msgstr "融ēƒ" + + +msgid "Show/Hide" +msgstr "ę˜¾ē¤ŗ / 隐藏" + + msgid "Names" msgstr "名ē§°" @@ -34314,10 +34323,6 @@ msgid "Bone Roll" msgstr "éŖØéŖ¼ę‰­č½¬" -msgid "Show/Hide" -msgstr "ę˜¾ē¤ŗ / 隐藏" - - msgid "Clean Up" msgstr "ęø…ē†" @@ -34406,10 +34411,6 @@ msgid "Assign Material" msgstr "ęŒ‡å®šęč“Ø" -msgid "Metaball" -msgstr "融ēƒ" - - msgid "Light" msgstr "ēÆ光" @@ -44491,30 +44492,14 @@ msgid "Create matte based on differences in color channels" msgstr "åŸŗäŗŽé¢œč‰²é€šé“ēš„差异创å»ŗ蒙ē‰ˆ" -msgid "RGB color space" -msgstr "RGB č‰²å½©ē©ŗé—“" - - -msgid "HSV color space" -msgstr "HSV č‰²å½©ē©ŗé—“" - - msgid "YUV" msgstr "YUV" -msgid "YUV color space" -msgstr "YUV č‰²å½©ē©ŗé—“" - - msgid "YCbCr" msgstr "YCbCr" -msgid "YCbCr color space" -msgstr "YCbCr č‰²å½©ē©ŗé—“" - - msgctxt "Color" msgid "Limit Channel" msgstr "限定通道" @@ -45038,26 +45023,6 @@ msgid "Mode of color processing" msgstr "é¢œč‰²å¤„ē†ęؔ式" -msgid "Use RGB color processing" -msgstr "ä½æē”ØRGBé¢œč‰²å¤„ē†" - - -msgid "Use HSV color processing" -msgstr "ä½æē”ØHSVé¢œč‰²å¤„ē†" - - -msgid "Use HSL color processing" -msgstr "ä½æē”ØHSLé¢œč‰²å¤„ē†" - - -msgid "Use YCbCr color processing" -msgstr "ä½æē”ØYCbCré¢œč‰²å¤„ē†" - - -msgid "Use YUV color processing" -msgstr "ä½æē”ØYUVé¢œč‰²å¤„ē†" - - msgid "Color space used for YCbCrA processing" msgstr "ē”ØäŗŽYCbCrA处ē†ēš„č‰²å½©ē©ŗé—“" @@ -45515,6 +45480,10 @@ msgid "Create matte based on 3D distance between colors" msgstr "åŸŗäŗŽé¢œč‰²ä¹‹é—“ēš„3Dč·ē¦»åˆ›å»ŗ蒙ē‰ˆ" +msgid "RGB color space" +msgstr "RGB č‰²å½©ē©ŗé—“" + + msgid "YCbCr suppression" msgstr "YCbCr ęŠ‘åˆ¶" @@ -46981,42 +46950,18 @@ msgid "Use relative (fraction of input image size) values to define translation" msgstr "ä½æē”Øē›øåƹ(č¾“å…„å›¾åƒå¤§å°ēš„åˆ†ę•°)ēš„å€¼ę„定义ē§»åŠØ" -msgid "Wrapping" -msgstr "åŒ…č£¹" - - -msgid "Wrap image on a specific axis" -msgstr "åœØęŒ‡å®šēš„č½“向äøŠåŒ…ē»•" - - -msgid "No wrapping on X and Y" -msgstr "äøåœØ X č½“å’Œ Y č½“å‘äøŠåŒ…ē»•" - - msgid "X Axis" msgstr "X č½“" -msgid "Wrap all pixels on the X axis" -msgstr "åœØ X č½“å‘äøŠåŒ…ē»•ę‰€ęœ‰åƒē“ " - - msgid "Y Axis" msgstr "Y č½“" -msgid "Wrap all pixels on the Y axis" -msgstr "åœØ Y č½“å‘äøŠåŒ…ē»•ę‰€ęœ‰åƒē“ " - - msgid "Both Axes" msgstr "äø¤äøŖč½“" -msgid "Wrap all pixels on both axes" -msgstr "åœØäø¤äøŖč½“å‘äøŠåŒ…ē»•ę‰€ęœ‰åƒē“ " - - msgid "Map values to colors with the use of a gradient" msgstr "ä½æē”Øęøå˜å°†å€¼ę˜ å°„åˆ°é¢œč‰²" @@ -48675,6 +48620,14 @@ msgid "Retrieve a unit length vector indicating the direction pointing away from msgstr "ę£€ē“¢å•ä½é•æåŗ¦ēŸ¢é‡ļ¼ŒęŒ‡ē¤ŗęŒ‡å‘čæœē¦»å‡ ä½•ä½“ēš„ęƏäøŖ元ē“ ēš„ę–¹å‘" +msgid "Flat Corner Normals" +msgstr "å¹³é¢ę‹č§’ę³•å‘" + + +msgid "Always use face normals for the face corner domain, matching old behavior of the node" +msgstr "始ē»ˆå°†é¢ę³•ēŗæē”ØäŗŽé¢ę‹č§’域ļ¼Œä»„åŒ¹é…čŠ‚ē‚¹ēš„ę—§å¼č”Œäøŗ" + + msgid "Output a single object" msgstr "č¾“å‡ŗ单äøŖē‰©ä½“" @@ -60965,6 +60918,10 @@ msgid "Select Control Point Row" msgstr "é€‰ę‹©ęŽ§åˆ¶ē‚¹č”Œ" +msgid "Select a row of control points including active one. Successive use on the same point switches between U/V directions" +msgstr "选ꋩäø€č”ŒęŽ§åˆ¶ē‚¹ļ¼ŒåŒ…å«ę“»č·ƒęŽ§åˆ¶ē‚¹ć€‚ē“§ęŽ„ē€åœØ同äø€ē‚¹ä½æē”Ø会åœØU/Vę–¹å‘é—“åˆ‡ę¢" + + msgid "Select similar curve points by property type" msgstr "ę ¹ę®å±žę€§ē±»åž‹é€‰ę‹©ē›øä¼¼ēš„ę›²ēŗæęŽ§åˆ¶ē‚¹" @@ -62109,6 +62066,14 @@ msgid "Clips animations to selected playback range" msgstr "钳制åŠØē”»åˆ°ę‰€é€‰ę’­ę”¾čŒƒå›“" +msgid "Keep Named Nodes" +msgstr "äæē•™å·²å‘½åēš„节ē‚¹" + + +msgid "Restrict some optimization to keep named nodes and meshes attached to named nodes so that named nodes can be transformed externally" +msgstr "将äø€äŗ›ä¼˜åŒ–čæ›č”Œé™åˆ¶ļ¼Œäæē•™å·²å‘½åēš„节ē‚¹å’Œē½‘ę ¼å¹¶čæžęŽ„到已命名ēš„节ē‚¹ļ¼Œä»„ä¾æäŗŽä½æ已命名ēš„节ē‚¹åÆä»„č¢«åœØ外éƒØč½¬åŒ–" + + msgid "Disable Quantization" msgstr "ē¦ē”Ø量化" @@ -62513,6 +62478,10 @@ msgid "Reduce exported file size by removing duplicate keyframes" msgstr "通čæ‡åˆ é™¤é‡å¤ēš„关键åø§ę„减小åƼå‡ŗēš„ę–‡ä»¶å¤§å°" +msgid "Disable Viewport for Other Objects" +msgstr "åƹ其他åÆ¹č±”ē¦ē”Øč§†å£" + + msgid "When exporting animations, disable viewport for other objects, for performance" msgstr "åƼå‡ŗåŠØē”»ę—¶ļ¼Œå‡ŗäŗŽę€§čƒ½č€ƒč™‘ļ¼Œē¦ē”Ø其他åÆ¹č±”ēš„č§†å£" @@ -62549,6 +62518,22 @@ msgid "Export armatures using rest position as joints' rest pose. When off, curr msgstr "ä½æē”Ø静ē½®ä½ē½®ä½œäøŗé™ę­¢å…³čŠ‚å§æꀁåƼå‡ŗéŖØꞶ怂ē¦ē”Øę—¶ļ¼Œå½“前åø§ēš„å§æꀁē”Ø作静ē½®å§æꀁ" +msgid "Sampling Interpolation Fallback" +msgstr "é‡‡ę ·ę’å€¼å›žé€€" + + +msgid "Interpolation fallback for sampled animations, when the property is not keyed" +msgstr "å½“å±žę€§ęœŖč®¾ē½®å…³é”®åø§ę—¶ļ¼Œé‡‡ę ·åŠØē”»ēš„ę’å€¼å›žé€€" + + +msgid "Linear interpolation between keyframes" +msgstr "关键åø§ä¹‹é—“ēš„ēŗæę€§ę’å€¼" + + +msgid "No interpolation between keyframes" +msgstr "关键åø§ä¹‹é—“ę²”ęœ‰ę’å€¼" + + msgid "Shared Accessors" msgstr "共äŗ«č®æ问å™Ø" @@ -62589,6 +62574,10 @@ msgid "Omitting Sparse Accessor if data is empty" msgstr "å¦‚ęžœę•°ę®äøŗē©ŗļ¼Œēœē•„ē؀ē–č®æ问å™Ø" +msgid "Use Sparse Accessor if Better" +msgstr "å¦‚ęžœę›“å„½ļ¼ŒčÆ·ä½æē”Øē؀ē–č®æ问å™Ø" + + msgid "Try using Sparse Accessor if it saves space" msgstr "å¦‚ęžœå®ƒäæå­˜ē©ŗ闓那么尝čƕä½æē”Øē؀ē–č®æ问å™Ø" @@ -71601,6 +71590,22 @@ msgid "Add a collection info node to the current node editor" msgstr "å‘å½“å‰čŠ‚ē‚¹ē¼–č¾‘å™Øę·»åŠ é›†åˆäæ”ęÆ节ē‚¹" +msgid "Source color" +msgstr "ęŗč‰²å½©" + + +msgid "Gamma Corrected" +msgstr "ä¼½ēŽ›ę ”ę­£" + + +msgid "The source color is gamma corrected" +msgstr "ä¼½ēŽ›ę ”ę­£ēš„ęŗč‰²å½©" + + +msgid "Has Alpha" +msgstr "꜉ꗠAlpha" + + msgctxt "Operator" msgid "Add File Node" msgstr "ę·»åŠ ę–‡ä»¶čŠ‚ē‚¹" @@ -77860,6 +77865,14 @@ msgid "Paint a stroke in the active color attribute layer" msgstr "åœØę“»åŠØé¢œč‰²å±žę€§å±‚ē»˜åˆ¶ē¬”ē”»" +msgid "Override Location" +msgstr "重写位ē½®" + + +msgid "Override the given `location` array by recalculating object space positions from the provided `mouse_event` positions" +msgstr "通čæ‡ä»Žęä¾›ēš„ `mouse_event` 位ē½®é‡ę–°č®”ē®—ē‰©ä½“ē©ŗ闓位ē½®ļ¼Œę„覆ē›–ē»™å®šēš„ `location` ꕰē»„" + + msgctxt "Operator" msgid "Vertex Paint Mode" msgstr "锶ē‚¹ē»˜åˆ¶ęؔ式" @@ -84425,18 +84438,6 @@ msgid "Drop colors to buttons" msgstr "ę‹–ę”¾é¢œč‰²åˆ°ęŒ‰é’®" -msgid "Source color" -msgstr "ęŗč‰²å½©" - - -msgid "Gamma Corrected" -msgstr "ä¼½ēŽ›ę ”ę­£" - - -msgid "The source color is gamma corrected" -msgstr "ä¼½ēŽ›ę ”ę­£ēš„ęŗč‰²å½©" - - msgctxt "Operator" msgid "Drop Material in Material slots" msgstr "å°†ęč“Øę”¾å…„ęč“Øę§½äø­" @@ -87133,6 +87134,11 @@ msgid "Lattices" msgstr "ę™¶ę ¼" +msgctxt "ID" +msgid "Lights" +msgstr "ēÆ光" + + msgctxt "ID" msgid "Light Probes" msgstr "光ē…§ęŽ¢å¤“" @@ -89151,10 +89157,6 @@ msgid "Specify a custom scene meters per unit value" msgstr "ęÆå•ä½å€¼ęŒ‡å®šč‡Ŗ定义åœŗę™Æē±³ę•°" -msgid "Convert World Material" -msgstr "č½¬ę¢äø–ē•Œęč“Ø" - - msgid "Convert the world material to a USD dome light. Currently works for simple materials, consisting of an environment texture connected to a background shader, with an optional vector multiply of the texture color" msgstr "将äø–ē•Œęč“Øč½¬ę¢äøŗUSD天幕ēÆļ¼Œē›®å‰é€‚ē”ØäŗŽē®€å•ęč“Øļ¼ŒåŒ…ꋬčæžęŽ„åˆ°čƒŒę™Æē€č‰²å™Øēš„ēŽÆ境ēŗ¹ē†ļ¼Œä»„及äø€äøŖåÆ选ēš„ēŗ¹ē†é¢œč‰²ēš„ēŸ¢é‡ä¹˜ē§Æļ¼ˆę­£ē‰‡å åŗ•ļ¼‰" @@ -89440,23 +89442,23 @@ msgstr "Xform Ops" msgid "The type of transform operators to write" -msgstr "č¦å†™å…„ēš„č½¬ę¢ę“ä½œēš„ē±»åž‹" +msgstr "č¦å†™å…„ēš„å˜ę¢ę“ä½œēš„ē±»åž‹" msgid "Translate, Rotate, Scale" -msgstr "å˜ę¢ļ¼Œę—‹č½¬ļ¼Œē¼©ę”¾" +msgstr "ē§»åŠØļ¼Œę—‹č½¬ļ¼Œē¼©ę”¾" msgid "Export with translate, rotate, and scale Xform operators" -msgstr "ä½æē”Øå˜ę¢ć€ę—‹č½¬å’Œē¼©ę”¾ Xformę“ä½œ åƼå‡ŗ" +msgstr "ä½æē”Øē§»åŠØć€ę—‹č½¬å’Œē¼©ę”¾ Xform ę“ä½œåƼå‡ŗ" msgid "Translate, Orient, Scale" -msgstr "å˜ę¢ļ¼Œå®šå‘ļ¼Œē¼©ę”¾" +msgstr "ē§»åŠØļ¼Œå®šå‘ļ¼Œē¼©ę”¾" msgid "Export with translate, orient quaternion, and scale Xform operators" -msgstr "ä½æē”Øå˜ę¢ć€å®šå‘å››å…ƒę•°å’Œē¼©ę”¾ Xformę“ä½œ åƼå‡ŗ" +msgstr "ä½æē”Øē§»åŠØć€å®šå‘å››å…ƒę•°å’Œē¼©ę”¾ Xform ę“ä½œåƼå‡ŗ" msgid "Export matrix operator" @@ -89508,10 +89510,6 @@ msgid "Add all imported objects to a new collection" msgstr "将å…ØéƒØåƼ兄ēš„ē‰©ä½“ę·»åŠ åˆ°ę–°é›†åˆ" -msgid "Create World Material" -msgstr "创å»ŗäø–ē•Œęč“Ø" - - msgid "Convert the first discovered USD dome light to a world background shader" msgstr "将ē¬¬äø€äøŖ发ēŽ°ēš„USDå¤©å¹•å…‰č½¬ę¢äøŗäø–ē•ŒčƒŒę™Æē€č‰²å™Ø" @@ -90615,19 +90613,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "åŖä½æē”Ø形变ē±»äæ®ę”¹å™Ø(äø“ę—¶ē¦ē”Ø除多ēŗ§ē²¾åŗ¦ä»„外ēš„ę‰€ęœ‰ęœ‰ę•ˆäæ®ę”¹å™Ø)" -msgid "UV Sculpting" -msgstr "UV 雕刻" - - -msgctxt "Curve" -msgid "Strength Curve Preset" -msgstr "å¼ŗåŗ¦ę›²ēŗæé¢„č®¾" - - -msgid "Strength Curve" -msgstr "å¼ŗåŗ¦ę›²ēŗæ" - - msgid "Properties of vertex and weight paint mode" msgstr "锶ē‚¹ē»˜åˆ¶ęؔ式äøŽęƒé‡ē»˜åˆ¶ęؔ式ēš„å±žę€§" @@ -91061,6 +91046,10 @@ msgid "Threads" msgstr "ēŗæē؋" +msgid "Sample Subset" +msgstr "é‡‡ę ·å­é›†" + + msgid "Path Guiding" msgstr "č·Æ径引åƼ" @@ -98012,6 +98001,22 @@ msgid "If non-zero, the maximum value for an indirect sample, higher values will msgstr "č‹„äøŗ非零值, 则代č”Øé—“ęŽ„å…‰é‡‡ę ·ęœ€å¤§å€¼, č¾ƒé«˜ēš„å€¼å°†č¢«ęŒ‰ęƔ例ē¼©å°, 仄éæ免äŗ§ē”Ÿčæ‡å¤šēš„å™Ŗē‚¹ä»„及ē¼“ę…¢ēš„聚ꕛ, 仄ē‰ŗē‰²ē²¾ē”®åŗ¦äøŗ代价" +msgid "Sample Subset Offset" +msgstr "é‡‡ę ·å­é›†åē§»" + + +msgid "0-based index of sample to start rendering from" +msgstr "从 0 开始ęø²ęŸ“ēš„采꠷ē“¢å¼•" + + +msgid "Sample Subset Length" +msgstr "é‡‡ę ·å­é›†é•æåŗ¦" + + +msgid "The number of samples to render in this subset" +msgstr "ę­¤å­é›†äø­č¦ęø²ęŸ“ēš„采꠷ꕰ" + + msgid "Number of samples to render for each pixel" msgstr "各像ē“ ēš„ęø²ęŸ“采꠷ꬔꕰ" @@ -98236,6 +98241,14 @@ msgid "Denoise the image in the 3D viewport" msgstr "åœØ3Dč§†å›¾äø­ä½æē”Ø图像降å™Ŗ" +msgid "Use Sample Subset" +msgstr "ä½æē”Øé‡‡ę ·å­é›†" + + +msgid "Render a subset of the specified max samples. Typically used for distributed rendering across multiple devices" +msgstr "ä½æē”ØęŒ‡å®šēš„ęœ€å¤§é‡‡ę ·ę•°ēš„å­é›†ć€‚é€šåøøē”ØäŗŽåœØč·Øå¤šč®¾å¤‡é—“ēš„分åøƒå¼ęø²ęŸ“" + + msgid "Surface Guiding" msgstr "č”Ø面引åƼ" @@ -102375,10 +102388,18 @@ msgid "Retiming Key Selection Status" msgstr "é‡å®šę—¶å…³é”®åø§é€‰ę‹©ēŠ¶ę€" +msgid "(Deprecated: Replaced by '.strips') Top-level strips only" +msgstr "ļ¼ˆå·²å¼ƒē”Øļ¼šę›æę¢äøŗ '.strips'ļ¼‰ä»…限锶ēŗ§ē‰‡ę®µ" + + msgid "All Strips" msgstr "ꉀ꜉ē‰‡ę®µ" +msgid "(Deprecated: Replaced by '.strips_all') All strips, recursively including those inside metastrips" +msgstr "ļ¼ˆå·²å¼ƒē”Øļ¼šę›æę¢äøŗ '.strips_all'ļ¼‰ę‰€ęœ‰ē‰‡ę®µļ¼Œé€’å½’åŒ…ę‹¬å†…éƒØēš„复合ē‰‡ę®µ" + + msgid "Show Missing Media" msgstr "ę˜¾ē¤ŗäø¢å¤±ēš„åŖ’体" @@ -107119,6 +107140,10 @@ msgid "Sequence strip to group other strips as a single sequence strip" msgstr "ē”ØäŗŽå°†å¤šäøŖē‰‡ę®µē»„合äøŗ单äø€åŗåˆ—ē‰‡ę®µ" +msgid "(Deprecated: Replaced by '.strips') Strips nested in meta strip" +msgstr "ļ¼ˆå·²å¼ƒē”Øļ¼šę›æę¢äøŗ '.strips'ļ¼‰åµŒå„—åœØ复合ē‰‡ę®µäø­ēš„ē‰‡ę®µ" + + msgid "Strips nested in meta strip" msgstr "嵌儗åœØ复合ē‰‡ę®µäø­ēš„ē‰‡ę®µ" @@ -111295,6 +111320,19 @@ msgid "Enable this light in solid shading mode" msgstr "åœØ实体ē€č‰²ęؔ式äø‹åÆē”ØčÆ„ēÆ光" +msgid "UV Sculpting" +msgstr "UV 雕刻" + + +msgctxt "Curve" +msgid "Strength Curve Preset" +msgstr "å¼ŗåŗ¦ę›²ēŗæé¢„č®¾" + + +msgid "Strength Curve" +msgstr "å¼ŗåŗ¦ę›²ēŗæ" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "锶ē‚¹ē»„, ē”ØäŗŽéŖØęž¶å½¢å˜ęˆ–č€…å…¶ä»–" @@ -117053,6 +117091,10 @@ msgid "Work Relative to some Object" msgstr "ē›øåƹäŗŽęŸē‰©ä½“čæä½œ" +msgid "No 'Relative To' object found, set one explicitly or make sure there is an active object" +msgstr "ęœŖę‰¾åˆ° 'Relative Toē›øåƹäŗŽ' ē‰©ä½“ļ¼ŒčÆ·ę˜Žē”®č®¾ē½®äø€äøŖē‰©ä½“ęˆ–ē”®äæå­˜åœØę“»åŠØē‰©ä½“" + + msgid "Select an object or pose bone" msgstr "选ꋩäø€äøŖē‰©ä½“ęˆ–å§æꀁéŖØéŖ¼" @@ -117670,6 +117712,10 @@ msgid "No glTF Animation" msgstr "ꗠ glTF åŠØē”»" +msgid "Please disable/enable 'action filter' to refresh the list" +msgstr "čÆ·ä½æē”Ø ē¦ē”Ø/åÆē”Ø ā€œåŠØ作čæ‡ę»¤å™Øā€ ę„åˆ·ę–°åˆ—č”Ø" + + msgid "No Actions in .blend file" msgstr ".blendę–‡ä»¶å†…ę²”ęœ‰åŠØ作" @@ -121833,6 +121879,10 @@ msgid "Bake All Light Probe Volumes" msgstr "ēƒ˜ē„™å…ØéƒØ光ē…§ęŽ¢å¤“体ē§Æ" +msgid "Compositing Node Tree" +msgstr "åˆęˆčŠ‚ē‚¹ę ‘" + + msgctxt "Operator" msgid "Export to File" msgstr "åƼå‡ŗåˆ°ę–‡ä»¶" @@ -127859,6 +127909,10 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "ęø²ęŸ“é”™čÆÆ (%s) ę— ę³•äæå­˜: '%s'" +msgid "Failed to create stereo image buffer" +msgstr "创å»ŗē«‹ä½“图像ē¼“å†²å¤±č“„" + + msgid "ipos" msgstr "ipos" @@ -129562,6 +129616,18 @@ msgid "Cannot pose libdata" msgstr "ę— ę³•č°ƒę•“åŗ“ę•°ę®" +msgid "Show Original Pose" +msgstr "ę˜¾ē¤ŗ原始å§æꀁ" + + +msgid "Show Blended Pose" +msgstr "ę˜¾ē¤ŗę··åˆēš„å§æꀁ" + + +msgid "Flip Pose" +msgstr "ēæ»č½¬å§æꀁ" + + msgid "Pose lib is only for armatures in pose mode" msgstr "å§æꀁåŗ“ä»…åœØå§æꀁęؔ式äø­åƹéŖØꞶ适ē”Ø" @@ -129598,48 +129664,8 @@ msgid "Sliding-Tool" msgstr "껑åŠØå·„å…·" -msgid "[X]/Y/Z axis only (X to clear)" -msgstr "仅 [X]/Y/Z č½“ (X ęø…除)" - - -msgid "X/[Y]/Z axis only (Y to clear)" -msgstr "仅 X/[Y]/Z č½“ (Y ęø…除)" - - -msgid "X/Y/[Z] axis only (Z to clear)" -msgstr "仅 X/Y/[Z] č½“ (Z ęø…除)" - - -msgid "X/Y/Z = Axis Constraint" -msgstr "X/Y/Z = č½“ēŗ¦ęŸ" - - -msgid "[G]/R/S/B/C - Location only (G to clear) | %s" -msgstr "[G]/R/S/B/C - 仅位ē½® (G ęø…除) | %s" - - -msgid "G/[R]/S/B/C - Rotation only (R to clear) | %s" -msgstr "G/[R]/S/B/C - ä»…ę—‹č½¬ (R ęø…除) | %s" - - -msgid "G/R/[S]/B/C - Scale only (S to clear) | %s" -msgstr "G/R/[S]/B/C - 仅ē¼©ę”¾ (S ęø…除) | %s" - - -msgid "G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s" -msgstr "G/R/S/[B]/C - 仅å¼Æę›²éŖØéŖ¼ēš„å±žę€§ (B ęø…除) | %s" - - -msgid "G/R/S/B/[C] - Custom Properties only (C to clear) | %s" -msgstr "G/R/S/B/[C] - 仅č‡Ŗ定义ēš„å±žę€§ (C ęø…除) | %s" - - -msgid "G/R/S/B/C - Limit to Transform/Property Set" -msgstr "G/R/S/B/C - é™åˆ¶č½¬ę¢/å±žę€§č®¾ē½®" - - -msgid "[H] - Toggle bone visibility" -msgstr "[H] - åˆ‡ę¢éŖØéŖ¼åÆ见ꀧ" +msgid "Cancel" +msgstr "å–ę¶ˆ" msgid "No keyframes to slide between" @@ -130063,6 +130089,10 @@ msgid "Node group's first output must be a geometry" msgstr "节ē‚¹ē»„ēš„ē¬¬äø€äøŖč¾“å‡ŗåæ…é”»ę˜Æ几何" +msgid "Place Next Stroke Vertex" +msgstr "ę”¾ē½®äø‹äø€äøŖē¬”划ē‚¹" + + msgid "Erase" msgstr "ꓦ除" @@ -130223,10 +130253,6 @@ msgid "No active object, or active object isn't a Grease Pencil object" msgstr "ę²”ęœ‰ę“»åŠØē‰©ä½“ęˆ–č€…ę“»åŠØē‰©ä½“并非äø€äøŖčœ”ē¬”ē‰©ä½“" -msgid "Cancel" -msgstr "å–ę¶ˆ" - - msgid "Panning" msgstr "å¹³ē§»" @@ -130275,6 +130301,10 @@ msgid "Can only pick from the 3D viewport or the outliner" msgstr "åŖčƒ½ä»Ž3Dč§†å£ęˆ–å¤§ēŗ²č§†å›¾äø­ę‹¾å–" +msgid "Drag to continue sampling, release when done" +msgstr "ꋖåŠØ仄ē»§ē»­é‡‡ę ·ļ¼Œå®ŒęˆåŽę¾å¼€" + + msgid "Press 'Enter' to sample outside of a Blender window" msgstr "ꌉ 'å›žč½¦' åœØ Blender ēŖ—å£å¤–å–ę ·" @@ -131685,6 +131715,10 @@ msgid "Icosphere" msgstr "ę£±č§’ēƒ" +msgid "Profile Shape" +msgstr "č½®å»“å½¢ēŠ¶" + + msgid "Harden" msgstr "ē”¬åŒ–" @@ -131693,6 +131727,10 @@ msgid "Outer" msgstr "ꊘē—•å¤–侧" +msgid "Miter Profile Shape" +msgstr "ę–œęŽ„č½®å»“å½¢ēŠ¶" + + msgid "Intersection Type" msgstr "ē›øäŗ¤ē±»åž‹" @@ -132390,6 +132428,18 @@ msgid "No UV layer named \"%s\" found in the object \"%s\"" msgstr "名äøŗ \"%s\" ēš„UV层ęœŖåœØē‰©ä½“ \"%s\" äø­ę‰¾åˆ°" +msgid "Cage object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "ē½©å¼ē‰©ä½“ \"%s\" åœØä¼°ē®—ēš„åœŗę™Æäø­ęœŖę‰¾åˆ°ļ¼Œå®ƒåÆčƒ½å·²č¢«éšč—" + + +msgid "Object \"%s\" not found in evaluated scene, it may be hidden" +msgstr "ē‰©ä½“ \"%s\" åœØä¼°ē®—ēš„åœŗę™Æäø­ęœŖę‰¾åˆ°ļ¼Œå®ƒåÆčƒ½å·²č¢«éšč—" + + +msgid "Failed to access mesh from object \"%s\", ensure it's visible while rendering" +msgstr "č®æ问ē‰©ä½“ \"%s\" ēš„ē½‘ę ¼äæ”ęÆå¤±č“„ļ¼ŒčÆ·ē”®äæęø²ęŸ“ę—¶åÆ见" + + msgid "Error baking from object \"%s\"" msgstr "从ē‰©ä½“ \"%s\" äøŠēƒ˜ē„™ę—¶å‡ŗ错" @@ -134100,18 +134150,6 @@ msgid "UV map or surface attachment is invalid" msgstr "UV č““å›¾ęˆ–č”Ø面附ē€ę— ę•ˆ" -msgid "Fill: ESC/RMB cancel, LMB Fill, MMB Adjust Extension, S: Switch Mode, D: Stroke Collision | Mode: {}, Collision {}, Length: {:.3f}" -msgstr "唫充: ESC/é¼ ę ‡å³é”® å–ę¶ˆ, é¼ ę ‡å·¦é”® 唫充, é¼ ę ‡äø­é”® č°ƒę•“ę‰©å±•, S: åˆ‡ę¢ęؔ式, D: ē¬”ē”»ē¢°ę’ž | ęؔ式: {}, ē¢°ę’ž {}, é•æåŗ¦: {:.3f}" - - -msgid "ON" -msgstr "开" - - -msgid "OFF" -msgstr "关" - - msgid "No Grease Pencil frame to draw weight on" msgstr "ꗠåÆē”ØäŗŽē»˜åˆ¶ęƒé‡ēš„čœ”ē¬”åø§" @@ -134407,16 +134445,20 @@ msgid "Action must have at least one keyframe or F-Modifier" msgstr "åŠØ作åæ…é”»ęœ‰č‡³å°‘äø€äøŖ关键åø§ęˆ–č€…å‡½ę•°ę›²ēŗæäæ®ę”¹å™Ø" +msgid "Action+Slot has already been stashed" +msgstr "åŠØ作+ę§½ å·²ē»č¢«å­˜ę”¾" + + msgid "Could not find current NLA Track" -msgstr "ę²”ę‰¾åˆ°å½“å‰ēš„NLA块" +msgstr "ę²”ę‰¾åˆ°å½“å‰ēš„ NLA č½Ø道" msgid "Internal Error: Could not find Animation Data/NLA Stack to use" -msgstr "内éƒØ错čÆÆ: ę‰¾äøåˆ°åŠØē”»ę•°ę®/NLA å †ę ˆę„ä½æē”Ø" +msgstr "内éƒØ错čÆÆ: ę‰¾äøåˆ° åŠØē”»ę•°ę®/NLA č½Ø道 ę„ä½æē”Ø" msgid "Action '%s' will not be saved, create Fake User or Stash in NLA Stack to retain" -msgstr "åŠØ作 '%s' 将äøč¢«äæå­˜, 创å»ŗäø€äøŖä¼Ŗē”Øęˆ·ęˆ–č€…å­˜ę”¾åœØNLAå †ę ˆäø­ę„äæē•™" +msgstr "åŠØ作 '%s' 将äøč¢«äæå­˜, 创å»ŗäø€äøŖä¼Ŗē”Øęˆ·ęˆ–č€…å­˜ę”¾åœØNLAč½Ø道äø­ę„äæē•™" msgid "Delete selected keyframes?" @@ -134643,6 +134685,10 @@ msgid "Cannot read '%s': %s" msgstr "ę— ę³•čƻ取 '%s': %s" +msgid "Place Marker" +msgstr "ę”¾ē½®ę ‡č®°" + + msgid "Delete selected tracks?" msgstr "删除选äø­ēš„č½Øčæ¹ļ¼Ÿ" @@ -135200,42 +135246,6 @@ msgid "Deleted %u drivers" msgstr "删除 %u äøŖ驱åŠØå™Ø" -msgid "Decimate Keyframes" -msgstr "ē²¾ē®€å…³é”®åø§" - - -msgid "[TAB] - Modify Sharpness" -msgstr "[TAB] - äæ®ę”¹é”åŗ¦" - - -msgid "[TAB] - Modify Curve Bend" -msgstr "[TAB] - äæ®ę”¹ę›²ēŗæå¼Æę›²" - - -msgid "Ease Keys" -msgstr "ē¼“åŠØ关键åø§" - - -msgid "Shear Keys" -msgstr "切变关键åø§" - - -msgid "D - Toggle Direction" -msgstr "D - åˆ‡ę¢ę–¹å‘" - - -msgid "[D] - Scale From Right End" -msgstr "[D] - 从右ē«Æē¼©ę”¾" - - -msgid "[D] - Scale From Left End" -msgstr "[D] - 从左ē«Æē¼©ę”¾" - - -msgid "Scale from Neighbor Keys" -msgstr "从ē›ø邻ēš„关键åø§ē¼©ę”¾" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "通čæ‡ęŒ‡å®šå‡½ę•°ę›²ēŗæäøŽåŽŸå§‹ę›²ēŗæēš„偏差ē؋åŗ¦ę„ē²¾ē®€å‡½ę•°ę›²ēŗæ" @@ -137849,6 +137859,14 @@ msgid " | Ctrl - Hold for increments" msgstr " | Ctrl - é•æꌉåÆē”Ø增量" +msgid "Overshoot" +msgstr "čæ‡å†²" + + +msgid "Overshoot Disabled" +msgstr "å·²ē¦ē”Øčæ‡å†²" + + msgid "Unpack File" msgstr "č§£åŒ…ę–‡ä»¶" @@ -137942,6 +137960,14 @@ msgid "Pinned vertices can be selected in Vertex Mode only" msgstr "åŖčƒ½åœØ锶ē‚¹ęؔ式äø‹é€‰ę‹©å·²é’‰å›ŗ锶ē‚¹" +msgid "Switch Island" +msgstr "åˆ‡ę¢å­¤å²›" + + +msgid "Midpoints" +msgstr "äø­ē‚¹" + + msgid "Could not initialize stitching on any selected object" msgstr "ę— ę³•åˆå§‹åŒ–ä»»ä½•é€‰å®šē‰©ä½“ēš„ē¼åˆ" @@ -140806,8 +140832,8 @@ msgid "Clipping" msgstr "čŒƒå›“é™åˆ¶" -msgid "Level Viewport" -msgstr "ēŗ§ę•° č§†å›¾" +msgid "Levels Viewport" +msgstr "层ēŗ§ č§†å›¾" msgid "Unsubdivide" @@ -140944,6 +140970,14 @@ msgid "Built without Remesh modifier" msgstr "äøä½æē”Ø重Ꞅē½‘ę ¼äæ®ę”¹å™Øčæ›č”Œęž„å»ŗ" +msgid "Zero voxel size cannot be solved" +msgstr "零体ē“ å°ŗåÆøę— ę³•ę±‚č§£" + + +msgid "Zero scale cannot be solved" +msgstr "零ē¼©ę”¾ę— ę³•ę±‚č§£" + + msgid "Axis Object" msgstr "č½“ē‰©ä½“" @@ -141025,10 +141059,6 @@ msgid "Adaptive Subdivision" msgstr "č‡Ŗ适åŗ”ē»†åˆ†" -msgid "Levels Viewport" -msgstr "层ēŗ§ č§†å›¾" - - msgid "Final Scale: Render %.2f px, Viewport %.2f px" msgstr "꜀ē»ˆē¼©ę”¾ļ¼šęø²ęŸ“ %.2f px, č§†å£ %.2f px" @@ -141300,6 +141330,14 @@ msgid "Quality:" msgstr "品č“Ø:" +msgid "Disabled. Built without OpenImageDenoise" +msgstr "å·²ē¦ē”Ø, ęœŖä½æē”Ø OpenImageDenoise ē¼–čƑ" + + +msgid "Disabled. Platform not supported" +msgstr "å·²ē¦ē”Ø, 平台äøę”Æꌁ" + + msgid "Image 1" msgstr "图像 1" @@ -141384,6 +141422,10 @@ msgid "The smoothness of the extracted highlights" msgstr "ęå–ēš„高光ēš„å¹³ę»‘åŗ¦" +msgid "Suppresses bright highlights such that their brightness are not larger than this value. Zero disables suppression and has no effect" +msgstr "ęŠ‘åˆ¶ę˜Žäŗ®ēš„高光ļ¼Œä½æ其äŗ®åŗ¦äøå¤§äŗŽę­¤å€¼ć€‚零ē¦ē”ØęŠ‘åˆ¶ļ¼Œę²”꜉ꕈꞜ" + + msgid "Adjusts the brightness of the glare" msgstr "č°ƒę•“ē‚«å…‰ēš„äŗ®åŗ¦" @@ -141392,6 +141434,10 @@ msgid "Adjusts the saturation of the glare" msgstr "č°ƒę•“ē‚«å…‰ēš„鄱和åŗ¦" +msgid "Tints the glare. Consider desaturating the glare to more accurate tinting" +msgstr "äøŗēœ©å…‰ē€č‰²ć€‚č€ƒč™‘é™ä½Žēœ©å…‰ēš„鄱和åŗ¦ļ¼Œä»„čŽ·å¾—ę›“å‡†ē”®ēš„ē€č‰²" + + msgid "The size of the glare relative to the image. 1 means the glare covers the entire image, 0.5 means the glare covers half the image, and so on" msgstr "ēœ©å…‰ē›øåƹäŗŽå›¾åƒēš„大小. 1 č”Øē¤ŗēœ©å…‰č¦†ē›–ę•“äøŖ图像, 0.5 č”Øē¤ŗēœ©å…‰č¦†ē›–图像ēš„äø€åŠ, 仄ꭤē±»ęŽØ" @@ -141404,6 +141450,10 @@ msgid "The angle that the first streak makes with the horizontal axis" msgstr "ē¬¬äø€ę”ę”ę–‘äøŽę°“å¹³č½“ēš„å¤¹č§’" +msgid "The number of ghosts for Ghost glare or the quality and spread of Glare for Streaks and Simple Star" +msgstr "ę®‹å½±ēœ©å…‰ēš„ę®‹å½±ę•°é‡ļ¼Œęˆ–ę”ę–‘å’Œē®€å•ę˜Ÿå½¢ēœ©å…‰ēš„č“Øé‡å’Œę‰©ę•£čŒƒå›“" + + msgid "Streak fade-out factor" msgstr "ę”ę–‘ę·”å‡ŗē³»ę•°" @@ -141416,6 +141466,10 @@ msgid "ID value" msgstr "ID 值" +msgid "Render passes in the Viewport compositor are only supported in EEVEE" +msgstr "仅EEVEEę”ÆęŒč§†å£åˆęˆå™Øäø­ēš„ęø²ęŸ“通道" + + msgid "Viewport compositor setup not fully supported" msgstr "尚ęœŖ完å…Øę”ÆęŒč§†å›¾åˆęˆå™Øč®¾ē½®" @@ -141456,10 +141510,6 @@ msgid "Offset Y" msgstr "偏ē§»é‡ Y" -msgid "Undistortion" -msgstr "ē§»é™¤ē•ø变" - - msgid "Dot" msgstr "ē‚¹" @@ -142503,10 +142553,6 @@ msgid "Values larger than the threshold are inside the generated mesh" msgstr "大äŗŽé˜ˆå€¼ēš„值位äŗŽē”Ÿęˆēš„ē½‘ę ¼å†…" -msgid "Has Alpha" -msgstr "꜉ꗠAlpha" - - msgid "Frame Count" msgstr "åø§ę•°" @@ -145328,6 +145374,14 @@ msgid "drag-" msgstr "ꋖåŠØ-" +msgid "ON" +msgstr "开" + + +msgid "OFF" +msgstr "关" + + msgid "Set Debug Value" msgstr "č®¾ē½®č°ƒčÆ•ę•°å€¼" diff --git a/locale/po/zh_HANT.po b/locale/po/zh_HANT.po index 95fa1358d24f..e4e6befe65d5 100644 --- a/locale/po/zh_HANT.po +++ b/locale/po/zh_HANT.po @@ -1,11 +1,11 @@ msgid "" msgstr "" -"Project-Id-Version: Blender 4.4.0 Alpha (b'efff379ea583')\n" +"Project-Id-Version: Blender 4.4.0 Alpha (b'5c1749f7b7d3')\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-01-27 10:58+0000\n" -"PO-Revision-Date: 2025-01-17 23:14+0000\n" -"Last-Translator: Kisaragi Hiu \n" +"POT-Creation-Date: 2025-02-03 14:39+0000\n" +"PO-Revision-Date: 2025-01-31 18:56+0000\n" +"Last-Translator: Cheng-Chia Tseng \n" "Language-Team: Chinese (Traditional Han script) \n" "Language: zh_HANT\n" "MIME-Version: 1.0\n" @@ -64,7 +64,7 @@ msgstr "動ē•«é »é“集" msgid "Collection of animation channels, typically associated with an action slot" -msgstr "動ē•«é »é“集合ļ¼Œé€šåøøčˆ‡ęŸå‹•ä½œę§½é—œčÆ" +msgstr "動ē•«é »é“集ē›’ļ¼Œé€šåøøčˆ‡ęŸå‹•ä½œę§½é—œčÆ" msgid "F-Curves" @@ -595,11 +595,11 @@ msgstr "ē”Øę–¼č؈ē®—ēš„č£ē½® (仄 Cycles ē®—ē¹Ŗ)" msgid "Kernel Optimization" -msgstr "ę“ä½œę øåæƒå„Ŗ化" +msgstr "內ę øåæƒęœ€ä½³åŒ–" msgid "Kernels can be optimized based on scene content. Optimized kernels are requested at the start of a render. If optimized kernels are not available, rendering will proceed using generic kernels until the optimized set is available in the cache. This can result in additional CPU usage for a brief time (tens of seconds)" -msgstr "ę øåæƒåÆä»„ę ¹ę“šå “ę™Æå…§å®¹é€²č”Œęœ€ä½³åŒ–ć€‚åœØē®—ē¹Ŗé–‹å§‹ę™‚ļ¼Œęœƒč¦ę±‚ęœ€ä½³åŒ–éŽēš„ę øåæƒć€‚å¦‚ęžœę²’ęœ‰ęœ€ä½³åŒ–ēš„ę øåæƒåÆē”Øļ¼Œå‰‡ē®—ē¹Ŗ將ä½æē”Ø通ē”Øę øåæƒé€²č”Œļ¼Œē›“åˆ°ęœ€ä½³åŒ–ęŒ‡ä»¤é›†åœØåæ«å–äø­åÆē”Øē‚ŗę­¢ć€‚é€™åÆčƒ½ęœƒå°Žč‡“ēŸ­ęš«ę™‚é–“ļ¼ˆå¹¾åē§’ļ¼‰ēš„锍外 CPU ē”Ø量" +msgstr "內ę øåæƒåÆä»„ę ¹ę“šå “ę™Æå…§å®¹ä½œęœ€ä½³åŒ–ć€‚åœØē®—ē¹Ŗé–‹å§‹ę™‚ļ¼Œęœƒč¦ę±‚ęœ€ä½³åŒ–éŽēš„ę øåæƒć€‚å¦‚ęžœę²’ęœ‰ęœ€ä½³åŒ–ēš„ę øåæƒåÆē”Øļ¼Œå‰‡ē®—ē¹Ŗ將ä½æē”Ø通ē”Øę øåæƒé€²č”Œļ¼Œē›“åˆ°ęœ€ä½³åŒ–ęŒ‡ä»¤é›†åœØåæ«å–äø­åÆē”Øē‚ŗę­¢ć€‚é€™åÆčƒ½ęœƒå°Žč‡“ēŸ­ęš«ę™‚é–“ļ¼ˆå¹¾åē§’ļ¼‰ēš„锍外 CPU ē”Ø量" msgid "Off" @@ -607,11 +607,15 @@ msgstr "關" msgid "Disable kernel optimization. Slowest rendering, no extra background CPU usage" -msgstr "停ē”Øę øåæƒęœ€ä½³åŒ–怂ē®—ē¹Ŗ速åŗ¦ęœ€ę…¢ļ¼Œē„”锍外ēš„čƒŒę™Æ CPU ē”Ø量" +msgstr "停ē”Ø內ę øåæƒęœ€ä½³åŒ–怂ē®—ē¹Ŗ速åŗ¦ęœ€ę…¢ļ¼Œē„”锍外ēš„čƒŒę™Æ CPU ē”Ø量" msgid "Intersection only" -msgstr "僅äŗ¤éŒÆ" +msgstr "僅äŗ¤é›†" + + +msgid "Optimize only intersection kernels. Faster rendering, negligible extra background CPU usage" +msgstr "ęœ€ä½³åŒ–åƒ…äŗ¤é›†å…§ę øåæƒć€‚ē®—ē¹Ŗ速åŗ¦ę›“åæ«ļ¼ŒåÆåæ½ē•„ēš„é”å¤–čƒŒę™Æ CPU ē”Ø量" msgid "Full" @@ -619,7 +623,7 @@ msgstr "å®Œę•“" msgid "Optimize all kernels. Fastest rendering, may result in extra background CPU usage" -msgstr "ęœ€ä½³åŒ–ę‰€ęœ‰ę øåæƒć€‚ē®—ē¹Ŗ速åŗ¦ęœ€åæ«ļ¼ŒåÆčƒ½å°Žč‡“é”å¤–ēš„čƒŒę™Æ CPU ē”Ø量" +msgstr "ęœ€ä½³åŒ–ę‰€ęœ‰å…§ę øåæƒć€‚ē®—ē¹Ŗ速åŗ¦ęœ€åæ«ļ¼ŒåÆčƒ½å°Žč‡“é”å¤–ēš„čƒŒę™Æ CPU ē”Ø量" msgid "MetalRT" @@ -630,14 +634,26 @@ msgid "MetalRT for ray tracing uses less memory for scenes which use curves exte msgstr "MetalRT ē”Øę–¼å…‰č·”čæ½č¹¤é‹ē®—Ꙃļ¼ŒåœØ大量ä½æē”Øę›²ē·šēš„å “ę™ÆåÆęø›å°‘čØ˜ę†¶é«”ē”Ø量ļ¼Œäø¦åœØē‰¹å®šę¢ä»¶äø‹ęœ‰č¼ƒä½³ę•ˆčƒ½" +msgid "Disable MetalRT (uses BVH2 layout for intersection queries)" +msgstr "停ē”Ø MetalRTļ¼ˆä»„ BVH2 配ē½®ä½œäŗ¤é›†ęŸ„č©¢ļ¼‰" + + msgid "On" msgstr "開" +msgid "Enable MetalRT for intersection queries" +msgstr "ē‚ŗäŗ¤é›†ęŸ„č©¢å•Ÿē”Ø MetalRT" + + msgid "Auto" msgstr "č‡Ŗ動" +msgid "Automatically pick the fastest intersection method" +msgstr "č‡Ŗå‹•ęŒ‘éø꜀åæ«ēš„äŗ¤é›†ę–¹ę³•" + + msgid "Distribute memory across devices" msgstr "åˆ†ę•£čØ˜ę†¶é«”åˆ°å„å€‹č£ē½®" @@ -651,7 +667,7 @@ msgstr "HIP RT (åƦ驗äø­)" msgid "HIP RT enables AMD hardware ray tracing on RDNA2 and above, with shader fallback on older cards. This feature is experimental and some scenes may render incorrectly" -msgstr "HIP RT 啟ē”ØåœØ RDNA2 仄äøŠē‰ˆęœ¬ēš„ AMD ē”¬é«”äøŠä½œå…‰ē·ščæ½č¹¤ļ¼Œäø¦åœØč¼ƒčˆŠēš„é”Æē¤ŗ協äøŠä½æē”Øč‘—č‰²å™Øå¾Œå‚™ę©Ÿåˆ¶ć€‚é€™å€‹åŠŸčƒ½ä»å±¬ę–¼åÆ¦é©—ę€§č³Ŗļ¼Œęœ‰äŗ›å “ę™ÆåÆčƒ½ē®—ē¹Ŗäøę­£ē¢ŗ" +msgstr "HIP RT čƒ½ē‚ŗ RDNA2 仄後ē‰ˆęœ¬ēš„ AMD ē”¬é«”äøŠå•Ÿē”Ø光ē·ščæ½č¹¤ļ¼Œäø¦åœØč¼ƒčˆŠēš„é”Æē¤ŗ協äøŠä½æē”Øč‘—č‰²å™Øå¾Œå‚™ę©Ÿåˆ¶ć€‚é€™å€‹åŠŸčƒ½ä»å±¬ę–¼åÆ¦é©—ę€§č³Ŗļ¼Œęœ‰äŗ›å “ę™ÆåÆčƒ½ē®—ē¹Ŗäøę­£ē¢ŗ" msgid "Embree on GPU" @@ -670,18 +686,46 @@ msgid "Displays glTF UI to manage material variants" msgstr "é”Æē¤ŗ glTF ä½æē”Ø介面仄ē®”ē†ęč³Ŗ變體" +msgid "Allow glTF Embedded format" +msgstr "允čر glTF å…§åµŒę ¼å¼" + + msgid "Display glTF UI to manage animations" msgstr "é”Æē¤ŗ glTF ä½æē”Ø介面仄ē®”ē†å‹•ē•«" +msgid "glTFpack file path" +msgstr "glTFpack ęŖ”ę”ˆč·Æ徑" + + +msgid "Path to gltfpack binary" +msgstr "gltfpack äŗŒé€²ä½ęŖ”ēš„č·Æ徑" + + msgid "Displays glTF Material Output node in Shader Editor (Menu Add > Output)" msgstr "åœØč‘—č‰²å™Øē·Øč¼Æå™Øäø­é”Æē¤ŗ glTF čح定ēƀ點 (éø單 ę·»åŠ  > č¼øå‡ŗ)" +msgid " Filter by Name" +msgstr " 依名ēرēÆ©éø" + + +msgid "Show only hotkeys that have this text in their name" +msgstr "åŖé”Æē¤ŗ名ēرäø­åŒ…å«ę­¤ę®µę–‡å­—ēš„åæ«é€Ÿéµ" + + +msgid "Hide Mix nodes" +msgstr "éš±č—ę··åˆēƀ點" + + msgid "Always" msgstr "ēø½ę˜Æ" +msgid "Non-Shader" +msgstr "éžč‘—č‰²å™Ø" + + msgid "Never" msgstr "ę°øäø" @@ -703,7 +747,11 @@ msgstr "åŗ•éƒØ" msgid "Show Hotkey List" -msgstr "é”Æē¤ŗē†±éµåˆ—č”Ø" +msgstr "é”Æē¤ŗåæ«ę·éµåˆ—č”Ø" + + +msgid "Expand this box into a list of all the hotkeys for functions in this addon" +msgstr "å°‡ęœ¬ę–¹å”Šę““å±•ęˆę­¤é™„åŠ å…ƒä»¶ę‰€ęœ‰åŠŸčƒ½ēš„åæ«ę·éµåˆ—č”Ø" msgid "Fribidi Library" @@ -787,7 +835,7 @@ msgstr "ę­¤ę•øꓚēµ„唊ēš„作ē”Øäø­å‹•ä½œ" msgid "Action Blending" -msgstr "å‹•ä½œę··åˆ" +msgstr "動作äŗ¤ę··" msgid "Method used for combining Active Action's result with result of NLA stack" @@ -1087,7 +1135,7 @@ msgstr "任何åÆčƒ½č³‡ę–™ēš„ęŒ‡å‘å™Øä½æē”Øēš„ RNA 锞型" msgid "Area in a subdivided screen, containing an editor" -msgstr "ē“°åˆ†ēš„čž¢å¹•å…§ēš„面ē©ļ¼ŒåŒ…含äø€å€‹ē·Øč¼Æå™Ø" +msgstr "ē“°åˆ†ēš„čž¢å¹•å…§ēš„區域ļ¼ŒåŒ…含äø€å€‹ē·Øč¼Æå™Ø" msgid "Height" @@ -1103,7 +1151,7 @@ msgstr "區唊" msgid "Regions this area is subdivided in" -msgstr "ę­¤å€åŸŸč¢«ē“°åˆ†ęˆå”Šēš„區唊" +msgstr "ę­¤å€åŸŸč¢«ē“°åˆ†ęˆå”Šēš„ēƄ圍" msgid "Show Menus" @@ -1135,7 +1183,7 @@ msgstr "ē©ŗ體" msgid "3D Viewport" -msgstr "3D č¦–åœ–" +msgstr "3D ęŖ¢č¦–" msgid "Manipulate objects in a 3D environment" @@ -1203,7 +1251,7 @@ msgstr "ę–‡å­—ē·Øč¼Æå™Ø" msgid "Edit scripts and in-file documentation" -msgstr "ē·Øč¼ÆęŒ‡ä»¤ēØæ與ęŖ”ę”ˆå…§ę–‡ä»¶" +msgstr "ē·Øč¼Æ命令ēØæ與ęŖ”ę”ˆå…§ę–‡ä»¶" msgid "Python Console" @@ -1211,7 +1259,7 @@ msgstr "Python äø»ęŽ§č‡ŗ" msgid "Interactive programmatic console for advanced editing and script development" -msgstr "äŗ’å‹•ę€§ē؋式äø»ęŽ§č‡ŗ供進階ē·Øč¼Æčˆ‡ęŒ‡ä»¤ēØæ開ē™¼" +msgstr "äŗ’å‹•ę€§ē؋式äø»ęŽ§č‡ŗ供進階ē·Øč¼Æčˆ‡å‘½ä»¤ēØæ開ē™¼" msgid "Info" @@ -1484,7 +1532,7 @@ msgstr "ID 名ēر" msgid "If this is set, the asset gets a custom ID, otherwise it takes the name of the class used to define the asset (for example, if the class name is \"OBJECT_AST_hello\", and bl_idname is not set by the script, then bl_idname = \"OBJECT_AST_hello\")" -msgstr "č‹„čØ­å®šę­¤å€¼ļ¼Œé€™å€‹ē“ ęå°±ęœƒęœ‰äø€å€‹č‡Ŗč؂ IDļ¼Œäøē„¶å®ƒēš„ ID ꜃ę˜Æ定ē¾©ē“ ęēš„锞刄ēš„名ēرļ¼ˆčˆ‰ä¾‹ä¾†čŖŖļ¼Œå¦‚ęžœé”žåˆ„叫做 \"OBJECT_AST_hello\"ļ¼Œč€ŒęŒ‡ä»¤ēØæę²’ęœ‰čح定 bl_idnameļ¼Œå‰‡ bl_idname å°±ęœƒē­‰ę–¼ \"OBJECT_AST_hello\"ļ¼‰" +msgstr "č‹„čØ­å®šę­¤å€¼ļ¼Œé€™å€‹ē“ ęå°±ęœƒęœ‰äø€å€‹č‡Ŗč؂ IDļ¼Œäøē„¶å®ƒēš„ ID ꜃ę˜Æ定ē¾©ē“ ęēš„锞刄ēš„名ēرļ¼ˆčˆ‰ä¾‹ä¾†čŖŖļ¼Œå¦‚ęžœé”žåˆ„叫做 \"OBJECT_AST_hello\"ļ¼Œč€Œå‘½ä»¤ēØæę²’ęœ‰čح定 bl_idnameļ¼Œå‰‡ bl_idname å°±ęœƒē­‰ę–¼ \"OBJECT_AST_hello\"ļ¼‰" msgid "Options" @@ -1511,12 +1559,16 @@ msgid "Space Type" msgstr "ē©ŗ間锞型" +msgid "The space where the asset shelf is going to be used in" +msgstr "ē“ ęęž¶å°‡ä½æē”Øēš„ē©ŗ間" + + msgid "Preview Size" msgstr "é č¦½å¤§å°" msgid "Display Filter" -msgstr "é”Æē¤ŗ過ęæ¾" +msgstr "é”Æē¤ŗēÆ©éøå™Ø" msgid "Show Names" @@ -1764,11 +1816,11 @@ msgstr "作ē”Øäø­č‰²å½©" msgid "Active color attribute for display and editing" -msgstr "é”Æē¤ŗ與ē·Øč¼Æē”Øēš„作ē”Øäø­č‰²å½©å±¬ę€§" +msgstr "é”Æē¤ŗ與ē·Øč¼Æē”Øēš„作ē”Øäø­č‰²å½©ē‰¹ę€§" msgid "Active color attribute index" -msgstr "作ē”Øäø­č‰²å½©å±¬ę€§ē“¢å¼•" +msgstr "作ē”Øäø­č‰²å½©ē‰¹ę€§ē“¢å¼•" msgid "Active Color Attribute" @@ -2184,7 +2236,7 @@ msgstr "å‚¾ę–œ" msgid "Tilt in 3D View" -msgstr "ę–¼ 3D č¦–åœ–å…§å‚¾ę–œ" +msgstr "ę–¼ 3D ęŖ¢č¦–å…§å‚¾ę–œ" msgid "Weight" @@ -4000,12 +4052,17 @@ msgid "Erase stroke points" msgstr "ꓦ除ē­†č§ø頂點" +msgctxt "GPencil" +msgid "Stroke" +msgstr "ē­†č§ø" + + msgid "Closure Size" msgstr "閉合大小" msgid "Strokes end extension for closing gaps, use zero to disable" -msgstr "延ä¼øē­†č§øēµ‚點仄蓋äøŠå½¢ē‹€, čØ­ē‚ŗé›¶ä¾†å–ę¶ˆ" +msgstr "延ä¼øē­†č§øēµ‚點仄閉合ē©ŗ隙ļ¼ŒčØ­ē‚ŗ零åÆ停ē”Ø" msgid "Direction of the fill" @@ -4425,7 +4482,7 @@ msgstr "背ę™Æ影像" msgid "Image and settings for display in the 3D View background" -msgstr "åœØ 3D č¦–åœ–čƒŒę™Æäø­é”Æē¤ŗē”Øēš„å½±åƒčˆ‡čح定" +msgstr "åœØ 3D ęŖ¢č¦–čƒŒę™Æäø­é”Æē¤ŗē”Øēš„å½±åƒčˆ‡čح定" msgid "Opacity" @@ -4433,7 +4490,7 @@ msgstr "äøé€ę˜Žåŗ¦" msgid "Image opacity to blend the image against the background color" -msgstr "å½±åƒčˆ‡čƒŒę™Æč‰²å½©ę··åˆēš„äøé€ę˜Žåŗ¦" +msgstr "å½±åƒčˆ‡čƒŒę™Æč‰²å½©äŗ¤ę··ēš„äøé€ę˜Žåŗ¦" msgid "MovieClip" @@ -4532,7 +4589,7 @@ msgstr "é”Æē¤ŗę–¼å‰ę™Æ" msgid "Show this image in front of objects in viewport" -msgstr "åœØč¦–ęŽ„å£äø­å°‡ę­¤å½±åƒé”Æē¤ŗę–¼ē‰©é«”å‰ę–¹" +msgstr "åœØč¦–åœ–äø­å°‡ę­¤å½±åƒé”Æē¤ŗę–¼ē‰©é«”å‰ę–¹" msgid "Background Source" @@ -5544,15 +5601,15 @@ msgstr "č‰²å½©ę˜ å°„čح定" msgid "Blend color to mix with texture output color" -msgstr "č¦čˆ‡ē“‹ē†č¼øå‡ŗč‰²å½©ę··åˆēš„ę··åˆč‰²å½©" +msgstr "č¦čˆ‡ē“‹ē†č¼øå‡ŗč‰²å½©ę··åˆēš„äŗ¤ę··č‰²å½©" msgid "Blend Factor" -msgstr "ę··åˆäæ‚ę•ø" +msgstr "äŗ¤ę··äæ‚ę•ø" msgid "Blend Type" -msgstr "ę··åˆé”žåž‹" +msgstr "äŗ¤ę··é”žåž‹" msgid "Mode used to mix with texture output color" @@ -6837,6 +6894,10 @@ msgid "Limit the distance from target object" msgstr "é™åˆ¶čˆ‡ē›®ęؙē‰©é«”é–“ēš„č·é›¢" +msgid "Affect Transform" +msgstr "å½±éŸæč®Šę›" + + msgid "Transforms are affected by this constraint as well" msgstr "ę­¤ē“„ęŸä¹Ÿęœƒå½±éŸæč®Šę›" @@ -7082,15 +7143,15 @@ msgstr "Python ē“„ęŸ" msgid "Use Python script for constraint evaluation" -msgstr "ä½æē”Ø Python ęŒ‡ä»¤ēØæä¾†č©•ä¼°ē“„ęŸ" +msgstr "ä½æē”Ø Python 命令ēØæä¾†č©•ä¼°ē“„ęŸ" msgid "Script Error" -msgstr "ęŒ‡ä»¤ēØæéŒÆčŖ¤" +msgstr "命令ēØæéŒÆčŖ¤" msgid "The linked Python script has thrown an error" -msgstr "連ēµēš„ Python ęŒ‡ä»¤ēØæꋋå‡ŗéŒÆčŖ¤" +msgstr "連ēµēš„ Python 命令ēØæꋋå‡ŗéŒÆčŖ¤" msgid "Number of Targets" @@ -7102,11 +7163,11 @@ msgstr "ē›®ęؙē‰©é«”" msgid "Script" -msgstr "ęŒ‡ä»¤ēØæ" +msgstr "命令ēØæ" msgid "The text object that contains the Python script" -msgstr "包含 Python ęŒ‡ä»¤ēØæēš„ę–‡å­—ē‰©ä»¶" +msgstr "包含 Python 命令ēØæēš„ę–‡å­—ē‰©ä»¶" msgid "Use Targets" @@ -7213,6 +7274,10 @@ msgid "Shrink the location to the nearest target vertex" msgstr "將位ē½®ę”¶ēø®č‡³ęœ€čæ‘ēš„ē›®ęؙ頂點" +msgid "Invert Cull" +msgstr "åč½‰ę·˜éø" + + msgid "Project Opposite" msgstr "ęŠ•å½±åå‘" @@ -7225,6 +7290,14 @@ msgid "Align Axis To Normal" msgstr "č»øå‘å°é½Šč‡³ę³•ē·š" +msgid "Snap Mode" +msgstr "åø附ęؔ式" + + +msgid "Outside Surface" +msgstr "č”Ø面外偓" + + msgid "Spline IK Constraint" msgstr "雲形ē·š IK ē“„ęŸ" @@ -7373,6 +7446,10 @@ msgid "XZ" msgstr "XZ" +msgid "ZX" +msgstr "ZX" + + msgid "Swing" msgstr "ę“ŗ向" @@ -7477,6 +7554,10 @@ msgid "Bottom range of Z axis source motion" msgstr "Z č»ø來ęŗé‹å‹•ēš„åŗ•ē«ÆēƄ圍" +msgid "From Mode" +msgstr "來č‡Ŗęؔ式" + + msgid "Auto Euler" msgstr "č‡Ŗå‹•å°¤ę‹‰" @@ -7525,6 +7606,10 @@ msgid "The source axis constrained object's Z axis uses" msgstr "ē“„ęŸē‰©é«”ēš„ Z č»øꉀä½æē”Øēš„來ęŗč»ø" +msgid "To Order" +msgstr "č‡³ęŽ’åŗ" + + msgid "To Maximum X" msgstr "č‡³ęœ€å¤§ X 值" @@ -7617,6 +7702,10 @@ msgid "Auto Handle" msgstr "č‡Ŗå‹•ęŽ§åˆ¶ę”æ" +msgid "Auto-Clamped Handle" +msgstr "č‡Ŗå‹•é™å®šęŽ§åˆ¶ę”æ" + + msgid "Vector Handle" msgstr "å‘é‡ęŽ§åˆ¶ę”æ" @@ -7678,7 +7767,7 @@ msgstr "å‰Ŗč¼Æ" msgid "Force the curve view to fit a defined boundary" -msgstr "å¼·čæ«ę›²ē·šč¦–åœ–é©ę‡‰å®šē¾©ēš„ē•Œé™" +msgstr "å¼·čæ«ę›²ē·šęŖ¢č¦–é©ę‡‰å®šē¾©ēš„ē•Œé™" msgid "White Level" @@ -7706,7 +7795,7 @@ msgstr "č”Ø面" msgid "Tolerance" -msgstr "åæå·®" +msgstr "容差" msgid "Method" @@ -7717,6 +7806,14 @@ msgid "Split" msgstr "分割" +msgid "Radius Max" +msgstr "ęœ€å¤§åŠå¾‘" + + +msgid "Radius Min" +msgstr "ęœ€å°åŠå¾‘" + + msgid "Plane" msgstr "平面" @@ -7733,6 +7830,14 @@ msgid "Absolute Offset" msgstr "ēµ•å°å€¼åē§»" +msgid "Only First" +msgstr "僅ē¬¬äø€å€‹" + + +msgid "Curve Point" +msgstr "ę›²ē·šé»ž" + + msgid "Radius" msgstr "半徑" @@ -7764,6 +7869,18 @@ msgid "Free Handle" msgstr "č‡Ŗē”±ęŽ§åˆ¶ę”æ" +msgid "Profile Point" +msgstr "č¼Ŗ廓點" + + +msgid "Curve Slice" +msgstr "ę›²ē·šåˆ‡ē‰‡" + + +msgid "Curve Splines" +msgstr "ę›²ē·šé›²åž‹ē·š" + + msgid "Active Spline" msgstr "作ē”Øäø­é›²å½¢ē·š" @@ -7776,6 +7893,10 @@ msgid "IDs" msgstr "ID" +msgid "Evaluation mode" +msgstr "č©•ä¼°ęؔ式" + + msgid "Viewport" msgstr "č¦–åœ–" @@ -7844,6 +7965,10 @@ msgid "Show Particles" msgstr "é”Æē¤ŗē²’子" +msgid "Show Self" +msgstr "é”Æē¤ŗč‡Ŗčŗ«" + + msgid "UV Coordinates" msgstr "UV åŗ§ęؙē³»" @@ -7856,6 +7981,10 @@ msgid "ID" msgstr "ID" +msgid "Updated data-block" +msgstr "å·²ę›“ę–°ēš„č³‡ę–™å”Š" + + msgid "Geometry" msgstr "幾何" @@ -7972,6 +8101,10 @@ msgid "Include visualization of Grease Pencil related animation data and frames" msgstr "具ē¾åŒ–č Ÿē­†ē›ø關動ē•«č³‡ę–™čˆ‡ę”†å¹€" +msgid "Display Hair" +msgstr "é”Æē¤ŗęƛ髮" + + msgid "Show Hidden" msgstr "é”Æē¤ŗ/éš±č—" @@ -8204,6 +8337,14 @@ msgid "Name of PoseBone to use as target" msgstr "ē”Ø作ē›®ęؙēš„å§æ勢éŖØéŖ¼åēر" +msgid "Context Property" +msgstr "ęƒ…å¢ƒå±¬ę€§" + + +msgid "Active Scene" +msgstr "作ē”Øäø­å “ę™Æ" + + msgid "Active View Layer" msgstr "作ē”Øäø­ęŖ¢č¦–層" @@ -8220,6 +8361,10 @@ msgid "RNA Path (from ID-block) to property used" msgstr "RNA č·Æ徑 (從 ID 唊) č‡³ä½æē”Øēš„å±¬ę€§" +msgid "Fallback" +msgstr "後備值" + + msgid "ID-block that the specific property used can be found from (id_type property must be set first)" msgstr "ä½æē”Øēš„ęŒ‡å®šå±¬ę€§åÆę‰¾å¾žč©² ID å”Šę‰¾åˆ° (åæ…須先čح定 id_type å±¬ę€§)" @@ -8256,6 +8401,14 @@ msgid "Driver variable type" msgstr "驅動å™Ø變ę•ø锞型" +msgid "W Rotation" +msgstr "W ę—‹č½‰" + + +msgid "Average Scale" +msgstr "平均ēø®ę”¾" + + msgid "Driver Variable" msgstr "驅動å™Ø變ę•ø" @@ -8273,7 +8426,7 @@ msgstr "ę˜Æ否對驅動å™Ø變ę•ø來čŖŖę˜Æęœ‰ę•ˆåēر" msgid "Name to use in scripted expressions/functions (no spaces or dots are allowed, and must start with a letter)" -msgstr "åœØęŒ‡ä»¤ēØæč”Øčæ°/函式äø­č¦ä½æē”Øēš„名ēر (äøå…čرē©ŗę ¼ęˆ–é»žļ¼Œåæ…é ˆä»„č‹±ę–‡å­—ęƍ開頭)" +msgstr "åœØ命令ēØæč”Øčæ°/函式äø­č¦ä½æē”Øēš„名ēر (äøå…čرē©ŗę ¼ęˆ–é»žļ¼Œåæ…é ˆä»„č‹±ę–‡å­—ęƍ開頭)" msgid "Sources of input data for evaluating this variable" @@ -8403,6 +8556,11 @@ msgid "Constant" msgstr "åøøę•ø" +msgctxt "Brush" +msgid "Color Ramp" +msgstr "č‰²å½©ę¼ø變" + + msgid "Ray Direction" msgstr "光ē·šę–¹å‘" @@ -8555,6 +8713,11 @@ msgid "Multiplier for wave influence of this brush" msgstr "ę­¤ē­†åˆ·ēš„ę³¢å½¢å½±éŸæ乘ę•ø" +msgctxt "Simulation" +msgid "Wave Type" +msgstr "ę³¢ē“‹é”žåž‹" + + msgctxt "Simulation" msgid "Depth Change" msgstr "ę·±åŗ¦č®Šę›“" @@ -8679,6 +8842,10 @@ msgid "How much surface velocity affects dripping" msgstr "č”Ø面速åŗ¦å½±éŸæę»“č½ēš„ē؋åŗ¦" +msgid "Dry Time" +msgstr "č½‰ä¹¾ę™‚é–“" + + msgid "Approximately in how many frames should drying happen" msgstr "č½‰ä¹¾å¤§ē“„ꇉåœØ多少幀內ē™¼ē”Ÿ" @@ -8883,6 +9050,10 @@ msgid "Save this output layer" msgstr "å„²å­˜ę­¤č¼øå‡ŗ分層" +msgid "Premultiply Alpha" +msgstr "預乘 Alpha" + + msgid "Multiply color by alpha (recommended for Blender input)" msgstr "č‰²å½©ä¹˜ä»„ alpha (å»ŗč­° Blender č¼øå…„ä½æē”Ø)" @@ -8955,6 +9126,10 @@ msgid "Canvas Surfaces" msgstr "ē•«åøƒč”Ø面" +msgid "Active Surface" +msgstr "作ē”Øäø­č”Ø面" + + msgid "EQCurveMappingData" msgstr "EQę›²ē·šę˜ å°„č³‡ę–™" @@ -9140,7 +9315,7 @@ msgstr "č­˜åˆ„ē¢¼" msgid "Unique name used in the code and scripting" -msgstr "ē؋式ē¢¼čˆ‡ęŒ‡ä»¤ēØæꉀä½æē”Øēš„ēØē‰¹åēر" +msgstr "ē؋式ē¢¼čˆ‡å‘½ä»¤ēØæꉀä½æē”Øēš„ēØē‰¹åēر" msgid "Human readable name" @@ -9192,7 +9367,7 @@ msgstr "č‡Ŗ動 XYZ č‡³ RGB" msgid "Use axis colors for transform and color properties, and auto-rainbow for the rest" -msgstr "č®Šę›čˆ‡č‰²å½©å±¬ę€§ä½æē”Øč»øč‰²å½©ļ¼Œå‰©äø‹å‰‡ä½æē”Øč‡Ŗå‹•å½©č™¹" +msgstr "č®Šę›čˆ‡č‰²å½©ē‰¹ę€§ä½æē”Øč»øč‰²å½©ļ¼Œå‰©äø‹å‰‡ä½æē”Øč‡Ŗå‹•å½©č™¹" msgid "User Defined" @@ -9283,6 +9458,14 @@ msgid "F-Curve is selected for editing" msgstr "å·²éø取 F ę›²ē·šē·Øč¼Æäø­" +msgid "Keyframe Points" +msgstr "關鍵幀點" + + +msgid "F-Curve Modifiers" +msgstr "F ę›²ē·šäæ®ę”¹å™Ø" + + msgid "F-Curve Sample" msgstr "F ę›²ē·šå–ęØ£" @@ -9367,6 +9550,10 @@ msgid "FFmpeg audio codec to use" msgstr "要ä½æē”Øēš„ FFMpeg 音č؊ē·Øč§£ē¢¼å™Ø" +msgid "No Audio" +msgstr "ē„”音č؊" + + msgid "Disables audio output, for video-only renders" msgstr "停ē”Ø音č؊č¼øå‡ŗļ¼Œé©ē”Øåƒ…ęœ‰č¦–č؊ēš„ē®—ē¹Ŗ" @@ -9472,6 +9659,10 @@ msgid "MPEG-2" msgstr "MPEG-2" +msgid "MPEG-4 (divx)" +msgstr "MPEG-4(divx)" + + msgid "Theora" msgstr "Theora" @@ -9480,6 +9671,10 @@ msgid "Output Quality" msgstr "č¼øå‡ŗ品č³Ŗ" +msgid "Constant Bitrate" +msgstr "ę†å®šä½å…ƒēŽ‡" + + msgid "Lossless" msgstr "ē„”ꐍ" @@ -9492,6 +9687,18 @@ msgid "High Quality" msgstr "高品č³Ŗ" +msgid "Medium Quality" +msgstr "äø­å“č³Ŗ" + + +msgid "Low Quality" +msgstr "低品č³Ŗ" + + +msgid "Lowest Quality" +msgstr "ęœ€ä½Žå“č³Ŗ" + + msgid "Encoding Speed" msgstr "ē·Øē¢¼é€Ÿåŗ¦" @@ -9540,6 +9747,14 @@ msgid "QuickTime" msgstr "QuickTime" +msgid "Keyframe Interval" +msgstr "關鍵幀間隔" + + +msgid "Max B-Frames" +msgstr "ęœ€å¤§ B ę”†å¹€" + + msgid "Max Rate" msgstr "ęœ€å¤§ęƔēŽ‡" @@ -9862,13 +10077,17 @@ msgstr "č‡Ŗē„¶å°ę•ø" msgid "Normalized Sine" -msgstr "ę­£å¼¦ę­£č¦åŒ–" +msgstr "ę­£å¼¦č¦äø€åŒ–" msgid "sin(x) / x" msgstr "sin(x) / x" +msgid "Phase Multiple" +msgstr "ē›ø位乘ę•ø" + + msgid "Scale factor determining the 'speed' of the function" msgstr "ę±ŗ定函式ēš„ć€Œé€Ÿåŗ¦ć€č¦ęؔ因子" @@ -10377,6 +10596,10 @@ msgid "Use effector/global coordinates for turbulence" msgstr "ē‚ŗę“¾å‹•ä½æē”Ø作ē”Øå™Ø/å…Ø域åŗ§ęؙē³»" +msgid "Gravity Falloff" +msgstr "é‡åŠ›č”°ęø›" + + msgid "Based on distance/falloff it adds a portion of the entire path" msgstr "åŸŗę–¼č·é›¢/č”°ęø›ēš„č·Æå¾‘é”å¤–åŠ å…„ę•“å€‹č·Æ徑ēš„äø€éƒØ分" @@ -10433,6 +10656,10 @@ msgid "Adjust force strength based on smoke density" msgstr "ę ¹ę“šē…™éœ§åƆåŗ¦čŖæę•“åŠ›é‡å¤§å°" +msgid "Wind Factor" +msgstr "é¢Ø力äæ‚ę•ø" + + msgid "Z Direction" msgstr "Z ę–¹å‘" @@ -10449,10 +10676,22 @@ msgid "Fonts" msgstr "字型" +msgid "Freestyle Linestyles" +msgstr "Freestyle ē·šę¢ęأ式" + + +msgid "Particles Settings" +msgstr "ē²’子čح定" + + msgid "Show workspace data-blocks" msgstr "é”Æē¤ŗ巄作ē©ŗ間ę•øꓚēµ„唊" +msgid "Node Trees" +msgstr "ēƀ點ęع" + + msgid "File Select Parameters" msgstr "ęŖ”ę”ˆéø取參ę•ø" @@ -10478,7 +10717,7 @@ msgstr "å‰ÆęŖ”名" msgid "If this is set, the file handler gets a custom ID, otherwise it takes the name of the class used to define the file handler (for example, if the class name is \"OBJECT_FH_hello\", and bl_idname is not set by the script, then bl_idname = \"OBJECT_FH_hello\")" -msgstr "č‹„čØ­å®šę­¤å€¼ļ¼Œé€™å€‹ęŖ”ę”ˆč™•ē†å™Øå°±ęœƒęœ‰äø€å€‹č‡Ŗč؂ IDļ¼Œäøē„¶å®ƒēš„ ID ꜃ę˜Æ定ē¾©ē“ ęēš„锞刄ēš„名ēرļ¼ˆčˆ‰ä¾‹ä¾†čŖŖļ¼Œå¦‚ęžœé”žåˆ„叫做 \"OBJECT_FH_hello\"ļ¼Œč€ŒęŒ‡ä»¤ēØæę²’ęœ‰čح定 bl_idnameļ¼Œå‰‡ bl_idname å°±ęœƒē­‰ę–¼ \"OBJECT_FH_hello\"ļ¼‰" +msgstr "č‹„čØ­å®šę­¤å€¼ļ¼Œé€™å€‹ęŖ”ę”ˆč™•ē†å™Øå°±ęœƒęœ‰äø€å€‹č‡Ŗč؂ IDļ¼Œäøē„¶å®ƒēš„ ID ꜃ę˜Æ定ē¾©ē“ ęēš„锞刄ēš„名ēرļ¼ˆčˆ‰ä¾‹ä¾†čŖŖļ¼Œå¦‚ęžœé”žåˆ„叫做 \"OBJECT_FH_hello\"ļ¼Œč€Œå‘½ä»¤ēØæę²’ęœ‰čح定 bl_idnameļ¼Œå‰‡ bl_idname å°±ęœƒē­‰ę–¼ \"OBJECT_FH_hello\"ļ¼‰" msgid "Label" @@ -10509,6 +10748,10 @@ msgid "Environment" msgstr "ē’°å¢ƒ" +msgid "Miscellaneous" +msgstr "雜項" + + msgid "Show scenes" msgstr "é”Æē¤ŗå “ę™Æ" @@ -10521,6 +10764,10 @@ msgid "Directory displayed in the file browser" msgstr "ęŖ”ę”ˆē€č¦½å™Øäø­é”Æē¤ŗēš„ē›®éŒ„" +msgid "Display Size" +msgstr "é”Æē¤ŗ大小" + + msgid "Tiny" msgstr "ē“°" @@ -10549,6 +10796,14 @@ msgid "Display mode for the file list" msgstr "ęŖ”ę”ˆęø…å–®ēš„é”Æē¤ŗęؔ式" +msgid "Vertical List" +msgstr "垂ē›“列č”Ø" + + +msgid "Horizontal List" +msgstr "ę°“å¹³åˆ—č”Ø" + + msgid "Thumbnails" msgstr "ēø®åœ–" @@ -10742,11 +10997,11 @@ msgstr "é”Æē¤ŗå½±ē‰‡ęŖ”ę”ˆ" msgid "Filter Script" -msgstr "過ęæ¾ęŒ‡ä»¤ēØæ" +msgstr "過ęæ¾å‘½ä»¤ēØæ" msgid "Show script files" -msgstr "é”Æē¤ŗęŒ‡ä»¤ēØæęŖ”ę”ˆ" +msgstr "é”Æē¤ŗ命令ēØæęŖ”ę”ˆ" msgid "Filter Sound" @@ -10838,7 +11093,7 @@ msgstr "å¹¾ä½•å±¬ę€§ēš„值ę˜Æ굮點ę•ø" msgid "Float Color Attribute Value" -msgstr "굮點ę•øč‰²å½©å±¬ę€§å€¼" +msgstr "굮點ę•øč‰²å½©ē‰¹ę€§å€¼" msgid "Float Vector Attribute Value" @@ -10885,6 +11140,10 @@ msgid "Buoyancy Heat" msgstr "굮ꀧē†±åŗ¦" +msgid "OpenVDB" +msgstr "OpenVDB" + + msgid "Cache directory" msgstr "åæ«å–ē›®éŒ„" @@ -10926,7 +11185,7 @@ msgstr "č‰²å½©ę ¼ē·š" msgid "Smoke color grid" -msgstr "ē…™éœ§č‰²å½©ē¶²ę ¼" +msgstr "ē…™éœ§č‰²å½©ę ¼ē·š" msgid "Field" @@ -10934,11 +11193,11 @@ msgstr "堓域" msgid "Density Grid" -msgstr "åƆåŗ¦ē¶²ę ¼" +msgstr "åƆåŗ¦ę ¼ē·š" msgid "Smoke density grid" -msgstr "ē…™éœ§åƆåŗ¦ē¶²ę ¼" +msgstr "ē…™éœ§åƆåŗ¦ę ¼ē·š" msgid "Good smoothness and speed" @@ -10977,6 +11236,10 @@ msgid "Smoke Grid Resolution" msgstr "ē…™éœ§ę ¼ē·šč§£ęžåŗ¦" +msgid "Domain Type" +msgstr "屬域锞型" + + msgid "Gas" msgstr "ę°£é«”" @@ -10986,11 +11249,11 @@ msgstr "ę¶²é«”" msgid "Flame Grid" -msgstr "ē«ē„°ē¶²ę ¼" +msgstr "ē«ē„°ę ¼ē·š" msgid "Smoke flame grid" -msgstr "ē…™éœ§ē«ē„°ē¶²ę ¼" +msgstr "ē…™éœ§ē«ē„°ę ¼ē·š" msgid "Smoke" @@ -11006,7 +11269,7 @@ msgstr "ē…™éœ§č‰²å½©" msgid "Color of smoke emitted from burning fuel" -msgstr "從ē‡ƒę–™ē™¼ę•£ēš„ē…™éœ§č‰²å½©" +msgstr "從ē‡ƒę–™ę•£ē™¼ēš„ē…™éœ§č‰²å½©" msgid "Vorticity" @@ -11025,10 +11288,26 @@ msgid "Fluid Collection" msgstr "굁體集ē›’" +msgid "Force Collection" +msgstr "力堓集ē›’" + + +msgid "Obstacle Distance" +msgstr "障ē¤™č·é›¢" + + +msgid "Obstacle Threshold" +msgstr "障ē¤™é–¾å€¼" + + msgid "Gravity in X, Y and Z direction" msgstr "X态Y态Z č»øę–¹å‘ēš„重力" +msgid "Cell Type" +msgstr "å·¢ę ¼é”žåž‹" + + msgid "Fluid" msgstr "굁體" @@ -11041,14 +11320,30 @@ msgid "Outflow" msgstr "굁å‡ŗ" +msgid "Color Gridlines" +msgstr "č‰²å½©ę ¼ē·š" + + msgid "Flags" msgstr "ꗗęؙ" +msgid "Highlight Range" +msgstr "ęØ™ę˜ŽēƄ圍" + + msgid "Highlight the voxels with values of the color mapped field within the range" msgstr "仄ēƄ圍內ēš„č‰²å½©ę˜ å°„å “值ęØ™ę˜Žé«”ē“ " +msgid "Lower Bound" +msgstr "äø‹é‚Šē•Œ" + + +msgid "Upper Bound" +msgstr "äøŠé‚Šē•Œ" + + msgid "Guiding source" msgstr "引導來ęŗ" @@ -11061,6 +11356,14 @@ msgid "Velocity Factor" msgstr "速åŗ¦äæ‚ę•ø" +msgid "Heat Grid" +msgstr "ē†±ę ¼ē·š" + + +msgid "Smoke heat grid" +msgstr "ē…™éœ§ē†±ę ¼ē·š" + + msgid "Emitter" msgstr "ē™¼å°„å™Ø" @@ -11077,6 +11380,14 @@ msgid "Nearest" msgstr "꜀čæ‘" +msgid "Lower Concavity" +msgstr "äø‹å‡¹" + + +msgid "Upper Concavity" +msgstr "äøŠå‡¹" + + msgid "Mesh generator" msgstr "ē¶²ę ¼ē”¢ē”Ÿå™Ø" @@ -11093,6 +11404,18 @@ msgid "Mesh scale" msgstr "ē¶²ę ¼ēø®ę”¾" +msgid "Smoothen Neg" +msgstr "č² å¹³ę»‘" + + +msgid "Smoothen Pos" +msgstr "ę­£å¹³ę»‘" + + +msgid "Noise Scale" +msgstr "å™Ŗč؊ēø®ę”¾" + + msgid "Strength of noise" msgstr "å™Ŗč؊ēš„å¼·åŗ¦" @@ -11121,6 +11444,10 @@ msgid "Blosc" msgstr "Blosc" +msgid "Data Depth" +msgstr "č³‡ę–™ę·±åŗ¦" + + msgctxt "Amount" msgid "Number" msgstr "ę•øē›®" @@ -11146,10 +11473,22 @@ msgid "Gridlines" msgstr "ę ¼ē·š" +msgid "Show gridlines" +msgstr "é”Æē¤ŗę ¼ē·š" + + +msgid "Vector Display" +msgstr "向量é”Æē¤ŗ" + + msgid "Visualize vector fields" msgstr "視č¦ŗ化向量堓域" +msgid "Simulation Method" +msgstr "ęØ”ę“¬ę–¹ę³•" + + msgid "FLIP" msgstr "FLIP" @@ -11170,6 +11509,14 @@ msgid "Delete" msgstr "åˆŖ除" +msgid "Push Out" +msgstr "ęŽØ送å‡ŗ去" + + +msgid "Bubble Buoyancy" +msgstr "ę³”ę³”ęµ®åŠ›" + + msgid "Bubble Drag" msgstr "ę°£ę³”ę‹–ę›³" @@ -11194,6 +11541,10 @@ msgid "Lowest possible particle lifetime" msgstr "ē²’子åÆčƒ½ēš„ęœ€ēŸ­ē”Ÿå‘½é€±ęœŸ" +msgid "Potential Radius" +msgstr "電位半徑" + + msgid "Update Radius" msgstr "ę›“ę–°åŠå¾‘" @@ -11210,6 +11561,14 @@ msgid "Tension" msgstr "張力" +msgid "System Maximum" +msgstr "ē³»ēµ±ęœ€å¤§å€¼" + + +msgid "Temperature Grid" +msgstr "ęŗ«åŗ¦ę ¼ē·š" + + msgid "Time Scale" msgstr "Ꙃ間ęƔ例" @@ -11250,18 +11609,42 @@ msgid "Dissolve Smoke" msgstr "ē…™éœ§ę¶ˆę•£" +msgid "Logarithmic Dissolve" +msgstr "對ę•øå¼ę¶ˆę•£" + + msgid "Foam" msgstr "ę³”ę²«" +msgid "Fractional Obstacles" +msgstr "分ę•ø障ē¤™" + + msgid "Fractional obstacles improve and smoothen the fluid-obstacle boundary" msgstr "分ę•ø障ē¤™ę”¹å–„äø¦å¹³ę»‘äŗ†ęµé«”éšœē¤™ē‰©é‚Šē•Œ" +msgid "Use Guiding" +msgstr "ä½æē”Ø引導" + + +msgid "Use Mesh" +msgstr "ä½æē”Øē¶²ę ¼" + + +msgid "Use Noise" +msgstr "ä½æē”Øå™Ŗč؊" + + msgid "Slice" msgstr "切ē‰‡" +msgid "Speed Vectors" +msgstr "速åŗ¦å‘量" + + msgid "Spray" msgstr "噓ęæŗ" @@ -11270,14 +11653,46 @@ msgid "Tracer" msgstr "ę›³ęµ" +msgid "Use Viscosity" +msgstr "ä½æē”Ø黏ę»Æåŗ¦" + + msgid "Display Type" msgstr "é”Æē¤ŗ锞型" +msgid "Streamlines" +msgstr "굁ē·š" + + +msgid "MAC Grid" +msgstr "MAC ę ¼ē·š" + + +msgid "Fluid Velocity" +msgstr "ęµé«”é€Ÿåŗ¦" + + +msgid "Guide Velocity" +msgstr "引導速åŗ¦" + + msgid "Magnitude" msgstr "量ē“š" +msgid "Velocity Grid" +msgstr "速åŗ¦ę ¼ē·š" + + +msgid "Smoke velocity grid" +msgstr "ē…™éœ§é€Ÿåŗ¦ę ¼ē·š" + + +msgid "Velocity Scale" +msgstr "速åŗ¦ēø®ę”¾" + + msgid "Viscosity Base" msgstr "黏ę»Æåŗ¦åŸŗę•ø" @@ -11294,10 +11709,18 @@ msgid "Negative exponent for the viscosity value (to simplify entering small val msgstr "黏ę»Æåŗ¦å€¼ēš„č² ęŒ‡ę•ø (ē”Ø來ē°”化小值ēš„č¼øå…„ļ¼Œä¾‹å¦‚ 5*10^-6)" +msgid "Effector Settings" +msgstr "ꕈꞜå™Øčح定" + + msgid "Smoke collision settings" msgstr "ē…™éœ§ē¢°ę’žčح定" +msgid "Effector Type" +msgstr "ꕈꞜå™Ø锞型" + + msgid "Collision" msgstr "ē¢°ę’ž" @@ -11326,6 +11749,10 @@ msgid "Subframes" msgstr "ē“°åˆ†å¹€" +msgid "Is Planar" +msgstr "ę˜Æ平面" + + msgid "Flow Settings" msgstr "ęµå‹•čح定" @@ -11342,6 +11769,10 @@ msgid "Name of vertex group which determines surface emission rate" msgstr "ę±ŗ定č”Ø面ē™¼å°„ēŽ‡ēš„頂點ē¾¤ēµ„其名ēر" +msgid "Flow Behavior" +msgstr "ęµå‹•č”Œē‚ŗ" + + msgid "Flow Type" msgstr "ęµå‹•é”žåž‹" @@ -11398,6 +11829,10 @@ msgid "Controls fluid emission from the mesh surface (higher value results in em msgstr "ęŽ§åˆ¶ä¾†č‡Ŗē¶²ę ¼č”Ø面ēš„굁體ē™¼å°„ļ¼ˆč¼ƒé«˜ēš„å€¼ęœƒå°Žč‡“ē™¼å°„離ē¶²ę ¼č”Øé¢ę›“é ļ¼‰" +msgid "Temperature Difference" +msgstr "ęŗ«å·®" + + msgid "Temperature difference to ambient temperature" msgstr "čˆ‡é€±é­ęŗ«åŗ¦ä¹‹é–“ēš„ęŗ«åŗ¦å·®ē•°" @@ -11426,6 +11861,10 @@ msgid "Absolute Density" msgstr "ēµ•å°åƆåŗ¦" +msgid "Use Flow" +msgstr "ä½æē”Øęµå‹•" + + msgid "Initial Velocity" msgstr "初始速åŗ¦" @@ -11490,6 +11929,10 @@ msgid "Line set for associating lines and style parameters" msgstr "將ē·šę¢čˆ‡ęأ式參ę•ø作關čÆēš„ē·šę¢čح定" +msgid "Collection Negation" +msgstr "č² é›†ē›’" + + msgid "Inclusive" msgstr "åŒ…å«ę€§" @@ -11774,6 +12217,10 @@ msgid "Select hidden feature edges" msgstr "éøå–éš±č—ē‰¹å¾µé‚Šē·š" +msgid "Quantitative Invisibility" +msgstr "量ꀧäøåÆ見" + + msgid "Select feature edges within a range of quantitative invisibility (QI) values" msgstr "åœØ量ꀧäøåÆ見 (qunantitative invisibility, QI) 值ēš„ēƄ圍內之ē‰¹å¾µé‚Šē·š" @@ -11791,7 +12238,7 @@ msgstr "ęأ式ęØ”ēµ„" msgid "Python script to define a style module" -msgstr "定ē¾©ęأ式ęØ”ēµ„ēš„ Python ęŒ‡ä»¤ēØæ" +msgstr "定ē¾©ęأ式ęØ”ēµ„ēš„ Python 命令ēØæ" msgid "Use" @@ -11847,13 +12294,17 @@ msgstr "éø取 Freestyle ęŽ§åˆ¶ęؔ式" msgid "Python Scripting" -msgstr "Python ęŒ‡ä»¤ēØæęؔ式" +msgstr "Python 命令ēØæ꒰åÆ«" msgid "Advanced mode for using style modules written in Python" msgstr "ä½æē”Ø Python ꒰åÆ«ēš„ęأ式ęØ”ēµ„ä½æē”Ø進階ęؔ式" +msgid "Parameter Editor" +msgstr "參ę•øē·Øč¼Æå™Ø" + + msgid "Basic mode for interactive style parameter editing" msgstr "äŗ’動式ęأ式參ę•øē·Øč¼Æēš„åŸŗęœ¬ęؔ式" @@ -11895,7 +12346,7 @@ msgstr "é¢å¹³ę»‘åŗ¦" msgid "Take face smoothness into account in view map calculation" -msgstr "åœØč¦–åœ–ę˜ å°„č؈ē®—äø­å°‡é¢ēš„å¹³ę»‘åŗ¦åˆ—å…„č؈ē®—" +msgstr "åœØęŖ¢č¦–ę˜ å°„č؈ē®—äø­å°‡é¢ēš„å¹³ę»‘åŗ¦åˆ—å…„č؈ē®—" msgid "Suggestive Contours" @@ -11934,6 +12385,10 @@ msgid "Grease Pencil Interpolate Settings" msgstr "蠟ē­†ę’č£œčح定" +msgid "Interpolation Curve" +msgstr "ę’č£œę›²ē·š" + + msgid "Collection of related sketches" msgstr "ē›øé—œč‰åœ–ēš„集ē›’" @@ -12006,6 +12461,10 @@ msgid "Layer is selected for editing in the Dope Sheet" msgstr "å±¤č¢«éø取仄åœØ律č”Øäø­ē·Øč¼Æ" +msgid "In Front" +msgstr "åœØ前" + + msgid "Onion Skinning" msgstr "꓋蔄ēš®åŒ–" @@ -12022,6 +12481,10 @@ msgid "Spacing" msgstr "間隔" +msgid "Guide spacing" +msgstr "å¼•å°Žé–“č·" + + msgid "Circular" msgstr "圓" @@ -12042,10 +12505,22 @@ msgid "Isometric" msgstr "ē­‰č·" +msgid "Use Guides" +msgstr "ä½æē”Ø引導" + + +msgid "Use Snapping" +msgstr "ä½æē”Øåø附" + + msgid "Enable snapping to guides angle or spacing options" msgstr "開啟åø附角åŗ¦ęˆ–éš”ē·šé–“č·éø項" +msgid "Lock Axis" +msgstr "鎖定č»ø向" + + msgid "Front (X-Z)" msgstr "ę­£é¢ (X-Z)" @@ -12078,6 +12553,14 @@ msgid "Auto-Masking Strokes" msgstr "č‡Ŗ動遮ē½©ē­†ē•«" +msgid "Use Falloff" +msgstr "ä½æē”Øč”°ęø›" + + +msgid "Use Curve" +msgstr "ä½æē”Øę›²ē·š" + + msgid "Freehand curve defining part of a sketch" msgstr "ē”Øę–¼å®šē¾©éƒØåˆ†č‰åœ–ēš„éšØꉋē•«ę›²ē·š" @@ -12112,11 +12595,15 @@ msgstr "ꭤ꓍ēø±å™Øę‰€å±¬ēš„ę“ēø±å™Øē¾¤ēµ„" msgid "Hide Keymap" -msgstr "éš±č—ęŒ‰éµę˜ å°„" +msgstr "éš±č—ęŒ‰éµå°ę‡‰" msgid "Ignore the key-map for this gizmo" -msgstr "åæ½ē•„ꭤ꓍ēø±å™Øēš„ęŒ‰éµę˜ å°„" +msgstr "åæ½ē•„ꭤ꓍ēø±å™Øēš„ęŒ‰éµå°ę‡‰" + + +msgid "Hide Select" +msgstr "éš±č—ę‰€éø" msgid "Highlight" @@ -12131,10 +12618,50 @@ msgid "Basis Matrix" msgstr "åŸŗē¤ŽēŸ©é™£" +msgid "Offset Matrix" +msgstr "偏ē§»ēŸ©é™£" + + +msgid "Space Matrix" +msgstr "ē©ŗ間ēŸ©é™£" + + +msgid "Scale Basis" +msgstr "ēø®ę”¾åŸŗē¤Ž" + + +msgid "Select Bias" +msgstr "éø取åŸŗē¤Ž" + + +msgid "Show Hover" +msgstr "é”Æē¤ŗę‡ø停" + + +msgid "Show Active" +msgstr "é”Æē¤ŗ作ē”Ø項" + + +msgid "Scale Offset" +msgstr "ēø®ę”¾åē§»" + + +msgid "Show Value" +msgstr "é”Æē¤ŗ值" + + msgid "Grab Cursor" msgstr "ę‹–ę›³ęøøęؙ" +msgid "Select Background" +msgstr "éøå–čƒŒę™Æ" + + +msgid "Use Tooltip" +msgstr "ä½æē”Øꏐē¤ŗꔆ" + + msgid "Use tooltips when hovering over this gizmo" msgstr "ę»‘é¼ åœé§åœØ꓍ēø±å™ØäøŠę™‚ä½æē”Øꏐē¤ŗꔆ" @@ -12144,12 +12671,24 @@ msgid "GizmoGroup" msgstr "꓍ēø±å™Øē¾¤ēµ„" +msgid "Depth 3D" +msgstr "3D ę·±åŗ¦" + + +msgid "Supports selection" +msgstr "ę”Æę“éø取" + + msgid "Persistent" msgstr "ę°øꁆ" +msgid "Tool Init" +msgstr "巄具初始化" + + msgid "Add fallback tools keymap to this gizmo type" -msgstr "ē‚ŗꭤ꓍ēø±å™Øé”žåž‹åŠ å…„å¾Œå‚™å·„å…·ęŒ‰éµę˜ å°„" +msgstr "ē‚ŗꭤ꓍ēø±å™Øé”žåž‹åŠ å…„å¾Œå‚™å·„å…·ęŒ‰éµå°ę‡‰" msgid "VR Redraws" @@ -12188,14 +12727,30 @@ msgid "Asset Shelf Header" msgstr "ē“ ęęž¶ęؙ頭" +msgid "Floating Region" +msgstr "ęµ®å‹•å€åŸŸ" + + +msgid "Navigation Bar" +msgstr "å°Žč¦½åˆ—" + + msgid "Execute Buttons" msgstr "åŸ·č”ŒęŒ‰éˆ•" +msgid "Footer" +msgstr "åŗ•åˆ—" + + msgid "XR" msgstr "XR" +msgid "Gizmo Properties" +msgstr "꓍ēø±å™Øå±¬ę€§" + + msgid "Dash" msgstr "虛ē·š" @@ -12209,7 +12764,7 @@ msgstr "Ꝑč³Ŗē“¢å¼•" msgid "Color Attributes" -msgstr "č‰²å½©å±¬ę€§" +msgstr "č‰²å½©ē‰¹ę€§" msgid "Reference" @@ -12229,7 +12784,11 @@ msgstr "蠟ē­†åˆ†å±¤" msgid "Blend Mode" -msgstr "ę··åˆęؔ式" +msgstr "äŗ¤ę··ęؔ式" + + +msgid "Blend mode" +msgstr "äŗ¤ę··ęؔ式" msgid "Regular" @@ -12248,6 +12807,10 @@ msgid "Layer Opacity" msgstr "層äøé€ę˜Žåŗ¦" +msgid "Parent object" +msgstr "č¦Ŗē“šē‰©é«”" + + msgid "Parent Bone" msgstr "č¦Ŗ代éŖØéŖ¼" @@ -12308,10 +12871,18 @@ msgid "Invert mask" msgstr "åč½‰é®ē½©" +msgid "Active Note" +msgstr "作ē”Øäø­å‚™čØ»" + + msgid "Reverse" msgstr "反向" +msgid "Ping Pong" +msgstr "乒乓" + + msgid "Repeat" msgstr "重復" @@ -12321,7 +12892,7 @@ msgstr "ę”†å¹€čµ·å§‹" msgid "Statistical view of the levels of color in an image" -msgstr "å°‡č‰²éšŽēš„ēµ±čØˆč¦–åœ–ä»„å½±åƒé”Æē¤ŗ" +msgstr "å°‡č‰²éšŽēš„ēµ±č؈ęŖ¢č¦–仄影像é”Æē¤ŗ" msgctxt "Color" @@ -12366,10 +12937,18 @@ msgid "Editable" msgstr "åÆē·Øč¼Æēš„" +msgid "Embedded Data" +msgstr "å…§åµŒč³‡ę–™" + + msgid "This data-block is not an independent one, but is actually a sub-data of another ID (typical example: root node trees or master collections)" msgstr "é€™å€‹č³‡ę–™ēµ„唊äøę˜ÆēØē«‹ēš„ļ¼Œę˜Æ另äø€å€‹ ID ēš„å­č³‡ę–™ļ¼ˆåøøč¦‹ä¾‹å­ļ¼šé ‚層ēƀ點ęعē‹€ęˆ–ę˜Æäø»é›†ē›’ļ¼‰" +msgid "Is Evaluated" +msgstr "ę˜Æ已估ē®—" + + msgid "Is Indirect" msgstr "ē‚ŗ間ꎄ" @@ -12378,6 +12957,14 @@ msgid "Is this ID block linked indirectly" msgstr "ę­¤ ID 唊ę˜Æå¦é–“ęŽ„é€£ēµ" +msgid "Missing Data" +msgstr "éŗå¤±č³‡ę–™" + + +msgid "Runtime Data" +msgstr "åŸ·č”Œę™‚ęœŸč³‡ę–™" + + msgid "Library" msgstr "藏åŗ«" @@ -12386,6 +12973,18 @@ msgid "Library file the data-block is linked from" msgstr "與ę•øꓚēµ„唊連ēµēš„č—åŗ«ęŖ”ę”ˆ" +msgid "Full Name" +msgstr "å®Œę•“åēر" + + +msgid "Original ID" +msgstr "原始 ID" + + +msgid "Library Override" +msgstr "藏åŗ«å‡Œé§•" + + msgid "Tag" msgstr "ęؙē±¤" @@ -12443,10 +13042,18 @@ msgid "Markers specific to this action, for labeling poses" msgstr "ę­¤å‹•ä½œēš„ē‰¹å®šęؙčØ»ļ¼Œē”Ø來ē‚ŗå§æ勢加äøŠęؙē±¤" +msgid "Cyclic Animation" +msgstr "å¾Ŗē’°å‹•ē•«" + + msgid "Feature Set" msgstr "åŠŸčƒ½čح定" +msgid "Axes Position" +msgstr "č»ø位ē½®" + + msgid "Octahedral" msgstr "八面體" @@ -12523,6 +13130,14 @@ msgid "Theme" msgstr "äø»é”Œ" +msgid "Display Axes" +msgstr "é”Æē¤ŗč»ø向" + + +msgid "Display Names" +msgstr "é”Æē¤ŗ名ēر" + + msgid "X-Axis Mirror" msgstr "X č»ø鏔像" @@ -12547,6 +13162,10 @@ msgid "Propagation Steps" msgstr "å‚³éžę­„ę•ø" +msgid "Blur Steps" +msgstr "ęØ”ē³Šę­„ę•ø" + + msgid "Cavity Curve" msgstr "å‘č…”ę›²ē·š" @@ -12559,8 +13178,24 @@ msgid "The contrast of the cavity mask" msgstr "čŖæę•“å‘č…”é®ē½©ēš„對ęƔ" +msgid "Blending Mode" +msgstr "äŗ¤ę··ęؔ式" + + msgid "Brush blending mode" -msgstr "ē­†åˆ·ę··åˆęؔ式" +msgstr "ē­†åˆ·äŗ¤ę··ęؔ式" + + +msgid "Color Burn" +msgstr "č‰²å½©ę›ę·±" + + +msgid "Linear Burn" +msgstr "ē·šę€§ę›ę·±" + + +msgid "Color Dodge" +msgstr "č‰²å½©é®äŗ®" msgid "Exclusion" @@ -12633,6 +13268,14 @@ msgid "Twist" msgstr "ę‰­č½‰" +msgid "Boundary Falloff" +msgstr "邊ē•Œč”°ęø›" + + +msgid "Brush Radius" +msgstr "ē­†åˆ·åŠå¾‘" + + msgid "Loop" msgstr "čæ“圈" @@ -12661,10 +13304,19 @@ msgid "Cloth Damping" msgstr "åøƒę–™é˜»å°¼" +msgctxt "Brush" +msgid "Snake Hook" +msgstr "蛇鉤" + + msgid "Force Falloff" msgstr "å¤–åŠ›č”°ęø›" +msgid "Cloth Mass" +msgstr "åøƒę–™č³Ŗ量" + + msgid "Simulation Falloff" msgstr "ęØ”ę“¬č”°ęø›" @@ -12673,6 +13325,10 @@ msgid "Simulation Limit" msgstr "ęØ”ę“¬é™åˆ¶" +msgid "Simulation Area" +msgstr "ęØ”ę“¬å€åŸŸ" + + msgid "Local" msgstr "區域" @@ -12685,6 +13341,10 @@ msgid "Dynamic" msgstr "å‹•ę…‹" +msgid "Color Type" +msgstr "č‰²å½©é”žåž‹" + + msgid "Crease Brush Pinch Factor" msgstr "å»ŗē«‹ē­†åˆ·ęę“ äæ‚ę•ø" @@ -12757,11 +13417,21 @@ msgid "Constant" msgstr "åøøę•ø" +msgctxt "Curves" +msgid "Paint Selection" +msgstr "ē¹Ŗč£½éø取項" + + msgctxt "Curves" msgid "Add" msgstr "ę–°å¢ž" +msgctxt "Curves" +msgid "Snake Hook" +msgstr "蛇鉤" + + msgctxt "Curves" msgid "Smooth" msgstr "å¹³ę»‘" @@ -12771,6 +13441,18 @@ msgid "Dash Ratio" msgstr "虛ē·šęƔēŽ‡" +msgid "Dash Length" +msgstr "虛ē·šé•·åŗ¦" + + +msgid "Deformation Target" +msgstr "č®Šå½¢ē›®ęؙ" + + +msgid "Cloth Simulation" +msgstr "åøƒę–™ęØ”ę“¬" + + msgid "Direction" msgstr "ę–¹å‘" @@ -12788,7 +13470,11 @@ msgstr "č”°ęø›č§’åŗ¦" msgid "Paint most on faces pointing towards the view according to this angle" -msgstr "å¤§å¤šę ¹ę“šę­¤č§’åŗ¦ē¹Ŗč£½åœØęŒ‡å‘č¦–åœ–ēš„面äøŠ" +msgstr "å¤§å¤šę ¹ę“šę­¤č§’åŗ¦ē¹Ŗč£½åœØęŒ‡å‘ęŖ¢č¦–ēš„面äøŠ" + + +msgid "Falloff Shape" +msgstr "č”°ęø›å½¢ē‹€" msgid "Fill Threshold" @@ -12834,6 +13520,10 @@ msgid "Clone" msgstr "ę‹“č£½" +msgid "Gpencil Settings" +msgstr "Gpencil čح定" + + msgctxt "Brush" msgid "Draw" msgstr "ē¹Ŗč£½" @@ -12923,11 +13613,20 @@ msgid "Mask Texture Slot" msgstr "遮ē½©ē“‹ē†ę§½" +msgctxt "Mask" +msgid "Mask Tool" +msgstr "遮ē½©å·„具" + + msgctxt "Mask" msgid "Draw" msgstr "ē¹Ŗč£½" +msgid "Plane Angle" +msgstr "å¹³é¢č§’" + + msgid "Normal Radius" msgstr "ę³•ē·šåŠå¾‘" @@ -12976,6 +13675,10 @@ msgid "Face Sets" msgstr "面集" +msgid "Smooth Iterations" +msgstr "å¹³ę»‘čæ­ä»£" + + msgid "Rake" msgstr "走耙" @@ -13014,7 +13717,27 @@ msgstr "Z 平面" msgctxt "Brush" msgid "Draw Sharp" -msgstr "ē¹Ŗč£½éŠ³åˆ©" +msgstr "ꏏē¹Ŗ銳利" + + +msgctxt "Brush" +msgid "Clay Strips" +msgstr "黏土ē‰‡ę®µ" + + +msgctxt "Brush" +msgid "Multi-plane Scrape" +msgstr "多面刮削" + + +msgctxt "Brush" +msgid "Elastic Deform" +msgstr "å½ˆę€§č®Šå½¢" + + +msgctxt "Brush" +msgid "Slide Relax" +msgstr "ę»‘å‹•é¬†å¼›" msgctxt "Brush" @@ -13058,6 +13781,10 @@ msgid "Minimum distance from last point before stroke continues" msgstr "åœØē­†č§øꌁēŗŒä¹‹å‰čˆ‡äøŠäø€å€‹é»žé–“ēš„ęœ€å°č·é›¢" +msgid "Radius Falloff" +msgstr "åŠå¾‘č”°ęø›" + + msgid "Elastic" msgstr "å½ˆę€§" @@ -13106,6 +13833,10 @@ msgid "Keep the brush anchored to the initial location" msgstr "讓ē­†åˆ·ē¶­ęŒéŒØ定åœØ初始位ē½®" +msgid "Shape Preservation" +msgstr "å½¢ē‹€äæē•™" + + msgid "Texture Overlay Alpha" msgstr "ē“‹ē†ē–Šå±¤ Alpha" @@ -13122,6 +13853,14 @@ msgid "Texture Slot" msgstr "ē“‹ē†ę§½" +msgid "Tilt Strength" +msgstr "å‚¾ę–œå¼·åŗ¦" + + +msgid "Tip Roundness" +msgstr "尖ē«Æ圓åŗ¦" + + msgid "Topology Rake" msgstr "ꋓęØøčµ°å‘" @@ -13154,6 +13893,10 @@ msgid "Airbrush" msgstr "å™“ę§" +msgid "Affect Alpha" +msgstr "å½±éŸæ Alpha" + + msgid "When this is disabled, lock alpha while painting" msgstr "ē•¶å®ƒåœē”ØꙂļ¼Œē¹Ŗč£½ę™‚ęœƒéŽ–å®š alpha" @@ -13186,6 +13929,22 @@ msgid "Affect only vertices that share Face Sets with the active vertex" msgstr "åŖå½±éŸæ作ē”Øäø­é ‚é»žčˆ‡å…¶ę‰€å±¬ä¹‹å…±åŒé¢é›†é ‚é»ž" +msgid "Area Normal" +msgstr "å€åŸŸę³•ē·š" + + +msgid "View Normal" +msgstr "ęŖ¢č¦–ę³•ē·š" + + +msgid "Vector Displacement" +msgstr "向量éŒÆē½®" + + +msgid "Connected Only" +msgstr "åƒ…å·²é€£ęŽ„" + + msgid "Use Cursor Overlay" msgstr "ä½æē”Øęøøęؙē–Šå±¤" @@ -13218,6 +13977,10 @@ msgid "Use Front-Face" msgstr "ä½æē”Øå‰ę–¹ēš„面" +msgid "Grab Silhouette" +msgstr "ęŠ“å–å‰Ŗå½±" + + msgid "Inverse Smooth Pressure" msgstr "åč½‰å¹³ę»‘å£“åŠ›" @@ -13230,6 +13993,10 @@ msgid "Radius Unit" msgstr "半徑單位" +msgid "Dynamic Mode" +msgstr "å‹•ę…‹ęؔ式" + + msgid "Plane Offset Pressure" msgstr "平面偏ē§»å£“力" @@ -13451,7 +14218,7 @@ msgstr "ę”å½±ę©Ÿčæ‘處ęˆŖå‰²č·é›¢" msgid "Apparent size of the Camera object in the 3D View" -msgstr "3D č¦–åœ–äø­ę”å½±ę©Ÿē‰©é«”ēš„å¤–č§€å¤§å°" +msgstr "3D ęŖ¢č¦–äø­ę”å½±ę©Ÿē‰©é«”ēš„å¤–č§€å¤§å°" msgid "Depth Of Field" @@ -13535,7 +14302,7 @@ msgstr "č£±ę”† Alpha" msgid "Opacity (alpha) of the darkened overlay in Camera view" -msgstr "åœØę”å½±ę©Ÿč¦–åœ–äø­åŠ ę·±ēš„ē–Šå±¤å…¶äøé€ę˜Žåŗ¦ (alpha)" +msgstr "åœØę”å½±ę©ŸęŖ¢č¦–äø­åŠ ę·±ēš„ē–Šå±¤å…¶äøé€ę˜Žåŗ¦ (alpha)" msgid "Sensor Fit" @@ -13595,7 +14362,7 @@ msgstr "é”Æē¤ŗ背ę™Æ影像" msgid "Display reference images behind objects in the 3D View" -msgstr "åœØ 3D č¦–åœ–äø­é”Æē¤ŗē‰©é«”čƒŒå¾Œēš„參ē…§å½±åƒ" +msgstr "åœØ 3D ęŖ¢č¦–äø­é”Æē¤ŗē‰©é«”čƒŒå¾Œēš„參ē…§å½±åƒ" msgid "Center Diagonal" @@ -13639,7 +14406,7 @@ msgstr "é”Æē¤ŗ名ēر" msgid "Show the active Camera's name in Camera view" -msgstr "åœØę”å½±ę©Ÿč¦–åœ–äø­é”Æē¤ŗ作ē”Øäø­ę”å½±ę©Ÿēš„名ēر" +msgstr "åœØę”å½±ę©ŸęŖ¢č¦–äø­é”Æē¤ŗ作ē”Øäø­ę”å½±ę©Ÿēš„名ēر" msgid "Show Passepartout" @@ -13647,7 +14414,7 @@ msgstr "é”Æē¤ŗč£±ę”†" msgid "Show a darkened overlay outside the image area in Camera view" -msgstr "åœØę”å½±ę©Ÿč¦–åœ–äø­é”Æē¤ŗåŠ ę·±ēš„ē–Šå±¤ę–¼å½±åƒå€åŸŸå¤–" +msgstr "åœØę”å½±ę©ŸęŖ¢č¦–äø­é”Æē¤ŗåŠ ę·±ēš„ē–Šå±¤ę–¼å½±åƒå€åŸŸå¤–" msgid "Show Safe Areas" @@ -13659,7 +14426,7 @@ msgstr "é”Æē¤ŗꄟęø¬å™Ø大小" msgid "Show sensor size (film gate) in Camera view" -msgstr "åœØę”å½±ę©Ÿč¦–åœ–äø­é”Æē¤ŗꄟęø¬å™Ø大小 (åŗ•ē‰‡é–˜)" +msgstr "åœØę”å½±ę©ŸęŖ¢č¦–äø­é”Æē¤ŗꄟęø¬å™Ø大小 (åŗ•ē‰‡é–˜)" msgid "Camera types" @@ -13690,6 +14457,14 @@ msgid "Disable in Renders" msgstr "ē®—ē¹Ŗę™‚åœē”Ø" +msgid "Intersection Only" +msgstr "僅äŗ¤é›†" + + +msgid "Only generate intersection lines for this collection" +msgstr "僅ē‚ŗꭤ集ē›’ē”Ÿęˆäŗ¤å‰ē·š" + + msgid "Bevel Depth" msgstr "å€’č§’ę·±åŗ¦" @@ -14026,6 +14801,10 @@ msgid "Vertical offset from the object origin" msgstr "č·ē‰©é«”原點ēš„åž‚ē›“偏ē§»" +msgid "Textbox Overflow" +msgstr "ę–‡å­—ę”†ęŗ¢ä½" + + msgid "Shear" msgstr "åˆ‡č®Š" @@ -14658,6 +15437,10 @@ msgid "Freehand annotation sketchbook" msgstr "éšØꉋē•«čØ»čØ˜č‰åœ–ē°æ" +msgid "Onion Opacity" +msgstr "꓋蔄äøé€ę˜Žåŗ¦" + + msgctxt "GPencil" msgid "All" msgstr "å…ØéƒØ" @@ -14687,6 +15470,10 @@ msgid "Premultiplied" msgstr "預乘" +msgid "Channel Packed" +msgstr "é »é“ę‰“åŒ…" + + msgid "Bindcode" msgstr "ē¶å®šä»£ē¢¼" @@ -14880,7 +15667,7 @@ msgstr "ę˜Æ굮點" msgid "Multiple Views" -msgstr "å¤šé‡č¦–åœ–" +msgstr "多重ęŖ¢č¦–" msgid "Stereo 3D" @@ -14969,11 +15756,11 @@ msgstr "굮點ē·©č”" msgid "Use Multi-View" -msgstr "ä½æē”Øå¤šé‡č¦–åœ–" +msgstr "ä½æē”Ø多重ęŖ¢č¦–" msgid "View as Render" -msgstr "č¦–åœ–å¦‚ē®—ē¹Ŗ" +msgstr "ęŖ¢č¦–如ē®—ē¹Ŗ" msgid "Apply render part of display transformation when displaying this image on the screen" @@ -14981,11 +15768,11 @@ msgstr "ē•¶ę­¤å½±åƒé”Æē¤ŗę–¼čž¢å¹•äøŠę™‚å„—ē”Øé”Æē¤ŗč½‰ę›ēš„ē®—ē¹ŖéƒØ份" msgid "Views Format" -msgstr "č¦–åœ–ę ¼å¼" +msgstr "ęŖ¢č¦–ę ¼å¼" msgid "Mode to load image views" -msgstr "č¼‰å…„å½±åƒč¦–åœ–ēš„ęؔ式" +msgstr "č¼‰å…„å½±åƒęŖ¢č¦–ēš„ęؔ式" msgid "Individual" @@ -15164,7 +15951,7 @@ msgstr "é”Æē¤ŗ圓錐" msgid "Spot Blend" -msgstr "čšå…‰ę··åˆ" +msgstr "čšå…‰äŗ¤ę··" msgid "The softness of the spotlight edge" @@ -15193,7 +15980,7 @@ msgstr "ę—„å…‰å¼·åŗ¦ļ¼Œå–®ä½ē‚ŗęÆå¹³ę–¹å…¬å°ŗē“¦ē‰¹ę•ø (W/mĀ²)" msgid "Show the clipping distances in the 3D view" -msgstr "åœØ 3D č¦–åœ–äø­é”Æē¤ŗęˆŖå‰²č·é›¢" +msgstr "åœØ 3D ęŖ¢č¦–äø­é”Æē¤ŗęˆŖå‰²č·é›¢" msgid "Visibility Collection" @@ -15204,6 +15991,10 @@ msgid "Parallax Radius" msgstr "č¦–å·®åŠå¾‘" +msgid "Capture World" +msgstr "ꍕꍉäø–ē•Œ" + + msgid "Clamp Direct" msgstr "限定ē›“ꎄ" @@ -15254,7 +16045,7 @@ msgstr "定ē¾©ę­¤é®ē½©ēš„層集ē›’" msgctxt "Material" msgid "Blend Mode" -msgstr "ę··åˆęؔ式" +msgstr "äŗ¤ę··ęؔ式" msgctxt "Material" @@ -15269,7 +16060,7 @@ msgstr "Alpha é›œę¹ŠåŒ–" msgctxt "Material" msgid "Alpha Blend" -msgstr "Alpha ę··åˆ" +msgstr "Alpha äŗ¤ę··" msgid "Render polygon transparent, depending on alpha channel of the texture" @@ -15300,6 +16091,10 @@ msgid "Method to use for the displacement" msgstr "éŒÆē½®ę‰€č¦ä½æē”Øēš„ę–¹ę³•" +msgid "Bump Only" +msgstr "僅凹å‡ø" + + msgid "Bump mapping to simulate the appearance of displacement" msgstr "凹å‡øę˜ å°„č™•ē†åÆęØ”ę“¬éŒÆē½®ēš„å¤–č§€" @@ -15436,6 +16231,14 @@ msgid "How intense (bright) the specular reflection is" msgstr "é”é¢åå°„ęœ‰å¤šå¼·ēƒˆ (꘎äŗ®)" +msgid "Dithered" +msgstr "éžč‰²ęŠ–å‹•" + + +msgid "Blended" +msgstr "å·²äŗ¤ę··" + + msgid "Texture Slot Images" msgstr "ē“‹ē†ę§½å½±åƒ" @@ -15496,6 +16299,10 @@ msgid "Loops" msgstr "čæ“圈" +msgid "Normal Domain" +msgstr "ę³•ē·šå±¬åŸŸ" + + msgid "Corner" msgstr "邊角" @@ -15604,6 +16411,10 @@ msgid "Vertex Selection" msgstr "頂點éø取項" +msgid "Fix Poles" +msgstr "äæ®ę­£ę„µé»ž" + + msgid "UV loop layer to be used as cloning source" msgstr "作ē‚ŗę‹“č£½ä¾†ęŗēš„ UV čæ“圈分層" @@ -15649,7 +16460,7 @@ msgstr "ē®—ē¹ŖꙂēš„å¤šč§’åŒ–č§£ęžåŗ¦" msgid "Viewport Size" -msgstr "č¦–åœ–å¤§å°" +msgstr "č¦–ęŽ„å£å¤§å°" msgid "Polygonization resolution in the 3D viewport" @@ -16067,6 +16878,10 @@ msgid "Lightgroup" msgstr "ē‡ˆå…‰ē¾¤ēµ„" +msgid "Line Art" +msgstr "ē·šę¢č—č”“" + + msgid "Location of the object" msgstr "ē‰©é«”ēš„位ē½®" @@ -16339,10 +17154,6 @@ msgid "Display the object's name" msgstr "é”Æē¤ŗē‰©é«”ēš„名ēر" -msgid "Shape Key Lock" -msgstr "外形鍵鎖定" - - msgid "Display the object's texture space" msgstr "é”Æē¤ŗē‰©é«”ēš„ē“‹ē†ē©ŗ間" @@ -16610,7 +17421,7 @@ msgstr "é”Æē¤ŗ" msgid "Percentage of particles to display in 3D view" -msgstr "åœØ 3D č¦–åœ–äø­é”Æē¤ŗēš„ē²’子ē™¾åˆ†ęƔ" +msgstr "åœØ 3D ęŖ¢č¦–äø­é”Æē¤ŗēš„ē²’子ē™¾åˆ†ęƔ" msgid "Steps" @@ -17557,7 +18368,7 @@ msgstr "ęŖ¢č¦–層" msgid "View Settings" -msgstr "č¦–åœ–čح定" +msgstr "ęŖ¢č¦–čح定" msgid "Color management settings applied on image before saving" @@ -17633,6 +18444,10 @@ msgid "Sequencer Editors" msgstr "åŗę®µē·Øč¼Æå™Ø" +msgid "Spreadsheet Editors" +msgstr "試ē®—č”Øē·Øč¼Æå™Ø" + + msgid "Top-Left 3D Editor" msgstr "å·¦äøŠ 3D ē·Øč¼Æå™Ø" @@ -17837,7 +18652,7 @@ msgstr "åŸŗę–¼ēƀ點ēš„ē“‹ē†ä¹‹ēƀ點ęع" msgid "Blend" -msgstr "ę··åˆ" +msgstr "äŗ¤ę··" msgid "Procedural - create a ramp texture" @@ -17933,11 +18748,11 @@ msgstr "ę–¼é č¦½ē®—ē¹Ŗäø­é”Æē¤ŗ Alpha" msgid "Blend Texture" -msgstr "ę··åˆē“‹ē†" +msgstr "äŗ¤ę··ē“‹ē†" msgid "Procedural color blending texture" -msgstr "ē؋åŗę€§č‰²å½©ę··åˆē“‹ē†" +msgstr "ē؋åŗę€§č‰²å½©äŗ¤ę··ē“‹ē†" msgid "Progression" @@ -17945,7 +18760,7 @@ msgstr "ę¼ø進" msgid "Style of the color blending" -msgstr "č‰²å½©ę··åˆēš„ęأ式" +msgstr "č‰²å½©äŗ¤ę··ēš„ęأ式" msgid "Create a linear progression" @@ -18759,11 +19574,15 @@ msgstr "視ēŖ—ē®”ē†å™Ø" msgid "Category" -msgstr "锞刄" +msgstr "分锞" msgid "Filter add-ons by category" -msgstr "依锞刄過ęæ¾é™„加元件" +msgstr "依分锞過ęæ¾é™„加元件" + + +msgid "Filter by add-on name, author & category" +msgstr "依附加元件名ēØ±ć€ä½œč€…ć€åˆ†é”žéŽęæ¾" msgid "Support" @@ -18798,14 +19617,30 @@ msgid "Asset Blend Path" msgstr "ē“ ę blend č·Æ徑" +msgid "Filter by extension name, author & category" +msgstr "ä¾ę““å……å„—ä»¶åēØ±ć€ä½œč€…ć€åˆ†é”žéŽęæ¾" + + +msgid "Show Installed Extensions" +msgstr "é”Æē¤ŗå®‰č£ēš„ę““充儗件" + + +msgid "Only show installed extensions" +msgstr "僅é”Æē¤ŗå®‰č£ēš„ę““充儗件" + + msgid "Extension Tags" -msgstr "附加元件ęؙē±¤" +msgstr "ę““å……å„—ä»¶ęؙē±¤" msgid "Filter by Type" msgstr "依锞型過ęæ¾" +msgid "Show extensions by type" +msgstr "依锞型é”Æē¤ŗę““å……å„—ä»¶" + + msgid "Add-ons" msgstr "附加元件" @@ -18814,6 +19649,22 @@ msgid "Themes" msgstr "äø»é”Œ" +msgid "Extensions Blocked" +msgstr "ę““å……å„—ä»¶å°éŽ–" + + +msgid "Number of installed extensions which are blocked" +msgstr "封鎖ēš„å·²å®‰č£ę““充儗件ę•ø" + + +msgid "Extensions Updates" +msgstr "ę““å……å„—ä»¶ę›“ę–°" + + +msgid "Number of extensions with available update" +msgstr "åÆē”Øēš„ę““å……å„—ä»¶ę›“ę–°ę•ø" + + msgid "Key Configurations" msgstr "ęŒ‰éµēµ„ę…‹" @@ -18934,6 +19785,10 @@ msgid "Use shader nodes to render the world" msgstr "ä½æē”Øč‘—č‰²å™Øēƀ點來ē®—ē¹Ŗäø–ē•Œ" +msgid "Use Shadow" +msgstr "ä½æē”Ø陰影" + + msgid "Operations" msgstr "ę“ä½œ" @@ -19190,6 +20045,10 @@ msgid "LZW" msgstr "LZW" +msgid "Pack Bits" +msgstr "ę‰“åŒ…ä½å…ƒ" + + msgid "Log" msgstr "對ę•ø" @@ -19223,11 +20082,11 @@ msgstr "ē•¶ē®—ē¹Ŗ動ē•«ę™‚ļ¼ŒåœØē›ø同ēš„ē›®éŒ„äø‹å„²å­˜ JPG é č¦½å½±åƒ" msgid "Format of multiview media" -msgstr "å¤šé‡č¦–åœ–åŖ’é«”ēš„ę ¼å¼" +msgstr "多重ęŖ¢č¦–åŖ’é«”ēš„ę ¼å¼" msgid "Multi-View" -msgstr "å¤šé‡č¦–åœ–" +msgstr "多重ęŖ¢č¦–" msgid "Image Preview" @@ -19287,7 +20146,7 @@ msgstr "ę–¼å¤šå±¤å½±åƒäø­é€šéž" msgid "View in multilayer image" -msgstr "多層影像äø­ēš„č¦–åœ–" +msgstr "多層影像äø­ēš„ęŖ¢č¦–" msgid "Tile" @@ -19315,7 +20174,7 @@ msgstr "ęŒ‰éµēµ„ę…‹" msgid "Input configuration, including keymaps" -msgstr "č¼øå…„ēµ„ę…‹ļ¼ŒåŒ…ę‹¬ęŒ‰éµę˜ å°„č”Ø" +msgstr "č¼øå…„ēµ„ę…‹ļ¼ŒåŒ…ę‹¬ęŒ‰éµå°ę‡‰č”Ø" msgid "Indicates that a keyconfig was defined by the user" @@ -19323,7 +20182,7 @@ msgstr "ē”±ä½æē”Ø者č‡Ŗč؂鍵čح定" msgid "Key Maps" -msgstr "ęŒ‰éµę˜ å°„" +msgstr "ęŒ‰éµå°ę‡‰" msgid "Key maps configured as part of this configuration" @@ -19347,23 +20206,27 @@ msgstr "作ē”Øäø­éµēµ„ę…‹ (預čØ­ęŖ”)" msgid "Key Map" -msgstr "ęŒ‰éµę˜ å°„" +msgstr "ęŒ‰éµå°ę‡‰" msgid "Owner" msgstr "꓁꜉者" +msgid "Internal owner" +msgstr "內éƒØ꓁꜉者" + + msgid "Modal Keymap" -msgstr "å…øēÆ„ęŒ‰éµę˜ å°„č”Ø" +msgstr "å…øēÆ„ęŒ‰éµå°ę‡‰č”Ø" msgid "Indicates that a keymap is used for translate modal events for an operator" -msgstr "č”Øē¤ŗč©²ęŒ‰éµę˜ å°„ē”Øę–¼ēæ»č­Æäø€å€‹ę“ä½œå™Øēš„å…øēƄäŗ‹ä»¶" +msgstr "č”Øē¤ŗč©²ęŒ‰éµå°ę‡‰ē”Øę–¼ēæ»č­Æäø€å€‹ę“ä½œå™Øēš„å…øēƄäŗ‹ä»¶" msgid "Keymap is defined by the user" -msgstr "ä½æē”Øč€…å®šē¾©ēš„ęŒ‰éµę˜ å°„" +msgstr "ä½æē”Øč€…å®šē¾©ēš„ęŒ‰éµå°ę‡‰" msgid "Items" @@ -19371,11 +20234,11 @@ msgstr "項ē›®" msgid "Items in the keymap, linking an operator to an input event" -msgstr "ęŒ‰éµę˜ å°„č”Øäø­ēš„é …ē›®ļ¼Œē”Øę–¼é€£ēµę“ä½œå™Ø與č¼øå…„äŗ‹ä»¶" +msgstr "ęŒ‰éµå°ę‡‰č”Øäø­ēš„é …ē›®ļ¼Œē”Øę–¼é€£ēµę“ä½œå™Ø與č¼øå…„äŗ‹ä»¶" msgid "Name of the key map" -msgstr "ęŒ‰éµę˜ å°„ēš„名ēر" +msgstr "ęŒ‰éµå°ę‡‰ēš„名ēر" msgid "Optional region type keymap is associated with" @@ -19399,15 +20262,15 @@ msgstr "ä½æē”Øč€…ä»‹é¢ēš„ę““展" msgid "Optional space type keymap is associated with" -msgstr "ęŒ‰éµę˜ å°„čˆ‡ä¹‹é—œčÆēš„éøē”Øē©ŗ間锞型" +msgstr "ęŒ‰éµå°ę‡‰čˆ‡ä¹‹é—œčÆēš„éøē”Øē©ŗ間锞型" msgid "Key Map Item" -msgstr "ęŒ‰éµę˜ å°„é …ē›®" +msgstr "ęŒ‰éµå°ę‡‰é …ē›®" msgid "Item in a Key Map" -msgstr "ęŒ‰éµę˜ å°„äø­ēš„é …ē›®" +msgstr "ęŒ‰éµå°ę‡‰äø­ēš„é …ē›®" msgid "Activate or deactivate item" @@ -19479,7 +20342,7 @@ msgstr "ę–¼č¼øå…„äŗ‹ä»¶å‘¼å«ēš„ę“ä½œå™Øč¾Ø識ē¬¦" msgid "Is this keymap item user defined (doesn't just replace a builtin item)" -msgstr "ē›®å‰ęŒ‰éµę˜ å°„é …ē›®ę˜Æå¦č¢«ä½æē”Ø者č‡Ŗč؂ (äøåŖę˜Æę›æę›å…§å»ŗ項ē›®)" +msgstr "ē›®å‰ęŒ‰éµå°ę‡‰é …ē›®ę˜Æå¦č¢«ä½æē”Ø者č‡Ŗč؂ (äøåŖę˜Æę›æę›å…§å»ŗ項ē›®)" msgid "User Modified" @@ -19487,7 +20350,7 @@ msgstr "ä½æē”Øč€…å·²äæ®ę”¹" msgid "Is this keymap item modified by the user" -msgstr "ē›®å‰ęŒ‰éµę˜ å°„ę˜Æå¦č¢«ä½æē”Ø者äæ®ę”¹" +msgstr "ē›®å‰ęŒ‰éµå°ę‡‰ę˜Æå¦č¢«ä½æē”Ø者äæ®ę”¹" msgctxt "UI_Events_KeyMaps" @@ -20356,7 +21219,7 @@ msgstr "Ndofę²é †ę™‚" msgid "NdofRCCW" -msgstr "Ndofę²é€†ę™‚" +msgstr "NdofRCCW" msgctxt "UI_Events_KeyMaps" @@ -20377,6 +21240,101 @@ msgid "NdofSCCW" msgstr "Ndofčæ“逆Ꙃ" +msgid "NdofTCW" +msgstr "NdofTCW" + + +msgid "NdofTCCW" +msgstr "NdofTCCW" + + +msgid "NdofRot" +msgstr "NdofRot" + + +msgid "NdofPanZoom" +msgstr "NdofPanZoom" + + +msgid "NdofDom" +msgstr "NdofDom" + + +msgid "Ndof+" +msgstr "Ndof+" + + +msgid "Ndof-" +msgstr "Ndof-" + + +msgid "NdofB1" +msgstr "NdofB1" + + +msgid "NdofB2" +msgstr "NdofB2" + + +msgid "NdofB3" +msgstr "NdofB3" + + +msgid "NdofB4" +msgstr "NdofB4" + + +msgid "NdofB5" +msgstr "NdofB5" + + +msgid "NdofB6" +msgstr "NdofB6" + + +msgid "NdofB7" +msgstr "NdofB7" + + +msgid "NdofB8" +msgstr "NdofB8" + + +msgid "NdofB9" +msgstr "NdofB9" + + +msgid "NdofB10" +msgstr "NdofB10" + + +msgctxt "UI_Events_KeyMaps" +msgid "ActionZone Area" +msgstr "ActionZone 區域" + + +msgid "AZone Area" +msgstr "AZone 區域" + + +msgctxt "UI_Events_KeyMaps" +msgid "ActionZone Region" +msgstr "ActionZone ēƄ圍" + + +msgid "AZone Region" +msgstr "AZone ēƄ圍" + + +msgctxt "UI_Events_KeyMaps" +msgid "ActionZone Fullscreen" +msgstr "ActionZone å…Øčž¢å¹•" + + +msgid "AZone FullScr" +msgstr "AZone å…Øčž¢å¹•" + + msgid "Map Type" msgstr "ę˜ å°„é”žåž‹" @@ -20393,6 +21351,10 @@ msgid "Mouse" msgstr "ę»‘é¼ " +msgid "NDOF" +msgstr "NDOF" + + msgid "Text Input" msgstr "ę–‡å­—č¼øå…„" @@ -20418,7 +21380,12 @@ msgstr "ē•¶ę“ä½œå™Øå‘¼å«ę™‚č¦čح定ēš„å±¬ę€§" msgid "The value this event translates to in a modal keymap" -msgstr "ę­¤äŗ‹ä»¶ēæ»č­Æē‚ŗå…øēÆ„ęŒ‰éµę˜ å°„ēš„值" +msgstr "ę­¤äŗ‹ä»¶ēæ»č­Æē‚ŗå…øēÆ„ęŒ‰éµå°ę‡‰ēš„值" + + +msgctxt "WindowManager" +msgid "Shift" +msgstr "Shift" msgid "Shift key pressed" @@ -20426,7 +21393,12 @@ msgstr "ęŒ‰ä½ Shift 鍵" msgid "Show key map event and property details in the user interface" -msgstr "é”Æē¤ŗęŒ‰éµę˜ å°„äŗ‹ä»¶ä»„及ä½æē”Øč€…ä»‹é¢äø­ēš„å±¬ę€§ē“°ēƀ" +msgstr "é”Æē¤ŗęŒ‰éµå°ę‡‰äŗ‹ä»¶ä»„及ä½æē”Øč€…ä»‹é¢äø­ēš„å±¬ę€§ē“°ēƀ" + + +msgctxt "UI_Events_KeyMaps" +msgid "Type" +msgstr "锞型" msgid "Type of event" @@ -20449,8 +21421,12 @@ msgid "Double Click" msgstr "雙꓊" +msgid "Click Drag" +msgstr "點꓊äø¦ę‹–ę›³" + + msgid "KeyMap Items" -msgstr "ęŒ‰éµę˜ å°„é …ē›®" +msgstr "ęŒ‰éµå°ę‡‰é …ē›®" msgid "Ease In" @@ -20493,14 +21469,29 @@ msgid "Right Handle Type" msgstr "å³ęŽ§åˆ¶ę”æ锞型" +msgctxt "Action" +msgid "Interpolation" +msgstr "ę’č£œę³•" + + msgid "Interpolation method to use for segment of the F-Curve from this Keyframe until the next Keyframe" msgstr "å¾žę­¤éµå¹€ē›“č‡³äø‹å€‹éµå¹€ F ę›²ē·šēš„åˆ†ę®µč¦ä½æē”Øēš„ę’č£œę–¹ę³•" +msgctxt "Action" +msgid "Constant" +msgstr "åøøę•ø" + + msgid "No interpolation, value of A gets held until B is encountered" msgstr "ē„”ę’č£œļ¼ŒA ēš„å€¼ęœƒē•™ä½ē›“到遭遇 B" +msgctxt "Action" +msgid "Linear" +msgstr "ē·šę€§" + + msgid "Straight-line interpolation between A and B (i.e. no ease in/out)" msgstr "åœØ A 與 B 之間ē›“ē·šę’č£œ (例ļ¼šē„”ē·©å…„/ē·©å‡ŗ)" @@ -20509,10 +21500,58 @@ msgid "Smooth interpolation between A and B, with some control over curve shape" msgstr "A 與 B ä¹‹é–“å¹³ę»‘ę’č£œļ¼Œä»„ę›²ē·šå¤–形做äŗ›å¾®ęŽ§åˆ¶" +msgctxt "Action" +msgid "Sinusoidal" +msgstr "ę­£å¼¦ę›²ē·š" + + +msgctxt "Action" +msgid "Quadratic" +msgstr "äŗŒę¬”型" + + +msgctxt "Action" +msgid "Cubic" +msgstr "äø‰ę¬”型" + + +msgctxt "Action" +msgid "Quartic" +msgstr "å››ę¬”åž‹" + + +msgid "Quartic easing" +msgstr "å››ę¬”åž‹ē·©å‹•" + + +msgid "Quintic easing" +msgstr "äŗ”ꬔ型ē·©å‹•" + + +msgctxt "Action" +msgid "Exponential" +msgstr "ꌇę•ø型" + + msgid "Exponential easing (dramatic)" msgstr "ꌇę•øč®Šę› (劇ēƒˆ)" +msgctxt "Action" +msgid "Circular" +msgstr "圓型" + + +msgctxt "Action" +msgid "Bounce" +msgstr "å½ˆč·³" + + +msgctxt "Action" +msgid "Elastic" +msgstr "å½ˆę€§" + + msgid "Period" msgstr "é€±ęœŸ" @@ -20542,7 +21581,7 @@ msgstr "éµč™•ē†é›†ēš„ē°”ēŸ­ęčæ°" msgid "If this is set, the Keying Set gets a custom ID, otherwise it takes the name of the class used to define the Keying Set (for example, if the class name is \"BUILTIN_KSI_location\", and bl_idname is not set by the script, then bl_idname = \"BUILTIN_KSI_location\")" -msgstr "č‹„čØ­å®šę­¤å€¼ļ¼Œé€™å€‹éµč™•ē†é›†å°±ęœƒęœ‰äø€å€‹č‡Ŗč؂ IDļ¼Œäøē„¶å®ƒēš„ ID ꜃ę˜Æ定ē¾©ē“ ęēš„锞刄ēš„名ēرļ¼ˆčˆ‰ä¾‹ä¾†čŖŖļ¼Œå¦‚ęžœé”žåˆ„叫做 \"BUILTIN_KSI_location\"ļ¼Œč€ŒęŒ‡ä»¤ēØæę²’ęœ‰čح定 bl_idnameļ¼Œå‰‡ bl_idname å°±ęœƒē­‰ę–¼ \"BUILTIN_KSI_location\"ļ¼‰" +msgstr "č‹„čØ­å®šę­¤å€¼ļ¼Œé€™å€‹éµč™•ē†é›†å°±ęœƒęœ‰äø€å€‹č‡Ŗč؂ IDļ¼Œäøē„¶å®ƒēš„ ID ꜃ę˜Æ定ē¾©ē“ ęēš„锞刄ēš„名ēرļ¼ˆčˆ‰ä¾‹ä¾†čŖŖļ¼Œå¦‚ęžœé”žåˆ„叫做 \"BUILTIN_KSI_location\"ļ¼Œč€Œå‘½ä»¤ēØæę²’ęœ‰čح定 bl_idnameļ¼Œå‰‡ bl_idname å°±ęœƒē­‰ę–¼ \"BUILTIN_KSI_location\"ļ¼‰" msgid "UI Name" @@ -20621,6 +21660,10 @@ msgid "Visual Rotation" msgstr "視č¦ŗę—‹č½‰" +msgid "Visual Scale" +msgstr "åÆ視ēø®ę”¾" + + msgid "Insert a keyframe on each of the location, rotation, and scale channels" msgstr "åœØęƏ個位ē½®ć€ę—‹č½‰ć€ēø®ę”¾ē­‰é€šé“äøŠę’å…„鍵幀" @@ -20729,6 +21772,14 @@ msgid "Point selected" msgstr "éø取ēš„點" +msgid "Layer Collection" +msgstr "分層集ē›’" + + +msgid "Layer collection" +msgstr "分層集ē›’" + + msgid "Exclude from View Layer" msgstr "從ęŖ¢č¦–層äø­ęŽ’除" @@ -20790,7 +21841,7 @@ msgstr "ę²æē­†č§ø變ꛓ alpha 透꘎åŗ¦" msgid "Specify how the modifier value is blended into the base value" -msgstr "ęŒ‡å®šäæ®ę”¹å™Øēš„å€¼å¦‚ä½•čˆ‡åŸŗē¤Žå€¼ę··åˆ" +msgstr "ęŒ‡å®šäæ®ę”¹å™Øēš„å€¼å¦‚ä½•čˆ‡åŸŗē¤Žå€¼äŗ¤ę··" msgid "Curve used for the curve mapping" @@ -20829,6 +21880,10 @@ msgid "Type of the modifier" msgstr "äæ®ę”¹å™Øēš„锞型" +msgid "Curvature 3D" +msgstr "ę›²ēŽ‡ 3D" + + msgid "Distance from Object" msgstr "與ē‰©é«”ēš„č·é›¢" @@ -20845,6 +21900,14 @@ msgid "Min Angle" msgstr "ęœ€å°č§’åŗ¦" +msgid "Max Curvature" +msgstr "ęœ€å¤§ę›²ēŽ‡" + + +msgid "Min Curvature" +msgstr "ęœ€å°ę›²ēŽ‡" + + msgid "Change alpha transparency based on the distance from the camera" msgstr "ę ¹ę“ščˆ‡ę”å½±ę©Ÿč·é›¢ä¾†č®Šę›“ alpha 透꘎åŗ¦" @@ -21001,6 +22064,10 @@ msgid "Sampling" msgstr "取ęØ£" +msgid "Simplification" +msgstr "ē°”化" + + msgid "Sinus Displacement" msgstr "ē«‡å®¤éŒÆē½®" @@ -21161,6 +22228,11 @@ msgid "Scale of the spatial noise" msgstr "ē©ŗ間å™Ŗč؊ēš„č¦ęØ”" +msgctxt "FreestyleLineStyle" +msgid "Smooth" +msgstr "å¹³ę»‘" + + msgid "If true, the spatial noise is smooth" msgstr "č‹„ē‚ŗēœŸļ¼Œē©ŗ間å™ŖčØŠå‰‡å¹³ę»‘" @@ -21257,6 +22329,10 @@ msgid "Change line thickness based on a material attribute" msgstr "ę ¹ę“šęč³Ŗē‰¹ę€§ä¾†č®Šę›“ē·šę¢åŽšåŗ¦" +msgid "Asymmetric" +msgstr "非對ēر" + + msgid "Mask Layer" msgstr "遮ē½©åˆ†å±¤" @@ -21270,7 +22346,7 @@ msgstr "ē®—ē¹Ŗäøé€ę˜Ž" msgid "Method of blending mask layers" -msgstr "ę··åˆé®ē½©åˆ†å±¤ēš„ę–¹ę³•" +msgstr "äŗ¤ę··é®ē½©åˆ†å±¤ēš„ę–¹ę³•" msgid "Merge Add" @@ -21307,7 +22383,7 @@ msgstr "ē·šę€§č”°č½" msgid "Restrict View" -msgstr "é™åˆ¶č¦–åœ–" +msgstr "限制ęŖ¢č¦–" msgid "Restrict visibility in the viewport" @@ -21398,6 +22474,11 @@ msgid "The method used for calculating the feather offset" msgstr "ē”Øę–¼č؈ē®—ē¾½ęƛ偏ē§»ēš„ę–¹ę³•" +msgctxt "Mask" +msgid "Even" +msgstr "均勻" + + msgid "Calculate even feather offset" msgstr "č؈ē®—均勻ē¾½ęƛ偏ē§»" @@ -21414,6 +22495,11 @@ msgid "Make this spline a closed loop" msgstr "č®“é€™å€‹é›²å½¢ē·šęˆē‚ŗ封閉ēš„čæ“圈" +msgctxt "Mask" +msgid "Fill" +msgstr "唫兄" + + msgid "Make this spline filled" msgstr "å”«č£œé€™å€‹é›²å½¢ē·š" @@ -21494,6 +22580,21 @@ msgid "Color for filling region bounded by each stroke" msgstr "對各ē­†č§ø包圍ēš„區唊唫兄ēš„č‰²å½©" +msgctxt "GPencil" +msgid "Solid" +msgstr "å–®č‰²" + + +msgctxt "GPencil" +msgid "Gradient" +msgstr "ę¼ø層" + + +msgctxt "GPencil" +msgid "Texture" +msgstr "ē“‹ē†" + + msgid "Flip" msgstr "ēæ»č½‰" @@ -21502,6 +22603,11 @@ msgid "Gradient Type" msgstr "ę¼ø層锞型" +msgctxt "GPencil" +msgid "Mix" +msgstr "ę··åˆ" + + msgid "Mix Factor" msgstr "ę··åˆäæ‚ę•ø" @@ -21522,6 +22628,14 @@ msgid "Scale Factor for Texture" msgstr "ē“‹ē†ēø®ę”¾äæ‚ę•ø" +msgid "Self Overlap" +msgstr "č‡Ŗčŗ«é‡ē–Š" + + +msgid "Effectiveness" +msgstr "ꕈꞜ" + + msgid "Mask" msgstr "遮ē½©" @@ -21538,6 +22652,14 @@ msgid "Material slot name" msgstr "Ꝑč³Ŗę§½åēر" +msgid "Metaball" +msgstr "č®Šå¹»ēƒ" + + +msgid "Show/Hide" +msgstr "é”Æē¤ŗ/éš±č—" + + msgid "Names" msgstr "名ēر" @@ -21546,10 +22668,6 @@ msgid "Bone Roll" msgstr "éŖØéŖ¼ę»¾å‹•" -msgid "Show/Hide" -msgstr "é”Æē¤ŗ/éš±č—" - - msgid "Clean Up" msgstr "ęø…ē†" @@ -21595,11 +22713,11 @@ msgstr "å°Žč¦½" msgid "Align View" -msgstr "å°é½Šč¦–åœ–" +msgstr "對齊ęŖ¢č¦–" msgid "Align View to Active" -msgstr "å°é½Šč¦–åœ–č‡³ä½œē”Ø項" +msgstr "對齊ęŖ¢č¦–č‡³ä½œē”Ø項" msgid "View Regions" @@ -21618,10 +22736,6 @@ msgid "Select Linked" msgstr "éø取連ēµé …" -msgid "Metaball" -msgstr "č®Šå¹»ēƒ" - - msgid "Light" msgstr "ē‡ˆå…‰" @@ -21658,6 +22772,10 @@ msgid "Make Single User" msgstr "č£½ä½œå–®äø€ä½æē”Ø者" +msgid "Convert" +msgstr "č½‰ę›" + + msgid "Link/Transfer Data" msgstr "連ēµ/傳č¼øč³‡ę–™" @@ -21686,6 +22804,10 @@ msgid "Propagate" msgstr "增ē”Ÿ" +msgid "Bone Collections" +msgstr "éŖØéŖ¼é›†ē›’" + + msgid "Toggle Bone Options" msgstr "開關éŖØéŖ¼éø項" @@ -21714,6 +22836,10 @@ msgid "Special Characters" msgstr "ē‰¹ę®Šå­—å…ƒ" +msgid "Kerning" +msgstr "字間微čŖæ" + + msgid "Text" msgstr "ę–‡å­—" @@ -21722,6 +22848,10 @@ msgid "Basic" msgstr "åŸŗęœ¬" +msgid "Catalog" +msgstr "ē·Øē›®" + + msgid "Assets" msgstr "ē“ ę" @@ -21747,6 +22877,11 @@ msgid "Refine" msgstr "ē²¾ē…‰" +msgctxt "MovieClip" +msgid "Tracking" +msgstr "č·Ÿč¹¤" + + msgid "Zoom" msgstr "čŖæē„¦" @@ -21771,6 +22906,10 @@ msgid "Marker" msgstr "ęؙčؘ" +msgid "Bookmarks Specials" +msgstr "ę›øē±¤ē‰¹åˆ„項" + + msgid "Files" msgstr "ęŖ”ę”ˆ" @@ -21781,7 +22920,7 @@ msgstr "Ꝑč³Ŗē‰¹ę®Šé …" msgctxt "Operator" msgid "Blend" -msgstr "ę··åˆ" +msgstr "äŗ¤ę··" msgctxt "Operator" @@ -21822,6 +22961,10 @@ msgid "Vertex Group Specials" msgstr "頂點ē¾¤ēµ„ē‰¹ę®Šé …" +msgid "NLA" +msgstr "NLA" + + msgid "Strip" msgstr "ē‰‡ę®µ" @@ -21843,6 +22986,10 @@ msgid "Primitives" msgstr "原形" +msgid "Adjust" +msgstr "čŖæę•“" + + msgid "Keying" msgstr "éµč™•ē†" @@ -21867,6 +23014,15 @@ msgid "Sample" msgstr "取ęØ£" +msgid "Write" +msgstr "åÆ«å…„" + + +msgctxt "NodeTree" +msgid "Constant" +msgstr "åøøę•ø" + + msgid "Instances" msgstr "åƦ例化" @@ -21908,6 +23064,10 @@ msgid "Transition" msgstr "過ęø”" +msgid "Change" +msgstr "ę›“ę”¹" + + msgid "Set Color Tag" msgstr "čØ­å®šč‰²å½©ęؙē±¤" @@ -21920,6 +23080,10 @@ msgid "Inputs" msgstr "č¼øå…„" +msgid "Lock/Mute" +msgstr "鎖定/靜音" + + msgid "Movie Strip" msgstr "å½±ē‰‡ē‰‡ę®µ" @@ -21969,7 +23133,7 @@ msgstr "外éƒØč³‡ę–™" msgid "New File" -msgstr "ꖰęŖ”ę”ˆ" +msgstr "ę–°å¢žęŖ”ę”ˆ" msgid "Data Previews" @@ -21981,7 +23145,7 @@ msgstr "復原" msgid "Help" -msgstr "幫助" +msgstr "ę±‚åŠ©" msgid "List Item" @@ -21997,19 +23161,19 @@ msgstr "作ē”Øäø­č»Ÿé«”åŗ«" msgid "Active Extension Repository" -msgstr "作ē”Øäø­é™„åŠ å…ƒä»¶č»Ÿé«”åŗ«" +msgstr "作ē”Øäø­ę““å……å„—ä»¶č»Ÿé«”åŗ«" msgid "Remove Extension Repository" -msgstr "ē§»é™¤é™„åŠ å…ƒä»¶č»Ÿé«”åŗ«" +msgstr "ē§»é™¤ę““å……å„—ä»¶č»Ÿé«”åŗ«" msgid "Extension Item" -msgstr "附加元件項ē›®" +msgstr "ę““å……å„—ä»¶é …ē›®" msgid "Extension Settings" -msgstr "附加元件čح定" +msgstr "ę““å……å„—ä»¶čح定" msgid "Presets" @@ -22024,6 +23188,10 @@ msgid "Save & Load" msgstr "å„²å­˜čˆ‡č¼‰å…„" +msgid "Brush Specials" +msgstr "ē­†åˆ·ē‰¹åˆ„項" + + msgctxt "Operator" msgid "Parent" msgstr "č¦Ŗ子" @@ -22043,6 +23211,10 @@ msgid "Clone Layer" msgstr "ę‹“č£½åˆ†å±¤" +msgid "Landmark Controls" +msgstr "地ęØ™ęŽ§åˆ¶é …" + + msgid "Lightgroup Sync" msgstr "ē‡ˆå…‰ē¾¤ēµ„åŒę­„" @@ -22107,6 +23279,10 @@ msgid "Mesh Loop" msgstr "ē¶²ę ¼čæ“圈" +msgid "Bitangent" +msgstr "雙切ē·š" + + msgid "Edge index" msgstr "邊ē·šē“¢å¼•" @@ -22147,6 +23323,10 @@ msgid "Name of Vertex color layer" msgstr "é ‚é»žč‰²åˆ†å±¤ēš„名ēر" +msgid "Polygon" +msgstr "å¤šč§’å½¢" + + msgid "Split Normals" msgstr "åˆ‡å‰²ę³•ē·š" @@ -22295,6 +23475,10 @@ msgid "Set the map as active for cloning" msgstr "ē‚ŗę‹“č£½č™•ē†å°‡ę˜ å°„čØ­ē‚ŗ作ē”Øäø­" +msgid "MeshUVLoop (Deprecated)" +msgstr "MeshUVLoopļ¼ˆå·²ę£„ē”Øļ¼‰" + + msgid "Name of UV map" msgstr "UV ę˜ å°„ēš„名ēر" @@ -22328,7 +23512,11 @@ msgstr "éš±č—å…ƒē“ " msgid "Normalized quaternion rotation" -msgstr "ę­£č¦åŒ–ēš„四元ę•øę—‹č½‰" +msgstr "č¦äø€åŒ–ēš„四元ę•øę—‹č½‰" + + +msgid "Select element" +msgstr "éø取元ē“ " msgid "Size X" @@ -22363,10 +23551,18 @@ msgid "Set metaball as negative one" msgstr "å°‡č®Šå¹»ēƒčØ­ē‚ŗč² ēš„" +msgid "Scale Stiffness" +msgstr "ēø®ę”¾å‰›ę€§" + + msgid "Modifier affecting the geometry data of an object" msgstr "äæ®ę”¹å™Øå½±éŸæē‰©é«”ēš„å¹¾ä½•č³‡ę–™" +msgid "Override Modifier" +msgstr "凌駕äæ®ę”¹å™Ø" + + msgid "Modifier name" msgstr "äæ®ę”¹å™Ø名ēر" @@ -22447,6 +23643,10 @@ msgid "Time Offset" msgstr "ę™‚é–“åē§»" +msgid "Offset keyframes" +msgstr "偏ē§»é—œéµå¹€" + + msgid "Texture Mapping" msgstr "ē“‹ē†ę˜ å°„處ē†" @@ -22503,10 +23703,18 @@ msgid "Convert all polygons to triangles" msgstr "å°‡ę‰€ęœ‰ēš„å¤šč§’å½¢č½‰ę›ē‚ŗäø‰č§’å½¢" +msgid "Weld" +msgstr "ē„ŠęŽ„" + + msgid "Wireframe" msgstr "ē·šę”†" +msgid "Multiple Strokes" +msgstr "多重ē­†č§ø" + + msgid "Subdivide" msgstr "ē“°åˆ†" @@ -22535,6 +23743,14 @@ msgid "Simple Deform" msgstr "ē°”å–®č®Šå½¢" +msgid "Smooth Corrective" +msgstr "äæ®ę­£å¹³ę»‘" + + +msgid "Smooth Laplacian" +msgstr "ꋉꙮꋉę–Æå¹³ę»‘" + + msgid "Surface Deform" msgstr "č”Øé¢č®Šå½¢" @@ -22759,6 +23975,10 @@ msgid "Bevel modifier to make edges and vertices more rounded" msgstr "讓邊ē·ščˆ‡é ‚點ꛓ圓ēš„å€’č§’äæ®ę”¹å™Ø" +msgid "Affect" +msgstr "å½±éŸæ" + + msgid "Affect only vertices" msgstr "åŖå½±éŸæ頂點" @@ -22775,6 +23995,10 @@ msgid "New" msgstr "ę–°å¢ž" +msgid "Affected" +msgstr "受影éŸæ項" + + msgid "Limit Method" msgstr "é™åˆ¶ę–¹ę³•" @@ -22795,6 +24019,10 @@ msgid "Use vertex group weights to select whether vertex or edge is beveled" msgstr "ä½æē”Ø頂點ē¾¤ēµ„ę¬Šé‡ä»„éøå–é ‚é»žęˆ–é‚Šē·šę˜Æå¦č¦å¼„å€’č§’" +msgid "Loop Slide" +msgstr "ē·šåœˆę»‘å‹•" + + msgid "Mark Seams" msgstr "ęؙčؘēø«ē·š" @@ -22807,6 +24035,18 @@ msgid "Material index of generated faces, -1 for automatic" msgstr "ē”Ÿęˆé¢ēš„Ꝑč³Ŗē“¢å¼•ļ¼Œ-1 ē‚ŗč‡Ŗ動" +msgid "Arc" +msgstr "圓弧" + + +msgid "Outer Miter" +msgstr "å¤–ę–œęŽ„" + + +msgid "Patch" +msgstr "č£œäø" + + msgid "What distance Width measures" msgstr "åƬåŗ¦ęø¬é‡ä½•č·é›¢" @@ -22835,6 +24075,10 @@ msgid "The profile shape (0.5 = round)" msgstr "剖面外形 (0.5 = 圓)" +msgid "Superellipse" +msgstr "č¶…ę©¢åœ“" + + msgid "Number of segments for round edges/verts" msgstr "圓邊ē·š/頂點ēš„åˆ†ę®µę•ø" @@ -22855,6 +24099,10 @@ msgid "Vertex Weight" msgstr "é ‚é»žę¬Šé‡" +msgid "Width Percent" +msgstr "åƬåŗ¦ē™¾åˆ†ęƔ" + + msgid "Boolean Modifier" msgstr "åøƒęž—äæ®ę”¹å™Ø" @@ -22867,6 +24115,10 @@ msgid "Debug" msgstr "除éŒÆ" +msgid "Transfer" +msgstr "傳č¼ø" + + msgid "Mesh object to use for Boolean operation" msgstr "ē”Øę–¼åøƒęž—ę“ä½œēš„ē¶²ę ¼ē‰©é«”" @@ -22875,6 +24127,10 @@ msgid "Union" msgstr "čÆ集" +msgid "Exact" +msgstr "ē²¾ē¢ŗ" + + msgid "Build Modifier" msgstr "å»ŗē½®äæ®ę”¹å™Ø" @@ -22928,7 +24184,7 @@ msgstr "ęŽ§åˆ¶ē‰©é«”ļ¼šå¦‚ęžœåÆē”Øēš„話ļ¼Œå…¶ä½ē½®ę±ŗå®šę•ˆęžœēš„äø­åæƒ" msgid "Only deform vertices within this distance from the center of the effect (leave as 0 for infinite.)" -msgstr "åƒ…č®Šå½¢å¾žę•ˆęžœäø­åæƒčµ·é€™å€‹č·é›¢ä¹‹å…§ēš„頂點 (ē•™ 0 ē‚ŗē„”限)怂" +msgstr "åƒ…č®Šå½¢å¾žę•ˆęžœäø­åæƒčµ·é€™å€‹č·é›¢ä¹‹å…§ēš„頂點 (ē•™ 0 ē‚ŗē„”限)" msgid "Size of projection shape (leave as 0 for auto)" @@ -22971,6 +24227,18 @@ msgid "Lambda Factor" msgstr "Lambda äæ‚ę•ø" +msgid "Original Coords" +msgstr "原始åŗ§ęؙ" + + +msgid "Bind Coords" +msgstr "ē¶å®šåŗ§ęؙ" + + +msgid "Smooth Type" +msgstr "å¹³ę»‘é”žåž‹" + + msgid "Curve Modifier" msgstr "ę›²ē·šäæ®ę”¹å™Ø" @@ -23131,6 +24399,10 @@ msgid "Nearest Face" msgstr "꜀čæ‘面" +msgid "Best Normal-Matching" +msgstr "ęœ€ä½³ę³•ē·šé…å°" + + msgid "Ray Radius" msgstr "光ē·šåŠå¾‘" @@ -23376,6 +24648,21 @@ msgid "Dynamic Paint modifier" msgstr "å‹•ę…‹ē¹Ŗč£½äæ®ę”¹å™Ø" +msgctxt "Simulation" +msgid "Type" +msgstr "锞型" + + +msgctxt "Simulation" +msgid "Canvas" +msgstr "ē•«åøƒ" + + +msgctxt "Simulation" +msgid "Brush" +msgstr "ē­†åˆ·" + + msgid "EdgeSplit Modifier" msgstr "邊ē·šåˆ†å‰²äæ®ę”¹å™Ø" @@ -23476,10 +24763,22 @@ msgid "Instance Modifier" msgstr "åƦ例äæ®ę”¹å™Ø" +msgid "Offset Object" +msgstr "偏ē§»ē‰©é«”" + + msgid "Random Offset" msgstr "éšØę©Ÿåē§»" +msgid "Random Rotation" +msgstr "éšØę©Ÿę—‹č½‰" + + +msgid "Random seed" +msgstr "éšØę©Ÿēخ子" + + msgid "Enable offset" msgstr "啟ē”Ø偏ē§»" @@ -23492,10 +24791,38 @@ msgid "Uniform Scale" msgstr "äø€č‡“ēø®ę”¾" +msgid "Time Alignment" +msgstr "ę™‚é–“å°é½Š" + + +msgid "Align Start" +msgstr "對齊開始" + + +msgid "Align End" +msgstr "對齊ēµęŸ" + + +msgid "Fade Factor" +msgstr "ę·”åŒ–äæ‚ę•ø" + + +msgid "Opacity Strength" +msgstr "äøé€ę˜Žå¼·åŗ¦" + + +msgid "Thickness Strength" +msgstr "åƬåŗ¦å¼·åŗ¦" + + msgid "Speed Factor" msgstr "速åŗ¦äæ‚ę•ø" +msgid "Maximum Gap" +msgstr "ęœ€å¤§ 間隙" + + msgid "Delay" msgstr "延遲" @@ -23512,10 +24839,22 @@ msgid "Vanish" msgstr "ę¶ˆå¤±" +msgid "Use Fading" +msgstr "ä½æē”Øę·”åŒ–" + + msgid "Fills" msgstr "唫兄" +msgid "Skip Segments" +msgstr "ē•„éŽåˆ†ę®µ" + + +msgid "Spread Length" +msgstr "ä¼ø展長åŗ¦" + + msgid "Hook Modifier" msgstr "鉤äæ®ę”¹å™Ø" @@ -23567,14 +24906,70 @@ msgid "Strength of modifier effect" msgstr "äæ®ę”¹å™ØꕈꞜēš„å¼·åŗ¦" +msgid "Length Modifier" +msgstr "長åŗ¦äæ®ę”¹å™Ø" + + +msgid "End Factor" +msgstr "ęœ«ē«Æäæ‚ę•ø" + + +msgid "Invert Curvature" +msgstr "åč½‰ę›²ēŽ‡" + + +msgid "Filter Angle" +msgstr "過ęæ¾č§’åŗ¦" + + +msgid "Used Length" +msgstr "ä½æē”Øēš„é•·åŗ¦" + + msgid "Point Density" msgstr "點åƆåŗ¦" +msgid "Segment Influence" +msgstr "å€ę®µå½±éŸæ" + + +msgid "Start Factor" +msgstr "起點äæ‚ę•ø" + + msgid "Step" msgstr "ę­„" +msgid "Use Curvature" +msgstr "ä½æē”Øę›²ēŽ‡" + + +msgid "Image Threshold" +msgstr "影像閾值" + + +msgid "Crease Threshold" +msgstr "ę‘ŗē—•é–¾å€¼" + + +msgid "Is Baked" +msgstr "ę˜Æå·²ēƒ˜åŸ¹" + + +msgid "Level End" +msgstr "ē“šę•øēµ‚ę­¢" + + +msgid "Level Start" +msgstr "ē“šę•ø開始" + + +msgid "Light Object" +msgstr "ē‡ˆå…‰ē‰©é«”" + + msgid "Overscan" msgstr "č¶…éŽęŽƒę" @@ -23588,18 +24983,98 @@ msgid "None" msgstr "ē„”" +msgid "Silhouette Filtering" +msgstr "å‰Ŗ影過ęæ¾" + + +msgid "Individual Silhouette" +msgstr "個刄å‰Ŗå½±" + + +msgid "Smooth Tolerance" +msgstr "å¹³ę»‘å®¹å·®" + + +msgid "Camera Object" +msgstr "ę”å½±ę©Ÿē‰©é«”" + + +msgid "Source Type" +msgstr "來ęŗé”žåž‹" + + +msgid "Angle Splitting" +msgstr "角åŗ¦åˆ†å‰²" + + msgid "Clipping Boundaries" msgstr "ęˆŖ割邊ē•Œ" +msgid "Use Contour" +msgstr "ä½æē”Øč¼Ŗ廓" + + +msgid "Use Crease" +msgstr "ä½æē”Øēšŗę‘ŗ" + + +msgid "Preserve Details" +msgstr "äæē•™ē“°ēƀ" + + msgid "Boundaries" msgstr "邊ē•Œ" +msgid "Keep Contour" +msgstr "ē¶­ęŒč¼Ŗ廓" + + +msgid "All Lines" +msgstr "ꉀ꜉ē·šę¢" + + +msgid "Use Intersection" +msgstr "ä½æē”Øäŗ¤é›†" + + +msgid "Match Intersection" +msgstr "配對äŗ¤éŒÆ" + + +msgid "Use Loose" +msgstr "ä½æē”Øé¬†ę•£" + + +msgid "Use Material" +msgstr "ä½æē”ØꝐč³Ŗ" + + +msgid "Match Masks" +msgstr "配對遮ē½©" + + +msgid "Instanced Objects" +msgstr "åƦ例化ē‰©é«”" + + +msgid "Match Output" +msgstr "配對č¼øå‡ŗ" + + +msgid "Multiply Modifier" +msgstr "加乘äæ®ę”¹å™Ø" + + msgid "Duplicates" msgstr "č¤‡ęœ¬" +msgid "Fade center" +msgstr "ę·”åŒ–äø­åæƒ" + + msgid "Position Factor" msgstr "位ē½®äæ‚ę•ø" @@ -23612,6 +25087,14 @@ msgid "Thickness Factor" msgstr "厚åŗ¦äæ‚ę•ø" +msgid "Noise Offset" +msgstr "å™Ŗč؊偏ē§»" + + +msgid "Noise Seed" +msgstr "å™Ŗč؊ēخ子" + + msgid "Start Offset" msgstr "čµ·å§‹åē§»" @@ -23624,10 +25107,22 @@ msgid "Uniform Opacity" msgstr "äø€č‡“äøé€ę˜Žåŗ¦" +msgid "Outline Modifier" +msgstr "č¼Ŗ廓äæ®ę”¹å™Ø" + + msgid "Target Object" msgstr "ē›®ęؙē‰©é«”" +msgid "Outline Material" +msgstr "č¼Ŗå»“ęč³Ŗ" + + +msgid "Sample Length" +msgstr "取ęأ長åŗ¦" + + msgid "Subdivisions" msgstr "ē“°åˆ†" @@ -23656,6 +25151,14 @@ msgid "Project Limit" msgstr "ęŠ•å½±é™åˆ¶" +msgid "Smooth Factor" +msgstr "å¹³ę»‘äæ‚ę•ø" + + +msgid "Subdivision Levels" +msgstr "ē“°åˆ†ē“šę•ø" + + msgid "Number of subdivisions that must be performed before extracting vertices' positions and normals" msgstr "åœØęŠ½å‡ŗ頂點ēš„位ē½®čˆ‡ę³•ē·šä¹‹å‰åæ…é ˆåŸ·č”Œēš„ē“°åˆ†ę•ø" @@ -23676,6 +25179,10 @@ msgid "Allow vertices to move in the positive direction of axis" msgstr "允čرåŗ•é»žåÆē§»å…„č»øēš„ę­£ę–¹å‘" +msgid "Wrap Method" +msgstr "åŒ…č¦†ę–¹ę³•" + + msgid "Shrink the mesh to the nearest target surface" msgstr "將ē¶²ę ¼ę”¶ēø®č‡³ęœ€čæ‘ēš„ē›®ęؙč”Ø面" @@ -23688,6 +25195,10 @@ msgid "Shrink the mesh to the nearest target vertex" msgstr "ꔶēø®ē¶²ę ¼č‡³ęœ€čæ‘ēš„ē›®ęؙ頂點" +msgid "Simplify Modifier" +msgstr "ē°”化äæ®ę”¹å™Ø" + + msgid "Factor of Simplify" msgstr "ē°”化ēš„äæ‚ę•ø" @@ -23700,6 +25211,10 @@ msgid "Smooth Modifier" msgstr "å¹³ę»‘äæ®ę”¹å™Ø" +msgid "Subdivision Modifier" +msgstr "ē“°åˆ†äæ®ę”¹å™Ø" + + msgid "Subdivision Type" msgstr "ē“°åˆ†é”žåž‹" @@ -23712,10 +25227,34 @@ msgid "Catmull-Clark" msgstr "協ē‰¹å§†-å…‹ę‹‰å…‹" +msgid "Fill Offset" +msgstr "唫兄偏ē§»" + + +msgid "Fill Rotation" +msgstr "å”«å…„ę—‹č½‰" + + +msgid "Fill Scale" +msgstr "唫兄ēø®ę”¾" + + +msgid "Fit Method" +msgstr "é©ę‡‰ę–¹ę³•" + + msgid "Constant Length" msgstr "ę†å®šé•·åŗ¦" +msgid "Stroke Length" +msgstr "ē­†č§ø長åŗ¦" + + +msgid "UV Offset" +msgstr "UV 偏ē§»" + + msgid "UV Scale" msgstr "UV ēø®ę”¾" @@ -23736,10 +25275,30 @@ msgid "Evaluation time in seconds" msgstr "č©•ä¼°ę™‚é–“å–®ä½ē‚ŗē§’" +msgid "Fixed Frame" +msgstr "å›ŗå®šę”†å¹€" + + +msgid "Custom Range" +msgstr "č‡Ŗč؂區間" + + +msgid "Keep Loop" +msgstr "ē¶­ęŒå¾Ŗē’°" + + msgid "Factor for tinting" msgstr "č‘—č‰²ēš„äæ‚ę•ø" +msgid "Coordinates space" +msgstr "åŗ§ęؙē©ŗ間" + + +msgid "Multiply Weights" +msgstr "ä¹˜ä»„ę¬Šé‡" + + msgid "Highest" msgstr "ęœ€é«˜" @@ -23772,6 +25331,10 @@ msgid "Bound" msgstr "ꝟēø›" +msgid "Anchor Weights" +msgstr "éŒØå®šę¬Šé‡" + + msgid "Name of Vertex Group which determines Anchors" msgstr "ę±ŗ定éŒØ定ēš„頂點ē¾¤ēµ„其名ēر" @@ -23793,7 +25356,7 @@ msgstr "邊ē·£ēš„ Lambda äæ‚ę•ø" msgid "Normalized" -msgstr "ę­£č¦åŒ–" +msgstr "č¦äø€åŒ–" msgid "Improve and stabilize the enhanced shape" @@ -23848,6 +25411,14 @@ msgid "Cache Mesh" msgstr "åæ«å–ē¶²ę ¼" +msgid "MDD" +msgstr "MDD" + + +msgid "PC2" +msgstr "PC2" + + msgid "Deform Mode" msgstr "č®Šå½¢ęؔ式" @@ -23921,13 +25492,33 @@ msgstr "č¦č®Šå½¢ēš„ē¶²ę ¼ē‰©é«”" msgid "The grid size for binding" -msgstr "ē¶å®šēš„ē¶²ę ¼å¤§å°" +msgstr "ē¶å®šēš„ę ¼ē·šå¤§å°" msgid "Recompute binding dynamically on top of other deformers (slower and more memory consuming)" msgstr "åœØå…¶ä»–č®Šå½¢ē‰©é«”äøŠ (č¼ƒę…¢äø”č¼ƒč€—č²»čØ˜ę†¶é«”) å‹•ę…‹é‡ę–°č؈ē®—ē¶å®š" +msgid "Mode for how the desired voxel size is specified" +msgstr "ęŒ‡å®šåå„½é«”ē“ å¤§å°ēš„ęؔ式" + + +msgid "Voxel Amount" +msgstr "體ē“ ę•ø量" + + +msgid "Desired number of voxels along one axis" +msgstr "äø€å€‹č»ø向äøŠåå„½ēš„é«”ē“ ę•ø量" + + +msgid "Desired voxel side length" +msgstr "偏儽ēš„é«”ē“ é‚Šé•·" + + +msgid "Approximate number of voxels along one axis" +msgstr "äø€å€‹č»ø向äøŠé«”ē“ ēš„å¤§ę¦‚ę•ø量" + + msgid "Mirror Modifier" msgstr "鏔像äæ®ę”¹å™Ø" @@ -23948,6 +25539,14 @@ msgid "Flip V Offset" msgstr "ēæ»č½‰ V 偏ē§»" +msgid "Mirror Axis" +msgstr "鏔像č»ø向" + + +msgid "Bisect Axis" +msgstr "切分č»ø向" + + msgid "Prevent vertices from going through the mirror during transform" msgstr "é˜²ę­¢é ‚é»žč®Šå½¢ę™‚č¶…å‡ŗ鏔像" @@ -24020,6 +25619,10 @@ msgid "Number of subdivisions for which displacements are stored" msgstr "éŒÆē½®å„²č—ēš„ē“°åˆ†ę•ø" +msgid "Packed" +msgstr "ę‰“åŒ…" + + msgid "Normal Edit Modifier" msgstr "ę³•ē·šē·Øč¼Æäæ®ę”¹å™Ø" @@ -24132,6 +25735,10 @@ msgid "Displace existing geometry according to simulation" msgstr "ę ¹ę“šęØ”ę“¬éŒÆē½®ę—¢ęœ‰ēš„幾何" +msgid "Invert Spray" +msgstr "åč½‰å™“ęæŗ" + + msgid "Ocean is Cached" msgstr "ęµ·ę“‹å·²åæ«å–" @@ -24156,6 +25763,10 @@ msgid "Repetitions of the generated surface in Y" msgstr "ē”Ÿęˆēš„č”Øé¢ę–¼ Y č»ø重複" +msgid "Sharpen peak" +msgstr "峰值銳利化" + + msgid "Surface scale factor (does not affect the height of the waves)" msgstr "č”Ø面ēø®ę”¾äæ‚ę•ø (äøęœƒå½±éŸæę³¢ęµŖēš„高åŗ¦)" @@ -24168,6 +25779,18 @@ msgid "Size of the simulation domain (in meters), and of the generated geometry msgstr "ęØ”ę“¬é ˜åŸŸēš„大小 (單位ē‚ŗ公å°ŗ)ļ¼Œčˆ‡ē”Ÿęˆå¹¾ä½•ēš„大小 (單位ē‚ŗ BU)" +msgid "Turbulent Ocean" +msgstr "ęø¦ęµęµ·ę“‹" + + +msgid "Shallow Water" +msgstr "ę·ŗę°“" + + +msgid "Spray Map" +msgstr "噓ęæŗč²¼åœ–" + + msgid "Current time of the simulation" msgstr "ęØ”ę“¬ēš„ē›®å‰ę™‚é–“" @@ -24276,6 +25899,11 @@ msgid "World" msgstr "äø–ē•Œ" +msgctxt "ParticleSettings" +msgid "Children" +msgstr "子ē“š" + + msgid "Create instances from child particles" msgstr "從子代ē²’子å»ŗē«‹åƦ例" @@ -24350,7 +25978,7 @@ msgstr "銳åŗ¦" msgid "Tolerance for outliers; lower values filter noise while higher values will reproduce edges closer to the input" -msgstr "分離體ēš„åæå·®ļ¼›č¼ƒä½Žēš„值åÆ過ęæ¾å™Ŗč؊ļ¼Œč€Œč¼ƒé«˜ēš„å€¼ęœƒē”¢ē”Ÿčæ‘ä¼¼č¼øå…„ēš„é‚Šē·š" +msgstr "分離體ēš„容差ļ¼›č¼ƒä½Žēš„值åÆ過ęæ¾å™Ŗč؊ļ¼Œč€Œč¼ƒé«˜ēš„å€¼ęœƒē”¢ē”Ÿčæ‘ä¼¼č¼øå…„ēš„é‚Šē·š" msgid "If removing disconnected pieces, minimum size of components to preserve as a ratio of the number of polygons in the largest component" @@ -24401,6 +26029,10 @@ msgid "Offset the revolution along its axis" msgstr "čæ“ꗋę²æ其č»øēš„偏ē§»" +msgid "Calculate Order" +msgstr "č؈ē®—é †åŗ" + + msgid "Calculate the order of edges (needed for meshes, but not curves)" msgstr "č؈ē®—é‚Šē·šēš„é †åŗ (ē¶²ę ¼éœ€č¦ļ¼Œä½†ę›²ē·šäøéœ€č¦)" @@ -24459,10 +26091,20 @@ msgid "Bend the mesh over the Z axis of the modifier space" msgstr "將ē¶²ę ¼ęœäæ®ę”¹å™Øē©ŗ間ēš„ Z č»øå½Žę›²" +msgctxt "Operator" +msgid "Taper" +msgstr "ēŖ„ēø®" + + msgid "Linearly scale along Z axis of the modifier space" msgstr "ę²æäæ®ę”¹å™Øē©ŗ間ēš„ Z č»øē·šę€§ēø®ę”¾" +msgctxt "Operator" +msgid "Stretch" +msgstr "ꋉä¼ø" + + msgid "Stretch the object along the Z axis of the modifier space" msgstr "ę²æäæ®ę”¹å™Øē©ŗ間ēš„ Z č»ø延展ē‰©é«”" @@ -24535,6 +26177,10 @@ msgid "Solidify Modifier" msgstr "åƦ體化äæ®ę”¹å™Ø" +msgid "Bevel Convex" +msgstr "å‡øé¢å€’č§’" + + msgid "Inner Crease" msgstr "內ēšŗę‘ŗ" @@ -24588,6 +26234,16 @@ msgid "None" msgstr "ē„”" +msgctxt "Mesh" +msgid "Round" +msgstr "圓形" + + +msgctxt "Mesh" +msgid "Flat" +msgstr "ę‰å¹³" + + msgid "Even" msgstr "均勻" @@ -24596,6 +26252,10 @@ msgid "Offset the thickness from the center" msgstr "從äø­åæƒåē§»č©²åŽšåŗ¦" +msgid "Complex" +msgstr "複雜" + + msgid "Thickness of the shell" msgstr "å¤–ę®¼ēš„厚åŗ¦" @@ -24620,6 +26280,10 @@ msgid "Maintain thickness by adjusting for sharp corners (slow, disable when not msgstr "透過čŖæę•“éŠ³åˆ©č½‰č§’ä¾†ē¶­ęŒåŽšåŗ¦ (ē·©ę…¢ļ¼Œē•¶äøéœ€č¦ę™‚č«‹åœē”Ø)" +msgid "Flat Faces" +msgstr "平坦面" + + msgid "Flip Normals" msgstr "ēæ»č½‰ę³•ē·š" @@ -24652,6 +26316,10 @@ msgid "Only add the rim to the original data" msgstr "åƒ…ę·»åŠ é‚Šę”†č‡³åŽŸå§‹č³‡ę–™" +msgid "Angle Clamp" +msgstr "角åŗ¦é™å®š" + + msgid "Subdivision surface modifier" msgstr "ē“°åˆ†č”Ø面äæ®ę”¹å™Ø" @@ -24660,6 +26328,10 @@ msgid "Number of subdivisions to perform when rendering" msgstr "ē•¶ē®—ē¹Ŗę™‚č¦åŸ·č”Œēš„ē“°åˆ†ę•ø" +msgid "Sparse Bind" +msgstr "ē؀ē–ē¶å®š" + + msgid "Surface Modifier" msgstr "č”Ø面äæ®ę”¹å™Ø" @@ -24676,6 +26348,10 @@ msgid "Triangulate Mesh" msgstr "äø‰č§’劃分ē¶²ę ¼" +msgid "N-gon Method" +msgstr "å¤šč§’å½¢åˆ‡ę³•" + + msgid "Beauty" msgstr "å„Ŗē¾Ž" @@ -24768,10 +26444,18 @@ msgid "Center point for rotate/scale" msgstr "ē”Øę–¼ę—‹č½‰/ēø®ę”¾ēš„äø­åæƒé»ž" +msgid "Object From" +msgstr "來ęŗē‰©é«”" + + msgid "Object defining offset" msgstr "定ē¾©åē§»ēš„ē‰©é«”" +msgid "Object To" +msgstr "ē›®ęؙē‰©é«”" + + msgid "WeightVG Edit Modifier" msgstr "ę¬Šé‡é»žē¾¤ē·Øč¼Æäæ®ę”¹å™Ø" @@ -24819,6 +26503,10 @@ msgid "Map all values below 0.5 to 0.0, and all others to 1.0" msgstr "å°‡ę‰€ęœ‰å°ę–¼ 0.5 ēš„å€¼ę˜ å°„č‡³ 0.0ļ¼Œč€Œå…¶ä»–ēš„則ē‚ŗ 1.0" +msgid "Invert Falloff" +msgstr "åč½‰č”°ęø›" + + msgid "Mapping Curve" msgstr "ę˜ å°„č™•ē†ę›²ē·š" @@ -24872,7 +26560,7 @@ msgstr "遮ē½©č™•ē†é ‚點ē¾¤ēµ„名ēر" msgid "Normalize Weights" -msgstr "ę­£č¦åŒ–ę¬Šé‡" +msgstr "č¦äø€åŒ–ę¬Šé‡" msgid "Remove Threshold" @@ -25063,6 +26751,14 @@ msgid "Object to calculate vertices distances from" msgstr "č؈ē®—é ‚é»žčˆ‡ē‰©é«”é–“ēš„č·é›¢" +msgid "Grid in the volume object that is converted to a mesh" +msgstr "容體ē‰©é«”äø­č½‰ę›ē‚ŗē¶²ę ¼ēš„ę ¼ē·š" + + +msgid "Voxels with a larger value are inside the generated mesh" +msgstr "å€¼č¼ƒå¤§ä¹‹é«”ē“ åœØē”Ÿęˆēš„ē¶²ę ¼å…§" + + msgid "Warp Modifier" msgstr "åŒ…č¦†äæ®ę”¹å™Ø" @@ -25203,6 +26899,10 @@ msgid "Distance between the waves" msgstr "ę³¢å½¢ä¹‹é–“ēš„č·é›¢" +msgid "WeightedNormal Modifier" +msgstr "ę¬Šé‡ę³•ē·šäæ®ę”¹å™Ø" + + msgid "Weighting Mode" msgstr "ę¬Šé‡ęؔ式" @@ -25483,6 +27183,18 @@ msgid "K3" msgstr "K3" +msgid "K4" +msgstr "K4" + + +msgid "P1" +msgstr "P1" + + +msgid "P2" +msgstr "P2" + + msgid "Distortion Model" msgstr "ę‰­ę›²ęؔ型" @@ -25503,6 +27215,14 @@ msgid "Divisions" msgstr "劃分" +msgid "Nuke" +msgstr "Nuke" + + +msgid "Brown" +msgstr "åøƒęœ—" + + msgid "Camera's focal length" msgstr "ę”å½±ę©Ÿēš„ē„¦é•·" @@ -25628,7 +27348,7 @@ msgstr "čæ½č¹¤ē”Øēš„ęƔ對ē§»å‹•ęؙčØ˜č³‡ę–™" msgid "Marker position at frame in normalized coordinates" -msgstr "ę–¼ę­£č¦åŒ–åŗ§ęؙē³»äø­ęؙčؘ位ē½®ēš„ę”†å¹€" +msgstr "ę–¼č¦äø€åŒ–åŗ§ęؙē³»äø­ęؙčؘ位ē½®ēš„ę”†å¹€" msgid "Keyframed" @@ -25648,7 +27368,7 @@ msgstr "ęأ式邊ē•Œę–¹å”Š" msgid "Pattern area bounding box in normalized coordinates" -msgstr "ę­£č¦åŒ–åŗ§ęؙäø­ēš„ęأ式區域邊ē•Œę–¹å”Š" +msgstr "č¦äø€åŒ–åŗ§ęؙäø­ēš„ęأ式區域邊ē•Œę–¹å”Š" msgid "Pattern Corners" @@ -25656,7 +27376,7 @@ msgstr "ęØ£å¼č½‰č§’" msgid "Array of coordinates which represents pattern's corners in normalized coordinates relative to marker position" -msgstr "代č”Øęأ式ēš„č½‰č§’ę–¼ę­£č¦åŒ–åŗ§ęؙē³»äø­ē›øå°ę–¼ęؙčؘ位ē½®å…¶åŗ§ęؙē³»ēš„陣列" +msgstr "代č”Øęأ式ēš„č½‰č§’ę–¼č¦äø€åŒ–åŗ§ęؙē³»äø­ē›øå°ę–¼ęؙčؘ位ē½®å…¶åŗ§ęؙē³»ēš„陣列" msgid "Search Max" @@ -25664,7 +27384,7 @@ msgstr "ęœå°‹ęœ€å¤§" msgid "Right-bottom corner of search area in normalized coordinates relative to marker position" -msgstr "ę–¼ę­£č¦åŒ–åŗ§ęؙč»øē›øå°ę–¼ęؙčؘ位ē½®ēš„ęœå°‹å€åŸŸå³äø‹č§’" +msgstr "ę–¼ę­øäø€åŒ–åŗ§ęؙč»øē›øå°ę–¼ęؙčؘ位ē½®ēš„ęœå°‹å€åŸŸå³äø‹č§’" msgid "Search Min" @@ -25672,7 +27392,7 @@ msgstr "ęœå°‹ęœ€å°" msgid "Left-bottom corner of search area in normalized coordinates relative to marker position" -msgstr "ę–¼ę­£č¦åŒ–åŗ§ęؙč»øē›øå°ę–¼ęؙčؘ位ē½®ēš„ęœå°‹å€åŸŸå·¦äø‹č§’" +msgstr "ę–¼ę­øäø€åŒ–åŗ§ęؙč»øē›øå°ę–¼ęؙčؘ位ē½®ēš„ęœå°‹å€åŸŸå·¦äø‹č§’" msgid "Movie tracking object data" @@ -25871,6 +27591,10 @@ msgid "Search for markers that are perspectively deformed (homography) between f msgstr "ęœå°‹ę”†å¹€ä¹‹é–“å€‹åˆ„č®Šå½¢ (å–®ę‡‰ę€§) ēš„ęؙčؘ" +msgid "Affine" +msgstr "ä»æ射" + + msgid "Search for markers that are affine-deformed (t, r, k, and skew) between frames" msgstr "ęœå°‹ę”†å¹€ä¹‹é–“ä»æå°„č®Šå½¢ (t态r态k 與čžŗꗋ) ēš„ęؙčؘ" @@ -25996,11 +27720,11 @@ msgstr "ä½æē”Ø遮ē½©" msgid "Normalize" -msgstr "ę­£č¦åŒ–" +msgstr "ę­øäø€åŒ–" msgid "Normalize light intensities while tracking (slower)" -msgstr "čæ½č¹¤ę™‚ę­£č¦åŒ–å…‰ēš„å¼·åŗ¦ (č¼ƒę…¢)" +msgstr "čæ½č¹¤ę™‚ę­øäø€åŒ–å…‰ēš„å¼·åŗ¦ (č¼ƒę…¢)" msgid "Use Red Channel" @@ -26031,6 +27755,10 @@ msgid "Active Track Index" msgstr "作ē”Øäø­č»Œé“ē“¢å¼•" +msgid "Anchor Frame" +msgstr "éŒØå®šę”†å¹€" + + msgid "Interpolate" msgstr "ę’č£œ" @@ -26075,6 +27803,10 @@ msgid "Limit the amount of automatic scaling" msgstr "限制č‡Ŗ動ēø®ę”¾ēš„量" +msgid "Expected Scale" +msgstr "預ꜟēø®ę”¾" + + msgid "Use 2D stabilization for footage" msgstr "ē‚ŗ連ēŗŒé”é ­ä½æē”Ø 2D ē©©å®šč™•ē†" @@ -26091,6 +27823,10 @@ msgid "Stabilize Rotation" msgstr "ē©©å®šč™•ē†ę—‹č½‰" +msgid "Stabilize Scale" +msgstr "ē©©å®šēø®ę”¾" + + msgid "Movie tracking track data" msgstr "å½±ē‰‡čæ½č¹¤ē”Øč»Œé“č³‡ę–™" @@ -26224,7 +27960,7 @@ msgstr "ē‰‡ę®µēš„é–‹é ­å½±éŸæč¦ę·”åŒ–ēš„å¹€ę•ø" msgid "Blending" -msgstr "ę··åˆč™•ē†" +msgstr "äŗ¤ę··č™•ē†" msgid "Method used for combining strip's result with accumulated result" @@ -26343,6 +28079,10 @@ msgid "Sync Action Length" msgstr "åŒę­„å‹•ä½œé•·åŗ¦" +msgid "NLA-Strip F-Curves" +msgstr "NLA ē‰‡ę®µ F ę›²ē·š" + + msgid "NLA Track" msgstr "NLA č»Œé“" @@ -26483,6 +28223,41 @@ msgid "Relative Size Y" msgstr "ē›ø對大小 Y" +msgctxt "NodeTree" +msgid "Flat" +msgstr "ę‰å¹³" + + +msgctxt "NodeTree" +msgid "Tent" +msgstr "åø³ēÆ·" + + +msgctxt "NodeTree" +msgid "Quadratic" +msgstr "äŗŒę¬”型" + + +msgctxt "NodeTree" +msgid "Cubic" +msgstr "äø‰ę¬”型" + + +msgctxt "NodeTree" +msgid "Gaussian" +msgstr "高ę–Æ" + + +msgctxt "NodeTree" +msgid "Catrom" +msgstr "凱ē‰¹éš†" + + +msgctxt "NodeTree" +msgid "Mitch" +msgstr "åƆ儇" + + msgid "Bokeh" msgstr "ę•£ę™Æ" @@ -26491,6 +28266,10 @@ msgid "Use circular filter (slower)" msgstr "ä½æē”Ø圓過ęæ¾å™Ø (č¼ƒę…¢)" +msgid "Extend Bounds" +msgstr "ę““å±•é‚Šē•Œ" + + msgid "Apply filter on gamma corrected values" msgstr "å„—ē”Ø過ęæ¾å™Øę–¼ä¼½ē‘Ŗę ”ę­£å€¼" @@ -26579,6 +28358,10 @@ msgid "Y position of the middle of the box" msgstr "ę–¹å”Šäø­é–“ēš„ Y 位ē½®" +msgid "Brightness/Contrast" +msgstr "äŗ®åŗ¦/對ęƔ" + + msgid "Keep output image premultiplied alpha" msgstr "äæęŒč¼øå‡ŗ圖ē‰‡ēš„ alpha ē‚ŗ預乘ęؔ式" @@ -26587,8 +28370,8 @@ msgid "Channel Key" msgstr "通道鍵" -msgid "RGB color space" -msgstr "RGB č‰²å½©ē©ŗ間" +msgid "YUV" +msgstr "YUV" msgid "YCbCr" @@ -26623,6 +28406,10 @@ msgid "Limit by single channel" msgstr "受單äø€é€šé“限制" +msgid "Limit by maximum of other channels" +msgstr "依其他通道ēš„ęœ€å¤§å€¼é™åˆ¶" + + msgid "Low" msgstr "低" @@ -26660,7 +28447,7 @@ msgstr "čŖæę•“ä»»ä½•ę•ę‰åˆ°ēš„陰影其äŗ®åŗ¦" msgid "Tolerance below which colors will be considered as exact matches" -msgstr "å°ę–¼åæå·®ęœƒč¢«č¦–ē‚ŗē¢ŗåƦē›øē¬¦ēš„č‰²å½©" +msgstr "å°ę–¼å®¹å·®ęœƒč¢«č¦–ē‚ŗē¢ŗåƦē›øē¬¦ēš„č‰²å½©" msgid "Acceptance" @@ -26668,7 +28455,7 @@ msgstr "ęŽ„å—åŗ¦" msgid "Tolerance for a color to be considered a keying color" -msgstr "č¢«č¦–ē‚ŗéµč™•ē†č‰²å½©ēš„č‰²å½©åæå·®" +msgstr "č¢«č¦–ē‚ŗéµč™•ē†č‰²å½©ēš„č‰²å½©å®¹å·®" msgid "Color Balance" @@ -26900,7 +28687,7 @@ msgstr "H" msgid "Hue tolerance for colors to be considered a keying color" -msgstr "č‰²å½©č¦č¢«č¦–ē‚ŗęŸéµč™•ē†č‰²å½©ēš„č‰²ē›øåæå·®" +msgstr "č‰²å½©č¦č¢«č¦–ē‚ŗęŸéµč™•ē†č‰²å½©ēš„č‰²ē›ø容差" msgid "S" @@ -26955,8 +28742,16 @@ msgid "Colors are treated alpha premultiplied, or colors output straight (alpha msgstr "č‰²å½©ęœƒä»„ alpha 預乘ęؔ式ļ¼Œęˆ–ę˜Æ仄ē›“å‡ŗęØ”å¼ä¾†å‚™č™•č£” (alpha čØ­ē‚ŗ 1)" +msgid "Convert Colorspace" +msgstr "č½‰ę›č‰²å½©ē©ŗ間" + + +msgid "From" +msgstr "從" + + msgid "To" -msgstr "ēµ¦" +msgstr "到" msgid "X2" @@ -26987,6 +28782,10 @@ msgid "Whether to crop the size of the input image" msgstr "ę˜Æå¦č¦č£åˆ‡č¼ø兄影像ēš„大小" +msgid "Cryptomatte" +msgstr "Cryptomatte" + + msgid "Placeholder" msgstr "佔位子" @@ -27111,10 +28910,18 @@ msgid "Scale the Z input when not using a z-buffer, controls maximum blur design msgstr "ē•¶äø¦éžä½æē”Ø z ē·©č”ę™‚ēø®ę”¾ Z č¼øå…„ļ¼ŒęŽ§åˆ¶č‰²å½©ē™½ęˆ–č¼ø兄值 1 ęŒ‡å®šēš„ēš„ęœ€å¤§ęØ”ē³Š" +msgid "Denoise" +msgstr "去å™Ŗč؊" + + msgid "High quality" msgstr "高品č³Ŗ" +msgid "HDR" +msgstr "HDR" + + msgid "Despeckle" msgstr "åŽ»ę–‘é»ž" @@ -27151,6 +28958,11 @@ msgid "Distance to grow/shrink (number of iterations)" msgstr "增大/ēø®å°ēš„č·é›¢ (čæ­ä»£ę¬”ę•ø)" +msgctxt "Image" +msgid "Edge" +msgstr "邊ē·š" + + msgid "Edge to inset" msgstr "č¦å…§åµŒēš„é‚Šē·š" @@ -27167,6 +28979,10 @@ msgid "Distance Key" msgstr "č·é›¢éµ" +msgid "RGB color space" +msgstr "RGB č‰²å½©ē©ŗ間" + + msgid "Double Edge Mask" msgstr "雙邊ē·šé®ē½©" @@ -27275,6 +29091,10 @@ msgid "Glare Type" msgstr "č€€å…‰é”žåž‹" +msgid "Bloom" +msgstr "ę³›å…‰" + + msgid "Ghosts" msgstr "鬼影" @@ -27307,6 +29127,10 @@ msgid "Hue Correct" msgstr "č‰²ē›øę ”ę­£" +msgid "Hue/Saturation/Value" +msgstr "č‰²ē›ø/飽和åŗ¦/꘎åŗ¦" + + msgid "ID Mask" msgstr "ID 遮ē½©" @@ -27392,11 +29216,11 @@ msgstr "ē”Ø來偵ęø¬åƒē“ ę˜Æå¦å±¬ę–¼é‚Šē·šēš„å…§ę ø半徑" msgid "Edge Kernel Tolerance" -msgstr "邊ē·šå…§ę øåæå·®" +msgstr "邊ē·šå…§ę ø容差" msgid "Tolerance to pixels inside kernel which are treating as belonging to the same plane" -msgstr "內ę øēƄ圍內像ē“ č¢«č¦–ē‚ŗå±¬ę–¼ē›ø同平面ēš„åæå·®" +msgstr "內ę øēƄ圍內像ē“ č¢«č¦–ē‚ŗå±¬ę–¼ē›ø同平面ēš„容差" msgid "Feather Distance" @@ -27432,6 +29256,18 @@ msgid "Eccentricity" msgstr "離åæƒ" +msgid "Uniformity" +msgstr "äø€č‡“" + + +msgid "High Precision" +msgstr "高ē²¾åŗ¦" + + +msgid "Classic" +msgstr "ē¶“å…ø" + + msgid "Anisotropic" msgstr "各向ē•°ę€§" @@ -27444,6 +29280,11 @@ msgid "For positive distortion factor only: scale image such that black areas ar msgstr "僅適ē”Øę–¼ę­£ę‰­ę›²äæ‚ę•øļ¼šēø®ę”¾é‚£äŗ›é»‘č‰²å€åŸŸēœ‹äøč¦‹ēš„影像" +msgctxt "NodeTree" +msgid "Jitter" +msgstr "ęŠ–å‹•" + + msgid "Enable/disable jittering (faster, but also noisier)" msgstr "啟ē”Ø/停ē”Ø (č¼ƒåæ«ļ¼Œä½†ä¹Ÿč¼ƒå¤šå™Ŗč؊)" @@ -27476,6 +29317,10 @@ msgid "Blue Channel" msgstr "č—č‰²é€šé“" +msgid "Luminance" +msgstr "č¼åŗ¦" + + msgid "Luminance Channel" msgstr "č¼åŗ¦é€šé“" @@ -27492,6 +29337,16 @@ msgid "Map UV" msgstr "ę˜ å°„ UV" +msgctxt "NodeTree" +msgid "Nearest" +msgstr "꜀鄰čæ‘" + + +msgctxt "NodeTree" +msgid "Anisotropic" +msgstr "各向ē•°ę€§" + + msgid "Map Value" msgstr "ę˜ å°„å€¼" @@ -27552,6 +29407,11 @@ msgid "Perform math operations" msgstr "åŸ·č”Œę•øå­ø公式運ē®—" +msgctxt "NodeTree" +msgid "Operation" +msgstr "運ē®—" + + msgctxt "NodeTree" msgid "Add" msgstr "加" @@ -27673,6 +29533,16 @@ msgid "The fraction part of A" msgstr "A ēš„小ę•ø點éƒØ分( ꜃åœØ 0 ~ 1 之間å¾Ŗē’° )" +msgctxt "NodeTree" +msgid "Truncated Modulo" +msgstr "ęˆŖę–·ęØ”ę•ø" + + +msgctxt "NodeTree" +msgid "Floored Modulo" +msgstr "äø‹å–ęØ”ę•ø" + + msgctxt "NodeTree" msgid "Wrap" msgstr "å¾Ŗē’°" @@ -27742,14 +29612,29 @@ msgid "Arctan2" msgstr "åę­£åˆ‡2" +msgctxt "NodeTree" +msgid "Hyperbolic Sine" +msgstr "é›™ę›²ę­£å¼¦" + + msgid "sinh(A)" msgstr "sinh(A)" +msgctxt "NodeTree" +msgid "Hyperbolic Cosine" +msgstr "é›™ę›²é¤˜å¼¦" + + msgid "cosh(A)" msgstr "cosh(A)" +msgctxt "NodeTree" +msgid "Hyperbolic Tangent" +msgstr "é›™ę›²ę­£åˆ‡" + + msgid "tanh(A)" msgstr "tanh(A)" @@ -28006,42 +29891,18 @@ msgid "Translate" msgstr "ēæ»č­Æ" -msgid "Wrapping" -msgstr "åŒ…č¦†č™•ē†" - - -msgid "Wrap image on a specific axis" -msgstr "ę–¼ē‰¹å®šč»øåŒ…č¦†å½±åƒ" - - -msgid "No wrapping on X and Y" -msgstr "X 與 Y ē„”åŒ…č¦†" - - msgid "X Axis" msgstr "X č»ø" -msgid "Wrap all pixels on the X axis" -msgstr "ę–¼ X č»øåŒ…č¦†ę‰€ęœ‰åƒē“ " - - msgid "Y Axis" msgstr "Y č»ø" -msgid "Wrap all pixels on the Y axis" -msgstr "ę–¼ Y č»øåŒ…č¦†ę‰€ęœ‰åƒē“ " - - msgid "Both Axes" msgstr "兩č»ø" -msgid "Wrap all pixels on both axes" -msgstr "ę–¼å…©č»øåŒ…č¦†ę‰€ęœ‰åƒē“ " - - msgid "Vector Blur" msgstr "向量ęØ”ē³Š" @@ -28082,6 +29943,10 @@ msgid "Anti-Alias Z" msgstr "ꊗé‹ø齒 Z" +msgid "Function Node" +msgstr "函式ēƀ點" + + msgid "Boolean Math" msgstr "åøƒęž—公式č؈ē®—" @@ -28152,6 +30017,11 @@ msgid "Input value used for unconnected socket" msgstr "ē”Øę–¼ęœŖé€£ęŽ„ęŽ„å£ēš„č¼ø兄值" +msgctxt "NodeTree" +msgid "Modulo" +msgstr "ęØ”ę•ø" + + msgid "Accumulate Field" msgstr "ē“Æ加堓域" @@ -28212,6 +30082,10 @@ msgid "Only Faces" msgstr "僅面" +msgid "Poisson Disk" +msgstr "卜ē“¦ę¾ē¢Ÿ" + + msgid "Evaluate at Index" msgstr "åœØē“¢å¼•č™•ę±‚取值" @@ -28249,6 +30123,10 @@ msgid "Import OBJ" msgstr "åŒÆå…„ OBJ" +msgid "Index Switch" +msgstr "ē“¢å¼•åˆ‡ę›" + + msgid "Curve Handle Positions" msgstr "ę›²ē·šęŽ§åˆ¶ę£’位ē½®" @@ -28266,7 +30144,7 @@ msgstr "具名ēš„å±¬ę€§" msgid "Is Viewport" -msgstr "ę˜Æč¦–åœ–" +msgstr "ę˜Æč¦–ęŽ„å£" msgid "Merge by Distance" @@ -28281,6 +30159,10 @@ msgid "N-Gon" msgstr "多邊形" +msgid "Mesh to Density Grid" +msgstr "ē¶²ę ¼č½‰ē‚ŗåƆåŗ¦ę ¼ē·š" + + msgid "How the voxel size is specified" msgstr "體ē“ å¤§å°ēš„ęŒ‡å®šę–¹å¼" @@ -28289,10 +30171,18 @@ msgid "Object Info" msgstr "ē‰©é«”č³‡č؊" +msgid "Specify the approximate number of voxels along the diagonal" +msgstr "ęŒ‡å®šę²æč‘—å°č§’ē·šēš„é«”ē“ ę¦‚ē•„ę•ø量" + + msgid "Specify the voxel side length" msgstr "ęŒ‡å®šé«”ē“ é‚Šé•·" +msgid "Raycast" +msgstr "光ē·šęŠ•å°„" + + msgid "Realize Instances" msgstr "ē¾åƦ化åƦ例" @@ -28301,10 +30191,22 @@ msgid "Remove Named Attribute" msgstr "åˆŖé™¤å…·åå±¬ę€§" +msgid "Repeat Input" +msgstr "重複č¼øå…„" + + msgid "Rotate Instances" msgstr "ę—‹č½‰åƦ例" +msgid "Combine grids in an additive way" +msgstr "仄ē–ŠåŠ ę–¹å¼åˆä½µę ¼ē·š" + + +msgid "Combine grids in a subtractive way" +msgstr "仄ęø›åŽ»ę–¹å¼åˆä½µę ¼ē·š" + + msgid "Scale Instances" msgstr "ēø®ę”¾åƦ例" @@ -28317,6 +30219,14 @@ msgid "Z Up" msgstr "Z 向äøŠ" +msgid "Set Point Radius" +msgstr "čح定點半徑" + + +msgid "Sort Elements" +msgstr "ꎒåŗå…ƒē“ " + + msgid "Store Named Attribute" msgstr "儲存äø¦å‘½åå±¬ę€§" @@ -28337,6 +30247,10 @@ msgid "Conformal" msgstr "共形" +msgid "Generate a dense volume with a field that controls the density at each grid voxel based on its position" +msgstr "ē”Ÿęˆē·»åƆ容體ļ¼Œä»„及åÆ依位ē½®ęŽ§åˆ¶å„ē¶²ę ¼é«”ē“ åƆåŗ¦ēš„å “" + + msgid "Warning" msgstr "č­¦å‘Š" @@ -28394,6 +30308,10 @@ msgid "Ambient Occlusion" msgstr "å‘Ø遭遮꓋" +msgid "Only Local" +msgstr "僅局域" + + msgid "Attribute Name" msgstr "ē‰¹ę€§åēر" @@ -28418,6 +30336,18 @@ msgid "Beckmann" msgstr "č²å…‹ę›¼" +msgid "GGX" +msgstr "GGX" + + +msgid "Ashikhmin-Shirley" +msgstr "é˜æåø­å…‹ę•-é›Ŗ莉" + + +msgid "Multiscatter GGX" +msgstr "å¤šé‡ę•£å°„ GGX" + + msgid "Diffuse BSDF" msgstr "ę¼«å°„ BSDF" @@ -28434,10 +30364,26 @@ msgid "Reflection" msgstr "反射" +msgid "Scattering model" +msgstr "ę•£å°„ęؔ型" + + +msgid "Chiang" +msgstr "å§œę°ęؔ型" + + +msgid "Huang" +msgstr "é»ƒę°ęؔ型" + + msgid "Metallic BSDF" msgstr "金屬 BSDF" +msgid "Principled BSDF" +msgstr "原則化 BSDF" + + msgid "Subsurface Method" msgstr "ꬔč”Øé¢ę–¹ę³•" @@ -28446,10 +30392,22 @@ msgid "Method for rendering subsurface scattering" msgstr "ē¹Ŗč£½ę¬”č”Øé¢ę•£å°„ēš„ę–¹å¼" +msgid "Random Walk" +msgstr "éšØę©Ÿč”Œčµ°" + + msgid "Refraction BSDF" msgstr "ęŠ˜å°„ BSDF" +msgid "Ashikhmin" +msgstr "é˜æåø­å…‹ę•" + + +msgid "Microfiber" +msgstr "å¾®ēŗ–ē¶­" + + msgid "Toon BSDF" msgstr "協通 BSDF" @@ -28502,6 +30460,18 @@ msgid "Light Path" msgstr "ē‡ˆå…‰č·Æ徑" +msgid "Stepped Linear" +msgstr "ꭄ階ē·šę€§" + + +msgid "Smooth Step" +msgstr "å¹³ę»‘ę­„é€²" + + +msgid "Smoother Step" +msgstr "ę›“å¹³ę»‘ę­„é€²" + + msgid "Type of vector that the mapping transforms" msgstr "ę˜ å°„ēš„č½‰ę›ē”Ø向量锞型" @@ -28514,6 +30484,10 @@ msgid "Transform a texture by inverse mapping the texture coordinate" msgstr "č—‰åč½‰ē“‹ē†åŗ§ęØ™ę˜ å°„ä»„č½‰ę›ē“‹ē†" +msgid "Non-Uniform" +msgstr "非äø€č‡“" + + msgid "Mix Shader" msgstr "ę··åˆč‘—č‰²å™Ø" @@ -28587,7 +30561,7 @@ msgstr "位元ēµ„ē¢¼" msgid "Compile bytecode for shader script node" -msgstr "ē‚ŗč‘—č‰²å™ØęŒ‡ä»¤ēØæēƀ點ē·Øč­Æ位元ēµ„ē¢¼" +msgstr "ē‚ŗč‘—č‰²å™Ø命令ēØæēƀ點ē·Øč­Æ位元ēµ„ē¢¼" msgid "Bytecode Hash" @@ -28599,11 +30573,11 @@ msgstr "ē·Øč­Æ位元ēµ„ē¢¼ēš„é›œę¹Šļ¼Œä½œē‚ŗåæ«é€Ÿå“č³ŖęŖ¢é©—之ē”Ø" msgid "Shader script path" -msgstr "č‘—č‰²å™ØęŒ‡ä»¤ēØæč·Æ徑" +msgstr "č‘—č‰²å™Ø命令ēØæč·Æ徑" msgid "Script Source" -msgstr "ęŒ‡ä»¤ēØæ來ęŗ" +msgstr "命令ēØæ來ęŗ" msgid "Use internal text data-block" @@ -28615,7 +30589,7 @@ msgstr "ä½æē”Ø外éƒØ .osl ꈖ .oso ęŖ”ę”ˆ" msgid "Internal shader script to define the shader" -msgstr "內éƒØč‘—č‰²å™ØęŒ‡ä»¤ēØæ來定ē¾©č‘—č‰²å™Ø" +msgstr "內éƒØč‘—č‰²å™Ø命令ēØæ來定ē¾©č‘—č‰²å™Ø" msgid "Auto Update" @@ -28623,7 +30597,7 @@ msgstr "č‡Ŗå‹•ę›“ę–°" msgid "Automatically update the shader when the .osl file changes (external scripts only)" -msgstr "ē•¶ .osl ęŖ”ę”ˆę›“å‹•ę™‚ (僅限外éƒØęŒ‡ä»¤ēØæ) č‡Ŗå‹•ę›“ę–°č‘—č‰²å™Ø" +msgstr "ē•¶ .osl ęŖ”ę”ˆę›“å‹•ę™‚ (僅限外éƒØ命令ēØæ) č‡Ŗå‹•ę›“ę–°č‘—č‰²å™Ø" msgid "Subsurface Scattering" @@ -28706,6 +30680,10 @@ msgid "Texture interpolation" msgstr "ē“‹ē†ę’č£œ" +msgid "Smart" +msgstr "ę™ŗꅧ" + + msgid "Bicubic when magnifying, else bilinear (OSL only)" msgstr "ē•¶ę”¾å¤§ę™‚ęŽ”é›™ę¬”ę–¹ļ¼Œå…¶é¤˜å‰‡é›™ē·šę€§ (僅 OSL)" @@ -28730,24 +30708,61 @@ msgid "Gradient Texture" msgstr "ę¼ø層ē“‹ē†" +msgid "IES Texture" +msgstr "IES ē“‹ē†" + + +msgid "IES Text" +msgstr "IES ę–‡å­—" + + +msgid "Internal IES file" +msgstr "內éƒØ IES ęŖ”ę”ˆ" + + +msgctxt "Image" +msgid "Projection" +msgstr "ęŠ•å½±" + + msgid "Method to project 2D image on object with a 3D texture vector" msgstr "仄 3D ē“‹ē†å‘é‡ęŠ•å½± 2D 影像到ē‰©é«”äøŠēš„ę–¹ę³•" +msgctxt "Image" +msgid "Flat" +msgstr "ę‰å¹³" + + msgid "Image is projected flat using the X and Y coordinates of the texture vector" msgstr "影像ä½æē”Øē“‹ē†å‘量ēš„ X 與 Y åŗ§ęؙč»øä½œę‰å¹³ęŠ•å½±" +msgctxt "Image" +msgid "Box" +msgstr "ę–¹ē›’" + + msgid "Image is projected using different components for each side of the object space bounding box" msgstr "ē‚ŗē‰©é«”ē©ŗ間邊ē•Œę–¹å”Šēš„ęƏäø€å“ä½æē”ØäøåŒęˆä»½ä¾†ęŠ•å½±å‡ŗ影像" +msgctxt "Image" +msgid "Sphere" +msgstr "ēƒé«”" + + +msgctxt "Image" +msgid "Tube" +msgstr "ē®”面" + + msgid "Projection Blend" -msgstr "ęŠ•å½±ę··åˆ" +msgstr "ęŠ•å½±äŗ¤ę··" msgid "For box projection, amount of blend to use between sides" -msgstr "é‡å°ę–¹å”ŠęŠ•å½±ļ¼ŒåœØäø€å“與äø€å“之間ä½æē”Øēš„ę··åˆé‡" +msgstr "é‡å°ę–¹å”ŠęŠ•å½±ļ¼ŒåœØäø€å“與äø€å“之間ä½æē”Øēš„äŗ¤ę··é‡" msgid "Level of detail in the added turbulent noise" @@ -28755,7 +30770,7 @@ msgstr "ę·»åŠ ēš„ę“¾å‹•å™ŖčØŠč©³ē“°ē­‰ē“š" msgid "Normalize outputs to 0.0 to 1.0 range" -msgstr "將č¼øå‡ŗę­£č¦åŒ–åˆ° 0.0 到 1.0 ēš„ēƄ圍之間" +msgstr "將č¼øå‡ŗę­øäø€åŒ–到 0.0 到 1.0 ēš„ēƄ圍之間" msgid "Object to take point data from" @@ -28814,6 +30829,10 @@ msgid "Radius from the shaded sample to look for points within" msgstr "åœØčˆ‡č‘—č‰²ęØ£ęœ¬ä¹‹é–“ēš„åŠå¾‘å…§ęŸ„č©¢é»ž" +msgid "Coordinate system to calculate voxels in" +msgstr "ē”Øę–¼č؈ē®—é«”ē“ ēš„åŗ§ęؙē³»ēµ±" + + msgid "Vertex color layer" msgstr "é ‚é»žč‰²å½©åˆ†å±¤" @@ -28834,14 +30853,50 @@ msgid "Air" msgstr "ē©ŗę°£" +msgid "Altitude" +msgstr "ęµ·ę‹”" + + +msgid "Dust" +msgstr "ē°å”µ" + + +msgid "Ground Albedo" +msgstr "地面反ē…§ēŽ‡" + + msgid "Ground color that is subtly reflected in the sky" msgstr "隱ē“„反射到天ē©ŗäø­ēš„地ęæč‰²å½©" +msgid "Ozone" +msgstr "臭갧" + + +msgid "" +"Density of ozone layer.\n" +"ā€¢ 0 - No ozone.\n" +"ā€¢ 1 - Clear day atmosphere.\n" +"ā€¢ 2 - City like atmosphere" +msgstr "" +"č‡­ę°§å±¤ēš„åƆåŗ¦ć€‚\n" +"ā€¢ 0 - ē„”臭갧\n" +"ā€¢ 1 - ę™“å¤©å¤§ę°£ę°›åœ\n" +"ā€¢ 2 - 城åø‚é”žå¤§ę°£ę°›åœ" + + msgid "Sky Type" msgstr "天ē©ŗ锞型" +msgid "Nishita" +msgstr "č„æē”°" + + +msgid "Nishita 1993 improved" +msgstr "č„æē”° 1993 ę”¹č‰Æē‰ˆ" + + msgid "Sun Direction" msgstr "ę—„å…‰ę–¹å‘" @@ -28850,6 +30905,18 @@ msgid "Direction from where the sun is shining" msgstr "å¤Ŗé™½å¾žä½•č™•ē…§č€€ēš„ę–¹å‘" +msgid "Sun Disc" +msgstr "ę—„č¼Ŗ" + + +msgid "Sun Elevation" +msgstr "å¤Ŗé™½ä»°č§’" + + +msgid "Sun Intensity" +msgstr "å¤Ŗ陽強åŗ¦" + + msgid "Turbidity" msgstr "ęæåŗ¦" @@ -28862,14 +30929,38 @@ msgid "Voronoi Texture" msgstr "é¦®ę“›č«¾ä¼Šē“‹ē†" +msgid "Minkowski distance" +msgstr "閔åÆę–ÆåŸŗé–“č·" + + +msgid "Feature Output" +msgstr "ē‰¹å¾µč¼øå‡ŗ" + + +msgid "F1" +msgstr "F1" + + +msgid "F2" +msgstr "F2" + + msgid "Normalize output Distance to 0.0 to 1.0 range" -msgstr "將č¼øå‡ŗč·é›¢ę­£č¦åŒ–åˆ° 0.0 到 1.0 ēš„ēƄ圍之間" +msgstr "將č¼øå‡ŗč·é›¢ę­øäø€åŒ–到 0.0 到 1.0 ēš„ēƄ圍之間" msgid "Wave Texture" msgstr "ę³¢å½¢ē“‹ē†" +msgid "Bands Direction" +msgstr "ę¢åø¶ę–¹å‘" + + +msgid "Rings Direction" +msgstr "ē’°åø¶ę–¹å‘" + + msgid "Wave Profile" msgstr "ę³¢å½¢å‰–é¢" @@ -28922,23 +31013,106 @@ msgid "Perform vector math operation" msgstr "åŸ·č”Œå‘é‡åž‹ę•ø值ēš„ę•øå­ø運ē®—" +msgid "Entry-wise multiply" +msgstr "é€é …ä¹˜ę³•" + + +msgid "Entry-wise divide" +msgstr "é€é …é™¤ę³•" + + +msgctxt "NodeTree" +msgid "Project" +msgstr "ęŠ•å½±" + + +msgctxt "NodeTree" +msgid "Reflect" +msgstr "反射" + + msgid "Reflect A around the normal B. B doesn't need to be normalized." -msgstr "將 A ä¾ę³•ē·š B åå°„ć€‚B äøéœ€č¦å…ˆē¶“ę­£č¦åŒ–ć€‚" +msgstr "將 A ä¾ę³•ē·š B åå°„ć€‚B äøéœ€č¦å…ˆē¶“ę­øäø€åŒ–怂" + + +msgctxt "NodeTree" +msgid "Refract" +msgstr "ęŠ˜å°„" + + +msgctxt "NodeTree" +msgid "Faceforward" +msgstr "面向前" + + +msgctxt "NodeTree" +msgid "Distance" +msgstr "č·é›¢" + + +msgctxt "NodeTree" +msgid "Length" +msgstr "長åŗ¦" + + +msgctxt "NodeTree" +msgid "Scale" +msgstr "ēø®ę”¾" msgctxt "NodeTree" msgid "Normalize" -msgstr "ę­£č¦åŒ–" +msgstr "ę­øäø€åŒ–" msgid "Normalize A" -msgstr "將 A ę­£č¦åŒ–" +msgstr "將 A č¦äø€åŒ–" + + +msgid "Entry-wise absolute" +msgstr "逐項ēµ•å°å€¼" + + +msgid "Entry-wise minimum" +msgstr "é€é …ęœ€å°å€¼" + + +msgid "Entry-wise maximum" +msgstr "é€é …ęœ€å¤§å€¼" + + +msgid "Entry-wise floor" +msgstr "逐項äø‹å–ę•“ę•ø" + + +msgid "Entry-wise ceil" +msgstr "逐項äøŠå–ę•“ę•ø" msgid "The fraction part of A entry-wise" msgstr "A ēš„ęƏ個元ē“ å°ę•øéƒØ分" +msgid "Entry-wise wrap(A,B)" +msgstr "逐項å¾Ŗē’° (A,B)" + + +msgid "Entry-wise sin(A)" +msgstr "é€é …ę­£å¼¦ (A)" + + +msgid "Entry-wise cos(A)" +msgstr "逐項餘弦 (A)" + + +msgid "Entry-wise tan(A)" +msgstr "é€é …ę­£åˆ‡ (A)" + + +msgid "Vector Rotate" +msgstr "å‘é‡ę—‹č½‰" + + msgid "Z Axis" msgstr "Z č»ø" @@ -28972,13 +31146,17 @@ msgstr "仄單位長åŗ¦č½‰ę›äø€čˆ¬å‘量" msgid "Color Attribute" -msgstr "č‰²å½©å±¬ę€§" +msgstr "č‰²å½©ē‰¹ę€§" msgid "Volume Absorption" msgstr "體ē©åøꔶ" +msgid "Principled Volume" +msgstr "原則化容體" + + msgid "Volume Scatter" msgstr "體ē©ę•£å°„" @@ -29019,6 +31197,14 @@ msgid "Value to Normal" msgstr "å€¼č‡³ę³•ē·š" +msgid "Enum Item" +msgstr "Ꞛ舉項ē›®" + + +msgid "Node Inputs" +msgstr "ēƀ點č¼øå…„" + + msgid "Node Instance Hash" msgstr "ēƀ點åÆ¦ä¾‹é›œę¹Š" @@ -29119,6 +31305,10 @@ msgid "Tooltip" msgstr "ꏐē¤ŗꔆ" +msgid "Diamond" +msgstr "č±å½¢" + + msgid "Enable the socket" msgstr "啟ē”ØęŽ„å£" @@ -29155,6 +31345,10 @@ msgid "True if the socket is an output, otherwise input" msgstr "č‹„ęŽ„å£ę˜Æč¼øå‡ŗꙂē‚ŗēœŸļ¼Œå¦å‰‡ę˜Æč¼øå…„" +msgid "Unavailable" +msgstr "äøåÆē”Ø" + + msgid "Link Limit" msgstr "連ēµé™åˆ¶" @@ -29247,6 +31441,18 @@ msgid "Virtual socket of a node" msgstr "ēƀ點ēš„虛ꓬꎄ口" +msgid "Panel name" +msgstr "面ęæ名ēر" + + +msgid "Default Attribute" +msgstr "預čØ­ē‰¹ę€§" + + +msgid "Input/Output Type" +msgstr "č¼øå…„/č¼øå‡ŗ锞型" + + msgid "Boolean Node Socket Interface" msgstr "åøƒęž—ēÆ€é»žęŽ„å£ä»‹é¢" @@ -29299,6 +31505,26 @@ msgid "Active Node" msgstr "作ē”Øäø­ēƀ點" +msgid "Custom Path" +msgstr "č‡Ŗč؂č·Æ徑" + + +msgid "Data-Blocks" +msgstr "č³‡ę–™ēµ„唊" + + +msgid "Bakes" +msgstr "ēƒ˜ē„™" + + +msgid "Data-Block" +msgstr "č³‡ę–™ēµ„唊" + + +msgid "Panels" +msgstr "面ęæ" + + msgid "Object Base" msgstr "ē‰©é«”åŸŗē¤Ž" @@ -29315,13 +31541,17 @@ msgid "Object Constraints" msgstr "ē‰©é«”ē“„ęŸ" +msgid "Inherit" +msgstr "ē¹¼ę‰æ" + + msgctxt "Operator" msgid "Clear Useless Actions" msgstr "ęø…除ē„”ē”Ø動作" msgid "Export Keying Set to a Python script" -msgstr "å°‡éµč™•ē†é›†åŒÆå‡ŗē‚ŗ Python ęŒ‡ä»¤ēØæ" +msgstr "å°‡éµč™•ē†é›†åŒÆå‡ŗē‚ŗ Python 命令ēØæ" msgctxt "Operator" @@ -29486,12 +31716,12 @@ msgstr "äø»ęŽ§č‡ŗę©«ę¢" msgid "Copy the console contents for use in a script" -msgstr "č¤‡č£½äø»ęŽ§č‡ŗ內容仄ē”Øę–¼ęŒ‡ä»¤ēØæ" +msgstr "č¤‡č£½äø»ęŽ§č‡ŗ內容仄ē”Øę–¼å‘½ä»¤ēØæ" msgctxt "Operator" msgid "Copy to Clipboard (as Script)" -msgstr "č¤‡č£½č‡³å‰Ŗč²¼ē°æ (作ē‚ŗęŒ‡ä»¤ēØæ)" +msgstr "č¤‡č£½č‡³å‰Ŗč²¼ē°æ (作ē‚ŗ命令ēØæ)" msgctxt "Operator" @@ -29519,12 +31749,12 @@ msgstr "停ē”Øäø¦äæęŒč®Šę›" msgid "Normalize weights of all target bones" -msgstr "ę­£č¦åŒ–ę‰€ęœ‰ē›®ęؙéŖØéŖ¼ēš„ę¬Šé‡" +msgstr "ę­øäø€åŒ–ę‰€ęœ‰ē›®ęؙéŖØéŖ¼ēš„ę¬Šé‡" msgctxt "Operator" msgid "Normalize Weights" -msgstr "ę­£č¦åŒ–ę¬Šé‡" +msgstr "ę­øäø€åŒ–ę¬Šé‡" msgctxt "Operator" @@ -29570,22 +31800,31 @@ msgid "Export glTF 2.0" msgstr "åŒÆå‡ŗ glTF 2.0" +msgid "Turn off this extension" +msgstr "é—œé–‰é€™å€‹ę““å……å„—ä»¶" + + +msgctxt "Operator" +msgid "Disable extension" +msgstr "停ē”Øę““å……å„—ä»¶" + + msgid "Turn on this extension" -msgstr "開啟這個附加元件" +msgstr "é–‹å•Ÿé€™å€‹ę““å……å„—ä»¶" msgctxt "Operator" msgid "Enable Extension" -msgstr "啟ē”Ø附加元件" +msgstr "啟ē”Øę““å……å„—ä»¶" msgid "Download and install the extension" -msgstr "äø‹č¼‰äø¦å®‰č£é™„加元件" +msgstr "äø‹č¼‰äø¦å®‰č£ę““充儗件" msgctxt "Operator" msgid "Install Extension" -msgstr "å®‰č£é™„åŠ å…ƒä»¶" +msgstr "å®‰č£ę““å……å„—ä»¶" msgid "Install extensions from files into a locally managed repository" @@ -29597,8 +31836,22 @@ msgid "Install from Disk" msgstr "從ē£ē¢Ÿå®‰č£" +msgctxt "Operator" +msgid "Disable theme extension" +msgstr "停ē”Øäø»é”Œę““充儗件" + + +msgctxt "Operator" +msgid "Enable theme extension" +msgstr "啟ē”Øäø»é”Œę““充儗件" + + +msgid "Disable and uninstall the extension" +msgstr "停ē”Øäø¦č§£é™¤å®‰č£ę““充儗件" + + msgid "Upgrade all the extensions to their latest version for all the remote repositories" -msgstr "å¾žę‰€ęœ‰é ē«Æč»Ÿé«”åŗ«å°‡ę‰€ęœ‰é™„åŠ å…ƒä»¶ę›“ę–°åˆ°ęœ€ę–°ē‰ˆęœ¬" +msgstr "å¾žę‰€ęœ‰é ē«Æč»Ÿé«”åŗ«å°‡ę‰€ęœ‰ę““å……å„—ä»¶ę›“ę–°åˆ°ęœ€ę–°ē‰ˆęœ¬" msgid "Lock repositories - to test locking" @@ -29611,7 +31864,7 @@ msgstr "éŽ–å®šę‰€ęœ‰č»Ÿé«”åŗ«ļ¼ˆęø¬č©¦ē”Øļ¼‰" msgid "Refresh the list of extensions for all the remote repositories" -msgstr "é‡ę–°ę•“ē†ę‰€ęœ‰é ē«Æč»Ÿé«”åŗ«ēš„附加元件列č”Ø" +msgstr "é‡ę–°ę•“ē†ę‰€ęœ‰é ē«Æč»Ÿé«”åŗ«ēš„ę““充儗件列č”Ø" msgid "Unlock repositories - to test unlocking" @@ -29624,12 +31877,16 @@ msgstr "č§£éŽ–ę‰€ęœ‰č»Ÿé«”åŗ«ļ¼ˆęø¬č©¦ē”Øļ¼‰" msgid "Allow internet access. Blender may access configured online extension repositories. Installed third party add-ons may access the internet for their own functionality" -msgstr "允čر存取ē¶²éš›ē¶²č·Æ怂Blender čƒ½å¤ å­˜å–ę‰€čح定ēš„ē·šäøŠé™„åŠ å…ƒä»¶č»Ÿé«”åŗ«ć€‚å·²å®‰č£ēš„ē¬¬äø‰ę–¹é™„åŠ å…ƒä»¶čƒ½ä¾å®ƒå€‘č‡Ŗå·±ēš„åŠŸčƒ½éœ€č¦å­˜å–ē¶²éš›ē¶²č·Æ" +msgstr "允čر存取ē¶²éš›ē¶²č·Æ怂Blender čƒ½å¤ å­˜å–ę‰€čح定ēš„ē·šäøŠę““å……å„—ä»¶č»Ÿé«”åŗ«ć€‚å·²å®‰č£ēš„ē¬¬äø‰ę–¹é™„åŠ å…ƒä»¶čƒ½ä¾å®ƒå€‘č‡Ŗå·±ēš„åŠŸčƒ½éœ€č¦å­˜å–ē¶²éš›ē¶²č·Æ" + + +msgid "Open extensions preferences" +msgstr "é–‹å•Ÿę““å……å„—ä»¶åå„½čح定" msgctxt "Operator" msgid "Set Extension Tags" -msgstr "čح定附加元件ęؙē±¤" +msgstr "čØ­å®šę““å……å„—ä»¶ęؙē±¤" msgid "Add or remove a Fluid Preset" @@ -29641,6 +31898,11 @@ msgid "Add Fluid Preset" msgstr "ę·»åŠ ęµé«”é čØ­ęŖ”" +msgctxt "Operator" +msgid "Flip Colors" +msgstr "ēæ»č½‰č‰²å½©" + + msgid "Edit image in an external application" msgstr "仄外éƒØꇉē”Øē؋式ē·Øč¼Æ影像" @@ -29719,6 +31981,11 @@ msgid "Collapse and Hide Unused Sockets" msgstr "ꔶ闔äø¦éš±č—ęœŖä½æē”Øēš„ꎄ口" +msgctxt "Operator" +msgid "New Item" +msgstr "ę–°å¢žé …ē›®" + + msgid "Add or remove a Node Color Preset" msgstr "ę·»åŠ ęˆ–ē§»é™¤ēÆ€é»žč‰²å½©é čØ­ęŖ”" @@ -29937,7 +32204,7 @@ msgstr "ä½æē”ØęŒ‰éµēµ„ę…‹" msgid "Export key configuration to a Python script" -msgstr "å°‡ęŒ‰éµēµ„ę…‹åŒÆå‡ŗē‚ŗ Python ęŒ‡ä»¤ēØæ" +msgstr "å°‡ęŒ‰éµēµ„ę…‹åŒÆå‡ŗē‚ŗ Python 命令ēØæ" msgctxt "Operator" @@ -29946,7 +32213,7 @@ msgstr "åŒÆå‡ŗęŒ‰éµēµ„ę…‹..." msgid "Import key configuration from a Python script" -msgstr "從 Python ęŒ‡ä»¤ēØæåŒÆå…„ęŒ‰éµēµ„ę…‹" +msgstr "從 Python 命令ēØæåŒÆå…„ęŒ‰éµēµ„ę…‹" msgctxt "Operator" @@ -29969,49 +32236,49 @@ msgstr "ęø¬č©¦ęŒ‰éµēµ„ę…‹ę˜Æå¦ęœ‰č”ēŖ" msgid "Add key map item" -msgstr "ę·»åŠ ęŒ‰éµę˜ å°„é …ē›®" +msgstr "ę·»åŠ ęŒ‰éµå°ę‡‰é …ē›®" msgctxt "Operator" msgid "Add Key Map Item" -msgstr "ę·»åŠ ęŒ‰éµę˜ å°„é …ē›®" +msgstr "ę·»åŠ ęŒ‰éµå°ę‡‰é …ē›®" msgid "Remove key map item" -msgstr "ē§»é™¤ęŒ‰éµę˜ å°„é …ē›®" +msgstr "ē§»é™¤ęŒ‰éµå°ę‡‰é …ē›®" msgctxt "Operator" msgid "Remove Key Map Item" -msgstr "ē§»é™¤ęŒ‰éµę˜ å°„é …ē›®" +msgstr "ē§»é™¤ęŒ‰éµå°ę‡‰é …ē›®" msgid "Restore key map item" -msgstr "é‚„åŽŸęŒ‰éµę˜ å°„é …ē›®" +msgstr "é‚„åŽŸęŒ‰éµå°ę‡‰é …ē›®" msgctxt "Operator" msgid "Restore Key Map Item" -msgstr "é‚„åŽŸęŒ‰éµę˜ å°„é …ē›®" +msgstr "é‚„åŽŸęŒ‰éµå°ę‡‰é …ē›®" msgid "Restore key map(s)" -msgstr "é‚„åŽŸęŒ‰éµę˜ å°„" +msgstr "é‚„åŽŸęŒ‰éµå°ę‡‰" msgctxt "Operator" msgid "Restore Key Map(s)" -msgstr "é‚„åŽŸęŒ‰éµę˜ å°„" +msgstr "é‚„åŽŸęŒ‰éµå°ę‡‰" msgctxt "Operator" msgid "Add Python Script Directory" -msgstr "ę–°å¢ž Python ęŒ‡ä»¤ēØæē›®éŒ„" +msgstr "ę–°å¢ž Python 命令ēØæē›®éŒ„" msgctxt "Operator" msgid "Remove Python Script Directory" -msgstr "ē§»é™¤ Python ęŒ‡ä»¤ēØæē›®éŒ„" +msgstr "ē§»é™¤ Python 命令ēØæē›®éŒ„" msgid "Copy Studio Light settings to the Studio Light editor" @@ -30181,10 +32448,20 @@ msgid "Deinterlace Movies" msgstr "å½±ē‰‡åŽ»äŗ¤éŒÆ" +msgctxt "Operator" +msgid "Add Fades" +msgstr "ę–°å¢žę·”åŒ–" + + msgid "Add or remove a Text Editor Preset" msgstr "ę·»åŠ ęˆ–ē§»é™¤ę–‡å­—ē·Øč¼Æå™Ø預čØ­ęŖ”" +msgctxt "Operator" +msgid "Move Entry" +msgstr "ē§»å‹•ę¢ē›®" + + msgid "Wrapper operator which will invoke given op after setting its module_name" msgstr "åŒ…č¦†å™Øåž‹ę“ä½œå™Øļ¼ŒåœØčح定其ęØ”ēµ„名ēØ±å¾Œęœƒå–ščµ·ęŒ‡å®šę“ä½œå™Ø" @@ -30406,7 +32683,7 @@ msgstr "ęŖ¢č¦–ę‰‹å†Š" msgid "List all the operators in a text-block, useful for scripting" -msgstr "å°‡ę‰€ęœ‰ę“ä½œå™Ø列å‡ŗä¾†ę”¾åœØę–‡å­—ēµ„唊äø­ļ¼ŒåÆ«ęŒ‡ä»¤ēØæꙂ꜃꜉ē”Ø" +msgstr "å°‡ę‰€ęœ‰ę“ä½œå™Ø列å‡ŗä¾†ę”¾åœØę–‡å­—ēµ„唊äø­ļ¼Œåƫ命令ēØæꙂ꜃꜉ē”Ø" msgctxt "Operator" @@ -30437,6 +32714,11 @@ msgid "Open a path in a file browser" msgstr "åœØęŖ”ę”ˆē€č¦½å™Øäø­é–‹å•Ÿč·Æ徑" +msgctxt "Operator" +msgid "Batch-Clear Previews" +msgstr "ę‰¹ę¬”ęø…é™¤é č¦½" + + msgctxt "Operator" msgid "Batch-Generate Previews" msgstr "ę‰¹ę¬”ē”Ÿęˆé č¦½" @@ -30470,10 +32752,28 @@ msgid "Save System Info" msgstr "儲存ē³»ēµ±č³‡č؊" +msgctxt "Operator" +msgid "Toolbar" +msgstr "巄具列" + + +msgctxt "Operator" +msgid "Toolbar Prompt" +msgstr "å·„å…·åˆ—ęē¤ŗ" + + +msgid "Runtime options" +msgstr "åŸ·č”Œę™‚ęœŸéø項" + + msgid "Invoke" msgstr "å–ščµ·" +msgid "Repeat Call" +msgstr "é‡č¤‡å‘¼å«" + + msgctxt "Operator" msgid "Bake Keyframes" msgstr "ēƒ˜ē„™é—œéµå¹€" @@ -30543,6 +32843,10 @@ msgid "Remove all selected keyframes" msgstr "ē§»é™¤ę‰€ęœ‰éø取ēš„關鍵幀" +msgid "Confirm" +msgstr "ē¢ŗčŖ" + + msgctxt "Operator" msgid "Duplicate Keyframes" msgstr "å»ŗē«‹é—œéµå¹€č¤‡ęœ¬" @@ -30732,6 +33036,10 @@ msgid "Paste Keyframes" msgstr "č²¼äøŠéµå¹€" +msgid "Flipped" +msgstr "ēæ»č½‰" + + msgid "Method of merging pasted keys and existing" msgstr "č²¼äøŠēš„éµčˆ‡ę—¢ęœ‰éµēš„åˆä½µę–¹ę³•" @@ -30850,6 +33158,10 @@ msgid "Axis Range" msgstr "č»øēƄ圍" +msgid "Set" +msgstr "čح定" + + msgid "X Max" msgstr "X ęœ€å¤§" @@ -30982,6 +33294,10 @@ msgid "Unlink this action from the active action slot (and/or exit Tweak Mode)" msgstr "從作ē”Øäø­å‹•ä½œę§½å–ę¶ˆę­¤å‹•ä½œēš„連ēµ (äø¦é›¢é–‹čŖæę•“ęؔ式)" +msgid "Force Delete" +msgstr "強制åˆŖ除" + + msgctxt "Operator" msgid "Frame All" msgstr "聚ē„¦č¦–ēŖ—äø­ę‰€ęœ‰ē‰©ä»¶" @@ -31045,6 +33361,10 @@ msgid "Select Children Only" msgstr "僅éø取子代" +msgid "Extend Range" +msgstr "ę““å±•ēƄ圍" + + msgctxt "Operator" msgid "Collapse Channels" msgstr "ꔶ闔通道" @@ -31407,6 +33727,10 @@ msgid "Set Start Frame" msgstr "čØ­å®ščµ·å§‹å¹€" +msgid "Isolate" +msgstr "隔離" + + msgctxt "Operator" msgid "Align Bones" msgstr "對齊éŖØéŖ¼" @@ -31557,6 +33881,10 @@ msgid "Flips (and corrects) the axis suffixes of the names of selected bones" msgstr "ēæ»č½‰ (äø¦ē³¾ę­£) ꉀéøéŖØéŖ¼ēš„名ēر其č»ø後ē¶“" +msgid "Strip Numbers" +msgstr "去除ē·Ø號" + + msgctxt "Operator" msgid "Hide Selected" msgstr "éš±č—ę‰€éø" @@ -31651,6 +33979,10 @@ msgid "Select Linked All" msgstr "éøå–ę‰€ęœ‰é€£ēµé …" +msgid "All Forks" +msgstr "å…ØéƒØ分ę”Æ" + + msgctxt "Operator" msgid "Select Mirror" msgstr "éø取鏔像" @@ -31958,7 +34290,7 @@ msgstr "ē“ ęē·Øē›®ēš„č·Æ徑" msgid "Enable Multi-View" -msgstr "啟ē”Øå¤šé‡č¦–åœ–" +msgstr "啟ē”Ø多重ęŖ¢č¦–" msgid "Catalog to use for the new asset" @@ -32236,7 +34568,7 @@ msgstr "čح定 2D ęøøęؙ位ē½®" msgid "Cursor location in normalized clip coordinates" -msgstr "ęøøęؙ位ē½®åœØę­£č¦åŒ–ēš„å‰Ŗč¼Æåŗ§ęؙē³»äø­" +msgstr "ęøøęؙ位ē½®åœØę­øäø€åŒ–ēš„å‰Ŗč¼Æåŗ§ęؙē³»äø­" msgctxt "Operator" @@ -32367,7 +34699,7 @@ msgstr "ē½®äø­ē›®å‰ę”†å¹€" msgid "Scroll view so current frame would be centered" -msgstr "ę²å‹•č¦–åœ–ä¾†č®“ē›®å‰ę”†å¹€ē½®äø­" +msgstr "ę²å‹•ęŖ¢č¦–ä¾†č®“ē›®å‰ę”†å¹€ē½®äø­" msgctxt "Operator" @@ -32497,6 +34829,11 @@ msgid "Show tracking and solving tools" msgstr "é”Æē¤ŗčæ½č¹¤čˆ‡č§£ē®—å·„具" +msgctxt "MovieClip" +msgid "Mask" +msgstr "遮ē½©" + + msgid "Show mask editing tools" msgstr "é”Æē¤ŗ遮ē½©ē·Øč¼Æå·„å…·" @@ -32560,7 +34897,7 @@ msgstr "éø取čæ½č¹¤ē”Øęؙčؘ" msgid "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds" -msgstr "ę­£č¦åŒ–åŗ§ęؙäø­ēš„ę»‘é¼ ä½ē½®ļ¼Œ0.0 č‡³ 1.0 ę˜ÆåœØ影像ēš„é‚Šē•Œä¹‹å…§" +msgstr "ę­øäø€åŒ–åŗ§ęؙäø­ēš„ę»‘é¼ ä½ē½®ļ¼Œ0.0 č‡³ 1.0 ę˜ÆåœØ影像ēš„é‚Šē•Œä¹‹å…§" msgid "Change selection of all tracking markers" @@ -32809,7 +35146,7 @@ msgstr "ęŖ¢č¦–含ęؙčؘēš„ę•“個影像" msgid "Fit View" -msgstr "é©ę‡‰č¦–åœ–" +msgstr "適ꇉęŖ¢č¦–" msgid "Fit frame to the viewport" @@ -32818,11 +35155,11 @@ msgstr "č®“ę”†å¹€é©ę‡‰č¦–ęŽ„å£" msgctxt "Operator" msgid "Center View to Cursor" -msgstr "å°‡č¦–åœ–ē½®äø­č‡³ęøøęؙ" +msgstr "將ęŖ¢č¦–ē½®äø­č‡³ęøøęؙ" msgid "Center the view so that the cursor is in the middle of the view" -msgstr "ē½®äø­č¦–åœ–ä¾†č®“ä½æęøøęØ™ä½ę–¼č¦–åœ–äø­å¤®" +msgstr "ē½®äø­ęŖ¢č¦–ä¾†č®“ä½æęøøęØ™ä½ę–¼ęŖ¢č¦–äø­å¤®" msgctxt "Operator" @@ -32831,16 +35168,16 @@ msgstr "NDOF ę–é”/čŖæē„¦" msgid "Use a 3D mouse device to pan/zoom the view" -msgstr "ä½æē”Ø 3D ę»‘é¼ č£ē½®ä»„å°č¦–åœ–ę–é”ęˆ–čŖæꕓ遠čæ‘變ē„¦" +msgstr "ä½æē”Ø 3D ę»‘é¼ č£ē½®ä»„對ęŖ¢č¦–ę–é”ļ¼Œęˆ–čŖæꕓ遠čæ‘變ē„¦" msgctxt "Operator" msgid "Pan View" -msgstr "ę–é”č¦–åœ–" +msgstr "ę–é”ęŖ¢č¦–" msgid "Pan the view" -msgstr "ä»„ę–é”č™•ē†č¦–圖" +msgstr "ä»„ę–é”č™•ē†ęŖ¢č¦–" msgid "View all selected elements" @@ -32849,11 +35186,11 @@ msgstr "ęŖ¢č¦–ę‰€ęœ‰éø取ēš„å…ƒē“ " msgctxt "Operator" msgid "View Zoom" -msgstr "č¦–åœ–čŖæē„¦" +msgstr "ęŖ¢č¦–čŖæē„¦" msgid "Zoom in/out the view" -msgstr "ꋉčæ‘/ę‹‰é č¦–åœ–" +msgstr "ꋉčæ‘/ꋉ遠ęŖ¢č¦–" msgid "Zoom factor, values higher than 1.0 zoom in, lower values zoom out" @@ -32866,7 +35203,7 @@ msgstr "ꋉčæ‘" msgid "Zoom in the view" -msgstr "ꋉčæ‘č¦–åœ–" +msgstr "ꋉčæ‘ęŖ¢č¦–" msgid "Cursor location in screen coordinates" @@ -32879,12 +35216,12 @@ msgstr "ꋉ遠" msgid "Zoom out the view" -msgstr "ę‹‰é č¦–åœ–" +msgstr "ꋉ遠ęŖ¢č¦–" msgctxt "Operator" msgid "View Zoom Ratio" -msgstr "č¦–åœ–é čæ‘ęƔ" +msgstr "ęŖ¢č¦–遠čæ‘ęƔ" msgid "Set the zoom ratio (based on clip size)" @@ -33048,6 +35385,11 @@ msgid "Insert text at cursor position" msgstr "åœØęøøęؙ位ē½®ę’å…„ę–‡å­—" +msgctxt "Python console" +msgid "Language" +msgstr "čŖžč؀" + + msgctxt "Operator" msgid "Move Cursor" msgstr "ē§»å‹•ęøøęؙ" @@ -33219,7 +35561,7 @@ msgstr "ē‚ŗ怌ꋉä¼øč‡³ē“„ęŸć€é‡čØ­éŖØéŖ¼ēš„原始長åŗ¦" msgid "Align the new object to the view" -msgstr "å°‡ę–°å¢žēš„ē‰©é«”å°é½Šč¦–åœ–" +msgstr "å°‡ę–°å¢žēš„ē‰©é«”對齊ęŖ¢č¦–" msgid "Enter Edit Mode" @@ -33274,6 +35616,14 @@ msgid "(De)select all control points" msgstr "(å–ę¶ˆ)å…ØéøęŽ§åˆ¶é»ž" +msgid "Amount Back" +msgstr "čƒŒé¢ę•ø量" + + +msgid "Amount Front" +msgstr "前面ę•ø量" + + msgid "Deselect linked control points rather than selecting them" msgstr "å–ę¶ˆéø取已連ēµēš„ęŽ§åˆ¶é»žļ¼Œč€Œäøę˜Æéø取它們" @@ -33283,6 +35633,10 @@ msgid "Select Random" msgstr "éø取éšØę©Ÿ" +msgid "Probability" +msgstr "ę©ŸēŽ‡" + + msgctxt "Operator" msgid "Snap Curves to Surface" msgstr "ę›²ē·šåøé™„č‡³č”Ø面" @@ -33400,6 +35754,10 @@ msgid "Trackball" msgstr "čæ½č¹¤ēƒ" +msgid "Push/Pull" +msgstr "ęŽØ/ꋉ" + + msgid "Edge Slide" msgstr "邊ē·šę»‘å‹•" @@ -33442,6 +35800,11 @@ msgid "Match texture space to object's bounding box" msgstr "讓ē“‹ē†ē©ŗ間ē¬¦åˆē‰©é«”ēš„é‚Šē•Œę–¹å”Š" +msgctxt "Operator" +msgid "Recalculate Handles" +msgstr "重ꖰč؈ē®—ęŽ§åˆ¶ę”æ" + + msgid "Recalculate the direction of selected handles" msgstr "重ꖰč؈ē®—ꉀéøęŽ§åˆ¶ę”æēš„ę–¹å‘" @@ -33516,6 +35879,10 @@ msgid "Checker Deselect" msgstr "ę£‹ē›¤äŗ¤éŒÆå¼å–ę¶ˆéø取" +msgid "Deselected" +msgstr "å–ę¶ˆéø取項" + + msgctxt "Operator" msgid "Select Previous" msgstr "éø取äøŠäø€é …" @@ -33610,15 +35977,15 @@ msgstr "čæ“ꗋ" msgid "Extrude selected boundary row around pivot point and current view axis" -msgstr "ē’°ē¹žę؞ē“é»žčˆ‡ē›®å‰č¦–圖č»øꓠå‡ŗꉀéø邊ē•Œåˆ—" +msgstr "ē’°ē¹žę؞ē“é»žčˆ‡ē›®å‰ęŖ¢č¦–č»øꓠå‡ŗꉀéø邊ē•Œåˆ—" msgid "Axis in global view space" -msgstr "å…ØåŸŸč¦–åœ–ē©ŗ間äø­ēš„č»ø" +msgstr "å…Ø域ęŖ¢č¦–ē©ŗ間äø­ēš„č»ø" msgid "Center in global view space" -msgstr "å…ØåŸŸč¦–åœ–ē©ŗ間äø­ēš„äø­åæƒ" +msgstr "å…Ø域ęŖ¢č¦–ē©ŗ間äø­ēš„äø­åæƒ" msgctxt "Operator" @@ -33655,6 +36022,10 @@ msgid "Location to add new vertex at" msgstr "ę–°å¢žé ‚é»žēš„位ē½®ę–¼ä½•č™•" +msgid "Input Filepath" +msgstr "č¼øå…„ęŖ”ę”ˆč·Æ徑" + + msgctxt "Operator" msgid "Dynamic Paint Bake" msgstr "å‹•ę…‹ē¹Ŗč£½ēƒ˜ē„™" @@ -33841,6 +36212,10 @@ msgid "Convert rotations to euler ZYX" msgstr "č½‰ę›ę—‹č½‰č‡³å°¤ę‹‰ ZYX" +msgid "FBX All" +msgstr "FBX å…ØéƒØ" + + msgid "Null" msgstr "ē©ŗē„”" @@ -33918,11 +36293,15 @@ msgstr "作ē”Øäø­å “ę™Æ集ē›’" msgid "Export vertex color attributes" -msgstr "åŒÆå‡ŗé ‚é»žč‰²å½©å±¬ę€§" +msgstr "åŒÆå‡ŗé ‚é»žč‰²å½©ē‰¹ę€§" msgid "Do not export color attributes" -msgstr "äøč¦åŒÆå‡ŗč‰²å½©å±¬ę€§" +msgstr "äøč¦åŒÆå‡ŗč‰²å½©ē‰¹ę€§" + + +msgid "sRGB" +msgstr "sRGB" msgid "Scale all data (Some importers do not support scaled armatures!)" @@ -33933,6 +36312,10 @@ msgid "Smoothing" msgstr "å¹³ę»‘č™•ē†" +msgid "Normals Only" +msgstr "åƒ…ę³•ē·š" + + msgid "Write face smoothing" msgstr "åÆ«å…„é¢å¹³ę»‘č™•ē†" @@ -34049,18 +36432,50 @@ msgid "Convert all faces to triangles" msgstr "å°‡ę‰€ęœ‰ēš„é¢č½‰ę›ē‚ŗäø‰č§’å½¢" +msgid "Visible Objects" +msgstr "åÆ見ē‰©é«”" + + msgid "GPU Instances" msgstr "GPU åƦ例" +msgid "Create WebP" +msgstr "å»ŗē«‹ WebP" + + +msgid "WebP Format" +msgstr "WebP ę ¼å¼" + + msgid "Lighting Mode" msgstr "ē…§ę˜Žęؔ式" +msgid "Unitless" +msgstr "ē„”單位" + + +msgid "Raw (Deprecated)" +msgstr "Rawļ¼ˆå·²ę£„ē”Øļ¼‰" + + msgid "Keep Original" msgstr "äæē•™åŽŸå§‹" +msgid "Slide" +msgstr "ę»‘å‹•" + + +msgid "Shared Accessors" +msgstr "共äŗ«å­˜å–å™Ø" + + +msgid "Tangents" +msgstr "切ē·š" + + msgid "General" msgstr "通ē”Ø" @@ -34073,6 +36488,10 @@ msgid "Include active collection and nested collections" msgstr "åŒ…ę‹¬ę“»å‹•é›†ē›’和嵌兄集ē›’" +msgid "Renderable Objects" +msgstr "åÆē®—ē¹Ŗē‰©é«”" + + msgid "Export selected objects only" msgstr "僅åŒÆå‡ŗéø取ēš„ē‰©é«”" @@ -34161,6 +36580,10 @@ msgid "Create a new file of this type" msgstr "å»ŗē«‹é€™å€‹é”žåž‹ēš„ę–°ęŖ”ę”ˆ" +msgid "Find File" +msgstr "å°‹ę‰¾ęŖ”ę”ˆ" + + msgid "Show" msgstr "é”Æē¤ŗ" @@ -34169,6 +36592,14 @@ msgid "Play" msgstr "ę’­ę”¾" +msgid "Browse" +msgstr "ē€č¦½" + + +msgid "Print" +msgstr "列印" + + msgid "Install" msgstr "å®‰č£" @@ -34784,9 +37215,14 @@ msgid "Generic" msgstr "通ē”Ø" +msgctxt "Operator" +msgid "Remove Attribute" +msgstr "ē§»é™¤ē‰¹ę€§" + + msgctxt "Operator" msgid "Add Color Attribute" -msgstr "ę–°å¢žč‰²å½©å±¬ę€§" +msgstr "ę–°å¢žč‰²å½©ē‰¹ę€§" msgid "Default fill color" @@ -34795,35 +37231,58 @@ msgstr "預čØ­å”«å…„č‰²å½©" msgctxt "Operator" msgid "Convert Color Attribute" -msgstr "č½‰ę›č‰²å½©å±¬ę€§" +msgstr "č½‰ę›č‰²å½©ē‰¹ę€§" msgid "Change how the color attribute is stored" -msgstr "č®Šę›“č‰²å½©å±¬ę€§ę˜Æ如何儲存ēš„" +msgstr "č®Šę›“č‰²å½©ē‰¹ę€§ę˜Æ如何儲存ēš„" msgctxt "Operator" msgid "Duplicate Color Attribute" -msgstr "å»ŗē«‹č‰²å½©å±¬ę€§č¤‡ęœ¬" +msgstr "å»ŗē«‹č‰²å½©ē‰¹ę€§č¤‡ęœ¬" msgid "Duplicate color attribute" -msgstr "å»ŗē«‹č‰²å½©å±¬ę€§č¤‡ęœ¬" +msgstr "å»ŗē«‹č‰²å½©ē‰¹ę€§č¤‡ęœ¬" msgctxt "Operator" msgid "Remove Color Attribute" -msgstr "ē§»é™¤č‰²å½©å±¬ę€§" +msgstr "ē§»é™¤č‰²å½©ē‰¹ę€§" msgid "Name of color attribute" -msgstr "č‰²å½©å±¬ę€§åēر" +msgstr "č‰²å½©ē‰¹ę€§åēر" + + +msgctxt "Operator" +msgid "Gizmo Select" +msgstr "꓍ēø±å™Øéø取" + + +msgctxt "Operator" +msgid "Gizmo Tweak" +msgstr "꓍ēø±å™ØčŖæę ”" + + +msgctxt "Operator" +msgid "Annotation Draw" +msgstr "čØ»č§£ęē¹Ŗ" msgid "Make annotations on the active data" msgstr "ē‚ŗ作ē”Øäø­č³‡ę–™å»ŗē«‹čØ»čؘ" +msgid "Arrow" +msgstr "ē®­é ­" + + +msgid "Segment" +msgstr "åˆ†ę®µ" + + msgid "Way to interpret mouse movements" msgstr "č§£č­Æę»‘é¼ ē§»å‹•ēš„ę–¹ę³•" @@ -34878,6 +37337,11 @@ msgid "Unlink active Annotation data-block" msgstr "č§£é™¤é€£ēµä½œē”Øäø­ēš„čØ»čØ˜č³‡ę–™ēµ„唊" +msgctxt "Operator" +msgid "Breakdown" +msgstr "åˆ†č§£" + + msgctxt "Operator" msgid "Click-Insert Keyframes" msgstr "點꓊-ę’å…„éµå¹€" @@ -34977,6 +37441,11 @@ msgid "Place the cursor on the midpoint of selected keyframes" msgstr "將ęøøęØ™ę”¾ē½®č‡³ę‰€éø鍵幀ēš„äø­é»ž" +msgctxt "Operator" +msgid "Gaussian Smooth" +msgstr "高ę–Æå¹³ę»‘" + + msgid "Filter Width" msgstr "過ęæ¾åƬåŗ¦" @@ -35016,6 +37485,11 @@ msgid "Next Keyframe" msgstr "äø‹äø€éµå¹€" +msgctxt "Operator" +msgid "Match Slope" +msgstr "配對坔åŗ¦" + + msgid "Flip values of selected keyframes using the cursor value (Y/Horizontal component) as the mirror line" msgstr "將ęøøęؙ值 (Y/ę°“å¹³éƒØ份) 作ē‚ŗ鏔像ē·šēæ»č½‰ę‰€éø鍵幀ēš„值" @@ -35024,10 +37498,22 @@ msgid "Flip times of selected keyframes, effectively reversing the order they ap msgstr "ēæ»č½‰ę‰€éøę”†å¹€ēš„Ꙃ間ļ¼ŒåÆęœ‰ę•ˆåč½‰å®ƒå€‘å‡ŗē¾ēš„é †åŗ" +msgid "From Left" +msgstr "從左偓" + + +msgid "From Right" +msgstr "從右偓" + + msgid "Are handles tested individually against the selection criteria" msgstr "ęŽ§åˆ¶ę”æę˜Æå¦å€‹åˆ„é‡å°ę‰€éøę¢ä»¶ęø¬č©¦" +msgid "Keep" +msgstr "ē¶­ęŒ" + + msgctxt "Operator" msgid "Smooth Keys" msgstr "å¹³ę»‘éµ" @@ -35082,6 +37568,10 @@ msgid "Reset viewable area to show selected keyframe range" msgstr "重čØ­åÆč¦–å€åŸŸä»„é”Æē¤ŗꉀéø鍵幀ēš„ēƄ圍" +msgid "No Reproject" +msgstr "äøé‡ęŠ•å½±" + + msgctxt "Operator" msgid "Grease Pencil Draw" msgstr "蠟ē­†ē¹Ŗč£½" @@ -35113,6 +37603,10 @@ msgid "Erase" msgstr "ꓦ除" +msgid "Rounded" +msgstr "圓形" + + msgid "Flat" msgstr "ę‰å¹³" @@ -35131,6 +37625,11 @@ msgid "Dissolve" msgstr "ę¶ˆčž" +msgctxt "GPencil" +msgid "Type" +msgstr "锞型" + + msgctxt "Operator" msgid "Grease Pencil Erase Lasso" msgstr "Grease Pencil ę©”ēš®ę“¦å„—ē“¢" @@ -35146,11 +37645,85 @@ msgid "Grease Pencil Interpolation" msgstr "蠟ē­†ę’č£œ" +msgctxt "Operator" +msgid "Interpolate Sequence" +msgstr "ę’č£œåŗę®µ" + + +msgctxt "GPencil" +msgid "Back" +msgstr "後" + + +msgctxt "GPencil" +msgid "Easing" +msgstr "ē·©č®Š" + + +msgctxt "GPencil" +msgid "Linear" +msgstr "ē·šę€§" + + +msgctxt "GPencil" +msgid "Custom" +msgstr "č‡Ŗč؂" + + +msgctxt "GPencil" +msgid "Sinusoidal" +msgstr "ę­£å¼¦ę›²ē·š" + + +msgctxt "GPencil" +msgid "Quadratic" +msgstr "äŗŒę¬”型" + + +msgctxt "GPencil" +msgid "Cubic" +msgstr "äø‰ę¬”型" + + +msgctxt "GPencil" +msgid "Quartic" +msgstr "å››ę¬”åž‹" + + +msgctxt "GPencil" +msgid "Exponential" +msgstr "ꌇę•ø型" + + +msgctxt "GPencil" +msgid "Circular" +msgstr "圓型" + + +msgctxt "GPencil" +msgid "Bounce" +msgstr "å½ˆč·³" + + +msgctxt "GPencil" +msgid "Elastic" +msgstr "å½ˆę€§" + + +msgid "Join" +msgstr "ēµåˆ" + + msgctxt "Operator" msgid "Add New Layer" msgstr "ę·»åŠ ę–°å±¤" +msgctxt "Operator" +msgid "Hide Layer(s)" +msgstr "éš±č—åˆ†å±¤" + + msgid "Hide unselected rather than selected layers" msgstr "éš±č—ęœŖéø取層ļ¼Œč€Œäøę˜Æéø取層" @@ -35183,6 +37756,21 @@ msgid "Append Materials of the active Grease Pencil to other object" msgstr "將作ē”Øäø­ēš„č Ÿē­†ęč³Ŗ附加到其他ē‰©ä»¶" +msgctxt "Operator" +msgid "Isolate Material" +msgstr "éš”é›¢ęč³Ŗ" + + +msgctxt "Operator" +msgid "Select Material" +msgstr "éøå–ęč³Ŗ" + + +msgctxt "Operator" +msgid "Reorder" +msgstr "重ꎒåŗ" + + msgid "Bring to Front" msgstr "ęč‡³ęœ€äøŠå±¤" @@ -35199,6 +37787,20 @@ msgid "Send to Back" msgstr "é™č‡³ęœ€å¾Œå±¤" +msgctxt "Operator" +msgid "Reproject Strokes" +msgstr "é‡ęŠ•å½±ē­†č§ø" + + +msgctxt "Operator" +msgid "Select Alternate" +msgstr "éø取äŗ¤ę›æ" + + +msgid "Amount Start" +msgstr "čµ·å§‹ę•ø量" + + msgid "By Material" msgstr "ä¾ęč³Ŗ" @@ -35244,6 +37846,10 @@ msgid "Merge points by distance" msgstr "ä¾č·é›¢åˆä½µ" +msgid "Smooth Endpoints" +msgstr "å¹³ę»‘ē«Æ點" + + msgid "Mouse cursor style to use during the modal operator" msgstr "åœØå…øēÆ„ę“ä½œå™Øäø­č¦ä½æē”Øēš„ę»‘é¼ ęøøęؙęأ式" @@ -35264,14 +37870,30 @@ msgid "Y Start" msgstr "Y čµ·å§‹" +msgid "Turn Policy" +msgstr "č½‰å‘ę–¹é‡" + + +msgid "Minority" +msgstr "少ę•ø" + + +msgid "Majority" +msgstr "多ę•ø" + + +msgid "Choose pseudo-randomly" +msgstr "éø取偽éšØę©Ÿ" + + msgctxt "Operator" msgid "Normalize Vertex Group" -msgstr "ę­£č¦åŒ–é ‚é»žē¾¤ēµ„" +msgstr "ę­øäø€åŒ–頂點ē¾¤ēµ„" msgctxt "Operator" msgid "Normalize All Vertex Groups" -msgstr "ę­£č¦åŒ–å…ØéƒØ頂點ē¾¤ēµ„" +msgstr "ę­øäø€åŒ–å…ØéƒØ頂點ē¾¤ēµ„" msgid "Lock Active" @@ -35279,7 +37901,7 @@ msgstr "鎖定作ē”Ø項" msgid "Keep the values of the active group while normalizing others" -msgstr "åœØę­£č¦åŒ–å…¶ä»–é ‚é»žē¾¤ēµ„ꙂäæęŒä½œē”Øäø­ē¾¤ēµ„ēš„值" +msgstr "åœØę­øäø€åŒ–其他頂點ē¾¤ēµ„ꙂäæęŒä½œē”Øäø­ē¾¤ēµ„ēš„值" msgctxt "Operator" @@ -35402,6 +38024,10 @@ msgid "Allow the path to contain substitution tokens" msgstr "允čرč·Æ徑包含ę›æē”Ø代ē¬¦" +msgid "Detect UDIMs" +msgstr "偵ęø¬ UDIM" + + msgctxt "Operator" msgid "Pack Image" msgstr "ę‰“åŒ…å½±åƒ" @@ -35540,7 +38166,7 @@ msgstr "ęŖ¢č¦–ę‰€ęœ‰éø取ēš„ UV" msgctxt "Operator" msgid "Zoom View" -msgstr "čŖæē„¦č¦–圖" +msgstr "čŖæē„¦ęŖ¢č¦–" msgid "Zoom in/out the image" @@ -35553,7 +38179,7 @@ msgstr "čŖæē„¦č‡³é‚Šē·£" msgid "Zoom in the view to the nearest item contained in the border" -msgstr "å°‡č¦–åœ–ę‹‰čæ‘č‡³é‚Šē·£å…§ęœ€čæ‘ēš„é …ē›®" +msgstr "將ęŖ¢č¦–ꋉčæ‘č‡³é‚Šē·£å…§ęœ€čæ‘ēš„é …ē›®" msgid "Zoom in the image (centered around 2D cursor)" @@ -35565,7 +38191,7 @@ msgstr "ę‹‰é å½±åƒ (仄 2D ęøøęؙē‚ŗäø­åæƒ)" msgid "Set zoom ratio of the view" -msgstr "čØ­å®šč¦–åœ–ēš„遠čæ‘čŖæē„¦ęƔēŽ‡" +msgstr "čح定ęŖ¢č¦–ēš„遠čæ‘čŖæē„¦ęƔēŽ‡" msgid "Starting frame for the animation" @@ -35593,17 +38219,25 @@ msgstr "將幀ēŽ‡å¾ž BVH ēø®ę”¾ęˆē›®å‰å “ę™Æļ¼Œå¦å‰‡ęƏ個 BVH ę”†å¹€ęœƒē›“ msgid "Import vertex color attributes" -msgstr "åŒÆå…„é ‚é»žč‰²å½©å±¬ę€§" +msgstr "åŒÆå…„é ‚é»žč‰²å½©ē‰¹ę€§" msgid "Do not import color attributes" -msgstr "äøč¦åŒÆå…„č‰²å½©å±¬ę€§" +msgstr "äøč¦åŒÆå…„č‰²å½©ē‰¹ę€§" msgid "Displace geometry of alpha meshes" msgstr "éŒÆē½® alpha ē¶²ę ¼ēš„幾何" +msgid "Main" +msgstr "äø»č¦" + + +msgid "Armature-related settings" +msgstr "éŖØꞶē›ø關čح定" + + msgid "Image Search" msgstr "å½±åƒęœå°‹" @@ -35612,6 +38246,14 @@ msgid "Manual Orientation" msgstr "ę‰‹å‹•ę–¹å‘" +msgid "Bone Dir" +msgstr "éŖØéŖ¼ē›®éŒ„" + + +msgid "Temperance (average)" +msgstr "ēƀ制ļ¼ˆå¹³å‡ļ¼‰" + + msgctxt "Operator" msgid "Copy Reports to Clipboard" msgstr "č¤‡č£½å ±å‘Šč‡³å‰Ŗč²¼ē°æ" @@ -35802,7 +38444,7 @@ msgstr "ę·»åŠ é ‚é»žč‡³ē¾½ęƛ" msgid "Location of vertex in normalized space" -msgstr "ę­£č¦åŒ–ē©ŗ間äø­ēš„頂點位ē½®" +msgstr "ę­øäø€åŒ–ē©ŗ間äø­ēš„頂點位ē½®" msgctxt "Operator" @@ -35884,12 +38526,12 @@ msgstr "重čØ­ē¾½ęÆ›ę¬Šé‡ē‚ŗ零" msgctxt "Operator" msgid "Clear Restrict View" -msgstr "ęø…é™¤é™åˆ¶č¦–åœ–" +msgstr "ęø…除限制ęŖ¢č¦–" msgctxt "Operator" msgid "Set Restrict View" -msgstr "čØ­å®šé™åˆ¶č¦–åœ–" +msgstr "čح定限制ęŖ¢č¦–" msgctxt "Operator" @@ -36068,6 +38710,10 @@ msgid "Select similar metaballs by property types" msgstr "ä¾å±¬ę€§é”žåž‹éø取ē›øä¼¼ēš„č®Šå¹»ēƒ" +msgid "Averaging method" +msgstr "å¹³å‡ę–¹ę³•" + + msgctxt "Operator" msgid "Beautify Faces" msgstr "面ē¾ŽåŒ–" @@ -36148,7 +38794,7 @@ msgstr "å¾žå¤–å½¢éµę··å…„å¤–å½¢" msgid "Add rather than blend between shapes" -msgstr "ę·»åŠ äøŠåŽ»č€Œäøę˜ÆåœØå¤–å½¢ä¹‹é–“ę··åˆ" +msgstr "ę·»åŠ äøŠåŽ»č€Œäøę˜ÆåœØ外形之間äŗ¤ę··" msgid "Blending factor" @@ -36156,7 +38802,7 @@ msgstr "ę··å…„å› ę•ø" msgid "Shape key to use for blending" -msgstr "ē”Øę–¼ę··åˆēš„外形鍵" +msgstr "ē”Øę–¼äŗ¤ę··ēš„外形鍵" msgctxt "Operator" @@ -36169,11 +38815,11 @@ msgstr "ę’č£œę–¹ę³•" msgid "Blend Path" -msgstr "ę··åˆč·Æ徑" +msgstr "äŗ¤ę··č·Æ徑" msgid "Blend Surface" -msgstr "ę··åˆč”Ø面" +msgstr "äŗ¤ę··č”Ø面" msgid "Merge Factor" @@ -36293,7 +38939,7 @@ msgstr "ęÆ”č¼ƒ UV" msgid "Compare Color Attributes" -msgstr "ęÆ”č¼ƒč‰²å½©å±¬ę€§" +msgstr "ęÆ”č¼ƒč‰²å½©ē‰¹ę€§" msgctxt "Operator" @@ -36620,7 +39266,7 @@ msgstr "č»øę–¹å‘" msgid "Tolerance for finding vertex duplicates" -msgstr "å°‹ę‰¾é ‚é»žé‡č¤‡é»žēš„åæå·®" +msgstr "å°‹ę‰¾é ‚é»žé‡č¤‡é»žēš„容差" msgctxt "Operator" @@ -36667,7 +39313,7 @@ msgstr "ę©«č·Ø" msgid "Simple Blending" -msgstr "ē°”å–®ę··åˆ" +msgstr "ē°”單äŗ¤ę··" msgctxt "Operator" @@ -36679,6 +39325,10 @@ msgid "Fill in holes (boundary edge loops)" msgstr "å”«å…„å­”ę“ž (邊ē•Œē·šåœˆ)" +msgid "Sides" +msgstr "邊偓" + + msgctxt "Operator" msgid "Flip Normals" msgstr "ēæ»č½‰ę³•ē·š" @@ -36706,7 +39356,7 @@ msgstr "內嵌面邊ē•Œ" msgid "Blend face data across the inset" -msgstr "č®“é¢č³‡ę–™č·ØéŽå…§åµŒę··åˆåœØäø€čµ·" +msgstr "č®“é¢č³‡ę–™č·Ø過內嵌äŗ¤ę··åœØäø€čµ·" msgid "Outset" @@ -36725,14 +39375,28 @@ msgid "Select the new inset faces" msgstr "éøå–ę–°ēš„內嵌面" +msgctxt "Operator" +msgid "Intersect (Knife)" +msgstr "äŗ¤é›†ļ¼ˆåˆ‡å‰²ļ¼‰" + + msgid "Self Intersect" msgstr "č‡Ŗꈑäŗ¤éŒÆ" +msgid "Selected/Unselected" +msgstr "éø取項/ęœŖéø取項" + + msgid "Cut" msgstr "切割" +msgctxt "Operator" +msgid "Intersect (Boolean)" +msgstr "äŗ¤é›†ļ¼ˆåøƒęž—ļ¼‰" + + msgid "Swap" msgstr "äŗ¤ę›" @@ -36755,6 +39419,16 @@ msgid "Cut new topology" msgstr "切割å‡ŗꖰꋓęØø" +msgctxt "Mesh" +msgid "Screen" +msgstr "čž¢å¹•" + + +msgctxt "Mesh" +msgid "Relative" +msgstr "ē›ø對" + + msgid "Only Selected" msgstr "åƒ…ę‰€éø項ē›®" @@ -36771,6 +39445,10 @@ msgid "Only cut the front most geometry" msgstr "åƒ…åˆ‡å‰²ęœ€å‰ę–¹ēš„幾何形ē‹€" +msgid "Measurements" +msgstr "ęø¬é‡" + + msgid "X-Ray" msgstr "X 光" @@ -36908,10 +39586,26 @@ msgid "Move UVs according to merge" msgstr "ę ¹ę“šåˆä½µē§»å‹• UV" +msgid "Weak" +msgstr "å¼±" + + +msgid "Strong" +msgstr "å¼·" + + msgid "Make face and vertex normals point either outside or inside the mesh" msgstr "č®“é¢čˆ‡é ‚é»žę³•ē·šé»žéƒ½åœØē¶²ę ¼ēš„å¤–é¢ęˆ–ę˜Æ內面" +msgid "Multiply Normal" +msgstr "ę³•ē·šä¹˜ę³•" + + +msgid "Reset Normal" +msgstr "重ē½®ę³•ē·š" + + msgctxt "Operator" msgid "Mask Extract" msgstr "遮ē½©ę“·å–" @@ -36934,6 +39628,14 @@ msgid "Create a new object from the sliced mask" msgstr "從ē¶²ę ¼äø­åˆ‡é™¤é®ē½©å€åŸŸå¾Œå†å»ŗē«‹å‡ŗäø€å€‹ę–°ē‰©é«”" +msgid "Spherize" +msgstr "ēƒé«”化" + + +msgid "Spherize Strength" +msgstr "ēƒé«”化強åŗ¦" + + msgctxt "Operator" msgid "Poke Faces" msgstr "ęˆ³č£‚é¢" @@ -36993,6 +39695,10 @@ msgid "Extrude at Cursor Move" msgstr "ꓠå‡ŗļ¼ˆęøøęؙē§»å‹•ļ¼‰" +msgid "Create Quads" +msgstr "å»ŗē«‹å››č§’å½¢" + + msgid "Construct a circle mesh" msgstr "å»ŗē«‹äø€å€‹åœ“å½¢ē¶²ę ¼" @@ -37196,10 +39902,24 @@ msgid "Disconnect vertex or edges from connected geometry" msgstr "č®“é ‚é»žęˆ–é‚Šē·šå¾žé€£ęŽ„儽ēš„幾何形ē‹€äø­ę–·é–‹é€£ęŽ„" +msgctxt "Mesh" +msgid "Fill" +msgstr "唫兄" + + msgid "Fill the ripped region" msgstr "唫兄剝離ēš„區唊" +msgctxt "Operator" +msgid "Extend Vertices" +msgstr "ę““å±•é ‚é»ž" + + +msgid "Extend Vertices" +msgstr "ę““å±•é ‚é»ž" + + msgid "Rip polygons and move the result" msgstr "å‰é›¢å¤šč§’å½¢äø¦ē§»å‹•ēµęžœ" @@ -37242,6 +39962,10 @@ msgid "Axis Mode" msgstr "č»øęؔ式" +msgid "Axis orientation" +msgstr "č»øę–¹å‘" + + msgid "Align the transformation axes to world space" msgstr "å°‡č®Šę›č»ø對齊äø–ē•Œē©ŗ間" @@ -37266,6 +39990,10 @@ msgid "Align the transformation axes to the window" msgstr "å°‡č®Šę›č»øå°é½Šč¦–ēŖ—" +msgid "Axis Sign" +msgstr "č»ø向ęؙčؘ" + + msgid "Positive Axis" msgstr "ę­£č»ø" @@ -37410,11 +40138,71 @@ msgid "Select similar vertices, edges or faces by property types" msgstr "ä¾å±¬ę€§é”žåž‹éø取ē›øä¼¼ēš„頂點态邊ē·šęˆ–面" +msgctxt "Mesh" +msgid "Type" +msgstr "锞型" + + +msgctxt "Mesh" +msgid "Normal" +msgstr "ę³•ē·š" + + +msgctxt "Mesh" +msgid "Length" +msgstr "長åŗ¦" + + +msgctxt "Mesh" +msgid "Direction" +msgstr "ę–¹å‘" + + +msgctxt "Mesh" +msgid "Crease" +msgstr "ēšŗę‘ŗ" + + +msgctxt "Mesh" +msgid "Bevel" +msgstr "åˆ‡č§’" + + +msgctxt "Mesh" +msgid "Seam" +msgstr "ēø«ē·š" + + +msgctxt "Mesh" +msgid "Sharpness" +msgstr "銳åŗ¦" + + msgctxt "Mesh" msgid "Material" msgstr "Ꝑč³Ŗ" +msgctxt "Mesh" +msgid "Area" +msgstr "面區" + + +msgctxt "Mesh" +msgid "Perimeter" +msgstr "å‘Ø長" + + +msgctxt "Mesh" +msgid "Coplanar" +msgstr "共平面" + + +msgctxt "Mesh" +msgid "Flat/Smooth" +msgstr "ę‰å¹³/å¹³ę»‘" + + msgctxt "Operator" msgid "Select Similar Regions" msgstr "éø取ē›ø似區唊" @@ -37469,6 +40257,10 @@ msgid "Tag Freestyle Edge Mark" msgstr "č²¼äøŠ Freestyle 邊ē·šęؙčؘęؙē±¤" +msgid "Topology Distance" +msgstr "ę‹“ę’²č·é›¢" + + msgctxt "Operator" msgid "Select Shortest Path" msgstr "éøå–ęœ€ēŸ­č·Æ徑" @@ -37509,7 +40301,7 @@ msgstr "ęŖ¢č¦– Z č»ø" msgid "Sort selected elements from farthest to nearest one in current view" -msgstr "仄ē›®å‰č¦–圖äø­å¾žęœ€é åˆ°ęœ€čæ‘ēš„ę–¹å¼ęŽ’åŗę‰€éø元ē“ " +msgstr "仄ē›®å‰ęŖ¢č¦–äø­å¾žęœ€é åˆ°ęœ€čæ‘ēš„ę–¹å¼ęŽ’åŗę‰€éø元ē“ " msgid "View X Axis" @@ -37517,7 +40309,7 @@ msgstr "ęŖ¢č¦– X č»ø" msgid "Sort selected elements from left to right one in current view" -msgstr "仄ē›®å‰č¦–圖äø­å¾žęœ€å·¦åˆ°ęœ€å³ēš„å…ƒē“ ęŽ’åŗę‰€éø元ē“ " +msgstr "仄ē›®å‰ęŖ¢č¦–äø­å¾žęœ€å·¦åˆ°ęœ€å³ēš„å…ƒē“ ęŽ’åŗę‰€éø元ē“ " msgid "Cursor Distance" @@ -37528,6 +40320,14 @@ msgid "Sort selected elements from nearest to farthest from 3D cursor" msgstr "ä»„č· 3D ęøøęØ™å¾žęœ€čæ‘åˆ°ęœ€é ēš„ę–¹å¼ęŽ’åŗę‰€éø元ē“ " +msgid "" +"Move all selected elements in first places, preserving their relative order.\n" +"Warning: This will affect unselected elements' indices as well" +msgstr "" +"ē§»å‹•ę‰€ęœ‰éø取ēš„å…ƒē“ č‡³ē¬¬äø€ä½ē½®ļ¼Œäæē•™å…¶ä»–ē›ø對順åŗć€‚\n" +"č­¦å‘Šļ¼šé€™ä¹Ÿęœƒå½±éŸæęœŖéø取ēš„å…ƒē“ ē“¢å¼•" + + msgid "Randomize order of selected elements" msgstr "讓ꉀéø元ē“ é †åŗéšØę©ŸåŒ–" @@ -37540,6 +40340,10 @@ msgid "Extrude selected vertices in a circle around the cursor in indicated view msgstr "åœØꌇē¤ŗēš„視ꎄ口äø­åœä»„ē¹žęøøęؙēš„åœ“ę“ å‡ŗꉀéøēš„點" +msgid "Auto Merge" +msgstr "č‡Ŗ動合併" + + msgid "Split off selected geometry from connected unselected geometry" msgstr "å°‡ę‰€éøå¹¾ä½•å¤–å½¢å¾žé€£ęŽ„ēš„ęœŖéø取幾何äø­åˆ†å‰²å‡ŗ來" @@ -37564,6 +40368,10 @@ msgid "Apply fractal displacement along normal only" msgstr "僅ę²æč‘—ę³•ē·šå„—ē”Øē¢Žå½¢éŒÆē½®" +msgid "Create N-Gons" +msgstr "å»ŗē«‹å¤šč§’å½¢" + + msgid "Quad Corner Type" msgstr "å››č§’å½¢č§’č½é”žåž‹" @@ -37752,6 +40560,11 @@ msgid "Smooth Z Axis" msgstr "å¹³ę»‘ Z č»ø" +msgctxt "Operator" +msgid "Wireframe" +msgstr "ē·šę”†" + + msgid "Crease Weight" msgstr "ēšŗę‘ŗę¬Šé‡" @@ -37799,10 +40612,20 @@ msgid "Which data's transformations to bake" msgstr "要ēƒ˜ē„™ä½•č³‡ę–™ēš„č®Šę›" +msgctxt "Action" +msgid "Pose" +msgstr "å§æ勢" + + msgid "Bake bones transformations" msgstr "ēƒ˜ē„™éŖØéŖ¼č®Šę›" +msgctxt "Action" +msgid "Object" +msgstr "ē‰©é«”" + + msgid "Bake object transformations" msgstr "ēƒ˜ē„™ē‰©é«”č®Šę›" @@ -38071,6 +40894,10 @@ msgid "Enter tweaking mode for the action referenced by the active strip to edit msgstr "ē‚ŗ作ē”Øäø­ē‰‡ę®µę‰€åƒē…§ēš„動作來進兄čŖæę•“ęؔ式仄ē·Øč¼Æ它ēš„關鍵幀" +msgid "Isolate Action" +msgstr "隔離動作" + + msgctxt "Operator" msgid "Exit Tweak Mode" msgstr "離開čŖæę•“ęؔ式" @@ -38088,6 +40915,18 @@ msgid "Reset viewable area to show selected strips range" msgstr "重čØ­åÆęŖ¢č¦–區域仄é”Æē¤ŗéø取ēš„ē‰‡ę®µēƄ圍" +msgid "Source color" +msgstr "來ęŗč‰²å½©" + + +msgid "Gamma Corrected" +msgstr "ä¼½ē‘Ŗå·²ę ”ę­£" + + +msgid "The source color is gamma corrected" +msgstr "來ęŗč‰²å½©å·²ē¶“過伽ē¢¼ę ”ę­£" + + msgctxt "Operator" msgid "Add File Node" msgstr "ę·»åŠ ęŖ”ę”ˆēƀ點" @@ -38146,7 +40985,7 @@ msgstr "背ę™Æå½±åƒé©ę‡‰" msgid "Fit the background image to the view" -msgstr "č®“čƒŒę™Æå½±åƒé©ę‡‰č¦–åœ–" +msgstr "č®“čƒŒę™Æå½±åƒé©ę‡‰ęŖ¢č¦–" msgctxt "Operator" @@ -38172,6 +41011,11 @@ msgid "Zoom in/out the background image" msgstr "ꋉčæ‘/ꋉ遠背ę™Æ影像" +msgctxt "Operator" +msgid "Add Item" +msgstr "ę·»åŠ é …ē›®" + + msgid "Clear the boundaries for viewer operations" msgstr "ęø…除ęŖ¢č¦–å™Øę“ä½œēš„é‚Šē•Œ" @@ -38350,6 +41194,10 @@ msgid "Detach and redirect existing links" msgstr "ę–·é–‹äø¦é‡ę–°å°Žå¼•ę—¢ęœ‰ēš„連ēµ" +msgid "Outside Padding" +msgstr "外偓ē•™ē™½" + + msgctxt "Operator" msgid "Make Links" msgstr "å»ŗē«‹é€£ēµ" @@ -38580,11 +41428,11 @@ msgstr "啟動äø¦ęŖ¢č¦–ē›ø同ēš„ēƀ點锞型ļ¼Œäø€ę­„ꎄäø€ę­„" msgctxt "Operator" msgid "Script Node Update" -msgstr "ęŒ‡ä»¤ēØæēÆ€é»žę›“ę–°" +msgstr "命令ēØæēÆ€é»žę›“ę–°" msgid "Update shader script node with new sockets and options from the script" -msgstr "ä»„ęŒ‡ä»¤ēØæäø­ēš„ę–°ęŽ„å£čˆ‡éøé …ę›“ę–°č‘—č‰²å™ØęŒ‡ä»¤ēØæēƀ點" +msgstr "仄命令ēØæäø­ēš„ę–°ęŽ„å£čˆ‡éøé …ę›“ę–°č‘—č‰²å™Ø命令ēØæēƀ點" msgctxt "Operator" @@ -38593,11 +41441,11 @@ msgstr "ē§»å‹•äø¦é€£ęŽ„" msgid "Resize view so you can see all nodes" -msgstr "重ꖰčŖæę•“č¦–åœ–å¤§å°ä»„č®“ę‚ØęŖ¢č¦–ę‰€ęœ‰ēƀ點" +msgstr "重ꖰčŖæę•“ęŖ¢č¦–大小仄讓ę‚ØęŖ¢č¦–ę‰€ęœ‰ēƀ點" msgid "Resize view so you can see selected nodes" -msgstr "重ꖰčŖæę•“č¦–åœ–å¤§å°ä»„č®“ę‚ØåÆęŸ„ēœ‹éø取ēš„ēƀ點" +msgstr "重ꖰčŖæę•“ęŖ¢č¦–大小仄讓ę‚ØåÆęŸ„ēœ‹éø取ēš„ēƀ點" msgid "Set the boundaries for viewer operations" @@ -38625,6 +41473,10 @@ msgid "Align to axis" msgstr "對齊č»ø" +msgid "Align Mode" +msgstr "對齊ęؔ式" + + msgid "Negative Sides" msgstr "č² å“" @@ -38637,6 +41489,10 @@ msgid "Positive Sides" msgstr "ę­£å“" +msgid "Relative To" +msgstr "ē›øå°ę–¼" + + msgid "Scene Origin" msgstr "å “ę™Æ原點" @@ -38790,6 +41646,10 @@ msgid "Create Data" msgstr "å»ŗē«‹č³‡ę–™" +msgid "Freeze Operator" +msgstr "凍ēµę“ä½œå™Ø" + + msgid "Reverse Transfer" msgstr "åč½‰å‚³č¼ø" @@ -38885,6 +41745,11 @@ msgid "Toggle object's force field" msgstr "åˆ‡ę›ē‰©é«”ēš„力堓" +msgctxt "Operator" +msgid "Stroke" +msgstr "ē­†č§ø" + + msgctxt "Operator" msgid "Monkey" msgstr "ēŒ“é ­" @@ -39023,6 +41888,10 @@ msgid "Link/Transfer Data" msgstr "連ēµ/傳č¼øč³‡ę–™" +msgid "Link Materials" +msgstr "連ēµęč³Ŗ" + + msgctxt "Operator" msgid "Link Objects to Scene" msgstr "將ē‰©é«”連ēµåˆ°å “ę™Æ" @@ -39050,6 +41919,10 @@ msgid "Make Library Override" msgstr "č®“č—åŗ«å‡Œé§•" +msgid "Override Collection" +msgstr "凌駕集ē›’" + + msgid "Make linked data local to each object" msgstr "č®“é€£ēµēš„č³‡ę–™å°å„å€‹ē‰©é«”區域化" @@ -39164,6 +42037,10 @@ msgid "Apply modifier and remove from the stack" msgstr "å„—ē”Øäæ®ę”¹å™Øäø¦å¾žå †ē–Šäø­ē§»é™¤" +msgid "Keep Modifier" +msgstr "ē¶­ęŒäæ®ę”¹å™Ø" + + msgid "Convert particles to a mesh object" msgstr "將ē²’å­č½‰ę›ē‚ŗē¶²ę ¼ē‰©é«”" @@ -39258,6 +42135,11 @@ msgid "Add a new level of subdivision" msgstr "ę·»åŠ äø€å€‹ē“°åˆ†ēš„ę–°ē­‰ē“š" +msgctxt "Operator" +msgid "Unsubdivide" +msgstr "å–ę¶ˆē“°åˆ†" + + msgctxt "Operator" msgid "Bake Ocean" msgstr "ēƒ˜ē„™ęµ·ę“‹" @@ -39407,6 +42289,14 @@ msgid "Remove the selected particle system" msgstr "ē§»é™¤éø取ēš„ē²’子ē³»ēµ±" +msgid "Display type" +msgstr "é”Æē¤ŗ锞型" + + +msgid "Computation Range" +msgstr "č؈ē®—ēƄ圍" + + msgctxt "Operator" msgid "Clear Object Paths" msgstr "ęø…除ē‰©é«”č·Æ徑" @@ -39426,10 +42316,19 @@ msgid "Enable or disable posing/selecting bones" msgstr "啟ē”Øęˆ–åœē”ØéŖØéŖ¼å§æ勢čŖæę•“/éø取éŖØéŖ¼" +msgctxt "Operator" +msgid "QuadriFlow Remesh" +msgstr "QuadriFlow 重å»ŗē¶²ę ¼" + + msgid "Edge Length" msgstr "邊ē·šé•·" +msgid "Preserve Sharp" +msgstr "äæē•™ē؜邊" + + msgid "Fade the pieces over time" msgstr "éšØč‘—ę™‚é–“ę·”åŒ–å”Š" @@ -39564,6 +42463,10 @@ msgid "Select all visible objects that are linked" msgstr "éøå–ę‰€ęœ‰é€£ēµēš„åÆ見ē‰©é«”" +msgid "Instanced Collection" +msgstr "åƦ例集ē›’" + + msgid "Library (Object Data)" msgstr "藏åŗ« (ē‰©é«”č³‡ę–™)" @@ -39609,6 +42512,10 @@ msgid "Pixelate" msgstr "像ē“ ę ¼åŒ–" +msgid "Pixelate image" +msgstr "像ē“ åŒ–影像" + + msgctxt "ID" msgid "Rim" msgstr "邊ꔆ" @@ -39831,6 +42738,10 @@ msgid "Snap selected item(s) to the mouse location" msgstr "ꉀéø項ē›®åøé™„č‡³ę»‘é¼ ä½ē½®" +msgid "Reset Values" +msgstr "重ē½®ę•ø值" + + msgctxt "Operator" msgid "Add Vertex Group" msgstr "ę·»åŠ é ‚é»žē¾¤ēµ„" @@ -39956,6 +42867,10 @@ msgid "Invert the lock state of all vertex groups" msgstr "åč½‰ę‰€ęœ‰é ‚é»žē¾¤ēµ„ēš„鎖定ē‹€ę…‹" +msgid "Invert Unselected" +msgstr "åč½‰ęœŖéø取項" + + msgctxt "Operator" msgid "Mirror Vertex Group" msgstr "鏔像頂點ē¾¤ēµ„" @@ -39995,11 +42910,15 @@ msgstr "åœØęø…å–®äø­å‘äøŠ/äø‹ē§»å‹•ä½œē”Øäø­é ‚點ē¾¤ēµ„" msgid "Normalize weights of the active vertex group, so that the highest ones are now 1.0" -msgstr "作ē”Øäø­é ‚點ē¾¤ēµ„ēš„ę­£č¦åŒ–ę¬Šé‡ļ¼Œé€™ęØ£äø€ä¾†ęœ€é«˜ēš„值ē¾åœØ꜃ę˜Æ 1.0" +msgstr "作ē”Øäø­é ‚點ē¾¤ēµ„ēš„ę­øäø€åŒ–ę¬Šé‡ļ¼Œé€™ęØ£äø€ä¾†ęœ€é«˜ēš„值ē¾åœØ꜃ę˜Æ 1.0" msgid "Normalize all weights of all vertex groups, so that for each vertex, the sum of all weights is 1.0" -msgstr "č®“ę‰€ęœ‰é ‚é»žē¾¤ēµ„ēš„ę‰€ęœ‰ę¬Šé‡ę­£č¦åŒ–ļ¼Œé€™ęØ£äø€ä¾†å°ę–¼ęƏ個頂點ļ¼Œę‰€ęœ‰ę¬Šé‡ēš„ēø½å’Œē‚ŗ 1.0" +msgstr "č®“ę‰€ęœ‰é ‚é»žē¾¤ēµ„ēš„ę‰€ęœ‰ę¬Šé‡ę­øäø€åŒ–ļ¼Œé€™ęØ£äø€ä¾†å°ę–¼ęƏ個頂點ļ¼Œę‰€ęœ‰ę¬Šé‡ēš„ēø½å’Œē‚ŗ 1.0" + + +msgid "Number of steps between 0 and 1" +msgstr "ä»‹ę–¼ 0 與 1 之間ēš„ę­„ę•ø" msgctxt "Operator" @@ -40028,6 +42947,10 @@ msgid "Remove from all groups" msgstr "å¾žę‰€ęœ‰ē¾¤ēµ„äø­ē§»é™¤" +msgid "All Vertices" +msgstr "ę‰€ęœ‰é ‚é»ž" + + msgid "Clear the active group" msgstr "ęø…除作ē”Øäø­ē¾¤ēµ„" @@ -40054,6 +42977,14 @@ msgid "Vertex group to set as active" msgstr "要čØ­ē‚ŗ作ē”Øäø­ēš„頂點" +msgid "Expand/Contract" +msgstr "ę““å±•/ꔶēø®" + + +msgid "Expand/contract weights" +msgstr "ę““å±•/ꔶēø®ę¬Šé‡" + + msgctxt "Operator" msgid "Sort Vertex Groups" msgstr "ꎒåŗé ‚點ē¾¤ēµ„" @@ -40108,11 +43039,11 @@ msgstr "作ē”Øäø­é ‚點ē¾¤ēµ„äø­ä¾†ęŗę¬Šé‡ēš„ē“¢å¼•" msgctxt "Operator" msgid "Normalize Active" -msgstr "ę­£č¦åŒ–ä½œē”Øäø­é …" +msgstr "ę­øäø€åŒ–作ē”Øäø­é …" msgid "Normalize active vertex's weights" -msgstr "將作ē”Øäø­é ‚é»žę¬Šé‡ę­£č¦åŒ–" +msgstr "將作ē”Øäø­é ‚é»žę¬Šé‡ę­øäø€åŒ–" msgctxt "Operator" @@ -40138,6 +43069,11 @@ msgid "Apply the object's visual transformation to its data" msgstr "將ē‰©é«”ēš„視č¦ŗč®Šę›å„—ē”Øč‡³å…¶č‡Ŗčŗ«č³‡ę–™" +msgctxt "Operator" +msgid "Add Volume" +msgstr "ę·»åŠ å®¹é«”" + + msgctxt "Operator" msgid "Import OpenVDB Volume" msgstr "åŒÆå…„ OpenVDB 容體" @@ -40147,6 +43083,20 @@ msgid "Import OpenVDB volume file" msgstr "åŒÆå…„ OpenVDB 容體ęŖ”ę”ˆ" +msgctxt "Operator" +msgid "Voxel Remesh" +msgstr "體ē“ é‡å»ŗē¶²ę ¼" + + +msgctxt "Operator" +msgid "Edit Voxel Size" +msgstr "ē·Øč¼Æ體ē“ å¤§å°" + + +msgid "Modify the mesh voxel size interactively used in the voxel remesher" +msgstr "åœØ體ē“ ē¶²ę ¼é‡ę§‹å™Øč£”ä»„äŗ’å‹•ę–¹å¼äæ®ę”¹ē¶²ę ¼é«”ē“ å¤§å°" + + msgctxt "Operator" msgid "Outliner Set Action" msgstr "大ē¶±ē®”ē†å™Øčح定動作" @@ -40195,7 +43145,7 @@ msgstr "čØ­å®šč‰²å½©ęؙē±¤" msgid "Disable viewport display in the view layers" -msgstr "停ē”ØęŖ¢č¦–層äø­ēš„č¦–åœ–é”Æē¤ŗ" +msgstr "停ē”ØęŖ¢č¦–層äø­ēš„č©¦åœ–é”Æē¤ŗ" msgctxt "Operator" @@ -40234,11 +43184,21 @@ msgid "Hide the collection in this view layer" msgstr "åœØę­¤ęŖ¢č¦–層äø­éš±č—é›†ē›’" +msgctxt "Operator" +msgid "Clear Holdout" +msgstr "ęø…除鉗制" + + msgctxt "Operator" msgid "Set Holdout" msgstr "čح定鉗制" +msgctxt "Operator" +msgid "Instance Collection" +msgstr "åƦ例集ē›’" + + msgid "Show the collection in this view layer" msgstr "åœØę­¤ęŖ¢č¦–層äø­é”Æē¤ŗ集ē›’" @@ -40292,6 +43252,11 @@ msgid "Expand/Collapse all items" msgstr "展開/ꊘē–Šę‰€ęœ‰é …ē›®" +msgctxt "Operator" +msgid "Update Highlight" +msgstr "ꛓꖰęØ™ę˜Ž" + + msgctxt "Operator" msgid "Delete Data-Block" msgstr "åˆŖ除ę•øꓚēµ„唊" @@ -40305,6 +43270,14 @@ msgid "Make Local" msgstr "å»ŗē«‹å€åŸŸę€§" +msgid "Remap Users" +msgstr "é‡ę˜ å°„ä½æē”Ø者" + + +msgid "Paste" +msgstr "č²¼äøŠ" + + msgid "Add Fake User" msgstr "ę·»åŠ å½ä½æē”Ø者" @@ -40317,15 +43290,32 @@ msgid "Rename" msgstr "é‡ę–°å‘½å" +msgid "New ID" +msgstr "ꖰ ID" + + +msgid "Old ID" +msgstr "舊 ID" + + msgid "Extend selection for activation" msgstr "ē‚ŗä½æē”Øę““å±•éø取項" +msgid "Recurse" +msgstr "遞čæ“" + + msgctxt "Operator" msgid "Drag and Drop" msgstr "ę‹–ę”¾" +msgctxt "Operator" +msgid "Open/Close" +msgstr "開啟/關閉" + + msgid "Toggle whether item under cursor is enabled or closed" msgstr "åˆ‡ę›ęøøęؙäø‹ēš„é …ē›®ę˜Æ啟ē”Øꈖę˜Æ停ē”Ø" @@ -40334,6 +43324,11 @@ msgid "Close or open all items" msgstr "é—œé–‰ęˆ–é–‹å•Ÿę‰€ęœ‰é …ē›®" +msgctxt "Operator" +msgid "Rename" +msgstr "é‡ę–°å‘½å" + + msgid "Use Active" msgstr "ä½æē”Ø作ē”Ø項" @@ -40361,6 +43356,14 @@ msgid "Outliner Library Operation" msgstr "大ē¶±ē®”ē†å™Ø藏åŗ«ę“ä½œ" +msgid "Library Operation" +msgstr "藏åŗ«ę“ä½œ" + + +msgid "Relocate" +msgstr "é‡ę–°å®šä½" + + msgid "Reload" msgstr "é‡ę–°č¼‰å…„" @@ -40370,10 +43373,18 @@ msgid "Relocate Library" msgstr "é‡ę–°å®šä½č—åŗ«" +msgid "Content" +msgstr "內容" + + msgid "Library Override Operation" msgstr "藏åŗ«å‡Œé§•ę“ä½œ" +msgid "Make" +msgstr "å»ŗē«‹" + + msgid "Reset" msgstr "重čØ­" @@ -40382,6 +43393,10 @@ msgid "Resync" msgstr "é‡ę–°åŒę­„" +msgid "Resync Enforce" +msgstr "å¼·åˆ¶å†åŒę­„" + + msgctxt "Operator" msgid "Drop Material on Object" msgstr "ę‹–ę”¾ęč³Ŗč‡³ē‰©é«”äøŠ" @@ -40496,6 +43511,15 @@ msgid "Expand all entries one level deep" msgstr "展開äø€å€‹å±¤ē“šę·±ēš„ę‰€ęœ‰ę¢ē›®" +msgctxt "Operator" +msgid "Place Cursor" +msgstr "ę”¾ē½®ęøøęؙ" + + +msgid "Place cursor" +msgstr "ę”¾ē½®ęøøęؙ" + + msgid "Draw curve" msgstr "ꏏē¹Ŗę›²ē·š" @@ -40591,7 +43615,7 @@ msgstr "éš±č—/é”Æē¤ŗå„—ē“¢" msgctxt "Operator" msgid "Image from View" -msgstr "影像來č‡Ŗč¦–åœ–" +msgstr "影像來č‡ŖęŖ¢č¦–" msgid "Name of the file" @@ -40660,7 +43684,7 @@ msgstr "ē“‹ē†ē¹Ŗč£½ęؔ式" msgid "Toggle texture paint mode in 3D view" -msgstr "åœØ 3D č¦–åœ–äø­åˆ‡ę›ē“‹ē†ē¹Ŗč£½ęؔ式" +msgstr "åœØ 3D ęŖ¢č¦–äø­åˆ‡ę›ē“‹ē†ē¹Ŗč£½ęؔ式" msgid "Change selection for all vertices" @@ -40732,7 +43756,7 @@ msgstr "頂點ē¹Ŗč£½ęؔ式" msgid "Toggle the vertex paint mode in 3D view" -msgstr "åˆ‡ę› 3D č¦–åœ–äø­ēš„頂點ē¹Ŗč£½å·„å…·ęؔ式" +msgstr "åˆ‡ę› 3D ęŖ¢č¦–äø­ēš„頂點ē¹Ŗč£½å·„å…·ęؔ式" msgctxt "Operator" @@ -40784,11 +43808,11 @@ msgstr "ę¬Šé‡ē¹Ŗč£½ęؔ式" msgid "Toggle weight paint mode in 3D view" -msgstr "åˆ‡ę› 3D č¦–åœ–äø­ēš„ę¬Šé‡ē¹Ŗč£½ęؔ式" +msgstr "åˆ‡ę› 3D ęŖ¢č¦–äø­ēš„ę¬Šé‡ē¹Ŗč£½ęؔ式" msgid "Use the mouse to sample a weight in the 3D view" -msgstr "ä½æē”Øę»‘é¼ ä¾†å–ęØ£ 3D č¦–åœ–äø­ēš„ę¬Šé‡" +msgstr "ä½æē”Øę»‘é¼ ä¾†å–ęØ£ 3D ęŖ¢č¦–äø­ēš„ę¬Šé‡" msgctxt "Operator" @@ -40840,6 +43864,11 @@ msgid "Add new palette" msgstr "ę·»åŠ ę–°č‰²ē‰ˆ" +msgctxt "Operator" +msgid "Sort Palette" +msgstr "ꎒåŗčŖæč‰²ē›¤" + + msgctxt "Operator" msgid "Brush Edit" msgstr "ē­†åˆ·ē·Øč¼Æ" @@ -41052,6 +44081,11 @@ msgid "Select tips of all visible particles" msgstr "éøå–ę‰€ęœ‰åÆ見ē²’子ēš„ęœ«ę¢¢" +msgctxt "Operator" +msgid "Shape Cut" +msgstr "å½¢ē‹€å‰Ŗ切" + + msgid "Subdivide selected particles segments (adds keys)" msgstr "ē“°åˆ†ę‰€éøē²’å­åˆ†ę®µ (ę·»åŠ éµ)" @@ -41083,6 +44117,11 @@ msgid "Remove the selected particle target" msgstr "ē§»é™¤éø取ēš„ē²’子ē›®ęؙ" +msgctxt "Operator" +msgid "Unify Length" +msgstr "ēµ±äø€é•·åŗ¦" + + msgctxt "Operator" msgid "Weight Set" msgstr "ę¬Šé‡čح定" @@ -41494,8 +44533,34 @@ msgid "Remove Asset Library" msgstr "ē§»é™¤ē“ ęåŗ«" +msgctxt "Operator" +msgid "Add Extension Repository" +msgstr "åŠ å…„ę““å……å„—ä»¶č»Ÿé«”åŗ«" + + +msgid "Add a new repository used to store extensions" +msgstr "åŠ å…„å„²å­˜č‘—ę““å……å„—ä»¶ēš„ę–°č»Ÿé«”åŗ«" + + +msgid "The local directory containing extensions" +msgstr "å«ęœ‰ę““å……å„—ä»¶ēš„ęœ¬åœ°ē›®éŒ„" + + +msgctxt "Operator" +msgid "Remove Extension Repository" +msgstr "ē§»é™¤ę““å……å„—ä»¶č»Ÿé«”åŗ«" + + +msgid "Remove an extension repository" +msgstr "ē§»é™¤ę““å……å„—ä»¶č»Ÿé«”åŗ«" + + +msgid "Location of the extension to install" +msgstr "č¦å®‰č£ēš„ę““充儗件位ē½®" + + msgid "All Keymaps" -msgstr "å…ØéƒØęŒ‰éµę˜ å°„" +msgstr "å…ØéƒØęŒ‰éµå°ę‡‰" msgid "Keep original file after copying to configuration folder" @@ -41511,7 +44576,7 @@ msgstr "要ē§»é™¤ēš„é …ē›®č¾Ø識ē¢¼" msgid "Restore all keymaps to default" -msgstr "é‚„åŽŸę‰€ęœ‰ęŒ‰éµę˜ å°„å›žé čح值" +msgstr "é‚„åŽŸę‰€ęœ‰ęŒ‰éµå°ę‡‰å›žé čح值" msgctxt "Operator" @@ -41523,6 +44588,14 @@ msgid "Reset to the default theme colors" msgstr "重čح回預čØ­äø»é”Œč‰²å½©" +msgid "MatCap" +msgstr "Ꝑč³Ŗꍕꍉēƒ" + + +msgid "Install custom MatCaps" +msgstr "å®‰č£č‡ŖčØ‚ęč³Ŗꍕꍉēƒ" + + msgid "Studio" msgstr "ę”å½±ę£š" @@ -41619,7 +44692,7 @@ msgstr "ęŖ¢č¦–ęƒ…å¢ƒ" msgid "Use the current 3D view for rendering, else use scene settings" -msgstr "ä½æē”Øē›®å‰ēš„ 3D č¦–åœ–é€²č”Œē®—ē¹Ŗļ¼Œå¦å‰‡ä½æē”Øå “ę™Æčح定" +msgstr "ä½æē”Øē›®å‰ēš„ 3D ęŖ¢č¦–é€²č”Œē®—ē¹Ŗļ¼Œå¦å‰‡ä½æē”Øå “ę™Æčح定" msgid "Write Image" @@ -42123,20 +45196,20 @@ msgstr "å®Œę•“å‰Æęœ¬" msgctxt "Operator" msgid "Add Render View" -msgstr "ę·»åŠ ē®—ē¹Ŗč¦–åœ–" +msgstr "ę·»åŠ ē®—ē¹ŖęŖ¢č¦–" msgid "Add a render view" -msgstr "ę·»åŠ äø€ē®—ē¹Ŗč¦–åœ–" +msgstr "ę·»åŠ ē®—ē¹ŖęŖ¢č¦–" msgctxt "Operator" msgid "Remove Render View" -msgstr "ē§»é™¤ē®—ē¹Ŗč¦–åœ–" +msgstr "ē§»é™¤ē®—ē¹ŖęŖ¢č¦–" msgid "Remove the selected render view" -msgstr "ē§»é™¤ę‰€éøē®—ē¹Ŗč¦–åœ–" +msgstr "ē§»é™¤ę‰€éøē®—ē¹ŖęŖ¢č¦–" msgctxt "Operator" @@ -42390,6 +45463,11 @@ msgid "Blend in and out overlapping region" msgstr "ę··å…„čˆ‡ę··å‡ŗ重ē–Šå€å”Š" +msgctxt "Operator" +msgid "Region" +msgstr "區唊" + + msgctxt "Operator" msgid "Flip Region" msgstr "ēæ»č½‰å€å”Š" @@ -42401,7 +45479,11 @@ msgstr "åˆ‡ę›å€å”Šēš„對齊 (å·¦/右 ꈖ 頂/åŗ•)" msgctxt "Operator" msgid "Toggle Quad View" -msgstr "åˆ‡ę›å››č¦–åœ–ęŖ¢č¦–" +msgstr "åˆ‡ę›å››ę ¼ęŖ¢č¦–" + + +msgid "Split selected area into camera, front, right, and top views" +msgstr "å°‡ę‰€éø區域分割ē‚ŗę”å½±ę©ŸęŖ¢č¦–ć€å‰č¦–åœ–ć€å³č¦–åœ–åŠäøŠč¦–圖" msgctxt "Operator" @@ -42480,15 +45562,23 @@ msgstr "ē·Øč¼Æ" msgid "Get Extensions" -msgstr "取得附加元件" +msgstr "å–å¾—ę““å……å„—ä»¶" msgid "Browse, install and manage extensions from remote and local repositories" -msgstr "ē€č¦½ć€å®‰č£äø¦ē®”ē†ä¾†č‡Ŗ遠ē«Æęˆ–ęœ¬åœ°č»Ÿé«”åŗ«ēš„附加元件" +msgstr "ē€č¦½ć€å®‰č£čˆ‡ē®”ē†é ē«Æęˆ–ęœ¬åœ°ē«Æč»Ÿé«”åŗ«ēš„ę““充儗件" + + +msgid "Manage add-ons installed via Extensions" +msgstr "ē®”ē†é€éŽę““å……å„—ä»¶å®‰č£ēš„附加元件" + + +msgid "Edit and save themes installed via Extensions" +msgstr "ē·Øč¼Æäø¦å„²å­˜é€éŽę““å……å„—ä»¶å®‰č£ēš„äø»é”Œ" msgid "Keymap" -msgstr "ęŒ‰éµę˜ å°„" +msgstr "ęŒ‰éµå°ę‡‰" msgid "File Paths" @@ -42527,11 +45617,15 @@ msgstr "åŸ·č”Œ Python ęŖ”ę”ˆ" msgctxt "Operator" msgid "Reload Scripts" -msgstr "é‡ę–°č¼‰å…„ęŒ‡ä»¤ēØæ" +msgstr "é‡ę–°č¼‰å…„å‘½ä»¤ēØæ" msgid "Reload scripts" -msgstr "é‡ę–°č¼‰å…„ęŒ‡ä»¤ēØæ" +msgstr "é‡ę–°č¼‰å…„å‘½ä»¤ēØæ" + + +msgid "Partial" +msgstr "éƒØ分" msgctxt "Operator" @@ -42551,6 +45645,25 @@ msgid "Clicks on the background do not start the stroke" msgstr "åœØ背ę™Æäø­é»žę“Šäø¦äøęœƒå•Ÿå‹•ē­†č§ø" +msgid "Starting Mouse" +msgstr "å•Ÿå‹•ę»‘é¼ " + + +msgctxt "Operator" +msgid "Inflate" +msgstr "č†Øč„¹" + + +msgctxt "Operator" +msgid "Expand" +msgstr "ę““å±•" + + +msgctxt "Operator" +msgid "Pinch" +msgstr "å¤¾ę" + + msgctxt "Operator" msgid "Scale" msgstr "ēø®ę”¾" @@ -42669,6 +45782,10 @@ msgid "Generates a new set of random colors to render the Face Sets in the viewp msgstr "åœØč¦–ęŽ„å£äø­ä½æē”Øäø€ēµ„ę–°ēš„éšØę©Ÿč‰²å½©é‡čØ­ę‰€ęœ‰é¢é›†" +msgid "Contiguous" +msgstr "連ēŗŒ" + + msgid "Smooth Mask" msgstr "å¹³ę»‘åŒ–é®ē½©" @@ -42706,6 +45823,29 @@ msgid "Custom Curve" msgstr "č‡ŖčØ‚ę›²ē·š" +msgid "Scale mesh" +msgstr "ēø®ę”¾ē¶²ę ¼" + + +msgid "Inflate mesh" +msgstr "č†Øč„¹ē¶²ę ¼" + + +msgctxt "Operator" +msgid "Sphere" +msgstr "ēƒé«”" + + +msgctxt "Operator" +msgid "Random" +msgstr "éšØę©Ÿ" + + +msgctxt "Operator" +msgid "Relax" +msgstr "鬆開" + + msgid "Smooth the edges of all the Face Sets" msgstr "å°ę‰€ęœ‰ēš„面集邊ē·£é€²č”Œå¹³ę»‘" @@ -42728,6 +45868,10 @@ msgid "Sample the mesh detail on clicked point" msgstr "å°é»žęŒ‰ēš„點取ęØ£ē¶²ę ¼ē“°ēƀ" +msgid "Detail Mode" +msgstr "ē“°ēƀęؔ式" + + msgid "Dyntopo" msgstr "Dyntopo" @@ -42738,7 +45882,7 @@ msgstr "雕唑ęؔ式" msgid "Toggle sculpt mode in 3D view" -msgstr "åˆ‡ę› 3D č¦–åœ–äø­ēš„雕唑ęؔ式" +msgstr "åˆ‡ę› 3D ęŖ¢č¦–äø­ēš„雕唑ęؔ式" msgctxt "Operator" @@ -42759,6 +45903,10 @@ msgid "Sets the pivot to the origin of the sculpt" msgstr "åœØ雕刻ęؔ式äø‹čح定ę؞ē“é»žč‡³č©²ē‰©é«”ēš„原點č»øåæƒ" +msgid "Unmasked" +msgstr "ęœŖ遮ē½©" + + msgid "Sets the pivot position to the average position of the unmasked vertices" msgstr "åœØ雕刻ęؔ式äø‹čح定ę؞ē“é»žč‡³ę²’ęœ‰å»ŗē«‹é›•åˆ»é®ē½©ēš„éƒØ分之平均值äø­åæƒ" @@ -42826,6 +45974,11 @@ msgid "Sequencer effect type" msgstr "åŗę®µē·Øč¼Æå™Øę•ˆęžœé”žåž‹" +msgctxt "Sequence" +msgid "Crossfade" +msgstr "äŗ¤å‰ę·”化" + + msgid "Crossfade effect strip type" msgstr "äŗ¤éŒÆę·”åŒ–ę•ˆęžœē‰‡ę®µé”žåž‹" @@ -42944,6 +46097,11 @@ msgid "Gaussian Blur" msgstr "高ę–ÆęØ”ē³Š" +msgctxt "Sequence" +msgid "Text" +msgstr "ę–‡å­—" + + msgctxt "Operator" msgid "Change Data/Files" msgstr "ę›“ę”¹ę—„ęœŸ/ęŖ”ę”ˆ" @@ -43012,6 +46170,15 @@ msgid "Set Selected Strip Proxies" msgstr "čح定éø取ēš„ē‰‡ę®µä»£ē†" +msgctxt "Operator" +msgid "Export Subtitles" +msgstr "åŒÆå‡ŗ字幕" + + +msgid "Fade In" +msgstr "ę·”å…„" + + msgctxt "Operator" msgid "Insert Gaps" msgstr "ę’å…„é–“éš”" @@ -43182,6 +46349,10 @@ msgid "Set render size and aspect from active sequence" msgstr "ꌉē…§ä½œē”Øäø­åŗę®µä¾†čح定ē®—ē¹Ŗēš„大小及åƬ長ęƔ" +msgid "Timeline Frame" +msgstr "Ꙃ間č»øę”†å¹€" + + msgid "Use mouse to sample color in current frame" msgstr "ä½æē”Øę»‘é¼ å–ęØ£ē›®å‰ę”†å¹€äø­ēš„č‰²å½©" @@ -43211,6 +46382,10 @@ msgid "Select or deselect all strips" msgstr "éøå–ęˆ–å–ę¶ˆéø取å…ØéƒØē‰‡ę®µ" +msgid "Select Handles" +msgstr "éøå–ęŽ§åˆ¶ę”æ" + + msgid "Select all strips grouped by various properties" msgstr "éøå–ę‰€ęœ‰ęŒ‰å„é”žå±¬ę€§åˆ†ēµ„ēš„ē‰‡ę®µ" @@ -43307,6 +46482,10 @@ msgid "Cache the sound in memory" msgstr "å°‡č²éŸ³åæ«å–到čØ˜ę†¶é«”äø­" +msgid "Ignore Selection" +msgstr "åæ½ē•„éø取項" + + msgctxt "Operator" msgid "Jump to Strip" msgstr "č·³č‡³ē‰‡ę®µ" @@ -43329,6 +46508,10 @@ msgid "Add a modifier to the strip" msgstr "ę·»åŠ äæ®ę”¹å™Ø到ē‰‡ę®µ" +msgid "Graphs" +msgstr "圖č”Ø" + + msgctxt "Operator" msgid "Move Strip Modifier" msgstr "ē§»å‹•ē‰‡ę®µäæ®ę”¹å™Ø" @@ -43397,7 +46580,7 @@ msgstr "čŖæę•“é č¦½å€é čæ‘ä»„é©ę‡‰č©²å€åŸŸ" msgctxt "Operator" msgid "Border Offset View" -msgstr "邊ē·£åē§»č¦–圖" +msgstr "邊ē·£åē§»ęŖ¢č¦–" msgid "Zoom the sequencer on the selected strips" @@ -43639,6 +46822,23 @@ msgid "Show a list of used text in the open document" msgstr "åœØé–‹å•Ÿę–‡ä»¶äø­é”Æē¤ŗä½æē”Øēš„ę–‡å­—ä¹‹ęø…å–®" +msgctxt "Operator" +msgid "Toggle Comments" +msgstr "åˆ‡ę›č©•čØ»" + + +msgid "Toggle Comments" +msgstr "åˆ‡ę›č©•čØ»" + + +msgid "Comment" +msgstr "č©•čØ»" + + +msgid "Un-Comment" +msgstr "å–ę¶ˆč©•čØ»" + + msgctxt "Operator" msgid "Convert Whitespace" msgstr "č½‰ę›ē©ŗę ¼" @@ -43708,6 +46908,10 @@ msgid "Line number to jump to" msgstr "č¦č·³č‡³ēš„åˆ—č™Ÿ" +msgid "Column" +msgstr "ꬄ" + + msgid "Filepath" msgstr "ęŖ”ę”ˆč·Æ徑" @@ -43814,11 +47018,11 @@ msgstr "åæ½ē•„" msgctxt "Operator" msgid "Run Script" -msgstr "åŸ·č”ŒęŒ‡ä»¤ēØæ" +msgstr "åŸ·č”Œå‘½ä»¤ēØæ" msgid "Run active script" -msgstr "åŸ·č”Œä½œē”Øäø­ęŒ‡ä»¤ēØæ" +msgstr "åŸ·č”Œä½œē”Øäø­å‘½ä»¤ēØæ" msgctxt "Operator" @@ -43942,7 +47146,7 @@ msgstr "ä½æē”ØęŖ¢č¦–" msgid "Use the current view instead of the active object to create the new orientation" -msgstr "ä½æē”Øē›®å‰ēš„č¦–åœ–č€Œäøę˜Æ作ē”Øäø­ē‰©é«”來å»ŗē«‹ę–°ę–¹å‘" +msgstr "ä½æē”Øē›®å‰ēš„ęŖ¢č¦–č€Œäøę˜Æ作ē”Øäø­ē‰©é«”來å»ŗē«‹ę–°ę–¹å‘" msgctxt "Operator" @@ -43985,6 +47189,10 @@ msgid "Correct UV coordinates when transforming" msgstr "ē•¶č®Šę›ę™‚ę ”ę­£ UV åŗ§ęؙ" +msgid "Single Side" +msgstr "單偓" + + msgid "Snap to grid" msgstr "åøé™„ę ¼ē·š" @@ -44009,6 +47217,10 @@ msgid "Snap to the middle of edges" msgstr "åøé™„č‡³ē·šę®µäø­å¤®" +msgid "Edge Perpendicular" +msgstr "垂ē›“邊ē·š" + + msgid "Snap to the nearest point on an edge" msgstr "åøé™„č‡³é‚Šē·šäøŠęœ€čæ‘ēš„點" @@ -44107,6 +47319,10 @@ msgid "Shear" msgstr "åˆ‡č®Š" +msgid "Axis Ortho" +msgstr "ę­£äŗ¤č»ø向" + + msgctxt "Operator" msgid "Shrink/Fatten" msgstr "ꔶēø®/ę““å……" @@ -44204,6 +47420,23 @@ msgid "Amount to warp about the cursor" msgstr "彎ē¹žęøøęؙēš„量" +msgid "UP" +msgstr "向äøŠ" + + +msgid "DOWN" +msgstr "向äø‹" + + +msgctxt "Operator" +msgid "Press Button" +msgstr "ꌉäø‹ęŒ‰éˆ•" + + +msgid "Skip Depressed" +msgstr "ē•„過ęœŖꌉäø‹" + + msgctxt "Operator" msgid "Copy Data Path" msgstr "č¤‡č£½č³‡ę–™č·Æ徑" @@ -44222,14 +47455,6 @@ msgid "Drop colors to buttons" msgstr "å°‡č‰²å½©ę‹–ę”¾åˆ°ęŒ‰éˆ•äøŠ" -msgid "Source color" -msgstr "來ęŗč‰²å½©" - - -msgid "Gamma Corrected" -msgstr "ä¼½ē‘Ŗå·²ę ”ę­£" - - msgctxt "Operator" msgid "Edit Source" msgstr "ē·Øč¼Æ來ęŗ" @@ -44244,6 +47469,10 @@ msgid "Eyedropper" msgstr "ę±²åøå™Ø" +msgid "Match Indices" +msgstr "配對ē“¢å¼•ē·Ø號" + + msgid "Export POT" msgstr "åŒÆå‡ŗ POT" @@ -44296,6 +47525,11 @@ msgid "Skip POT file generation" msgstr "ē•„過 POT ęŖ”ę”ˆē”Ÿęˆ" +msgctxt "Operator" +msgid "Remove Override" +msgstr "ē§»é™¤å‡Œé§•" + + msgid "Reset to default values all elements of the array" msgstr "將陣列äø­ēš„ę‰€ęœ‰å…ƒē“ é‡čح回預čح值" @@ -44435,11 +47669,11 @@ msgstr "ēƒé«”ęˆ–ę˜Æåœ“ęŸ±é«”ēš„ę–¹å‘" msgid "View on Equator" -msgstr "čµ¤é“č¦–åœ–" +msgstr "赤道ęŖ¢č¦–" msgid "3D view is on the equator" -msgstr "ä½ę–¼čµ¤é“ēš„ 3D č¦–åœ–" +msgstr "ä½ę–¼čµ¤é“ēš„ 3D ęŖ¢č¦–" msgid "View on Poles" @@ -44447,7 +47681,7 @@ msgstr "ęŖ¢č¦–ꄵč»ø" msgid "3D view is on the poles" -msgstr "ä½ę–¼ę„µč»øēš„ 3D č¦–åœ–" +msgstr "ä½ę–¼ę„µč»øēš„ 3D ęŖ¢č¦–" msgid "Align to Object" @@ -44458,6 +47692,10 @@ msgid "Align according to object transform" msgstr "å°é½Šę ¹ę“šē‰©é«”ēš„č®Šę›" +msgid "Pole" +msgstr "ꄵåŗ§ęؙ" + + msgid "Pinch" msgstr "ꍏꓠ" @@ -44498,6 +47736,11 @@ msgid "Export the UV layout to a bitmap image" msgstr "將 UV 配ē½®åŒÆå‡ŗč‡³é»žé™£åœ–å½±åƒ" +msgctxt "Mesh" +msgid "Modified" +msgstr "å·²äæ®ę”¹" + + msgid "Exports UVs from the modified mesh" msgstr "從äæ®ę”¹ēš„ē¶²ę ¼åŒÆå‡ŗ UV" @@ -44576,7 +47819,7 @@ msgstr "é€éŽę”¾é¬†č§’åŗ¦ä¾†é™ä½Ž UV ꋉä¼ø" msgid "Blend factor between stretch minimized and original" -msgstr "åœØä¼øå±•ęœ€å°åŒ–čˆ‡åŽŸå§‹ä¹‹é–“ēš„ę··åˆäæ‚ę•ø" +msgstr "åœØä¼øå±•ęœ€å°åŒ–čˆ‡åŽŸå§‹ä¹‹é–“ēš„äŗ¤ę··äæ‚ę•ø" msgid "Number of iterations to run, 0 is unlimited when run interactively" @@ -44592,10 +47835,22 @@ msgid "Space between islands" msgstr "島唊間ēš„ē©ŗ間" +msgid "Scaled" +msgstr "å·²ēø®ę”¾" + + msgid "Fraction" msgstr "分ę•ø( 小ę•ø點後ę•ø值 )" +msgid "Merge Overlapping" +msgstr "合併重ē–Š" + + +msgid "Axis-aligned" +msgstr "č»ø向對齊" + + msgctxt "Operator" msgid "Pin" msgstr "釘住" @@ -44615,7 +47870,7 @@ msgstr "å¾žč¦–č§’ęŠ•å°„" msgid "Project the UV vertices of the mesh as seen in current 3D view" -msgstr "將ē¶²ę ¼ēš„ UV é ‚é»žęŠ•å½±å¦‚ē›®å‰ 3D č¦–åœ–äø­ę‰€č¦‹" +msgstr "將ē¶²ę ¼ēš„ UV é ‚é»žęŠ•å½±å¦‚ē›®å‰ 3D ęŖ¢č¦–äø­ę‰€č¦‹" msgid "Camera Bounds" @@ -44660,6 +47915,15 @@ msgid "Reveal all hidden UV vertices" msgstr "ę­é–‹ę‰€ęœ‰éš±č—ēš„ UV 頂點" +msgctxt "Operator" +msgid "UV Rip" +msgstr "UV ę‹†åˆ†" + + +msgid "UV Rip" +msgstr "UV ę‹†åˆ†" + + msgctxt "Operator" msgid "Seams from Islands" msgstr "依éø取ē…§å³¶å”Šå»ŗē«‹ēø«ē·š" @@ -44743,6 +48007,26 @@ msgid "Select all pinned UV vertices" msgstr "éøå–ę‰€ęœ‰é‡˜ä½ēš„ UV 頂點" +msgctxt "Mesh" +msgid "Pinned" +msgstr "釘住" + + +msgctxt "Mesh" +msgid "Area 3D" +msgstr "面區 3D" + + +msgctxt "Mesh" +msgid "Object" +msgstr "ē‰©é«”" + + +msgctxt "Mesh" +msgid "Winding" +msgstr "彎ē¹ž" + + msgctxt "Operator" msgid "Select Split" msgstr "éø取ē‰‡ę®µ" @@ -44826,7 +48110,7 @@ msgstr "ęø…除合ēø«é‚Šē·šēš„ēø«ē·š" msgid "Limit distance in normalized coordinates" -msgstr "č·é›¢é™åˆ¶åœØę­£č¦åŒ–åŗ§ęؙ內" +msgstr "č·é›¢é™åˆ¶åœØę­øäø€åŒ–åŗ§ęؙ內" msgid "UVs are stitched at midpoint instead of at static island" @@ -44905,11 +48189,11 @@ msgstr "增ęø› Y" msgctxt "Operator" msgid "Reset View" -msgstr "重čØ­č¦–åœ–" +msgstr "重čØ­ęŖ¢č¦–" msgid "Reset the view" -msgstr "重čØ­č¦–åœ–" +msgstr "重čØ­ęŖ¢č¦–" msgctxt "Operator" @@ -44918,7 +48202,7 @@ msgstr "向äø‹ę²å‹•" msgid "Scroll the view down" -msgstr "向äø‹ę²å‹•č¦–圖" +msgstr "向äø‹ę²å‹•ęŖ¢č¦–" msgid "Page" @@ -44935,7 +48219,7 @@ msgstr "å‘å·¦ę²å‹•" msgid "Scroll the view left" -msgstr "å‘å·¦ę²å‹•č¦–åœ–" +msgstr "å‘å·¦ę²å‹•ęŖ¢č¦–" msgctxt "Operator" @@ -44944,7 +48228,7 @@ msgstr "å‘å³ę²å‹•" msgid "Scroll the view right" -msgstr "å‘å³ę²å‹•č¦–åœ–" +msgstr "å‘å³ę²å‹•ęŖ¢č¦–" msgctxt "Operator" @@ -44953,7 +48237,7 @@ msgstr "向äøŠę²å‹•" msgid "Scroll the view up" -msgstr "向äøŠę²å‹•č¦–圖" +msgstr "向äøŠę²å‹•ęŖ¢č¦–" msgctxt "Operator" @@ -44962,17 +48246,17 @@ msgstr "ę²å‹•å™Øä½æē”Ø" msgid "Scroll view by mouse click and drag" -msgstr "ä½æē”Øę»‘é¼ é»žę“Šęˆ–ę‹–ę›³ä¾†ę²å‹•č¦–åœ–" +msgstr "ä½æē”Øę»‘é¼ é»žę“Šęˆ–ę‹–ę›³ä¾†ę²å‹•ęŖ¢č¦–" msgctxt "Operator" msgid "Smooth View 2D" -msgstr "å¹³ę»‘č¦–åœ– 2D" +msgstr "å¹³ę»‘ęŖ¢č¦– 2D" msgctxt "Operator" msgid "Zoom 2D View" -msgstr "čŖæē„¦ 2D č¦–åœ–" +msgstr "čŖæē„¦ 2D ęŖ¢č¦–" msgid "Zoom Factor X" @@ -44997,7 +48281,7 @@ msgstr "要ē§»é™¤ēš„čƒŒę™Æ影像ē“¢å¼•" msgid "Set camera view to active view" -msgstr "å°‡ę”å½±ę©Ÿč¦–åœ–čØ­ē‚ŗ作ē”Øäø­č¦–圖" +msgstr "å°‡ę”å½±ę©ŸęŖ¢č¦–čØ­ē‚ŗ作ē”Øäø­ęŖ¢č¦–" msgctxt "Operator" @@ -45042,11 +48326,11 @@ msgstr "要ä½æē”Øēš„預čØ­ęŖ”視點" msgctxt "Operator" msgid "Dolly View" -msgstr "čµ°é”č¦–åœ–" +msgstr "čµ°é”ęŖ¢č¦–" msgid "Dolly in/out in the view" -msgstr "åœØč¦–åœ–äø­å‰/å¾Œčµ°é”" +msgstr "åœØęŖ¢č¦–äø­å‰/å¾Œčµ°é”" msgctxt "Operator" @@ -45064,7 +48348,7 @@ msgstr "區域ęŖ¢č¦–" msgid "Toggle display of selected object(s) separately and centered in view" -msgstr "åˆ†åˆ„åˆ‡ę›ę‰€éøē‰©é«”ēš„é”Æē¤ŗļ¼Œäø¦ē½®äø­åœØč¦–åœ–äø­" +msgstr "åˆ†åˆ„åˆ‡ę›ę‰€éøē‰©é«”ēš„é”Æē¤ŗļ¼Œäø¦ē½®äø­åœØęŖ¢č¦–äø­" msgid "Frame Selected" @@ -45072,7 +48356,7 @@ msgstr "聚ē„¦č¦–ēŖ—äø­ēš„éø取ē‰©" msgid "Move the view" -msgstr "ē§»å‹•č¦–圖" +msgstr "ē§»å‹•ęŖ¢č¦–" msgid "Interactively navigate around the scene (uses the mode (walk/fly) preference)" @@ -45080,34 +48364,34 @@ msgstr "äŗ’å‹•å¼å°Žč¦½å “ę™Æ (ꎔē”Øęؔ式 (č”Œčµ°/é£›č”Œ) 偏儽čح定)" msgid "Pan and rotate the view with the 3D mouse" -msgstr "仄 3D ę»‘é¼ å°č¦–åœ–ę–é”äø¦ę—‹č½‰" +msgstr "仄 3D ę»‘é¼ å°ęŖ¢č¦–ę–é”äø¦ę—‹č½‰" msgctxt "Operator" msgid "NDOF Orbit View" -msgstr "NDOF ē¹žč»Œč¦–圖" +msgstr "NDOF ē¹žč»ŒęŖ¢č¦–" msgid "Orbit the view using the 3D mouse" -msgstr "ä½æē”Ø 3D ę»‘é¼ ē’°ē¹žč¦–圖" +msgstr "ä½æē”Ø 3D ę»‘é¼ ē’°ē¹žęŖ¢č¦–" msgctxt "Operator" msgid "NDOF Orbit View with Zoom" -msgstr "NDOF ē¹žč»Œč¦–圖加遠čæ‘čŖæē„¦" +msgstr "NDOF ē¹žč»ŒęŖ¢č¦–加遠čæ‘čŖæē„¦" msgid "Orbit and zoom the view using the 3D mouse" -msgstr "ä½æē”Ø 3D ę»‘é¼ ē’°ē¹žč¦–圖äø¦čŖæę•“č¦–åœ–é čæ‘" +msgstr "ä½æē”Ø 3D ę»‘é¼ ē’°ē¹žęŖ¢č¦–äø¦čŖæę•“ęŖ¢č¦–遠čæ‘" msgctxt "Operator" msgid "NDOF Pan View" -msgstr "NDOF ę–é”č¦–åœ–" +msgstr "NDOF ę–é”ęŖ¢č¦–" msgid "Pan the view with the 3D mouse" -msgstr "仄 3D ę»‘é¼ å°č¦–åœ–ę–é”" +msgstr "仄 3D ę»‘é¼ å°ęŖ¢č¦–ę–é”" msgctxt "Operator" @@ -45116,7 +48400,7 @@ msgstr "將作ē”Øäø­ē‰©é«”čØ­ē‚ŗę”å½±ę©Ÿ" msgid "Set the active object as the active camera for this view or scene" -msgstr "čح定作ē”Øäø­ē‰©é«”ē‚ŗę­¤č¦–åœ–ęˆ–å “ę™Æēš„作ē”Øäø­ę”å½±ę©Ÿ" +msgstr "čح定作ē”Øäø­ē‰©é«”ē‚ŗę­¤ęŖ¢č¦–ęˆ–å “ę™Æēš„作ē”Øäø­ę”å½±ę©Ÿ" msgctxt "Operator" @@ -45135,11 +48419,25 @@ msgstr "čØ­å®šę”†éøē®—ē¹Ŗēš„é‚Šē•Œäø¦å•Ÿē”Øꔆéøē®—ē¹Ŗ" msgctxt "Operator" msgid "Rotate View" -msgstr "ę—‹č½‰č¦–åœ–" +msgstr "ę—‹č½‰ęŖ¢č¦–" msgid "Rotate the view" -msgstr "ę—‹č½‰č¦–åœ–" +msgstr "ę—‹č½‰ęŖ¢č¦–" + + +msgctxt "Operator" +msgid "Ruler Add" +msgstr "ę·»åŠ å°ŗč¦" + + +msgid "Add ruler" +msgstr "ę·»åŠ å°ŗč¦" + + +msgctxt "Operator" +msgid "Ruler Remove" +msgstr "ē§»é™¤å°ŗč¦" msgid "Enumerate" @@ -45168,7 +48466,7 @@ msgstr "ē‰©é«”名ēر" msgctxt "Operator" msgid "Smooth View" -msgstr "å¹³ę»‘č¦–åœ–" +msgstr "å¹³ę»‘ęŖ¢č¦–" msgctxt "Operator" @@ -45224,6 +48522,15 @@ msgid "Snap selected item(s) to their nearest grid division" msgstr "éø取項ē›®åøé™„č‡³ęœ€čæ‘ēš„ę ¼ē·šē“°åˆ†äŗ¤å‰é»ž" +msgctxt "Operator" +msgid "Flip MatCap" +msgstr "ēæ»č½‰ęč³Ŗꍕꍉēƒ" + + +msgid "Flip MatCap" +msgstr "ēæ»č½‰ęč³Ŗꍕꍉēƒ" + + msgctxt "Operator" msgid "Toggle Shading Type" msgstr "åˆ‡ę›č‘—č‰²č™•ē†é”žåž‹" @@ -45241,6 +48548,11 @@ msgid "Rendered" msgstr "ē®—ē¹Ŗ" +msgctxt "Operator" +msgid "Toggle X-Ray" +msgstr "åˆ‡ę› X 光" + + msgid "View all objects in scene" msgstr "ęŖ¢č¦–å “ę™Æäø­ēš„å…ØéƒØē‰©é«”" @@ -45270,59 +48582,87 @@ msgid "View" msgstr "ęŖ¢č¦–" +msgctxt "View3D" +msgid "Left" +msgstr "å·¦" + + +msgctxt "View3D" +msgid "Right" +msgstr "右" + + msgctxt "View3D" msgid "Bottom" -msgstr "åŗ•éƒØ" +msgstr "äø‹" + + +msgid "View from the bottom" +msgstr "從äø‹é¢ęŖ¢č¦–" msgctxt "View3D" msgid "Top" -msgstr "頂éƒØ" +msgstr "äøŠ" + + +msgid "View from the top" +msgstr "從äøŠé¢ęŖ¢č¦–" + + +msgctxt "View3D" +msgid "Front" +msgstr "前" + + +msgctxt "View3D" +msgid "Back" +msgstr "後" msgctxt "Operator" msgid "View Lock Center" -msgstr "č¦–åœ–éŽ–å®šē½®äø­" +msgstr "ęŖ¢č¦–鎖定ē½®äø­" msgid "Center the view lock offset" -msgstr "č®“č¦–åœ–éŽ–å®šåē§»ē½®äø­" +msgstr "讓ęŖ¢č¦–鎖定偏ē§»ē½®äø­" msgctxt "Operator" msgid "Center View to Mouse" -msgstr "å°‡č¦–åœ–ē½®äø­č‡³ęøøęؙ" +msgstr "將ęŖ¢č¦–ē½®äø­č‡³ęøøęؙ" msgid "Center the view to the Z-depth position under the mouse cursor" -msgstr "å°‡č¦–åœ–ē½®äø­č‡³ę»‘é¼ ęøøęؙäø‹ Z ę·±åŗ¦ēš„位ē½®" +msgstr "將ęŖ¢č¦–ē½®äø­č‡³ę»‘é¼ ęøøęؙäø‹ Z ę·±åŗ¦ēš„位ē½®" msgctxt "Operator" msgid "View Lock Clear" -msgstr "č¦–åœ–éŽ–å®šęø…除" +msgstr "ęŖ¢č¦–鎖定ęø…除" msgid "Clear all view locking" -msgstr "ęø…é™¤ę‰€ęœ‰č¦–åœ–éŽ–å®š" +msgstr "ęø…é™¤ę‰€ęœ‰ęŖ¢č¦–鎖定" msgctxt "Operator" msgid "View Lock to Active" -msgstr "č¦–åœ–éŽ–å®šč‡³ä½œē”Ø項" +msgstr "ęŖ¢č¦–éŽ–å®šč‡³ä½œē”Ø項" msgid "Lock the view to the active object/bone" -msgstr "éŽ–å®šč¦–åœ–č‡³ä½œē”Øäø­ē‰©é«”/éŖØéŖ¼" +msgstr "鎖定ęŖ¢č¦–č‡³ä½œē”Øäø­ē‰©é«”/éŖØéŖ¼" msgctxt "Operator" msgid "View Orbit" -msgstr "č¦–åœ–ē¹žč»Œ" +msgstr "ęŖ¢č¦–ē¹žč»Œ" msgid "Orbit the view" -msgstr "č¦–åœ–ē¹žč»Œ" +msgstr "ęŖ¢č¦–ē¹žč»Œ" msgid "Orbit" @@ -45330,7 +48670,7 @@ msgstr "ē¹žč»Œ" msgid "Direction of View Orbit" -msgstr "č¦–åœ–ē¹žč»Œēš„ę–¹å‘" +msgstr "ęŖ¢č¦–ē¹žč»Œēš„ę–¹å‘" msgid "Orbit Left" @@ -45354,7 +48694,7 @@ msgstr "ę–é”" msgid "Direction of View Pan" -msgstr "č¦–åœ–ę–é”ēš„ę–¹å‘" +msgstr "ęŖ¢č¦–ę–é”ēš„ę–¹å‘" msgid "Pan Left" @@ -45374,7 +48714,7 @@ msgstr "äø‹ę–鏔" msgid "Switch the current view from perspective/orthographic projection" -msgstr "åœØé€č¦–åœ–/ę­£č¦–åœ–ä¹‹é–“åˆ‡ę›ē›®å‰č¦–圖ēš„ęŠ•å½±ę³•" +msgstr "åœØé€č¦–åœ–/ę­£č¦–åœ–ä¹‹é–“åˆ‡ę›ē›®å‰ęŖ¢č¦–ēš„ęŠ•å½±ę³•" msgctxt "Operator" @@ -45383,11 +48723,11 @@ msgstr "ęŖ¢č¦–ę²å‹•" msgid "Roll the view" -msgstr "ę²å‹•č¦–åœ–" +msgstr "ę²å‹•ęŖ¢č¦–" msgid "Move the view to the selection center" -msgstr "å°‡č¦–åœ–ē§»å‹•č‡³éø取項äø­åæƒ" +msgstr "將ęŖ¢č¦–ē§»å‹•č‡³éø取項äø­åæƒ" msgctxt "Operator" @@ -45400,7 +48740,7 @@ msgstr "äŗ’å‹•å¼č”Œčµ°ę–¼å “ę™Æ" msgid "Zoom in/out in the view" -msgstr "ꋉčæ‘/ę‹‰é č¦–åœ–" +msgstr "ꋉčæ‘/ꋉ遠ęŖ¢č¦–" msgid "Zoom in the view to the nearest object contained in the border" @@ -45425,12 +48765,28 @@ msgid "Export current scene in an Alembic archive" msgstr "仄 Alembic 封存ęŖ”åŒÆå‡ŗē›®å‰ēš„å “ę™Æ" +msgid "Export Particles" +msgstr "åŒÆå‡ŗē²’子" + + +msgid "Geometry Samples" +msgstr "幾何ęØ£ęœ¬" + + +msgid "Export normals" +msgstr "åŒÆå‡ŗę³•ē·š" + + +msgid "Shutter Close" +msgstr "åæ«é–€é—œé–‰" + + msgid "Use Instancing" msgstr "ä½æē”ØåƦ例" msgid "Export color attributes" -msgstr "åŒÆå‡ŗč‰²å½©å±¬ę€§" +msgstr "åŒÆå‡ŗč‰²å½©ē‰¹ę€§" msgctxt "Operator" @@ -45438,6 +48794,10 @@ msgid "Import Alembic" msgstr "åŒÆå…„ Alembic" +msgid "Validate Meshes" +msgstr "é©—č­‰ē¶²ę ¼" + + msgctxt "Operator" msgid "Append" msgstr "čæ½åŠ " @@ -45447,6 +48807,10 @@ msgid "Append from a Library .blend file" msgstr "å¾žč—åŗ« .blend ęŖ”ę”ˆäø­é™„加" +msgid "Instance Collections" +msgstr "åƦ例集ē›’" + + msgid "Link the objects or data-blocks rather than appending" msgstr "連ēµå°č±”ꈖę•øꓚēµ„å”Šč€Œéžé™„åŠ " @@ -45529,6 +48893,10 @@ msgid "Only export deforming bones with armatures" msgstr "僅åŒÆå‡ŗ含éŖØꞶēš„č®Šå½¢éŖØéŖ¼" +msgid "Decomposed" +msgstr "åˆ†č§£" + + msgid "Modifier resolution for export" msgstr "åŒÆå‡ŗē”Øēš„äæ®ę”¹å™Øč§£ęžåŗ¦" @@ -45561,10 +48929,34 @@ msgid "Export all Shape Keys from Mesh Objects" msgstr "從ē¶²ę ¼ē‰©é«”åŒÆå‡ŗę‰€ęœ‰å¤–å½¢éµ" +msgid "Export Section" +msgstr "åŒÆå‡ŗéƒØ分" + + +msgid "Geom" +msgstr "幾何" + + +msgid "Arm" +msgstr "éŖØꞶ" + + +msgid "Armature export section" +msgstr "éŖØꞶåŒÆå‡ŗéƒØ分" + + msgid "Anim" msgstr "動ē•«" +msgid "Extra" +msgstr "锍外" + + +msgid "Collada export section" +msgstr "Collada åŒÆå‡ŗéƒØ分" + + msgid "Selection Only" msgstr "åƒ…ę‰€éø項" @@ -45606,6 +48998,10 @@ msgid "Load a Collada file" msgstr "č¼‰å…„äø€ä»¶ Collada ęŖ”ę”ˆ" +msgid "Auto Connect" +msgstr "č‡Ŗå‹•é€£ęŽ„" + + msgid "Import Units" msgstr "åŒÆ兄單位" @@ -45696,6 +49092,11 @@ msgid "Scene Unit" msgstr "å “ę™Æ單位" +msgctxt "Operator" +msgid "Reload Library" +msgstr "é‡ę–°č¼‰å…„č—åŗ«" + + msgctxt "Operator" msgid "Link" msgstr "連ēµ" @@ -45714,10 +49115,19 @@ msgid "Print memory statistics to the console" msgstr "將čØ˜ę†¶é«”ēµ±čØˆč³‡ę–™åˆ—å°č‡³äø»ęŽ§č‡ŗ" +msgid "Export Materials with PBR Extensions" +msgstr "仄 PBR ę““å……åŒÆå‡ŗꝐč³Ŗ" + + msgid "Import OBJ groups as vertex groups" msgstr "將 OBJ ē¾¤ēµ„åŒÆå…„ē‚ŗ頂點ē¾¤ēµ„" +msgctxt "Operator" +msgid "Open" +msgstr "開啟" + + msgid "Open a Blender file" msgstr "開啟äø€å€‹ Blender ęŖ”ę”ˆ" @@ -45739,7 +49149,7 @@ msgstr "äæ”ä»»ēš„來ęŗ" msgid "Allow .blend file to execute scripts automatically, default available from system preferences" -msgstr "允čر .blend ęŖ”č‡Ŗå‹•åŸ·č”ŒęŒ‡ä»¤ēØæļ¼Œē³»ēµ±åå„½čح定äø­é čØ­ē‚ŗåÆē”Ø" +msgstr "允čر .blend ęŖ”č‡Ŗå‹•åŸ·č”Œå‘½ä»¤ēØæļ¼Œē³»ēµ±åå„½čح定äø­é čØ­ē‚ŗåÆē”Ø" msgid "Set the active operator to its default values" @@ -45759,11 +49169,19 @@ msgid "Export PLY" msgstr "åŒÆå‡ŗ PLY" +msgid "ASCII Format" +msgstr "ASCII ę ¼å¼" + + msgctxt "Operator" msgid "Import PLY" msgstr "åŒÆå…„ PLY" +msgid "Save Backups" +msgstr "儲存備份" + + msgctxt "Operator" msgid "Clear Data-Block Previews" msgstr "ęø…除ę•øꓚēµ„å”Šé č¦½" @@ -45964,6 +49382,10 @@ msgid "Number of times to redraw" msgstr "重ē¹Ŗēš„ꬔę•ø" +msgid "Time Limit" +msgstr "ę™‚é–“é™åˆ¶" + + msgid "Draw Region" msgstr "ē¹Ŗč£½å€å”Š" @@ -46046,6 +49468,10 @@ msgid "Search Operator" msgstr "ęœå°‹ę“ä½œå™Ø" +msgid "Initial Query" +msgstr "åˆå§‹ęŸ„č©¢" + + msgctxt "Operator" msgid "Set Stereo 3D" msgstr "čح定ē«‹é«” 3D" @@ -46055,6 +49481,14 @@ msgid "Toggle 3D stereo support for current window (or change the display mode)" msgstr "åˆ‡ę›ē›®å‰č¦–ēŖ—ēš„ 3D ē«‹é«”ę”Æę“ (ꈖę˜Æ變ꛓé”Æē¤ŗęؔ式)" +msgid "Red-Cyan" +msgstr "ē“…č‰²-é’č‰²" + + +msgid "Green-Magenta" +msgstr "ē¶ č‰²-ę“‹ē“…č‰²" + + msgid "Yellow-Blue" msgstr "黃-藍" @@ -46063,8 +49497,32 @@ msgid "Anaglyph" msgstr "굮雕" +msgid "Interlace" +msgstr "äŗ¤éŒÆ" + + +msgid "Time Sequential" +msgstr "Ꙃ間順åŗ" + + +msgid "Side-by-Side" +msgstr "左右äø¦ęŽ’" + + msgid "Top-Bottom" -msgstr "頂éƒØ/åŗ•éƒØ" +msgstr "äøŠäø‹" + + +msgid "Row Interleaved" +msgstr "列äŗ¤éŒÆ" + + +msgid "Column Interleaved" +msgstr "ꬄäŗ¤éŒÆ" + + +msgid "Checkerboard Interleaved" +msgstr "ę£‹ē›¤äŗ¤éŒÆ" msgid "Swap Left/Right" @@ -46094,6 +49552,10 @@ msgid "Export STL" msgstr "åŒÆå‡ŗ STL" +msgid "Batch Export" +msgstr "ę‰¹ę¬”åŒÆå‡ŗ" + + msgid "Apply current scene's unit (as defined by unit scale) to exported data" msgstr "將ē›®å‰å “ę™Æēš„單位 (å¦‚å–®ä½č¦ęØ”ę‰€å®šē¾©) å„—ē”Øč‡³åŒÆå‡ŗč³‡ę–™äø­" @@ -46103,20 +49565,64 @@ msgid "Import STL" msgstr "åŒÆå…„ STL" +msgid "Set Fallback" +msgstr "čØ­å®šå¾Œå‚™ę©Ÿåˆ¶" + + +msgid "Cycle" +msgstr "å¾Ŗē’°" + + msgid "URL to open" msgstr "č¦é–‹å•Ÿēš„ URL" +msgid "Site" +msgstr "ē¶²ē«™" + + +msgid "Meters" +msgstr "公å°ŗ" + + +msgid "Kilometers" +msgstr "公里" + + +msgid "Centimeters" +msgstr "公分" + + +msgid "Inches" +msgstr "č‹±å‹" + + +msgid "Feet" +msgstr "č‹±å‘Ž" + + +msgid "Yards" +msgstr "ē¢¼" + + msgid "Subdivision" msgstr "ē“°åˆ†" +msgid "Tessellate" +msgstr "鑲嵌ē“°é‹Ŗ" + + +msgid "Preserve" +msgstr "äæē•™" + + msgid "UV Maps" msgstr "UV ę˜ å°„" msgid "Instancing" -msgstr "åƦ例" +msgstr "åƦ例化" msgid "Textures Directory" @@ -46135,6 +49641,11 @@ msgid "Scene Instancing" msgstr "å “ę™ÆåƦ例" +msgctxt "Operator" +msgid "Close Window" +msgstr "é—œé–‰č¦–ēŖ—" + + msgctxt "Operator" msgid "Toggle Window Fullscreen" msgstr "åˆ‡ę›č¦–ēŖ—å…Øčž¢å¹•" @@ -46248,7 +49759,7 @@ msgstr "åæ«é€Ÿå°ŽčˆŖ" msgid "For multires, show low resolution while navigating the view" -msgstr "č‡³ę–¼å¤šč§£ęžåŗ¦ļ¼Œē•¶å°ŽčˆŖč¦–åœ–ę™‚é”Æē¤ŗä½Žč§£ęžåŗ¦" +msgstr "č‡³ę–¼å¤šč§£ęžåŗ¦ļ¼Œē•¶å°ŽčˆŖęŖ¢č¦–Ꙃé”Æē¤ŗä½Žč§£ęžåŗ¦" msgid "Tile X" @@ -46291,6 +49802,10 @@ msgid "Mirror brush across the Z axis" msgstr "對ē­†åˆ·ę©«č¶Š X č»ø鏔像" +msgid "Paint Mode" +msgstr "ē¹Ŗč£½ęؔ式" + + msgid "Image Paint" msgstr "影像ē¹Ŗč£½" @@ -46319,6 +49834,18 @@ msgid "Invert the stencil layer" msgstr "åč½‰ę²¹å°č Ÿē“™åˆ†å±¤" +msgid "Missing Materials" +msgstr "éŗå¤±ęč³Ŗ" + + +msgid "Missing Stencil" +msgstr "éŗ失ęØ”ęæ" + + +msgid "Missing UVs" +msgstr "éŗ失 UV" + + msgid "Single Image" msgstr "單äø€å½±åƒ" @@ -46335,6 +49862,10 @@ msgid "Extend paint beyond the faces UVs to reduce seams (in pixels, slower)" msgstr "ę““å±•ē¹Ŗč£½č¶…å‡ŗ面 UV 來降低ēø«åˆ (單位ē‚ŗ像ē“ ļ¼Œč¼ƒē·©ę…¢)" +msgid "Stencil Color" +msgstr "ęØ”ęæč‰²å½©" + + msgid "Stencil Image" msgstr "ę²¹å°č Ÿē“™å½±åƒ" @@ -46348,7 +49879,7 @@ msgstr "귘éø" msgid "Ignore faces pointing away from the view (faster)" -msgstr "åæ½ē•„å¾žč¦–åœ–ęŒ‡å‡ŗēš„面 (č¼ƒåæ«é€Ÿ)" +msgstr "åæ½ē•„從ęŖ¢č¦–ęŒ‡å‡ŗēš„面ļ¼ˆč¼ƒåæ«é€Ÿļ¼‰" msgid "Clone Map" @@ -46360,7 +49891,7 @@ msgstr "ä½æē”Ø另äø€å€‹ UV ę˜ å°„ä½œē‚ŗę‹“č£½ä¾†ęŗļ¼Œå¦å‰‡ä½æē”Ø 3D ęøøęؙ作 msgid "Paint most on faces pointing towards the view" -msgstr "大多ę•øē¹Ŗč£½ę–¼ęŒ‡å‘č¦–åœ–ēš„面" +msgstr "大多ę•øē¹Ŗč£½ę–¼ęŒ‡å‘ęŖ¢č¦–ēš„面" msgid "Occlude" @@ -46380,7 +49911,7 @@ msgstr "從 UV ę˜ å°„ęŒ‰éˆ•čح定遮ē½©åˆ†å±¤" msgid "Detail Percentage" -msgstr "č©³ē“°ē™¾åˆ†ęƔ" +msgstr "ē“°ēƀē™¾åˆ†ęƔ" msgid "Detail Refine Method" @@ -46419,6 +49950,14 @@ msgid "Constant Detail" msgstr "ę†å®šē“°ēƀ" +msgid "Brush Detail" +msgstr "ē­†åˆ·ē“°ēƀ" + + +msgid "Manual Detail" +msgstr "ę‰‹å‹•ē“°ēƀ" + + msgid "Lock X" msgstr "鎖定 X" @@ -46463,10 +50002,6 @@ msgid "Use only deformation modifiers (temporary disable all constructive modifi msgstr "僅ä½æē”Øč®Šå½¢äæ®ę”¹å™Ø (ęš«ę™‚åœē”Øꉀ꜉å»ŗē«‹ę€§äæ®ę”¹å™Øļ¼Œå¤šč§£ęžåŗ¦äæ®ę”¹å™Ø除外)" -msgid "UV Sculpting" -msgstr "UV 雕唑" - - msgid "Properties of vertex and weight paint mode" msgstr "é ‚é»žčˆ‡ę¬Šé‡ē¹Ŗč£½ęؔ式ēš„å±¬ę€§" @@ -46511,6 +50046,14 @@ msgid "Motion Tracking" msgstr "é‹å‹•č·Ÿč¹¤" +msgid "Measurement" +msgstr "ęø¬é‡" + + +msgid "Snapping" +msgstr "åø附" + + msgid "Transform Orientations" msgstr "č®Šę›ę–¹å‘" @@ -46519,10 +50062,22 @@ msgid "Stroke Placement" msgstr "ē­†č§øę”¾ē½®" +msgid "Drawing Plane" +msgstr "ꏏē¹Ŗ平面" + + +msgid "Quad View" +msgstr "å››ę ¼ęŖ¢č¦–" + + msgid "Stereoscopy" msgstr "ē«‹é«”視č¦ŗ" +msgid "Multi Frame" +msgstr "多重ē•«ę”†" + + msgid "Auto-Masking" msgstr "č‡Ŗ動遮ē½©" @@ -46543,6 +50098,10 @@ msgid "Viewport Display" msgstr "č¦–ęŽ„å£é”Æē¤ŗ" +msgid "Custom Shape" +msgstr "č‡Ŗč؂形ē‹€" + + msgid "Camera Presets" msgstr "ę”å½±ę©Ÿé čØ­ęŖ”" @@ -46555,6 +50114,10 @@ msgid "Predefined tracking camera intrinsics" msgstr "預先定ē¾©ēš„čæ½č¹¤ę”å½±ę©Ÿå…§åœØęœ¬č³Ŗ" +msgid "Clip Display" +msgstr "å‰Ŗč¼Æé”Æē¤ŗ" + + msgid "Marker Display" msgstr "ęؙčؘé”Æē¤ŗ" @@ -46567,6 +50130,10 @@ msgid "Mask Display" msgstr "遮ē½©é”Æē¤ŗ" +msgid "Proxy/Timecode" +msgstr "代ē† / Ꙃ間ē¢¼" + + msgid "Stabilization" msgstr "ē©©å®šč™•ē†" @@ -46628,6 +50195,10 @@ msgid "Aperture" msgstr "光圈" +msgid "Caustics" +msgstr "ę•£ē„¦" + + msgid "Ray Visibility" msgstr "光ē·šåÆ見ꀧ" @@ -46664,6 +50235,10 @@ msgid "Max Bounces" msgstr "ęœ€å¤§åå½ˆę•ø" +msgid "Shutter Curve" +msgstr "åæ«é–€ę›²ē·š" + + msgid "Passes" msgstr "通遞ę•ø" @@ -46704,6 +50279,10 @@ msgid "Adjustments" msgstr "čŖæę•“" +msgid "Custom Parallax" +msgstr "č‡ŖčØ‚č¦–å·®" + + msgid "Paragraph" msgstr "ę®µč½" @@ -46720,6 +50299,10 @@ msgid "Text Boxes" msgstr "ę–‡å­—ę–¹å”Š" +msgid "OpenVDB File" +msgstr "OpenVDB ęŖ”ę”ˆ" + + msgid "Slot" msgstr "ę§½" @@ -46733,12 +50316,21 @@ msgid "Thickness" msgstr "厚åŗ¦" +msgid "Advanced Filter" +msgstr "進階過ęæ¾å™Ø" + + msgid "Bookmarks" msgstr "ę›øē±¤" msgid "Recent" -msgstr "꜀čæ‘ä½æē”Øēš„č³‡ę–™å¤¾" +msgstr "꜀čæ‘" + + +msgctxt "File browser" +msgid "Volumes" +msgstr "å„²č—å·å®—" msgid "Fluid Presets" @@ -46753,6 +50345,11 @@ msgid "Sample Line" msgstr "ęØ£ęœ¬ē·šę¢" +msgctxt "Operator" +msgid "Sample" +msgstr "ęØ£ęœ¬" + + msgctxt "Operator" msgid "Annotate" msgstr "čØ»čؘ" @@ -46793,6 +50390,21 @@ msgid "Select Lasso" msgstr "å„—ē“¢éø取" +msgctxt "Operator" +msgid "Cursor" +msgstr "ęøøęؙ" + + +msgctxt "Operator" +msgid "Grab" +msgstr "ęŠ“å–" + + +msgctxt "Operator" +msgid "Mask" +msgstr "遮ē½©" + + msgid "Tiling" msgstr "é‹Ŗꎒ" @@ -46801,6 +50413,10 @@ msgid "Texture Mask" msgstr "ē“‹ē†é®ē½©" +msgid "UDIM Tiles" +msgstr "UDIM 分唊" + + msgid "Histogram" msgstr "ē›“ę–¹åœ–" @@ -46825,14 +50441,27 @@ msgid "Backdrop" msgstr "背ę™Æ幕" +msgid "Modes" +msgstr "ęؔ式" + + msgid "Predefined node color" msgstr "預定ē¾©ēš„ēÆ€é»žč‰²å½©" +msgctxt "Operator" +msgid "Links Cut" +msgstr "åˆ‡ę–·é€£ēµ" + + msgid "Delta Transform" msgstr "增ęø›č®Šę›" +msgid "Shadow Linking" +msgstr "陰影連ēµ" + + msgid "Boid Brain" msgstr "ē¾¤é›†å€‹é«”å¤§č…¦" @@ -46849,6 +50478,16 @@ msgid "Parting" msgstr "分開" +msgctxt "ParticleSettings" +msgid "Roughness" +msgstr "ē²—ē³™åŗ¦" + + +msgctxt "ParticleSettings" +msgid "Emission" +msgstr "ę•£ē™¼" + + msgid "Field Weights" msgstr "å “åŸŸę¬Šé‡" @@ -46869,6 +50508,10 @@ msgid "Hair Dynamics" msgstr "ęƛ髮動力å­ø" +msgid "Collisions" +msgstr "ē¢°ę’ž" + + msgid "Hair Dynamics Presets" msgstr "ęƛ髮動力å­ø預čØ­ęŖ”" @@ -46877,6 +50520,10 @@ msgid "Structure" msgstr "ēµę§‹" +msgid "Hair Shape" +msgstr "ęƛ髮形ē‹€" + + msgid "Battle" msgstr "ęˆ°å “" @@ -46889,6 +50536,10 @@ msgid "Movement" msgstr "ē§»å‹•" +msgid "Deflection" +msgstr "åč½‰" + + msgid "Springs" msgstr "彈ē°§" @@ -46905,10 +50556,26 @@ msgid "Border Collisions" msgstr "邊ē·£ē¢°ę’ž" +msgid "Diffusion" +msgstr "ę““ę•£" + + +msgid "Smudge" +msgstr "å”—ęŠ¹" + + msgid "Waves" msgstr "ę³¢å½¢" +msgid "Paintmaps" +msgstr "ē¹Ŗč£½č²¼åœ–" + + +msgid "Wetmaps" +msgstr "ę½®ęæ•č²¼åœ–" + + msgid "Force Fields" msgstr "力堓" @@ -46945,6 +50612,10 @@ msgid "Aerodynamics" msgstr "ē©ŗę°£å‹•åŠ›å­ø" +msgid "Strengths" +msgstr "力量" + + msgid "Diagnostics" msgstr "čØŗę–·" @@ -46961,10 +50632,22 @@ msgid "White Balance Presets" msgstr "ē™½å¹³č””預čØ­ęŖ”" +msgid "Denoising" +msgstr "降å™Ŗ" + + +msgid "Raytracing" +msgstr "光ē·ščæ½č¹¤" + + msgid "Shadows" msgstr "陰影" +msgid "Screen Tracing" +msgstr "čž¢å¹•čæ½č¹¤" + + msgid "Encoding" msgstr "ē·Øē¢¼" @@ -46977,8 +50660,16 @@ msgid "Video" msgstr "視č؊" +msgid "FFmpeg Presets" +msgstr "FFmpeg 預čح集" + + +msgid "Hydra Debug" +msgstr "Hydra 除éŒÆ" + + msgid "Views" -msgstr "č¦–åœ–" +msgstr "ęŖ¢č¦–" msgid "Metadata" @@ -47002,14 +50693,26 @@ msgid "Box" msgstr "ę–¹ę”†" +msgid "Scene Strip Display" +msgstr "å “ę™Æē‰‡ę®µé”Æē¤ŗ" + + msgid "Proxy Settings" msgstr "代ē†čح定" +msgid "Waveforms" +msgstr "ę³¢å½¢" + + msgid "Feature Weights" msgstr "ē‰¹å¾µę¬Šé‡" +msgid "Auto Keyframing" +msgstr "č‡Ŗå‹•ę’å…„é—œéµå¹€" + + msgid "Playback" msgstr "ę’­ę”¾" @@ -47034,12 +50737,24 @@ msgid "New Objects" msgstr "ę–°å¢žē‰©é«”" +msgid "Debugging" +msgstr "除éŒÆ" + + +msgid "Prototypes" +msgstr "原型" + + +msgid "Extensions" +msgstr "ę““å……å„—ä»¶" + + msgid "Repositories" msgstr "č»Ÿé«”åŗ«" msgid "Extensions Tags" -msgstr "附加元件ęؙē±¤" +msgstr "ę““å……å„—ä»¶ęؙē±¤" msgid "Applications" @@ -47055,7 +50770,11 @@ msgstr "開ē™¼" msgid "Script Directories" -msgstr "ęŒ‡ä»¤ēØæē›®éŒ„" +msgstr "命令ēØæē›®éŒ„" + + +msgid "Touchpad" +msgstr "č§øꎧęæ" msgid "Editors" @@ -47066,6 +50785,10 @@ msgid "Menus" msgstr "éø單" +msgid "Pie Menus" +msgstr "åœ“ę“¾éø單" + + msgid "Temporary Editors" msgstr "ꚫꙂē·Øč¼Æå™Ø" @@ -47091,11 +50814,23 @@ msgstr "儲存偏儽čح定" msgid "Auto Run Python Scripts" -msgstr "č‡Ŗå‹•åŸ·č”Œ Python ęŒ‡ä»¤ēØæ" +msgstr "č‡Ŗå‹•åŸ·č”Œ Python 命令ēØæ" + + +msgid "Editor" +msgstr "ē·Øč¼Æå™Ø" msgid "Studio Lights" -msgstr "ę”å½±ę£šē‡ˆå…‰" +msgstr "ę”å½±ę£šē‡ˆ" + + +msgid "MatCaps" +msgstr "Ꝑč³Ŗꍕꍉēƒ" + + +msgid "HDRIs" +msgstr "HDRI" msgid "Cycles Render Devices" @@ -47130,6 +50865,14 @@ msgid "Panel Colors" msgstr "面ęæč‰²å½©" +msgid "Axis & Gizmo Colors" +msgstr "č»øå’Œę“ēø±å™Øč‰²å½©" + + +msgid "Icon Colors" +msgstr "圖ē¤ŗč‰²å½©" + + msgid "Shaded" msgstr "光影" @@ -47138,6 +50881,10 @@ msgid "Styles" msgstr "ęأ式" +msgid "Transparent Checkerboard" +msgstr "é€ę˜Žę£‹ē›¤" + + msgid "Menu Item" msgstr "éø單項ē›®" @@ -47170,6 +50917,14 @@ msgid "Scroll Bar" msgstr "ę²å‹•č»ø" +msgid "Tab" +msgstr "分頁ęؙē±¤" + + +msgid "Toolbar Item" +msgstr "巄具列項ē›®" + + msgid "Text Style" msgstr "ę–‡å­—ęأ式" @@ -47182,6 +50937,10 @@ msgid "Gradient Colors" msgstr "ę¼øå±¤č‰²å½©" +msgid "Mirror Options" +msgstr "鏔像éø項" + + msgid "Masking" msgstr "遮ē½©" @@ -47190,6 +50949,21 @@ msgid "Stencil Mask" msgstr "遮ē½©č Ÿē“™" +msgctxt "Operator" +msgid "Measure" +msgstr "ęø¬é‡" + + +msgctxt "Operator" +msgid "Push" +msgstr "ęŽØ送" + + +msgctxt "Operator" +msgid "Roll" +msgstr "ę²å‹•" + + msgid "Extrude freely or along an axis" msgstr "č‡Ŗē”±ę“ å‡ŗꈖę²æ著č»øē·š" @@ -47204,11 +50978,26 @@ msgid "Extrude Individual" msgstr "ꓠå‡ŗļ¼ˆå€‹åˆ„ļ¼‰" +msgctxt "Operator" +msgid "Knife" +msgstr "切割" + + +msgctxt "Operator" +msgid "Rip Edge" +msgstr "ę‹†é›¢é‚Šē·š" + + msgctxt "Operator" msgid "Draw" msgstr "ꏏē¹Ŗ" +msgctxt "Operator" +msgid "Radius" +msgstr "半徑" + + msgctxt "Operator" msgid "Interpolate" msgstr "ę’č£œ" @@ -47219,6 +51008,11 @@ msgid "Gradient" msgstr "ę¼ø層" +msgctxt "Operator" +msgid "Comb" +msgstr "ę¢³" + + msgid "Comb hairs" msgstr "åˆęˆęƛ髮" @@ -47231,10 +51025,20 @@ msgid "Add hairs" msgstr "ę·»åŠ ęƛ髮" +msgctxt "Operator" +msgid "Length" +msgstr "長åŗ¦" + + msgid "Make hairs longer or shorter" msgstr "讓ęÆ›é«®ę›“é•·ęˆ–ę›“ēŸ­" +msgctxt "Operator" +msgid "Puff" +msgstr "蓬鬆" + + msgid "Make hairs stand up" msgstr "讓ęƛ髮ē«™ē«‹" @@ -47243,6 +51047,11 @@ msgid "Cut hairs" msgstr "切割ęƛ髮" +msgctxt "Operator" +msgid "Weight" +msgstr "ę¬Šé‡" + + msgid "Weight hair particles" msgstr "ę¬Šé‡ęƛ髮ē²’子" @@ -47272,6 +51081,16 @@ msgid "Lasso Face Set" msgstr "å„—ē“¢é¢é›†" +msgctxt "Operator" +msgid "Mesh Filter" +msgstr "ē¶²ę ¼éŽęæ¾å™Ø" + + +msgctxt "Operator" +msgid "Cloth Filter" +msgstr "åøƒę–™éŽęæ¾å™Ø" + + msgctxt "Operator" msgid "Box" msgstr "ę–¹ę”†" @@ -47297,6 +51116,11 @@ msgid "Curve" msgstr "ę›²ē·š" +msgctxt "Operator" +msgid "Trim" +msgstr "äæ®å‰Ŗ" + + msgid "Post-Processing" msgstr "å¾Œč£½" @@ -47317,6 +51141,10 @@ msgid "VR Session" msgstr "VR ä½œę„­éšŽę®µ" +msgid "Viewport Feedback" +msgstr "č¦–ęŽ„å£å›žé„‹" + + msgctxt "Render Layer" msgid "Light" msgstr "ē‡ˆå…‰" @@ -48298,6 +52126,10 @@ msgid "Settings for interacting with Blender data" msgstr "Blender č³‡ę–™ēš„äŗ’å‹•čح定" +msgid "Settings for extensions" +msgstr "ę““å……å„—ä»¶ēš„čح定" + + msgid "Default paths for external files" msgstr "外éƒØęŖ”ę”ˆēš„預čØ­č·Æ徑" @@ -48327,7 +52159,7 @@ msgstr "꜀čæ‘ēš„ęœå°‹" msgid "View & Controls" -msgstr "č¦–åœ–čˆ‡ęŽ§åˆ¶é …" +msgstr "ęŖ¢č¦–čˆ‡ęŽ§åˆ¶é …" msgid "Preferences related to viewing data" @@ -48390,6 +52222,10 @@ msgid "Toggle whether the material is linked to object data or the object block" msgstr "åˆ‡ę›ęč³Ŗę˜Æ與ē‰©é«”č³‡ę–™ęˆ–ē‰©é«”唊連ēµ" +msgid "Auto-offset Margin" +msgstr "č‡Ŗ動偏ē§»é–“č·" + + msgid "Auto-offset" msgstr "č‡Ŗ動偏ē§»" @@ -48514,6 +52350,10 @@ msgid "Causes text data to be duplicated with the object" msgstr "ä½æę–‡å­—č³‡ę–™åÆéšØē‰©é«”äø€åŒč£½ä½œå‡ŗč¤‡ęœ¬" +msgid "Duplicate Volume" +msgstr "å†č£½å®¹é«”" + + msgid "Global Undo" msgstr "å…Ø域復原" @@ -48550,10 +52390,22 @@ msgid "Use Visual keying automatically for constrained objects" msgstr "ē‚ŗē“„ęŸēš„ē‰©é«”č‡Ŗ動ä½æē”ØåÆč¦–åŒ–éµč™•ē†" +msgid "Experimental features" +msgstr "åÆ¦é©—ę€§åŠŸčƒ½" + + msgid "Asset Debug Info" msgstr "ē“ ęé™¤éŒÆč³‡č؊" +msgid "EEVEE Debug" +msgstr "EEVEE 除éŒÆ" + + +msgid "Extensions Debug" +msgstr "ę““å……å„—ä»¶é™¤éŒÆ" + + msgid "New File Import Nodes" msgstr "ꖰēš„ęŖ”ę”ˆåŒÆå…„ēƀ點" @@ -48567,7 +52419,7 @@ msgstr "雕唑ē“‹ē†ē¹Ŗč£½" msgid "Undo Legacy" -msgstr "復原ļ¼ˆčˆŠå¼ļ¼‰" +msgstr "å–ę¶ˆå‹•ä½œļ¼ˆčˆŠē‰ˆļ¼‰" msgid "Use legacy undo (slower than the new default one, but may be more stable in some cases)" @@ -48575,7 +52427,7 @@ msgstr "ä½æē”ØčˆŠå¼å¾©åŽŸļ¼ˆęÆ”ę–°ēš„預čØ­å¾©åŽŸę–¹å¼ę…¢ļ¼Œä½†ęŸäŗ›ęƒ…ę³äø‹ msgid "Extension Repositories" -msgstr "é™„åŠ å…ƒä»¶č»Ÿé«”åŗ«" +msgstr "ę““å……å„—ä»¶č»Ÿé«”åŗ«" msgid "Animation Player" @@ -48703,7 +52555,7 @@ msgstr "ę‰‹å‹•å„²å­˜ę™‚ļ¼ŒåœØē›®å‰ē›®éŒ„äø­č¦ē¶­č­·ēš„čˆŠē‰ˆęœ¬ę•ø" msgid "Python Scripts Directory" -msgstr "Python ęŒ‡ä»¤ēØæē›®éŒ„" +msgstr "Python 命令ēØæē›®éŒ„" msgid "Show Hidden Files/Data-Blocks" @@ -48767,7 +52619,7 @@ msgstr "č¼‰å…„ .blend ęŖ”ę”ˆę™‚č¼‰å…„ä½æē”Øč€…ä»‹é¢čØ­ē½®" msgid "Allow any .blend file to run scripts automatically (unsafe with blend files from an untrusted source)" -msgstr "允čØ±ä»»ę„ .blend ęŖ”均åÆč‡Ŗå‹•åŸ·č”ŒęŒ‡ä»¤ēØæ (å¦‚ęžœ blend ęŖ”來č‡ŖęœŖ受äæ”ä»»ēš„來ęŗę™‚å°‡äøå®‰å…Ø)" +msgstr "允čØ±ä»»ę„ .blend ęŖ”均åÆč‡Ŗå‹•åŸ·č”Œå‘½ä»¤ēØæ (å¦‚ęžœ blend ęŖ”來č‡ŖęœŖ受äæ”ä»»ēš„來ęŗę™‚å°‡äøå®‰å…Ø)" msgid "Tabs as Spaces" @@ -48883,7 +52735,7 @@ msgstr "åœØę—‹č½‰éŽē؋äø­é”Æē¤ŗäø­åæƒå’Œåŗ§ęؙč»ø" msgid "NDOF View Rotation" -msgstr "NDOF č¦–åœ–ę—‹č½‰" +msgstr "NDOF ęŖ¢č¦–ę—‹č½‰" msgid "Rotation style in the viewport" @@ -48914,6 +52766,10 @@ msgid "Softness" msgstr "꟔åŗ¦" +msgid "Tablet API" +msgstr "ē¹Ŗ圖ęæ API" + + msgid "Wintab" msgstr "Wintab" @@ -48923,7 +52779,7 @@ msgstr "č‡Ŗå‹•é€č¦–ę³•" msgid "Automatically switch between orthographic and perspective when changing from top/front/side views" -msgstr "åœØ頂/前/å“č¦–åœ–ä¹‹é–“ę›“ę›ę™‚ļ¼Œč‡Ŗ動åœØę­£č¦–ę³•čˆ‡é€č¦–ę³•ä¹‹é–“åˆ‡ę›" +msgstr "åœØäøŠ/前/å“č¦–åœ–ęŖ¢č¦–ä¹‹é–“ę›“ꏛꙂļ¼Œč‡Ŗ動åœØę­£č¦–ę³•čˆ‡é€č¦–ę³•ä¹‹é–“åˆ‡ę›" msgid "Moving things with a mouse drag confirms when releasing the button" @@ -48947,13 +52803,17 @@ msgstr "č‡Ŗå‹•ę·±åŗ¦" msgid "Use the depth under the mouse to improve view pan/rotate/zoom functionality" -msgstr "ä½æē”Øę»‘é¼ äø‹ēš„ę·±åŗ¦ä¾†ę”¹å–„č¦–åœ–ēš„ę–é”/ę—‹č½‰/čŖæē„¦åŠŸčƒ½" +msgstr "ä½æē”Øę»‘é¼ äø‹ēš„ę·±åŗ¦ä¾†ę”¹å–„ęŖ¢č¦–ēš„ę–é”/ę—‹č½‰/čŖæē„¦åŠŸčƒ½" msgid "Emulate 3 Button Mouse" msgstr "ęØ”ę“¬ 3 éµę»‘é¼ " +msgid "Multi-touch Gestures" +msgstr "多點č§øęŽ§ę‰‹å‹¢" + + msgid "When entering numbers while transforming, default to advanced mode for full math expression evaluation" msgstr "åœØé€²č”Œč½‰ę›ę™‚č¼øå…„ę•ø字ļ¼Œé čØ­ä½æē”Ø高ē“šęØ”å¼é€²č”Œå®Œę•“ēš„č”Øé”å¼č©•ä¼°" @@ -48963,7 +52823,7 @@ msgstr "將éø取項ē”Ø作ę؞ē“é»ž" msgid "Zoom in towards the mouse pointer's position in the 3D view, rather than the 2D window center" -msgstr "åœØ 3D č¦–åœ–äø­ęœę»‘é¼ ęŒ‡ęؙ位ē½®é čæ‘čŖæē„¦ļ¼Œč€Œäøę˜Æ 2D 視ēŖ—äø­åæƒ" +msgstr "åœØ 3D ęŖ¢č¦–äø­ęœę»‘é¼ ęŒ‡ęؙ位ē½®é čæ‘čŖæē„¦ļ¼Œč€Œäøę˜Æ 2D 視ēŖ—äø­åæƒ" msgid "Orbit Method" @@ -49050,12 +52910,16 @@ msgid "Number of samples used by the audio mixing buffer" msgstr "ē”Øę–¼éŸ³čØŠę··åˆč™•ē†ē·©č”ēš„ęØ£ęœ¬ę•ø" +msgid "256 Samples" +msgstr "256 取ęØ£" + + msgid "Set audio mixing buffer size to 256 samples" msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 256 個ęØ£ęœ¬" msgid "512 Samples" -msgstr "512 個ęØ£ęœ¬" +msgstr "512 取ęØ£" msgid "Set audio mixing buffer size to 512 samples" @@ -49063,7 +52927,7 @@ msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 512 個ęØ£ęœ¬" msgid "1024 Samples" -msgstr "1024 個ęØ£ęœ¬" +msgstr "1024 取ęØ£" msgid "Set audio mixing buffer size to 1024 samples" @@ -49071,7 +52935,7 @@ msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 1024 個ęØ£ęœ¬" msgid "2048 Samples" -msgstr "2048 個ęØ£ęœ¬" +msgstr "2048 取ęØ£" msgid "Set audio mixing buffer size to 2048 samples" @@ -49079,7 +52943,7 @@ msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 2048 個ęØ£ęœ¬" msgid "4096 Samples" -msgstr "4096 個ęØ£ęœ¬" +msgstr "4096 取ęØ£" msgid "Set audio mixing buffer size to 4096 samples" @@ -49087,7 +52951,7 @@ msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 4096 個ęØ£ęœ¬" msgid "8192 Samples" -msgstr "8192 個ęØ£ęœ¬" +msgstr "8192 取ęØ£" msgid "Set audio mixing buffer size to 8192 samples" @@ -49095,7 +52959,7 @@ msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 8192 個ęØ£ęœ¬" msgid "16384 Samples" -msgstr "16384 個ęØ£ęœ¬" +msgstr "16384 取ęØ£" msgid "Set audio mixing buffer size to 16384 samples" @@ -49103,7 +52967,7 @@ msgstr "čØ­å®šę··éŸ³č™•ē†ē·©č”å¤§å°ē‚ŗ 16384 個ęØ£ęœ¬" msgid "32768 Samples" -msgstr "32768 個ęØ£ęœ¬" +msgstr "32768 取ęØ£" msgid "Set audio mixing buffer size to 32768 samples" @@ -49183,7 +53047,7 @@ msgstr "å‰Ŗč¼Æ Alpha" msgid "Clip alpha below this threshold in the 3D textured view" -msgstr "åœØ 3D ē“‹ē†č¦–圖äø‹ä½æē”Øę­¤é–¾å€¼ä¾†é”Æē¤ŗå…¶é€ę˜Žåŗ¦" +msgstr "åœØ 3D ē“‹ē†ęŖ¢č¦–äø‹ä½æē”Øę­¤é–¾å€¼ä¾†ęˆŖåŽ»å…¶é€ę˜Žåŗ¦" msgid "GL Texture Limit" @@ -49438,6 +53302,10 @@ msgid "Path to interface font" msgstr "介面ē”Ø字型č·Æ徑" +msgid "Gizmo Size" +msgstr "꓍ēø±å™Ø大小" + + msgid "Header Position" msgstr "ęؙ頭位ē½®" @@ -49458,6 +53326,10 @@ msgid "Language used for translation" msgstr "ēæ»č­Æꉀä½æē”Øēš„čŖžč؀" +msgid "Automatic (Automatic)" +msgstr "č‡Ŗ動ļ¼ˆč‡Ŗ動ļ¼‰" + + msgid "Mini Axes Brightness" msgstr "čæ·ä½ åŗ§ęؙč»øēš„äŗ®åŗ¦" @@ -49474,6 +53346,10 @@ msgid "The axes icon's size" msgstr "åŗ§ęؙč»ø圖ē¤ŗēš„大小" +msgid "Interactive Navigation" +msgstr "äŗ’å‹•å¼å°Žč¦½" + + msgid "Sub Level Menu Open Delay" msgstr "ꬔē“šéø單開啟延遲" @@ -49550,12 +53426,20 @@ msgid "Use a column layout for toolbox" msgstr "ē‚ŗå·„å…·ē®±ä½æē”Øę¬„é…ē½®" +msgid "Developer Extras" +msgstr "開ē™¼č€…锍外項" + + +msgid "Show Extensions Update Count" +msgstr "é”Æē¤ŗę““å……å„—ä»¶ę›“ę–°ę•øē›®" + + msgid "Navigation Controls" msgstr "å°Žč¦½ęŽ§åˆ¶" msgid "Show navigation controls in 2D and 3D views which do not have scroll bars" -msgstr "åœØę²’ęœ‰ę²å‹•č»øēš„ 2D 及 3D č¦–åœ–č£”é”Æē¤ŗå°Žč¦½ęŽ§åˆ¶" +msgstr "åœØę²’ęœ‰ę²å‹•č»øēš„ 2D 及 3D ęŖ¢č¦–č£”é”Æē¤ŗå°Žč¦½ęŽ§åˆ¶" msgid "Display Object Info" @@ -49570,6 +53454,18 @@ msgid "Display splash screen on startup" msgstr "åˆå§‹å•Ÿå‹•ę™‚é”Æē¤ŗę­”čæŽē•«é¢" +msgid "Show Memory" +msgstr "é”Æē¤ŗčØ˜ę†¶é«”" + + +msgid "Show Version" +msgstr "é”Æē¤ŗē‰ˆęœ¬" + + +msgid "Show VRAM" +msgstr "é”Æē¤ŗ VRAM" + + msgid "Tooltips" msgstr "ꏐē¤ŗꔆ" @@ -49583,11 +53479,11 @@ msgstr "åœØꏐē¤ŗꔆäø­é”Æē¤ŗ Python 參ē…§" msgid "Smooth View" -msgstr "å¹³ę»‘č¦–åœ–" +msgstr "å¹³ę»‘ęŖ¢č¦–" msgid "Time to animate the view in milliseconds, zero to disable" -msgstr "č®“č¦–åœ–å‹•ē•«ēš„Ꙃ間ļ¼Œå–®ä½ē‚ŗ msļ¼Œ0 ē‚ŗ停ē”Ø" +msgstr "讓ęŖ¢č¦–å‹•ē•«ēš„Ꙃ間ļ¼Œå–®ä½ē‚ŗ msļ¼Œ0 ē‚ŗ停ē”Ø" msgid "Text Hinting" @@ -49647,7 +53543,7 @@ msgstr "ę»‘é¼ åœé§ę™‚č‡Ŗ動開啟éøå–®ęŒ‰éˆ•ęˆ–äø‹ę‹‰éø單" msgid "Save Prompt" -msgstr "č©¢å•ē¢ŗčŖ" +msgstr "å„²å­˜ęē¤ŗ" msgid "Translate Interface" @@ -49671,7 +53567,7 @@ msgstr "啟ē”ØåœØę¬Šé‡ē¹Ŗč£½ęؔ式äø­ē”Øę–¼ę¬Šé‡č¦–č¦ŗ化ēš„č‰²å½©ēƄ圍" msgid "2D View Minimum Grid Spacing" -msgstr "2D č¦–åœ–ęœ€å°ę ¼ē·šé–“č·" +msgstr "2D ęŖ¢č¦–ęœ€å°ę ¼ē·šé–“č·" msgid "Minimum number of pixels between each gridline in 2D Viewports" @@ -49714,10 +53610,34 @@ msgid "Color range used for weight visualization in weight painting mode" msgstr "åœØę¬Šé‡ē¹Ŗč£½ęؔ式äø­ę¬Šé‡č¦–č¦ŗåŒ–č™•ē†ēš„č‰²å½©ēƄ圍" +msgid "Primitive Boolean" +msgstr "原初åøƒęž—" + + +msgid "Property Definition" +msgstr "å±¬ę€§å®šē¾©" + + msgid "Animatable" msgstr "åÆ動ē•«" +msgid "Optional Argument" +msgstr "åÆéø引ę•ø" + + +msgid "Enum Flag" +msgstr "Ꞛ舉ꗗęؙ" + + +msgid "Library Editable" +msgstr "藏åŗ«åÆē·Øč¼Æ" + + +msgid "Never None" +msgstr "ę°øäøē‚ŗē„”" + + msgid "Return" msgstr "回傳值" @@ -49726,14 +53646,26 @@ msgid "Overridable" msgstr "åÆ凌駕" +msgid "Read Only" +msgstr "å”Æ讀" + + msgid "Registered" msgstr "꜉čػ冊" +msgid "Registered Optionally" +msgstr "čػ冊åÆéø" + + msgid "Runtime" msgstr "åŸ·č”Œę™‚ęœŸ" +msgid "Skip Save" +msgstr "ē•„過儲存" + + msgid "Base" msgstr "åŸŗē¤Ž" @@ -49772,6 +53704,14 @@ msgid "Case" msgstr "大小åÆ«" +msgid "Upper Case" +msgstr "大åÆ«" + + +msgid "Lower Case" +msgstr "小åÆ«" + + msgid "Find" msgstr "å°‹ę‰¾" @@ -49850,6 +53790,10 @@ msgid "Multiple Importance" msgstr "å¤šé‡é‡č¦ę€§" +msgid "Step Rate" +msgstr "ę­„é€²é€ŸēŽ‡" + + msgid "Motion Steps" msgstr "é‹å‹•ę­„ę•ø" @@ -49870,6 +53814,14 @@ msgid "Use motion blur for this object" msgstr "ę­¤ē‰©é«”ä½æē”Ø運動ęØ”ē³Š" +msgid "Use Denoising" +msgstr "ä½æē”Ø去除å™Ŗč؊" + + +msgid "Volume Direct" +msgstr "容體ē›“ꎄ" + + msgid "Bake Type" msgstr "ēƒ˜ē„™é”žåž‹" @@ -49886,6 +53838,14 @@ msgid "Adaptively blur glossy shaders after blurry bounces, to reduce noise at t msgstr "é©ę‡‰ę€§åœ°č®“å…‰ę¾¤č‘—č‰²å™ØåœØęØ”ē³Šåå½ˆä¹‹å¾Œč®Šå¾—ęØ”ē³Šļ¼ŒåÆēŠ§ē‰²ē²¾ē¢ŗåŗ¦ä»„ę›å–å™Ŗč؊ēš„降低" +msgid "Reflective Caustics" +msgstr "反射ē„¦ę•£" + + +msgid "Refractive Caustics" +msgstr "ęŠ˜å°„ē„¦ę•£" + + msgid "BVH2" msgstr "BVH2" @@ -50026,6 +53986,14 @@ msgid "Gaussian filter" msgstr "高ę–Æ過ęæ¾" +msgid "Blackman-Harris filter" +msgstr "åøƒčŠå…‹ę›¼-哈里ę–Æęæ¾é”" + + +msgid "Start Denoising" +msgstr "čµ·å§‹åŽ»é™¤å™Ŗč؊" + + msgid "Pause Preview" msgstr "ęš«åœé č¦½" @@ -50262,6 +54230,18 @@ msgid "Face Index" msgstr "面ē“¢å¼•" +msgid "VR Landmark" +msgstr "VR 地ęؙ" + + +msgid "Scene Camera" +msgstr "å “ę™Æę”å½±ę©Ÿ" + + +msgid "Custom Pose" +msgstr "č‡Ŗč؂å§æ勢" + + msgid "ID Property" msgstr "ID å±¬ę€§" @@ -50270,10 +54250,22 @@ msgid "Property that stores arbitrary, user defined properties" msgstr "å„²å­˜ä»»ę„ć€ä½æē”Øč€…å®šē¾©å±¬ę€§ēš„å±¬ę€§" +msgid "Temporal Accumulation" +msgstr "Ꙃåŗē“Æē©" + + +msgid "Read-only Integer" +msgstr "å”Æ讀ꕓę•ø" + + msgid "Region in a subdivided screen area" msgstr "čž¢å¹•å€åŸŸäø­ē“°åˆ†ēš„區唊" +msgid "Active Panel Category" +msgstr "作ē”Øäø­é¢ęæ分锞" + + msgid "Horizontal Split" msgstr "ę°“å¹³åˆ†å‰²" @@ -50299,7 +54291,7 @@ msgstr "View2D" msgid "2D view of the region" -msgstr "區唊ēš„ 2D č¦–åœ–" +msgstr "區唊ēš„ 2D ęŖ¢č¦–" msgid "Region width" @@ -50315,11 +54307,15 @@ msgstr "區唊ēš„視ēŖ—ē›øå°ę°“å¹³ä½ē½®" msgid "3D View Region" -msgstr "3D č¦–åœ–ēƄ圍" +msgstr "3D ęŖ¢č¦–ēƄ圍" msgid "3D View region data" -msgstr "3D č¦–åœ–ēÆ„åœč³‡ę–™" +msgstr "3D ęŖ¢č¦–ēÆ„åœč³‡ę–™" + + +msgid "Clip Planes" +msgstr "ęˆŖ割平面" msgid "Is Perspective" @@ -50330,8 +54326,12 @@ msgid "Perspective Matrix" msgstr "é€č¦–ę³•ēŸ©é™£" +msgid "Sync Zoom/Pan" +msgstr "åŒę­„čŖæē„¦/ę–é”" + + msgid "Sync view position between side views" -msgstr "åœØå“č¦–åœ–äø­åŒę­„č¦–åœ–ä½ē½®" +msgstr "åœØå“č¦–åœ–ęŖ¢č¦–äø­åŒę­„ęŖ¢č¦–位ē½®" msgid "Use Clip Planes" @@ -50343,7 +54343,7 @@ msgstr "ę”å½±ę©Ÿåē§»" msgid "View shift in camera view" -msgstr "ę”å½±ę©Ÿč¦–åœ–äø­ēš„č¦–åœ–åē§»" +msgstr "ę”å½±ę©ŸęŖ¢č¦–äø­ēš„ęŖ¢č¦–偏ē§»" msgid "Camera Zoom" @@ -50351,35 +54351,35 @@ msgstr "ę”å½±ę©ŸčŖæē„¦" msgid "Zoom factor in camera view" -msgstr "ę”å½±ę©Ÿč¦–åœ–ēš„遠čæ‘čŖæē„¦äæ‚ę•ø" +msgstr "ę”å½±ę©ŸęŖ¢č¦–äø­ēš„遠čæ‘čŖæē„¦äæ‚ę•ø" msgid "Distance to the view location" -msgstr "čˆ‡č¦–åœ–ä½ē½®ēš„č·é›¢" +msgstr "與ęŖ¢č¦–位ē½®ēš„č·é›¢" msgid "View Location" -msgstr "č¦–åœ–ä½ē½®" +msgstr "ęŖ¢č¦–位ē½®" msgid "View pivot location" -msgstr "č¦–åœ–ę؞ē“ä½ē½®" +msgstr "ęŖ¢č¦–ę؞ē“ä½ē½®" msgid "View Matrix" -msgstr "č¦–åœ–ēŸ©é™£" +msgstr "ęŖ¢č¦–ēŸ©é™£" msgid "View Perspective" -msgstr "č¦–åœ–é€č¦–ę³•" +msgstr "ęŖ¢č¦–é€č¦–ę³•" msgid "View Rotation" -msgstr "č¦–åœ–ę—‹č½‰" +msgstr "ęŖ¢č¦–ę—‹č½‰" msgid "Rotation in quaternions (keep normalized)" -msgstr "四元ę•øę—‹č½‰ (äæęŒę­£č¦åŒ–)" +msgstr "四元ę•øę—‹č½‰ (äæęŒę­øäø€åŒ–)" msgid "View layer name" @@ -50559,6 +54559,10 @@ msgid "GPU" msgstr "GPU" +msgid "Full precision" +msgstr "å®Œę•“ē²¾åŗ¦" + + msgid "Dither Intensity" msgstr "ęŠ–å‹•å¼·åŗ¦" @@ -50576,7 +54580,7 @@ msgstr "ē”Øę–¼ē®—ē¹Ŗēš„å¼•ę“Ž" msgid "The file extension used for saving renders" -msgstr "ē”Ø來儲存ē®—ē¹Ŗå™Øēš„ęŖ”ę”ˆå‰ÆęŖ”名" +msgstr "ē”Ø來儲存ē®—ē¹Ŗēš„ęŖ”ę”ˆå‰ÆęŖ”名" msgid "FPS" @@ -50657,6 +54661,10 @@ msgid "Unit line thickness is scaled by the proportion of the present vertical i msgstr "單位ē·šę¢åŽšåŗ¦ęœƒä¾ē›®å‰åž‚ē›“å½±åƒč§£ęžåŗ¦čˆ‡ 480 像ē“ ä¹‹é–“ēš„ęƔ例做ēø®ę”¾" +msgid "Metadata Input" +msgstr "äø­ä»‹č³‡ę–™č¼øå…„" + + msgid "Pixel Aspect X" msgstr "像ē“ åƬ長ęƔ X" @@ -50677,6 +54685,10 @@ msgid "1Ɨ" msgstr "1Ɨ" +msgid "Resolution Scale" +msgstr "č§£ęžåŗ¦ēø®ę”¾" + + msgid "Percentage scale for render resolution" msgstr "ē®—ē¹Ŗč§£ęžåŗ¦ēš„ē™¾åˆ†ęƔēø®ę”¾" @@ -50709,6 +54721,14 @@ msgid "Antialiasing" msgstr "防é‹ø齒" +msgid "Display modifiers" +msgstr "é”Æē¤ŗäæ®ę”¹å™Ø" + + +msgid "Layers Tinting" +msgstr "åˆ†å±¤ęŸ“č‰²" + + msgid "Simplify Subdivision" msgstr "ē°”化ē“°åˆ†" @@ -50742,7 +54762,11 @@ msgstr "ęˆ³čؘ備čØ»äø­č¦å‡ŗē¾ēš„č‡ŖčØ‚ę–‡å­—" msgid "Render Views" -msgstr "ē®—ē¹Ŗč¦–åœ–" +msgstr "ē®—ē¹ŖęŖ¢č¦–" + + +msgid "Maximum number of CPU cores to use simultaneously while rendering (for multi-core/CPU systems)" +msgstr "ē®—ē¹Ŗę™‚č¦åŒę­„ä½æē”Øēš„ CPU åŸ·č”Œē·’ļ¼ˆé©ē”Øę–¼å¤šę øåæƒ/CPU ē³»ēµ±ļ¼‰" msgid "Threads Mode" @@ -50798,11 +54822,11 @@ msgstr "å¦‚ęžœęœ‰å•Ÿē”Øåˆęˆēƀ點ēš„話ļ¼Œé€éŽåˆęˆå°Žē®”處ē†ē®—ē¹Ŗēµęžœ msgid "Crop to Render Region" -msgstr "å‰Ŗč£åˆ°ē®—ē¹ŖēƄ圍內" +msgstr "č£åˆ‡åˆ°ē®—ē¹ŖēƄ圍內" msgid "Crop the rendered frame to the defined render region size" -msgstr "將ē®—ē¹Ŗå‡ŗ來ēš„å¹€č£å‰Ŗ到定ē¾©ēš„ē®—ē¹ŖēƄ圍大小內" +msgstr "將ē®—ē¹Ŗå‡ŗ來ēš„ę”†å¹€č£åˆ‡åˆ°å®šē¾©ēš„ē®—ē¹ŖēƄ圍大小內" msgid "Add the file format extensions to the rendered file name (eg: filename + .jpg)" @@ -50826,7 +54850,7 @@ msgstr "ä½æē”Ø多取ęØ£ 3D å “ę™Æ運動ęØ”ē³Š" msgid "Use multiple views in the scene" -msgstr "å “ę™Æä½æē”Øå¤šé‡č¦–åœ–" +msgstr "å “ę™Æä½æē”Ø多重ęŖ¢č¦–" msgid "Overwrite existing files while rendering" @@ -50970,7 +54994,11 @@ msgstr "ē®—ē¹ŖęŖ¢č¦–ēš„集ē›’" msgid "Active Render View" -msgstr "作ē”Øäø­ē®—ē¹Ŗč¦–åœ–" +msgstr "作ē”Øäø­ē®—ē¹ŖęŖ¢č¦–" + + +msgid "Retiming Key" +msgstr "é‡å®šéµę™‚" msgid "Constraint influencing Objects inside Rigid Body Simulation" @@ -51481,6 +55509,10 @@ msgid "Shading settings for OpenGL render engine" msgstr "OpenGL ē®—ē¹Ŗå¼•ę“Žēš„č‘—č‰²čح定" +msgid "Shadow Focus" +msgstr "陰影ē„¦é»ž" + + msgid "Shadow factor hardness" msgstr "陰影ē”¬åŗ¦äæ‚ę•ø" @@ -51513,6 +55545,34 @@ msgid "Near Thickness" msgstr "čæ‘ę™Æē²—ē“°" +msgid "128 px" +msgstr "128 px" + + +msgid "256 px" +msgstr "256 px" + + +msgid "512 px" +msgstr "512 px" + + +msgid "1024 px" +msgstr "1024 px" + + +msgid "2048 px" +msgstr "2048 px" + + +msgid "4096 px" +msgstr "4096 px" + + +msgid "Clamp Glossy" +msgstr "é™å®šå…‰ę¾¤" + + msgid "16 MB" msgstr "16 MB" @@ -51542,19 +55602,19 @@ msgstr "1 GB" msgid "8 px" -msgstr "8 像ē“ " +msgstr "8 px" msgid "16 px" -msgstr "16 像ē“ " +msgstr "16 px" msgid "32 px" -msgstr "32 像ē“ " +msgstr "32 px" msgid "64 px" -msgstr "64 像ē“ " +msgstr "64 px" msgid "Light Threshold" @@ -51577,6 +55637,10 @@ msgid "Motion steps" msgstr "å‹•ę…‹ę­„ę•ø" +msgid "Overscan Size" +msgstr "éŽęŽƒęå¤§å°" + + msgid "Screen-Trace" msgstr "ē•«é¢čæ½č¹¤" @@ -51585,6 +55649,26 @@ msgid "Shadow Pool Size" msgstr "é™°å½±ę± å¤§å°" +msgid "Shadows Resolution Scale" +msgstr "é™°å½±č§£ęžåŗ¦ēø®ę”¾" + + +msgid "Exponential Sampling" +msgstr "ꌇę•ø型取ęØ£" + + +msgid "Anti-Aliasing Threshold" +msgstr "防é‹ø齒閾值" + + +msgid "Scene Hydra" +msgstr "å “ę™Æ Hydra" + + +msgid "Export Method" +msgstr "åŒÆå‡ŗę–¹ę³•" + + msgid "USD" msgstr "USD" @@ -51598,11 +55682,11 @@ msgstr "ę‰€ęœ‰å “ę™Æē‰©é«”" msgid "Scene Render View" -msgstr "å “ę™Æē®—ē¹Ŗč¦–åœ–" +msgstr "å “ę™Æē®—ē¹ŖęŖ¢č¦–" msgid "Render viewpoint for 3D stereo and multiview rendering" -msgstr "ē‚ŗ 3D ē«‹é«”čˆ‡å¤šé‡č¦–åœ–ē®—ē¹Ŗč¦–ęŽ„å£" +msgstr "ē‚ŗ 3D ē«‹é«”čˆ‡å¤šé‡ęŖ¢č¦–ē®—ē¹Ŗ視點" msgid "Camera Suffix" @@ -51610,7 +55694,7 @@ msgstr "ę”å½±ę©Ÿå¾Œē¶“字" msgid "Suffix to identify the cameras to use, and added to the render images for this view" -msgstr "č¾Øč­˜ę”å½±ę©Ÿē”Øēš„後ē¶“字ļ¼ŒåŠ åœØę­¤č¦–åœ–ē®—ē¹Ŗ影像名ēر之後" +msgstr "č¾Øč­˜ę”å½±ę©Ÿē”Øēš„後ē¶“字ļ¼ŒåŠ åœØę­¤ęŖ¢č¦–ē®—ē¹Ŗ影像名ēر之後" msgid "File Suffix" @@ -51618,19 +55702,19 @@ msgstr "ęŖ”ę”ˆå¾Œē¶“字" msgid "Suffix added to the render images for this view" -msgstr "č¦åŠ åœØę­¤č¦–åœ–ē®—ē¹Ŗ影像名ēر之後ēš„後ē¶“字" +msgstr "č¦åŠ åœØę­¤ęŖ¢č¦–ē®—ē¹Ŗ影像名ēر之後ēš„後ē¶“字" msgid "Render view name" -msgstr "ē®—ē¹Ŗč¦–åœ–åēر" +msgstr "ē®—ē¹ŖęŖ¢č¦–名ēر" msgid "Disable or enable the render view" -msgstr "停ē”Øęˆ–å•Ÿē”Øē®—ē¹Ŗč¦–åœ–" +msgstr "停ē”Øęˆ–å•Ÿē”Øē®—ē¹ŖęŖ¢č¦–" msgid "Scopes for statistical view of an image" -msgstr "影像ēš„ēµ±čØˆč¦–åœ–ēƄ圍" +msgstr "影像ēš„ēµ±č؈ęŖ¢č¦–ēƄ圍" msgid "Proportion of original image source pixel lines to sample" @@ -51698,6 +55782,10 @@ msgid "Top-level strips only" msgstr "僅äøŠē“šē‰‡ę®µ" +msgid "Cache Raw" +msgstr "åæ«å– Raw" + + msgid "Overlay Lock" msgstr "ē–Šå±¤éŽ–定" @@ -51706,10 +55794,18 @@ msgid "Show Cache" msgstr "é”Æē¤ŗåæ«å–" +msgid "Composite Images" +msgstr "åˆęˆå½±åƒ" + + msgid "Final Images" msgstr "꜀ēµ‚影像" +msgid "Show Annotation" +msgstr "é”Æē¤ŗčØ»č§£" + + msgid "Show Metadata" msgstr "é”Æē¤ŗäø­ä»‹č³‡ę–™" @@ -51802,6 +55898,10 @@ msgid "Snap to current frame" msgstr "åøé™„č‡³ē›®å‰å¹€" +msgid "Retiming Keys" +msgstr "é‡å®šéµę™‚" + + msgid "Snap Current Frame to Strips" msgstr "ē›®å‰å¹€åø附ē‰‡ę®µ" @@ -51814,6 +55914,14 @@ msgid "Factor of Blur" msgstr "ęØ”ē³Šēš„äæ‚ę•ø" +msgid "Colorize Effect" +msgstr "č‘—č‰²ę•ˆęžœ" + + +msgid "Colorize effect" +msgstr "č‘—č‰²ę•ˆęžœ" + + msgid "Mix factor" msgstr "ę··åˆäæ‚ę•ø" @@ -51826,6 +55934,46 @@ msgid "Sepia" msgstr "å¢Øé­šę£•" +msgid "Glow Effect" +msgstr "č¼å…‰ę•ˆęžœ" + + +msgid "Glow effect" +msgstr "č¼å…‰ę•ˆęžœ" + + +msgid "Glow mode" +msgstr "č¼å…‰ęؔ式" + + +msgid "Effect Opacity" +msgstr "ꕈꞜäøé€ę˜Žåŗ¦" + + +msgid "Glow Under" +msgstr "äø‹č¼å…‰" + + +msgid "Pixelate Effect" +msgstr "像ē“ åŒ–ę•ˆęžœ" + + +msgid "Pixelate effect" +msgstr "像ē“ åŒ–ę•ˆęžœ" + + +msgid "Antialias pixels" +msgstr "防é‹ø齒像ē“ ę•ø" + + +msgid "Rim effect" +msgstr "é‚Šę”†ę•ˆęžœ" + + +msgid "Rim Color" +msgstr "é‚Šę”†č‰²å½©" + + msgid "Shadow Effect" msgstr "é™°å½±ę•ˆęžœ" @@ -51843,6 +55991,10 @@ msgid "Wave" msgstr "ę³¢ęµŖ" +msgid "Swirl effect" +msgstr "ę¼©ęø¦ę•ˆęžœ" + + msgid "Shape Key" msgstr "外形鍵" @@ -51888,7 +56040,7 @@ msgstr "ē›®å‰ę”†å¹€ēš„外形鍵ę•ø值" msgid "Vertex weight group, to blend with basis shape" -msgstr "é ‚é»žę¬Šé‡ē¾¤ēµ„ļ¼Œčˆ‡åŸŗęœ¬å¤–å½¢ę··åˆ" +msgstr "é ‚é»žę¬Šé‡ē¾¤ēµ„ļ¼Œčˆ‡åŸŗęœ¬å¤–å½¢äŗ¤ę··" msgid "Handle 1 Location" @@ -51952,7 +56104,7 @@ msgstr "ęø›ē·©" msgid "Blending to inelastic collision" -msgstr "ę··åˆč‡³ē„”å½ˆę€§ē¢°ę’ž" +msgstr "äŗ¤ę··č‡³ē„”å½ˆę€§ē¢°ę’ž" msgid "Ball Size" @@ -52203,12 +56355,17 @@ msgid "Clip editor space data" msgstr "å‰Ŗč¼Æē·Øč¼Æå™Øē©ŗé–“č³‡ę–™" +msgctxt "MovieClip" +msgid "Annotation Source" +msgstr "čØ»č§£ä¾†ęŗ" + + msgid "2D Cursor Location" msgstr "2D ęøøęؙ位ē½®" msgid "2D cursor location for this view" -msgstr "ę­¤č¦–åœ–äøŠēš„ 2D ęøøęؙ位ē½®" +msgstr "ę­¤ęŖ¢č¦–äøŠēš„ 2D ęøøęؙ位ē½®" msgid "Lock to Selection" @@ -52224,7 +56381,7 @@ msgstr "éŽ–å®šč‡³ę™‚é–“ęøøęؙ" msgid "Lock curves view to time cursor during playback and tracking" -msgstr "ę’­ę”¾čˆ‡čæ½č¹¤ę™‚å°‡ę›²ē·šč¦–åœ–éŽ–å®šč‡³ę™‚é–“ęøøęؙ" +msgstr "ę’­ę”¾čˆ‡čæ½č¹¤ę™‚å°‡ę›²ē·šęŖ¢č¦–éŽ–å®šč‡³ę™‚é–“ęøøęؙ" msgid "Mask displayed and edited in this space" @@ -52307,6 +56464,10 @@ msgid "Show filters for graph editor" msgstr "é”Æē¤ŗ圖č”Øē·Øč¼Æå™Øēš„過ęæ¾å™Ø" +msgid "Show Gizmo" +msgstr "é”Æē¤ŗ꓍ēø±å™Ø" + + msgid "Show Frames" msgstr "é”Æē¤ŗ幀ę•ø" @@ -52433,7 +56594,7 @@ msgstr "ęŖ¢č¦–" msgid "Type of the clip editor view" -msgstr "å‰Ŗč¼Æē·Øč¼Æå™Øč¦–åœ–ēš„锞型" +msgstr "å‰Ŗč¼Æē·Øč¼Æå™ØęŖ¢č¦–ēš„锞型" msgid "Show editing clip preview" @@ -52446,7 +56607,7 @@ msgstr "圖č”Ø" msgid "Show graph view for active element" -msgstr "ē‚ŗ作ē”Øäø­å…ƒē“ é”Æē¤ŗ圖č”Øč¦–åœ–" +msgstr "ē‚ŗ作ē”Øäø­å…ƒē“ é”Æē¤ŗ圖č”ØęŖ¢č¦–" msgid "Zoom percentage" @@ -52598,7 +56759,7 @@ msgstr "å³ę™‚ę›“ę–°" msgid "When transforming keyframes, changes to the animation data are flushed to other views" -msgstr "ē•¶č®Šę›éµå¹€ę™‚ļ¼Œå°å‹•ē•«č³‡ę–™ēš„ę›“ę”¹å°‡ę²–åÆ«č‡³å…¶ä»–č¦–åœ–äø­" +msgstr "ē•¶č®Šę›é—œéµå¹€ę™‚ļ¼Œå°å‹•ē•«č³‡ę–™ēš„ę›“ę”¹å°‡ę²–å‡ŗč‡³å…¶ä»–ęŖ¢č¦–äø­" msgid "Space File Browser" @@ -52641,6 +56802,10 @@ msgid "System Bookmarks" msgstr "ē³»ēµ±ę›øē±¤" +msgid "System Folders" +msgstr "ē³»ēµ±č³‡ę–™å¤¾" + + msgid "Space Graph Editor" msgstr "ē©ŗ間圖č”Øē·Øč¼Æå™Ø" @@ -52882,7 +57047,7 @@ msgstr "é”Æē¤ŗē‰‡ę®µå…¶é€ ęˆå½±éŸæēš„ F ę›²ē·š" msgid "When transforming strips, changes to the animation data are flushed to other views" -msgstr "ē•¶č®Šę›ē‰‡ę®µę™‚ļ¼Œå°å‹•ē•«č³‡ę–™ēš„ę›“å‹•ęœƒę²–åÆ«č‡³å…¶ä»–č¦–åœ–" +msgstr "ē•¶č®Šę›ē‰‡ę®µę™‚ļ¼Œå°å‹•ē•«č³‡ę–™ēš„ę›“å‹•ęœƒę²–å‡ŗč‡³å…¶ä»–ęŖ¢č¦–" msgid "Space Node Editor" @@ -52935,6 +57100,10 @@ msgid "ID From" msgstr "ID 來ęŗ" +msgid "Auto-offset Direction" +msgstr "č‡Ŗ動偏ē§»ę–¹å‘" + + msgid "Use the pinned node tree" msgstr "ä½æē”Ø釘住ēš„ēƀ點ęع" @@ -52959,6 +57128,10 @@ msgid "Use active Viewer Node output as backdrop for compositing nodes" msgstr "將作ē”Øäø­ęŖ¢č¦–å™Øēƀ點č¼øå‡ŗ作ē‚ŗåˆęˆēƀ點ē”Øēš„čƒŒę™Æ幕" +msgid "Supports Previews" +msgstr "ę”Æę“é č¦½" + + msgid "Type of data to take texture from" msgstr "å¾žä½•č³‡ę–™é”žåž‹å–å¾—ē“‹ē†" @@ -53282,6 +57455,22 @@ msgid "Display result under strips" msgstr "åœØē‰‡ę®µä¹‹äø‹é”Æē¤ŗēµęžœ" +msgid "Context Gizmo" +msgstr "ęƒ…å¢ƒę“ēø±å™Ø" + + +msgid "Context sensitive gizmos for the active item" +msgstr "作ē”Øäø­é …ē›®ēš„ęƒ…å¢ƒå€åˆ†ę“ēø±å™Ø" + + +msgid "Tool Gizmo" +msgstr "å·„å…·ę“ēø±å™Ø" + + +msgid "Active tool gizmo" +msgstr "作ē”Øäø­å·„å…·ę“ēø±å™Ø" + + msgid "Show Overexposed" msgstr "é”Æē¤ŗ過ꛝ" @@ -53295,11 +57484,11 @@ msgstr "如同ē‰‡ę®µäø€čˆ¬ä¹Ÿč®Šę›ęؙčؘ" msgid "View Type" -msgstr "č¦–åœ–é”žåž‹" +msgstr "ęŖ¢č¦–锞型" msgid "Type of the Sequencer view (sequencer, preview or both)" -msgstr "åŗę®µē·Øč¼Æå™Øč¦–åœ–ēš„锞型 (åŗę®µē·Øč¼Æå™Øć€é č¦½ļ¼Œęˆ–å…©č€…)" +msgstr "åŗę®µē·Øč¼Æå™ØęŖ¢č¦–ēš„锞型ļ¼ˆåŗę®µē·Øč¼Æå™Øć€é č¦½ļ¼Œęˆ–å…©č€…ļ¼‰" msgid "Columns" @@ -53367,7 +57556,7 @@ msgstr "čŖžę³•ēŖé”Æ" msgid "Syntax highlight for scripting" -msgstr "ęŒ‡ä»¤ēØæē”Øēš„čŖžę³•ēŖé”Æ" +msgstr "命令ēØæē”Øēš„čŖžę³•ēŖé”Æ" msgid "Word Wrap" @@ -53423,23 +57612,23 @@ msgstr "ē›®å‰ē·Øč¼Æå™Øäø­åÆ仄ēœ‹č¦‹ēš„ē·šę¢é‡" msgid "3D View Space" -msgstr "3D č¦–åœ–ē©ŗ間" +msgstr "3D ęŖ¢č¦–ē©ŗ間" msgid "3D View space data" -msgstr "3D č¦–åœ–ē©ŗé–“č³‡ę–™" +msgstr "3D ęŖ¢č¦–ē©ŗé–“č³‡ę–™" msgid "Active camera used in this view (when unlocked from the scene's active camera)" -msgstr "ę­¤č¦–åœ–äø­ä½æē”Øēš„ę”å½±ę©Ÿ (ē•¶å¾žå “ę™Æēš„作ē”Øäø­ę”å½±ę©Ÿč§£é™¤éŽ–å®šę™‚)" +msgstr "ę­¤ęŖ¢č¦–äø­ä½æē”Øēš„ę”å½±ę©Ÿļ¼ˆē•¶å¾žå “ę™Æēš„作ē”Øäø­ę”å½±ę©Ÿč§£é™¤éŽ–å®šę™‚ļ¼‰" msgid "3D View far clipping distance" -msgstr "3D č¦–åœ–ēš„é ę–¹å‰Ŗč¼Æč·é›¢" +msgstr "3D ęŖ¢č¦–ēš„é ę–¹å‰Ŗč¼Æč·é›¢" msgid "3D View near clipping distance (perspective view only)" -msgstr "3D č¦–åœ–ēš„čæ‘處å‰Ŗč¼Æč·é›¢ (åƒ…é™é€č¦–ę³•ęŖ¢č¦–)" +msgstr "3D ęŖ¢č¦–ēš„čæ‘處å‰Ŗč¼Æč·é›¢ (åƒ…é™é€č¦–ę³•ęŖ¢č¦–)" msgid "Lens" @@ -53455,15 +57644,15 @@ msgstr "éŽ–å®šč‡³éŖØéŖ¼" msgid "3D View center is locked to this bone's position" -msgstr "3D č¦–åœ–äø­åæƒéŽ–å®šč‡³ę­¤éŖØéŖ¼ēš„位ē½®äøŠ" +msgstr "3D ęŖ¢č¦–äø­åæƒéŽ–å®šč‡³ę­¤éŖØéŖ¼ēš„位ē½®äøŠ" msgid "Lock Camera to View" -msgstr "éŽ–å®šę”å½±ę©Ÿč‡³č¦–åœ–" +msgstr "éŽ–å®šę”å½±ę©Ÿč‡³ęŖ¢č¦–" msgid "Enable view navigation within the camera view" -msgstr "åœØę”å½±ę©Ÿč¦–åœ–ä¹‹å…§å•Ÿē”Øč¦–åœ–å°ŽčˆŖ" +msgstr "åœØę”å½±ę©ŸęŖ¢č¦–之內啟ē”ØęŖ¢č¦–å°ŽčˆŖ" msgid "Lock to Cursor" @@ -53471,7 +57660,7 @@ msgstr "éŽ–å®šč‡³ęøøęؙ" msgid "3D View center is locked to the cursor's position" -msgstr "3D č¦–åœ–äø­åæƒéŽ–å®šč‡³ęøøęؙēš„位ē½®äøŠ" +msgstr "3D ęŖ¢č¦–äø­åæƒéŽ–å®šč‡³ęøøęؙēš„位ē½®äøŠ" msgid "Lock to Object" @@ -53479,7 +57668,7 @@ msgstr "éŽ–å®šč‡³ē‰©é«”" msgid "3D View center is locked to this object's position" -msgstr "3D č¦–åœ–äø­åæƒéŽ–å®šč‡³ę­¤ē‰©é«”ēš„位ē½®äøŠ" +msgstr "3D ęŖ¢č¦–äø­åæƒéŽ–å®šč‡³ę­¤ē‰©é«”ēš„位ē½®äøŠ" msgid "Mirror VR Session" @@ -53495,7 +57684,7 @@ msgstr "3D 區唊" msgid "Quad View Regions" -msgstr "å››č¦–åœ–å€å”Š" +msgstr "å››ę ¼ęŖ¢č¦–區唊" msgid "Show 3D Marker Names" @@ -53734,6 +57923,10 @@ msgid "UV editor data for the image editor space" msgstr "影像ē·Øč¼Æå™Øē©ŗ間ēš„ UV ē·Øč¼Æå™Øč³‡ę–™" +msgid "Dynamic Grid Size" +msgstr "å‹•ę…‹ę ¼ē·šå¤§å°" + + msgctxt "Mesh" msgid "Angle" msgstr "角åŗ¦" @@ -53747,6 +57940,10 @@ msgid "Area distortion between UV and 3D faces" msgstr "UV 和 3D 面之間ēš„å€åŸŸę‰­ę›²" +msgid "Dynamic grid" +msgstr "å‹•ę…‹ę ¼ē·š" + + msgid "Constrain to Image Bounds" msgstr "ē“„ęŸč‡³å½±åƒé‚Šē•Œ" @@ -53759,6 +57956,10 @@ msgid "Show the grid over the image" msgstr "åœØ影像äøŠé”Æē¤ŗę ¼ē·š" +msgid "Display Stretch" +msgstr "é”Æē¤ŗꋉä¼ø" + + msgid "Live Unwrap" msgstr "å³ę™‚ę‹†č§£" @@ -53855,6 +58056,10 @@ msgid "NURBS weight" msgstr "NURBS ę¬Šé‡" +msgid "Color Value" +msgstr "č‰²å½©å€¼" + + msgid "Stereo 3D Display" msgstr "ē«‹é«” 3D é”Æē¤ŗ" @@ -53880,7 +58085,7 @@ msgstr "ę“ å£“å¼ę”†å¹€" msgid "Combine both views in a squeezed image" -msgstr "å°‡å…©č¦–åœ–ēµåˆęˆę“ å£“式影像" +msgstr "將兩ęŖ¢č¦–ēµåˆęˆę“ å£“式影像" msgid "Sequence strip in the sequence editor" @@ -53888,7 +58093,7 @@ msgstr "åŗę®µē·Øč¼Æå™Øäø­ēš„åŗę®µē‰‡ę®µ" msgid "Blend Opacity" -msgstr "ę··åˆäøé€ę˜Žåŗ¦" +msgstr "äŗ¤ę··äøé€ę˜Žåŗ¦" msgid "Cross" @@ -54175,6 +58380,10 @@ msgid "Align X" msgstr "對齊 X" +msgid "Wrap Width" +msgstr "ęŠ˜åˆ—åƬåŗ¦" + + msgid "Sequence strip applying affine transformations to other strips" msgstr "å„—ē”Øä»æå°„č®Šę›č‡³å…¶ä»–ē‰‡ę®µēš„åŗę®µē‰‡ę®µ" @@ -54373,6 +58582,10 @@ msgid "Sequence strip data for a single frame" msgstr "單äø€ę”†å¹€ēš„åŗę®µē‰‡ę®µč³‡ę–™" +msgid "Orig FPS" +msgstr "原始 FPS" + + msgid "Orig Height" msgstr "原始高åŗ¦" @@ -54417,6 +58630,10 @@ msgid "Use mask ID as mask input" msgstr "ä½æē”Ø遮ē½© ID 作ē‚ŗ遮ē½©č¼øå…„" +msgid "Mask Time" +msgstr "遮ē½©ę™‚é–“" + + msgid "Mute this modifier" msgstr "閉鎖ꭤäæ®ę”¹å™Ø" @@ -54425,6 +58642,10 @@ msgid "Mute expanded settings for the modifier" msgstr "閉鎖äæ®ę”¹å™Øēš„ę““展čح定" +msgid "Sound Equalizer" +msgstr "č²éŸ³ē­‰åŒ–å™Ø" + + msgid "Bright/contrast modifier data for sequence strip" msgstr "åŗę®µē‰‡ę®µēš„äŗ®åŗ¦/對ęƔäæ®ę”¹å™Øč³‡ę–™" @@ -54482,11 +58703,11 @@ msgstr "åŗę®µē‰‡ę®µēš„č®Šę›åƒę•ø" msgid "Studio Light" -msgstr "ę”å½±ę£šē‡ˆå…‰" +msgstr "ę”å½±ę£šē‡ˆ" msgid "Studio light" -msgstr "ę”å½±ę£šē‡ˆå…‰" +msgstr "ę”å½±ę£šē‡ˆ" msgid "Has Specular Highlight" @@ -54507,6 +58728,11 @@ msgid "World" msgstr "äø–ē•Œ" +msgctxt "Light" +msgid "MatCap" +msgstr "Ꝑč³Ŗꍕꍉēƒ" + + msgid "Collection of studio lights" msgstr "ę”å½±ę£šē‡ˆå…‰ēš„集ē›’" @@ -54818,7 +59044,7 @@ msgstr "ē‚ŗē“‹ē†åŗ§ęؙē³»ä½æē”Ø UV åŗ§ęؙ" msgid "Use normalized strand texture coordinate (1D) or particle age (X) and trail position (Y)" -msgstr "ä½æē”Øę­£č¦åŒ–ē·šč‚”ē“‹ē†åŗ§ęؙ (1D) ꈖē²’子幓ē“€ (X) čˆ‡ę›³å°¾ä½ē½® (Y)" +msgstr "ä½æē”Øę­øäø€åŒ–ē·šč‚”ē“‹ē†åŗ§ęؙ (1D) ꈖē²’子幓ē“€ (X) čˆ‡ę›³å°¾ä½ē½® (Y)" msgid "Emission Time Factor" @@ -54969,6 +59195,10 @@ msgid "Color of disabled marker" msgstr "停ē”Øēš„ęؙčØ˜ä¹‹č‰²å½©" +msgid "Align Handle" +msgstr "å°é½ŠęŽ§åˆ¶ę”æ" + + msgid "Handle Vertex" msgstr "ęŽ§åˆ¶ę”æ頂點" @@ -54993,6 +59223,10 @@ msgid "Color of marker" msgstr "ęؙčؘēš„č‰²å½©" +msgid "Marker Outline" +msgstr "ęؙčؘč¼Ŗ廓" + + msgid "Color of marker's outline" msgstr "ęؙčؘēš„大ē¶±č‰²å½©" @@ -55041,6 +59275,10 @@ msgid "Strips Selected" msgstr "éø取ēš„ē‰‡ę®µ" +msgid "Marker Line" +msgstr "ęؙčؘē·š" + + msgid "Theme Console" msgstr "äø»é”Œäø»ęŽ§č‡ŗ" @@ -55201,6 +59439,10 @@ msgid "Theme settings for the File Browser" msgstr "äø»é”Œčح定äø­ēš„ęŖ”ę”ˆē€č¦½å™Øéø項" +msgid "Alternate Rows" +msgstr "äŗ¤ę›æ列" + + msgid "Selected File" msgstr "éø取ēš„ęŖ”ę”ˆ" @@ -55249,6 +59491,18 @@ msgid "Theme settings for background colors and gradient" msgstr "äø»é”Œčح定äø­ēš„čƒŒę™Æč‰²å½©čˆ‡ę¼ø層" +msgid "Background Type" +msgstr "背ę™Æ锞型" + + +msgid "Single Color" +msgstr "å–®č‰²" + + +msgid "Linear Gradient" +msgstr "ē·šę€§ę¼ø層" + + msgid "Gradient Low" msgstr "ę¼ø層低" @@ -55269,6 +59523,10 @@ msgid "Channels Region" msgstr "通道區唊" +msgid "Vertex Bevel" +msgstr "é ‚é»žåˆ‡č§’" + + msgid "Vertex Select" msgstr "頂點éø取" @@ -55301,6 +59559,14 @@ msgid "Edge Select" msgstr "邊ē·šéø取" +msgid "Edge Width" +msgstr "邊ē·šåƬåŗ¦" + + +msgid "Active Vertex/Edge/Face" +msgstr "作ē”Øäø­é»ž/邊/面" + + msgid "Face Orientation Back" msgstr "é¢å°Žå‘å¾Œę–¹" @@ -55313,6 +59579,10 @@ msgid "Face Orientation Front" msgstr "é¢å°Žå‘å‰ę–¹" +msgid "Face Retopology" +msgstr "é¢å†ę‹“ę’²" + + msgid "Face Dot Size" msgstr "面點大小" @@ -55470,7 +59740,7 @@ msgstr "ęأ式ēƀ點" msgid "Script Node" -msgstr "ęŒ‡ä»¤ēØæēƀ點" +msgstr "命令ēØæēƀ點" msgid "Selected Text" @@ -55565,6 +59835,10 @@ msgid "Preview Background" msgstr "é č¦½čƒŒę™Æ" +msgid "Selected Strips" +msgstr "éø取ēš„ē‰‡ę®µ" + + msgid "Theme Space Settings" msgstr "äø»é”Œē©ŗ間čح定" @@ -55705,6 +59979,26 @@ msgid "Theme settings for user interface elements" msgstr "äø»é”Œčح定äø­ēš„ä½æē”Øč€…ä»‹é¢å…ƒē“ éø項" +msgid "Editor Outline" +msgstr "ē·Øč¼Æå™Ø大ē¶±" + + +msgid "Gizmo A" +msgstr "꓍ēø±å™Ø A" + + +msgid "Gizmo B" +msgstr "꓍ēø±å™Ø B" + + +msgid "Gizmo Highlight" +msgstr "꓍ēø±å™ØęØ™ę˜Ž" + + +msgid "Gizmo Primary" +msgstr "꓍ēø±å™Øäø»č¦" + + msgid "Icon Alpha" msgstr "圖ē¤ŗ Alpha" @@ -55713,12 +60007,16 @@ msgid "Transparency of icons in the interface, to reduce contrast" msgstr "介面äø­ēš„圖ē¤ŗ透꘎åŗ¦ļ¼ŒåÆęø›ä½Žå°ęƔ" +msgid "Icon Border" +msgstr "圖ē¤ŗ邊ē·£" + + msgid "Menu Shadow Strength" msgstr "éø單陰影強åŗ¦" msgid "Blending factor for menu shadows" -msgstr "éø單陰影ēš„ę··åˆäæ‚ę•ø" +msgstr "éø單陰影ēš„äŗ¤ę··äæ‚ę•ø" msgid "Menu Shadow Width" @@ -55729,6 +60027,14 @@ msgid "Width of menu shadows, set to zero to disable" msgstr "éø單陰影ēš„åƬåŗ¦ļ¼ŒčØ­ē‚ŗ零則停ē”Ø" +msgid "Primary Color" +msgstr "äø»č‰²" + + +msgid "Checkerboard Size" +msgstr "ę£‹ē›¤å¤§å°" + + msgid "Box Backdrop Colors" msgstr "ę–¹å”ŠčƒŒę™Æå¹•č‰²å½©" @@ -55809,6 +60115,10 @@ msgid "Tooltip Colors" msgstr "ꏐē¤ŗę”†č‰²å½©" +msgid "Widget Emboss" +msgstr "å…ƒä»¶ęµ®é›•" + + msgid "Text Cursor" msgstr "ę–‡å­—ęøøęؙ" @@ -55982,7 +60292,7 @@ msgstr "ē­†č§øå›ŗå®šę–¼å½±åƒäøŠ" msgid "Stick stroke to the view" -msgstr "ē­†č§øå›ŗå®šę–¼č¦–åœ–äøŠ" +msgstr "ē­†č§øå›ŗå®šę–¼ęŖ¢č¦–äøŠ" msgid "Stick stroke to surfaces" @@ -56126,6 +60436,10 @@ msgid "Show compact list of colors instead of thumbnails" msgstr "é”Æē¤ŗē°”ę½”č‰²å½©åˆ—č”Ø而非ēø®åœ–" +msgid "Cycle-Aware Keying" +msgstr "å¾Ŗē’°ę„č­˜éµå¹€č™•ē†" + + msgid "Auto Keying" msgstr "č‡Ŗå‹•ę’å…„é—œéµå¹€" @@ -56226,6 +60540,10 @@ msgid "Snap to Same Target" msgstr "åøé™„č‡³ē›ø同ē›®ęؙ" +msgid "Keep Connected" +msgstr "ē¶­ęŒå·²é€£ęŽ„項" + + msgid "Transform Origins" msgstr "č®Šę›åŽŸé»ž" @@ -56345,6 +60663,14 @@ msgid "Current Transform Orientation" msgstr "ē›®å‰č®Šę›ę–¹å‘" +msgid "UDIM Tile" +msgstr "UDIM 分唊" + + +msgid "Tile label" +msgstr "分唊ęؙē±¤" + + msgid "UI list containing the elements of a collection" msgstr "包含äø€ē³»åˆ—å…ƒē“ ēš„ä½æē”Ø介面ęø…å–®" @@ -56409,6 +60735,10 @@ msgid "Sort items by their name" msgstr "依其名ēØ±ęŽ’åŗé …ē›®" +msgid "USD Hook" +msgstr "USD ꎛ鉤" + + msgid "Active UV Map Layer" msgstr "作ē”Øäø­ UV ę˜ å°„åœ–å±¤" @@ -56469,6 +60799,10 @@ msgid "Instead of per-brush weight, the weight is shared across brushes" msgstr "äøē®”各ē­†åˆ·ę¬Šé‡ļ¼Œę¬Šé‡åœØē­†åˆ·ä¹‹é–“äŗ’ē›ø共ē”Ø" +msgid "Mass Unit" +msgstr "č³Ŗ量單位" + + msgid "Unit Scale" msgstr "å–®ä½č¦ęØ”" @@ -56501,6 +60835,10 @@ msgid "Radians" msgstr "弧åŗ¦" +msgid "Time Unit" +msgstr "ę™‚é–“å–®ä½" + + msgid "Separate Units" msgstr "分離單位" @@ -56509,12 +60847,20 @@ msgid "Display units in pairs (e.g. 1m 0cm)" msgstr "仄ę•ø對é”Æē¤ŗ單位 (例如ļ¼š 1m 0cm)" +msgid "Extension Repository" +msgstr "ę““å……å„—ä»¶č»Ÿé«”åŗ«" + + +msgid "Settings to define an extension repository" +msgstr "定ē¾©ę““å……å„—ä»¶č»Ÿé«”åŗ«ēš„čح定" + + msgid "User Extension Repositories" -msgstr "ä½æē”Øč€…é™„åŠ å…ƒä»¶č»Ÿé«”åŗ«" +msgstr "ä½æē”Øč€…ę““å……å„—ä»¶č»Ÿé«”åŗ«" msgid "Collection of user extension repositories" -msgstr "ä½æē”Øč€…é™„åŠ å…ƒä»¶č»Ÿé«”åŗ«ēš„集合" +msgstr "ä½æē”Øč€…ę““å……å„—ä»¶č»Ÿé«”åŗ«ēš„集合" msgid "Solid Light" @@ -56529,6 +60875,10 @@ msgid "Color of the light's specular highlight" msgstr "ē‡ˆå…‰ēš„鏔面反射ēš„č‰²å½©" +msgid "UV Sculpting" +msgstr "UV 雕唑" + + msgid "Group of vertices, used for armature deform and other purposes" msgstr "頂點ēš„ē¾¤ēµ„ļ¼Œē”Øę–¼éŖØęž¶č®Šå½¢čˆ‡å…¶ä»–ē”Ø途" @@ -56566,7 +60916,7 @@ msgstr "ę ¼ē·š" msgid "Number of grid lines to display in perspective view" -msgstr "åœØé€č¦–ę³•č¦–åœ–äø­č¦é”Æē¤ŗēš„ę ¼ē·šå…¶ē·šę¢ę•ø" +msgstr "åœØé€č¦–ę³•č¦–åœ–ęŖ¢č¦–äø­č¦é”Æē¤ŗēš„ę ¼ē·šå…¶ē·šę¢ę•ø" msgid "Grid Scale" @@ -56594,7 +60944,11 @@ msgstr "ę³•ē·šå¤§å°" msgid "Display size for normals in the 3D view" -msgstr "åœØ 3D č¦–åœ–äø­é”Æē¤ŗę³•ē·šēš„大小" +msgstr "åœØ 3D ęŖ¢č¦–äø­é”Æē¤ŗę³•ē·šēš„大小" + + +msgid "Retopology Offset" +msgstr "é‡ę‹“ę’²åē§»" msgid "Sculpt Face Sets Opacity" @@ -56709,6 +61063,10 @@ msgid "Show light colors" msgstr "é”Æē¤ŗē‡ˆå…‰č‰²å½©" +msgid "HDRI Preview" +msgstr "HDRI é č¦½" + + msgid "Show HDRI preview spheres" msgstr "é”Æē¤ŗ HDRI é č¦½ēƒé«”" @@ -56777,10 +61135,26 @@ msgid "Opacity of the texture paint mode stencil mask overlay" msgstr "ē“‹ē†ē¹Ŗč£½ę™‚é®ē½©č Ÿē“™č¦†č“‹åœØęؔ型äøŠēš„äøé€ę˜Žåŗ¦" +msgid "Canvas X-Ray" +msgstr "ē•«åøƒ X 光" + + msgid "Show Edit Lines" msgstr "é”Æē¤ŗē·Øč¼Æē·š" +msgid "Lines Only" +msgstr "僅ē·šę¢" + + +msgid "Stroke Direction" +msgstr "ē­†č§øę–¹å‘" + + +msgid "Wireframe Threshold" +msgstr "ē·šę”†é–¾å€¼" + + msgid "Background Color" msgstr "背ę™Æč‰²å½©" @@ -56837,13 +61211,21 @@ msgstr "å‘č…”å‡¹č°·ēš„äæ‚ę•ø值" msgid "Show active color attribute" -msgstr "é”Æē¤ŗ作ē”Øäø­č‰²å½©å±¬ę€§" +msgstr "é”Æē¤ŗ作ē”Øäø­č‰²å½©ē‰¹ę€§" + + +msgid "Curvature Valley" +msgstr "ę›²ēŽ‡č°·ē·š" msgid "Display using studio lighting" msgstr "ä½æē”Øę”å½±ę£šē‡ˆå…‰é”Æē¤ŗ" +msgid "Display using matcap material and lighting" +msgstr "ä½æē”ØꝐč³Ŗꍕꍉēƒå’Œē…§ę˜ŽåŒę™‚é”Æē¤ŗ" + + msgctxt "Render Layer" msgid "Specular Light" msgstr "鏔面反射ē‡ˆå…‰" @@ -56860,7 +61242,7 @@ msgstr "位ē½®" msgid "Selected StudioLight" -msgstr "ꉀéøę”å½±ę£šē‡ˆå…‰" +msgstr "éø取ēš„ę”å½±ę£šē‡ˆ" msgid "Cavity" @@ -56883,6 +61265,10 @@ msgid "Render specular highlights" msgstr "ē®—ē¹Ŗ鏔面反射ēŖé”Æ" +msgid "Show X-Ray" +msgstr "é”Æē¤ŗ X 光" + + msgid "Studiolight" msgstr "ę”å½±ę£šē‡ˆå…‰" @@ -56891,6 +61277,10 @@ msgid "Studio lighting setup" msgstr "ę”å½±ę£šē‡ˆå…‰čح定" +msgid "World Opacity" +msgstr "äø–ē•Œäøé€ę˜Žåŗ¦" + + msgid "Show the studiolight in the background" msgstr "åœØ背ę™Æé”Æē¤ŗč©²ę”å½±ę£šē‡ˆå…‰" @@ -56904,7 +61294,7 @@ msgstr "ę”å½±ę£šē‡ˆå…‰ēš„å¼·åŗ¦" msgid "Studiolight Rotation" -msgstr "ę”å½±ę£šē‡ˆå…‰ēš„ę—‹č½‰" +msgstr "ę”å½±ę£šē‡ˆę—‹č½‰" msgid "Rotation of the studiolight around the Z-Axis" @@ -56916,13 +61306,17 @@ msgstr "č¦–ęŽ„å£č‘—č‰²" msgid "Method to display/shade objects in the 3D View" -msgstr "3D č¦–åœ–äø­é”Æē¤ŗ/č‘—č‰²ē‰©é«”ēš„ę–¹ę³•" +msgstr "3D ęŖ¢č¦–äø­é”Æē¤ŗ/č‘—č‰²ē‰©é«”ēš„ę–¹ę³•" msgid "Scene Lights" msgstr "å “ę™Æē‡ˆå…‰" +msgid "Scene World" +msgstr "å “ę™Æäø–ē•Œ" + + msgid "Show VR Controllers" msgstr "é”Æē¤ŗ VR ęŽ§åˆ¶å™Ø" @@ -56943,6 +61337,10 @@ msgid "Cycles ViewLayer Settings" msgstr "Cycles ęŖ¢č¦–層čح定" +msgid "EEVEE Settings" +msgstr "EEVEE čح定" + + msgid "View layer settings for EEVEE" msgstr "EEVEE ēš„ęŖ¢č¦–層čح定" @@ -56971,6 +61369,10 @@ msgid "Repeat Output Node ID" msgstr "重複č¼øå‡ŗēƀ點 ID" +msgid "Volume Display" +msgstr "體ē©é”Æē¤ŗ" + + msgid "Wireframe Detail" msgstr "ē·šę”†ē“°ēƀ" @@ -57003,6 +61405,10 @@ msgid "Boxes" msgstr "ę–¹ę”†" +msgid "Volume Grid" +msgstr "體ē©ę ¼ē·š" + + msgid "Data type of voxel values" msgstr "體ē“ å€¼ēš„č³‡ę–™é”žåž‹" @@ -57022,6 +61428,10 @@ msgid "Double" msgstr "雙倍" +msgid "Double precision" +msgstr "雙倍ē²¾åŗ¦" + + msgctxt "Volume" msgid "Integer" msgstr "ę•“ę•ø" @@ -57036,15 +61446,54 @@ msgid "No data, boolean mask of active voxels" msgstr "ē„”č³‡ę–™ļ¼Œä½œē”Øäø­é«”ē“ ēš„åøƒęž—遮ē½©" +msgctxt "Volume" +msgid "Float Vector" +msgstr "ęµ®é»žå‘é‡" + + +msgctxt "Volume" +msgid "Integer Vector" +msgstr "ę•“ę•ø向量" + + +msgctxt "Volume" +msgid "Points (Unsupported)" +msgstr "點ļ¼ˆäøę”Æę“ļ¼‰" + + msgctxt "Volume" msgid "Unknown" msgstr "ęœŖēŸ„" +msgid "Is Loaded" +msgstr "ę˜Æå·²č¼‰å…„" + + +msgid "Matrix Object" +msgstr "ēŸ©é™£ē‰©é«”" + + +msgid "Transformation matrix from voxel index to object space" +msgstr "從體ē“ ē“¢å¼•č½‰åˆ°ē‰©é«”ē©ŗ間ēš„č®Šę›ēŸ©é™£" + + +msgid "Volume Grids" +msgstr "體ē©ę ¼ē·š" + + msgid "Error Message" msgstr "éŒÆčŖ¤č؊ęÆ" +msgid "Volume Render" +msgstr "體ē©ē®—ē¹Ŗ" + + +msgid "Variable" +msgstr "åÆč®Šå‹•" + + msgid "Walk navigation settings" msgstr "ę­„č”Œå°Žč¦½čح定" @@ -57121,6 +61570,11 @@ msgid "Parent Window" msgstr "äøŠå±¤č¦–ēŖ—" +msgctxt "Screen" +msgid "Screen" +msgstr "čž¢å¹•" + + msgid "Active workspace screen showing in the window" msgstr "åœØ視ēŖ—äø­é”Æē¤ŗēš„作ē”Øäø­å·„作ē©ŗ間ē•«é¢" @@ -57133,6 +61587,10 @@ msgid "Active workspace showing in the window" msgstr "åœØ視ēŖ—äø­é”Æē¤ŗēš„作ē”Øäø­å·„作ē©ŗ間" +msgid "Identifier Fallback" +msgstr "č­˜åˆ„ē¢¼å¾Œå‚™ę©Ÿåˆ¶" + + msgid "Tool Mode" msgstr "å·„å…·ęؔ式" @@ -57142,7 +61600,7 @@ msgstr "äø–ē•Œč³‡ę–™ēµ„唊ēš„ē…§ę˜Ž" msgid "Factor for ambient occlusion blending" -msgstr "å‘Øé­é®ę“‹å…¶ę··åˆēš„äæ‚ę•ø" +msgstr "å‘Øé­é®ę“‹å…¶äŗ¤ę··ēš„äæ‚ę•ø" msgid "Length of rays, defines how far away other faces give occlusion effect" @@ -57201,6 +61659,10 @@ msgid "Occlude objects with the environment color as they are further away" msgstr "ē•¶å®ƒå€‘é é›¢ę™‚ä»„ē’°å¢ƒč‰²å½©é®ę“‹ē‰©é«”" +msgid "Bindings" +msgstr "ē¶å®š" + + msgid "Operator Mode" msgstr "ę“ä½œå™Øęؔ式" @@ -57233,9 +61695,14 @@ msgid "VR viewport near clipping distance" msgstr "VR č¦–åœ–čæ‘處ęˆŖå‰²č·é›¢" +msgctxt "Color" +msgid "Dark" +msgstr "귱ꚗ" + + msgctxt "Color" msgid "Light" -msgstr "ē‡ˆå…‰" +msgstr "光äŗ®" msgctxt "Color" @@ -57255,6 +61722,10 @@ msgid "Show selection outlines" msgstr "é”Æē¤ŗꉀéø項ē›®ēš„č¼Ŗ廓" +msgid "Positional Tracking" +msgstr "位ē½®čæ½č¹¤" + + msgid "Session State" msgstr "ä½œę„­éšŽę®µē‹€ę…‹" @@ -57310,15 +61781,19 @@ msgstr "" "ę‹–ę›³ę™‚å†č§øē™¼ęŸäŗ›åœ“ę“¾éø單ļ¼Œ\n" "č®“å–®ęŒ‰åŒäø€å€‹ęŒ‰éµčƒ½ęœ‰å¦äø€å€‹å‹•ä½œć€‚\n" "\n" -"ā€¢ åœØ 3D č¦–åœ–å–®ęŒ‰ Tab ä¾†åˆ‡ę›ē·Øč¼Æęؔ式ļ¼Œę‹–ę›³ä¾†é–‹å•Ÿęؔ式éøå–®ć€‚\n" -"ā€¢ åœØ 3D č¦–åœ–å–®ęŒ‰ Z ä¾†åˆ‡ę›ē·šę”†ļ¼Œę‹–ę›³ä¾†éøę“‡č‘—č‰²ęØ”å¼ć€‚\n" -"ā€¢ åœØ 3D č¦–åœ–å–®ęŒ‰ ~ 來進兄ē¬¬äø€äŗŗēرē€č¦½ļ¼Œę‹–ę›³ä¾†éø꓇視點" +"ā€¢ åœØ 3D ęŖ¢č¦–å–®ęŒ‰ Tab ä¾†åˆ‡ę›ē·Øč¼Æęؔ式ļ¼Œę‹–ę›³ä¾†é–‹å•Ÿęؔ式éøå–®ć€‚\n" +"ā€¢ åœØ 3D ęŖ¢č¦–å–®ęŒ‰ Z ä¾†åˆ‡ę›ē·šę”†ļ¼Œę‹–ę›³ä¾†éøę“‡č‘—č‰²ęØ”å¼ć€‚\n" +"ā€¢ åœØ 3D ęŖ¢č¦–å–®ęŒ‰ ~ 來進兄ē¬¬äø€äŗŗēرē€č¦½ļ¼Œę‹–ę›³ä¾†éø꓇視點" msgid "Tab for Pie Menu" msgstr "ē”Ø Tab å‘¼å«åœ“ę“¾éø單" +msgid "Navigate" +msgstr "å°Žč¦½" + + msgctxt "WindowManager" msgid "Window" msgstr "視ēŖ—" @@ -57346,7 +61821,7 @@ msgstr "View2D ꌉ鈕ęø…å–®" msgctxt "WindowManager" msgid "3D View" -msgstr "3D č¦–åœ–" +msgstr "3D ęŖ¢č¦–" msgctxt "WindowManager" @@ -57356,22 +61831,22 @@ msgstr "ē‰©é«”ęؔ式" msgctxt "WindowManager" msgid "3D View Tool: Tweak" -msgstr "3D č¦–åœ–å·„å…·ļ¼ščŖæę ”" +msgstr "3D ęŖ¢č¦–å·„具ļ¼ščŖæę ”" msgctxt "WindowManager" msgid "3D View Tool: Select Box" -msgstr "3D č¦–åœ–å·„å…·ļ¼šę”†éø" +msgstr "3D ęŖ¢č¦–å·„具ļ¼šę”†éø" msgctxt "WindowManager" msgid "3D View Tool: Select Circle" -msgstr "3D č¦–åœ–å·„å…·ļ¼šåœˆéø" +msgstr "3D ęŖ¢č¦–å·„具ļ¼šåœˆéø" msgctxt "WindowManager" msgid "3D View Tool: Select Lasso" -msgstr "3D č¦–åœ–å·„å…·ļ¼šå„—ē“¢éø取" +msgstr "3D ęŖ¢č¦–å·„具ļ¼šå„—ē“¢éø取" msgctxt "WindowManager" @@ -57404,6 +61879,11 @@ msgid "Curve" msgstr "ę›²ē·š" +msgctxt "WindowManager" +msgid "Curves" +msgstr "ę›²ē·š" + + msgctxt "WindowManager" msgid "Armature" msgstr "éŖØꞶ" @@ -57459,6 +61939,16 @@ msgid "Particle" msgstr "ē²’子" +msgctxt "WindowManager" +msgid "Cancel" +msgstr "å–ę¶ˆ" + + +msgctxt "WindowManager" +msgid "Confirm" +msgstr "ē¢ŗčŖ" + + msgctxt "WindowManager" msgid "Panning" msgstr "å¹³ē§»" @@ -57578,6 +62068,11 @@ msgid "Down" msgstr "äø‹" +msgctxt "WindowManager" +msgid "Local Down" +msgstr "局域向äø‹" + + msgctxt "WindowManager" msgid "Teleport" msgstr "ēž¬ē§»" @@ -57602,6 +62097,11 @@ msgid "Move faster (walk or fly)" msgstr "加åæ«ē§»å‹•ļ¼ˆę­„č”Œęˆ–é£›č”Œļ¼‰" +msgctxt "WindowManager" +msgid "Fast (Off)" +msgstr "åæ«é€Ÿļ¼ˆé—œé–‰ļ¼‰" + + msgctxt "WindowManager" msgid "Slow" msgstr "ę…¢é€Ÿ" @@ -57611,16 +62111,31 @@ msgid "Move slower (walk or fly)" msgstr "ę”¾ę…¢ē§»å‹•ļ¼ˆę­„č”Œęˆ–é£›č”Œļ¼‰" +msgctxt "WindowManager" +msgid "Slow (Off)" +msgstr "ę…¢é€Ÿļ¼ˆé—œé–‰ļ¼‰" + + msgctxt "WindowManager" msgid "Jump" msgstr "č·³čŗ" +msgctxt "WindowManager" +msgid "Jump (Off)" +msgstr "č·³čŗļ¼ˆé—œé–‰ļ¼‰" + + msgctxt "WindowManager" msgid "Pan" msgstr "å¹³ē§»" +msgctxt "WindowManager" +msgid "Pan (Off)" +msgstr "å¹³ē§»ļ¼ˆé—œé–‰ļ¼‰" + + msgctxt "WindowManager" msgid "Precision" msgstr "ē²¾ęŗ–" @@ -57658,7 +62173,7 @@ msgstr "View3D čµ°é”å…øēƄ" msgctxt "WindowManager" msgid "3D View Generic" -msgstr "3D č¦–åœ–é€šē”Ø" +msgstr "3D ęŖ¢č¦–通ē”Ø" msgctxt "WindowManager" @@ -57946,10 +62461,48 @@ msgid "Resize" msgstr "čŖæę•“å¤§å°" +msgctxt "WindowManager" +msgid "Navigate" +msgstr "å°Žč¦½" + + +msgctxt "WindowManager" +msgid "Drag Extensions" +msgstr "ę‹–ę›³ę““å……å„—ä»¶" + + +msgid "Checking for Extension Updates" +msgstr "ę­£åœØęŖ¢ęŸ„ę““å……å„—ä»¶ę›“ę–°" + + msgid "No repositories available" msgstr "ę²’ęœ‰åÆē”Øēš„č»Ÿé«”åŗ«" +msgid "The dropped extension comes from a disabled repository." +msgstr "ę‹–ę›³ēš„ę““充儗件來č‡Ŗ停ē”Øēš„č»Ÿé«”åŗ«ć€‚" + + +msgid "The dropped extension comes from an unknown repository." +msgstr "ę‹–ę›³ēš„ę““充儗件來č‡ŖęœŖēŸ„ēš„č»Ÿé«”åŗ«ć€‚" + + +msgid "System extensions are read-only and cannot be uninstalled" +msgstr "ē³»ēµ±ę““充儗件å”Æ讀ļ¼Œäø”ē„”ę³•č§£é™¤å®‰č£" + + +msgid "Extension needs to be installed before it can be enabled" +msgstr "åœØ啟ē”Øę““å……å„—ä»¶ä¹‹å‰ļ¼Œéœ€č¦å…ˆå®‰č£" + + +msgid "Refresh the list of extensions for the active repository" +msgstr "é‡ę–°ę•“ē†ä½œē”Øäø­č»Ÿé«”åŗ«ēš„ę““充儗件列č”Ø" + + +msgid "Upgrade all the extensions to their latest version for the active repository" +msgstr "將作ē”Øäø­č»Ÿé«”åŗ«ēš„ę‰€ęœ‰ę““充儗件升ē“šåˆ°ęœ€ę–°ēš„ē‰ˆęœ¬" + + msgid "Upgrade is not supported for local repositories" msgstr "ęœ¬åœ°č»Ÿé«”åŗ«äøę”Æę“ę›“ę–°" @@ -57963,7 +62516,7 @@ msgstr "ē¼ŗ乏ēš„å…§å»ŗ附加元件" msgid "Add-ons previously shipped with Blender are now available from extensions.blender.org." -msgstr "ä¹‹å‰čˆ‡ Blender äø€åŒē™¼ä½ˆēš„附加元件ē¾åœØåÆ仄從 extensions.blender.org å–å¾—ć€‚" +msgstr "ä¹‹å‰čˆ‡ Blender ę­é…ęä¾›ēš„ę““充儗件ļ¼Œē¾åœØåÆ仄從 extensions.blender.org å–å¾—ć€‚" msgid "Missing Add-ons" @@ -57978,6 +62531,14 @@ msgid "Search Add-ons" msgstr "ęœå°‹é™„åŠ å…ƒä»¶" +msgid "Online Extensions" +msgstr "ē·šäøŠę““充儗件" + + +msgid "Search Extensions" +msgstr "ęœå°‹ę““å……å„—ä»¶" + + msgid "Show Tags" msgstr "é”Æē¤ŗęؙē±¤" @@ -57992,6 +62553,14 @@ msgid "None" msgstr "ē„”" +msgid "Blender's extension repository not found!" +msgstr "ę‰¾äøåˆ° Blender ēš„ę““å……å„—ä»¶č»Ÿé«”åŗ«ļ¼" + + +msgid ":" +msgstr "ļ¼š" + + msgid "No visible tags." msgstr "ę²’ęœ‰åÆ見ęؙē±¤ć€‚" @@ -58006,6 +62575,11 @@ msgid "Install" msgstr "å®‰č£" +msgctxt "Operator" +msgid "Visit Extensions Platform" +msgstr "造čØŖę““å……å„—ä»¶å¹³č‡ŗ" + + msgctxt "Operator" msgid "Update" msgstr "ꛓꖰ" @@ -58021,7 +62595,7 @@ msgstr "OSL č‘—č‰²å™Øē·Øēŗ‚ęˆåŠŸ" msgid "OSL script compilation failed, see console for errors" -msgstr "OSL ęŒ‡ä»¤ēØæē·Øēŗ‚å¤±ę•—ļ¼Œč«‹ęŸ„ēœ‹äø»ęŽ§č‡ŗ仄ēž­č§£éŒÆčŖ¤" +msgstr "OSL 命令ēØæē·Øēŗ‚å¤±ę•—ļ¼Œč«‹ęŸ„ēœ‹äø»ęŽ§č‡ŗ仄ēž­č§£éŒÆčŖ¤" msgid "No text or file specified in node, nothing to compile" @@ -58029,7 +62603,7 @@ msgstr "ēƀ點äø­ē„”ęŒ‡å®šę–‡å­—ęˆ–ęŖ”ę”ˆļ¼Œē„”åÆē·Øč­Æ" msgid "External shader script must have .osl or .oso extension, or be a module name" -msgstr "外éƒØč‘—č‰²å™ØęŒ‡ä»¤ēØæåæ…é ˆęœ‰ .osl ꈖ .oso å‰ÆęŖ”名ļ¼Œęˆ–者ę˜Æäø€å€‹ęØ”ēµ„名ēر" +msgstr "外éƒØč‘—č‰²å™Ø命令ēØæåæ…é ˆęœ‰ .osl ꈖ .oso å‰ÆęŖ”名ļ¼Œęˆ–者ę˜Æäø€å€‹ęØ”ēµ„名ēر" msgid "Can't read OSO bytecode to store in node at %r" @@ -58162,10 +62736,19 @@ msgid "Contributions" msgstr "č²¢ē»" +msgid "Transparent Background" +msgstr "透꘎背ę™Æ" + + msgid "Unable to parse XML, %s:%s for file %r" msgstr "ē„”ę³•č§£ęž XMLļ¼Œ%s:%s ęŖ”ę”ˆ %r" +msgctxt "Operator" +msgid "FBX (.fbx)" +msgstr "FBX (.fbx)" + + msgid "ASCII FBX files are not supported %r" msgstr "ASCII FBX ęŖ”ęœŖę”Æę“ %r" @@ -58174,6 +62757,30 @@ msgid "Version %r unsupported, must be %r or later" msgstr "ęœŖę”Æę“ %r ē‰ˆļ¼Œč‡³å°‘需 %r ęˆ–å¾ŒēŗŒē‰ˆęœ¬" +msgid "Scene Graph" +msgstr "å “ę™Æ圖č”Ø" + + +msgid "Notes" +msgstr "備čØ»" + + +msgid "Sampling Animations" +msgstr "取ęأ動ē•«" + + +msgid "gltfpack" +msgstr "gltfpack" + + +msgid "Quantize Position" +msgstr "量化位ē½®" + + +msgid "Variant" +msgstr "變體" + + msgctxt "Operator" msgid "Multiple Images" msgstr "多張影像" @@ -58238,6 +62845,11 @@ msgid "Options:" msgstr "éø項ļ¼š" +msgctxt "Operator" +msgid "Action" +msgstr "動作" + + msgctxt "Operator" msgid "Save Persistent To..." msgstr "儲存ę°øꁆčØ­å®šč‡³..." @@ -58271,6 +62883,10 @@ msgid "Statistics" msgstr "ēµ±č؈ę•øꓚ" +msgid "Add-ons:" +msgstr "附加元件ļ¼š" + + msgctxt "Operator" msgid "Refresh I18n Data..." msgstr "é‡ę–°ę•“ē† I18n č³‡ę–™..." @@ -58295,6 +62911,26 @@ msgid "Tracking" msgstr "č·Ÿč¹¤" +msgid "Positional" +msgstr "位ē½®" + + +msgid "Controllers" +msgstr "ęŽ§åˆ¶å™Ø" + + +msgid "Object Extras" +msgstr "ē‰©é«”锍外項" + + +msgid "Huawei" +msgstr "čÆē‚ŗ" + + +msgid "Note:" +msgstr "備čØ»ļ¼š" + + msgid "performance impact!" msgstr "ęœƒå½±éŸæę•ˆčƒ½ļ¼" @@ -58328,7 +62964,7 @@ msgstr "ē”Øå“Ŗå€‹ę»‘é¼ ęŒ‰éµé€²č”Œéø꓇" msgid "3D View" -msgstr "3D č¦–åœ–" +msgstr "3D ęŖ¢č¦–" msgid "Middle Mouse Action" @@ -58347,10 +62983,22 @@ msgid "Nothing to bake" msgstr "ę²’ęœ‰åÆ仄ēƒ˜ē„™" +msgid "Unexpected modifier type: " +msgstr "ęœŖ預ꜟēš„äæ®ę”¹å™Ø锞型ļ¼š " + + +msgid "GeometryNodes" +msgstr "幾何ēƀ點" + + msgid "Image is packed, unpack before editing" msgstr "圖像ē‚ŗę‰“åŒ…ē‹€ę…‹ļ¼Œéœ€č¦å¤–éƒØē·Øč¼Æę™‚č«‹å…ˆč§£åŒ…" +msgid "Modifiers cannot be added to object: " +msgstr "ē„”ę³•ē‚ŗē‰©é«”ę·»åŠ äæ®ę”¹å™Øļ¼š " + + msgid "Active object is not a mesh" msgstr "作ē”Øäø­ē‰©é«”非ē¶²ę ¼" @@ -58410,6 +63058,10 @@ msgid "Continue" msgstr "ē¹¼ēŗŒ" +msgid "Getting Started" +msgstr "ä½æē”Øå…„é–€" + + msgctxt "Operator" msgid "Donate" msgstr "č“ŠåŠ©" @@ -58420,6 +63072,20 @@ msgid "What's New" msgstr "ę–°åŠŸčƒ½" +msgid "Running in Offline Mode" +msgstr "仄離ē·šęØ”å¼åŸ·č”Œ" + + +msgctxt "Operator" +msgid "Credits" +msgstr "č²¢ē»č€…名單" + + +msgctxt "Operator" +msgid "License" +msgstr "ęŽˆę¬Šę¢ę¬¾" + + msgctxt "Operator" msgid "Blender Store" msgstr "Blender 商åŗ—" @@ -58440,6 +63106,14 @@ msgid "Append..." msgstr "附加..." +msgid "Assign" +msgstr "ęŒ‡ę“¾" + + +msgid "Bug" +msgstr "č‡­čŸ²" + + msgid "Release Notes" msgstr "ē™¼č”ŒčØ»čؘ" @@ -58452,6 +63126,42 @@ msgid "User Manual" msgstr "ä½æē”Øč€…ę‰‹å†Š" +msgid "Credits" +msgstr "č²¢ē»č€…名單" + + +msgid "Extensions Platform" +msgstr "ę““å……å„—ä»¶å¹³č‡ŗ" + + +msgid "Online directory of free and open source extensions" +msgstr "č‡Ŗē”±äø”é–‹ęŗēš„ē·šäøŠę““充儗件ē›®éŒ„" + + +msgid "Mesh(es)" +msgstr "ē¶²ę ¼" + + +msgid "Curve(s)" +msgstr "ę›²ē·š" + + +msgid "Metaball(s)" +msgstr "č®Šå¹»ēƒ" + + +msgid "Volume(s)" +msgstr "容體" + + +msgid "Armature(s)" +msgstr "éŖØꞶ" + + +msgid "Lattice(s)" +msgstr "ę™¶ę ¼" + + msgid "Light(s)" msgstr "ē‡ˆå…‰" @@ -58460,6 +63170,14 @@ msgid "Light Probe(s)" msgstr "ē‡ˆå…‰ęŽ”ęØ£å™Ø" +msgid "Camera(s)" +msgstr "ę”å½±ę©Ÿ" + + +msgid "Speaker(s)" +msgstr "喇叭" + + msgctxt "Operator" msgid "Manual" msgstr "ę‰‹å†Š" @@ -58480,16 +63198,73 @@ msgid "User Communities" msgstr "ä½æē”Ø者ē¤¾ē¾¤" +msgid "Python evaluation failed: " +msgstr "Python ä¼°ē®—å¤±ę•—ļ¼š " + + +msgid "Failed to assign value: " +msgstr "ē„”ę³•ęŒ‡ę“¾ę•ø值ļ¼š " + + +msgid "Strip(s)" +msgstr "ē‰‡ę®µ" + + +msgid "Object(s)" +msgstr "ē‰©é«”" + + +msgid "Characters" +msgstr "字元" + + +msgid " (delta)" +msgstr " ļ¼ˆå¢žé‡ļ¼‰" + + +msgid "Node(s)" +msgstr "ēƀ點" + + +msgid "Collection(s)" +msgstr "集ē›’" + + +msgid "Material(s)" +msgstr "Ꝑč³Ŗ" + + msgctxt "Operator" msgid "Import Blender {:d}.{:d} Preferences" msgstr "åŒÆå…„ Blender {:d}.{:d} 偏儽čح定" +msgid "Bone(s)" +msgstr "éŖØéŖ¼" + + +msgid "Action(s)" +msgstr "動作" + + +msgid "Scene(s)" +msgstr "å “ę™Æ" + + +msgid "Brush(es)" +msgstr "ē­†åˆ·" + + msgctxt "Operator" msgid "Location" msgstr "位ē½®" +msgctxt "Operator" +msgid "Available" +msgstr "åÆē”Ø" + + msgctxt "Operator" msgid "Rotation" msgstr "ę—‹č½‰" @@ -58499,6 +63274,10 @@ msgid "Unknown" msgstr "ęœŖēŸ„" +msgid "Calculation Range" +msgstr "運ē®—ēƄ圍" + + msgid "Frame Numbers" msgstr "å¹€č™Ÿ" @@ -58511,6 +63290,15 @@ msgid "After" msgstr "åœØ這之後" +msgid "Cached Range" +msgstr "åæ«å–ēƄ圍" + + +msgctxt "Operator" +msgid "Update Path" +msgstr "ꛓꖰč·Æ徑" + + msgid "Nothing to show yet..." msgstr "ę²’ęœ‰åÆ仄é”Æē¤ŗēš„..." @@ -58547,10 +63335,23 @@ msgid "Order" msgstr "順åŗ" +msgctxt "Constraint" +msgid "Mix" +msgstr "ę··åˆ" + + +msgid "Clamp Region" +msgstr "限定區唊" + + msgid "Volume Min" msgstr "體ē©ęœ€å°" +msgid "Min/Max" +msgstr "ęœ€å°/ęœ€å¤§" + + msgid "Extrapolate" msgstr "外ęŽØ" @@ -58567,6 +63368,16 @@ msgid "Axes" msgstr "č»ø" +msgctxt "Armature" +msgid "Out" +msgstr "å‡ŗ" + + +msgctxt "Armature" +msgid "Ease" +msgstr "ē·©č®Š" + + msgid "Control Rotation" msgstr "ęŽ§åˆ¶ę—‹č½‰" @@ -58580,12 +63391,28 @@ msgid "Passepartout" msgstr "č£±ę”†" +msgid "Golden" +msgstr "黃金ęƔ例" + + +msgid "Harmony" +msgstr "č«§å’Œ" + + msgid "Not Set" msgstr "ęœŖčح定" msgid "Views Format:" -msgstr "č¦–åœ–ę ¼å¼ļ¼š" +msgstr "ęŖ¢č¦–ę ¼å¼ļ¼š" + + +msgid "Longitude Min" +msgstr "ęœ€å°ē¶“åŗ¦" + + +msgid "K0" +msgstr "K0" msgid "Render U" @@ -58604,6 +63431,26 @@ msgid "Endpoint" msgstr "ē«Æ點" +msgctxt "Operator" +msgid "Bold" +msgstr "ē²—é«”" + + +msgctxt "Operator" +msgid "Italic" +msgstr "ē¾©å¼ę–œé«”" + + +msgctxt "Operator" +msgid "Underline" +msgstr "åŗ•ē·š" + + +msgctxt "Operator" +msgid "Custom..." +msgstr "č‡Ŗč؂..." + + msgctxt "Operator" msgid "Lock All" msgstr "鎖定å…ØéƒØ" @@ -58661,6 +63508,10 @@ msgid "Mirror Shape Key (Topology)" msgstr "鏔射外形鍵 (ꋓęØø)" +msgid "Name collisions: " +msgstr "名ēØ±č”ēŖļ¼š " + + msgctxt "Operator" msgid "Search..." msgstr "ęœå°‹..." @@ -58670,6 +63521,30 @@ msgid "Detail" msgstr "ē“°ēƀ" +msgid "Failed to load volume:" +msgstr "č¼‰å…„å®¹é«”å¤±ę•—ļ¼š" + + +msgid "Negation" +msgstr "反向" + + +msgid "Combination" +msgstr "ēµ„合" + + +msgid "Condition" +msgstr "ę¢ä»¶" + + +msgid "Base Transparency" +msgstr "åŸŗē¤Žé€ę˜Žåŗ¦" + + +msgid "Base Thickness" +msgstr "åŸŗē¤Žē²—ē“°" + + msgid "Spacing Along Stroke" msgstr "ę²æē­†č§øé–“č·" @@ -58715,6 +63590,10 @@ msgid "Poly" msgstr "å¤šč§’å½¢" +msgid "Display Cursor" +msgstr "é”Æē¤ŗęøøęؙ" + + msgid "Data Source:" msgstr "č³‡ę–™ä¾†ęŗļ¼š" @@ -58724,6 +63603,10 @@ msgid "Selection to Cursor" msgstr "éøå–é …č‡³ęøøęؙ" +msgid "Unlocked" +msgstr "ęœŖ鎖定" + + msgid "Parent:" msgstr "č¦Ŗ代ļ¼š" @@ -58732,11 +63615,19 @@ msgid "Transform:" msgstr "č®Šę›ļ¼š" +msgid "Spline:" +msgstr "雲形ē·šļ¼š" + + msgctxt "Operator" msgid "Clear" msgstr "ęø…除" +msgid "Animation:" +msgstr "動ē•«ļ¼š" + + msgid "Holes" msgstr "ē©ŗę“ž" @@ -58755,6 +63646,10 @@ msgid "Light Probe Volume" msgstr "ē‡ˆå…‰ęŽ”ęØ£å™Ø容體" +msgid "Intersection" +msgstr "äŗ¤é›†" + + msgid "Tracking Axis" msgstr "čæ½č¹¤ē”Øč»ø" @@ -58763,6 +63658,11 @@ msgid "Show Instancer" msgstr "é”Æē¤ŗåƦ例å™Ø" +msgctxt "Time" +msgid "Old" +msgstr "舊꜉" + + msgctxt "Time" msgid "New" msgstr "ę–°å¢ž" @@ -58772,10 +63672,22 @@ msgid "Date" msgstr "ę—„ęœŸ" +msgid "Hostname" +msgstr "äø»ę©Ÿåēر" + + +msgid "Saving" +msgstr "儲存" + + msgid "Buffer" msgstr "ē·©č”" +msgid "Mask Mapping" +msgstr "遮ē½©ę˜ å°„" + + msgid "Pressure Masking" msgstr "壓力遮ē½©" @@ -58792,6 +63704,10 @@ msgid "Cavity (inverted)" msgstr "å‘č…” ( åč½‰ )" +msgid "Sample Bias" +msgstr "取ęأ偏差" + + msgid "Caps Type" msgstr "ęœ«ē«Æ锞型" @@ -58855,14 +63771,34 @@ msgid "Use Timing" msgstr "ä½æē”ØčØˆę™‚" +msgid "Display percentage makes dynamics inaccurate without baking" +msgstr "é”Æē¤ŗåœØę²’ęœ‰ēƒ˜åŸ¹ēš„ęƒ…ę³äø‹ä½æå‹•ę…‹äøē²¾ē¢ŗ之ē™¾åˆ†ęƔ" + + msgid "Not yet functional" msgstr "尚ęœŖčƒ½é‹ä½œ" +msgid "Custom Volume" +msgstr "č‡Ŗč؂容體" + + +msgid "Sewing" +msgstr "ēø«åˆ" + + msgid "Dynamic Mesh" msgstr "å‹•ę…‹ē¶²ę ¼" +msgid "Max Shearing" +msgstr "ęœ€å¤§å‰Ŗ切" + + +msgid "Max Shrinking" +msgstr "ęœ€å¤§ę”¶ēø®" + + msgid "Structural" msgstr "ēµę§‹" @@ -58947,10 +63883,18 @@ msgid "Heat" msgstr "ē†±" +msgid "Bubbles" +msgstr "ę°£ę³”" + + msgid "Exponent" msgstr "ꌇę•ø" +msgid "Surface Tension" +msgstr "č”Ø面張力" + + msgid "Delete in Obstacle" msgstr "åœØ障ē¤™ē‰©äø­åˆŖ除" @@ -58963,6 +63907,29 @@ msgid "Lower" msgstr "小åÆ«" +msgctxt "Operator" +msgid "Resume" +msgstr "ę¢å¾©" + + +msgctxt "Operator" +msgid "Free" +msgstr "č‡Ŗē”±" + + +msgid "Fuel" +msgstr "ē‡ƒę–™" + + +msgctxt "Simulation" +msgid "Cache" +msgstr "åæ«å–" + + +msgid "Second" +msgstr "ē¬¬äŗŒ" + + msgid "Upper" msgstr "大åÆ«" @@ -58971,6 +63938,18 @@ msgid "Auto-Step" msgstr "č‡Ŗå‹•ę­„é€²" +msgid "Rays" +msgstr "光ē·š" + + +msgid "Tracing" +msgstr "č·Ÿč¹¤" + + +msgid "Temporal Reprojection" +msgstr "Ꙃåŗé‡ęŠ•å½±" + + msgid "Shadow Pool" msgstr "é™°å½±ę± " @@ -58987,6 +63966,18 @@ msgid "Paths:" msgstr "č·Æ徑ļ¼š" +msgid "Needed" +msgstr "éœ€č¦" + + +msgid "Visual" +msgstr "åÆ視" + + +msgid "F-Curve Grouping" +msgstr "F ę›²ē·šē¾¤ēµ„化" + + msgctxt "Operator" msgid "Bake All Light Probe Volumes" msgstr "ēƒ˜ē„™ę‰€ęœ‰ē‡ˆå…‰ęŽ”ęØ£å™Ø容體" @@ -59009,14 +64000,39 @@ msgid "Dimension" msgstr "ē¶­åŗ¦" +msgid "Third" +msgstr "ē¬¬äø‰" + + +msgid "Fourth" +msgstr "ē¬¬å››" + + msgid "Tiles" msgstr "é‹Ŗꎒ" -msgid "Odd" +msgctxt "Amount" +msgid "Even" msgstr "偶ę•ø" +msgid "Odd" +msgstr "儇ę•ø" + + +msgid "Map" +msgstr "ę˜ å°„" + + +msgid "category" +msgstr "分锞" + + +msgid "name" +msgstr "名ēر" + + msgid "B/W" msgstr "黑/ē™½" @@ -59050,6 +64066,10 @@ msgid "Tripod" msgstr "č…³ęž¶" +msgid "Optical Center" +msgstr "光å­øäø­åæƒ" + + msgctxt "Operator" msgid "Solve Camera Motion" msgstr "č§£ē®—ę”å½±ę©Ÿé‹å‹•" @@ -59078,6 +64098,16 @@ msgid "Build Proxy" msgstr "重å»ŗ代ē†" +msgctxt "Operator" +msgid "Backwards" +msgstr "čæ”回" + + +msgctxt "Operator" +msgid "Forwards" +msgstr "前進" + + msgctxt "Operator" msgid "Set Floor" msgstr "čح定地面" @@ -59087,6 +64117,10 @@ msgid "3D Markers" msgstr "3D ęؙčؘ" +msgid "Display Aspect Ratio" +msgstr "é”Æē¤ŗåƬ高ęƔ" + + msgctxt "Operator" msgid "Floor" msgstr "地面" @@ -59115,6 +64149,10 @@ msgid "No active plane track" msgstr "作ē”Øäø­å¹³é¢č»Œé“" +msgid "Timecode Index" +msgstr "Ꙃ間ē¢¼ē“¢å¼•" + + msgctxt "Operator" msgid "Set Wall" msgstr "čح定ē‰†å£" @@ -59131,7 +64169,7 @@ msgstr "é”Æē¤ŗč»Œé“" msgid "Normalization" -msgstr "ę­£č¦åŒ–" +msgstr "ę­øäø€åŒ–" msgid "Use Brute Force" @@ -59160,7 +64198,7 @@ msgstr "č§£é™¤č»Œé“éŽ–å®š" msgctxt "Operator" msgid "Copy as Script" -msgstr "作ē‚ŗęŒ‡ä»¤ēØæč¤‡č£½" +msgstr "作ē‚ŗ命令ēØæč¤‡č£½" msgctxt "Operator" @@ -59320,11 +64358,29 @@ msgid "Hide Unselected Curves" msgstr "éš±č—ęœŖéøå–ę›²ē·š" +msgid "Recursions" +msgstr "遞čæ“" + + +msgid "Folders" +msgstr "č³‡ę–™å¤¾" + + +msgctxt "Operator" +msgid "Cleanup" +msgstr "ęø…ē†" + + msgctxt "Operator" msgid "Back" msgstr "後" +msgctxt "Operator" +msgid "Forward" +msgstr "前進" + + msgid "Asset Details" msgstr "ē“ ęč©³ē“°č³‡ę–™" @@ -59337,6 +64393,20 @@ msgid "Asset Catalog:" msgstr "ē“ ęē·Øē›®ļ¼š" +msgid "UUID" +msgstr "UUID" + + +msgctxt "Operator" +msgid "Ease" +msgstr "ē·©č®Š" + + +msgctxt "Operator" +msgid "Scale Average" +msgstr "ēø®ę”¾å¹³å‡" + + msgctxt "Operator" msgid "Smooth (Gaussian)" msgstr "å¹³ę»‘ļ¼ˆé«˜ę–Æļ¼‰" @@ -59352,6 +64422,10 @@ msgid "Jump to Selected" msgstr "č·³åˆ°ę‰€éø" +msgid "Drivers:" +msgstr "驅動å™Øļ¼š" + + msgctxt "Operator" msgid "Decimate (Ratio)" msgstr "大量削ęø› ( ęƔēŽ‡čŖæę•“ )" @@ -59389,7 +64463,7 @@ msgstr "ä¾č·é›¢" msgctxt "Operator" msgid "Selection" -msgstr "éø取" +msgstr "éø取項" msgid "Modified Edges" @@ -59532,6 +64606,11 @@ msgid "Render Slot Cycle Previous" msgstr "ē®—ē¹Ŗę§½å¾Ŗē’°äø­ēš„äøŠäø€å€‹" +msgctxt "Operator" +msgid "Replace..." +msgstr "ę›æꏛ..." + + msgctxt "Operator" msgid "Pack" msgstr "ę‰“åŒ…" @@ -59567,11 +64646,26 @@ msgid "Toggle Fullscreen Area" msgstr "åˆ‡ę›å…Øčž¢å¹•å€åŸŸ" +msgctxt "Operator" +msgid "Transition" +msgstr "過ęø”" + + msgctxt "Operator" msgid "Sound" msgstr "č²éŸ³" +msgctxt "Operator" +msgid "Swap" +msgstr "äŗ¤ę›" + + +msgctxt "Operator" +msgid "Rename..." +msgstr "é‡ę–°å‘½å..." + + msgctxt "Operator" msgid "Track Ordering..." msgstr "č»Œé“ęŽ’åŗč™•ē†..." @@ -59597,6 +64691,16 @@ msgid "Remove from Frame" msgstr "å¾žę”†å¹€äøŠē§»é™¤" +msgctxt "Operator" +msgid "Mute" +msgstr "å±č”½" + + +msgctxt "Operator" +msgid "Collapse" +msgstr "ꔶ起" + + msgctxt "Operator" msgid "Fit" msgstr "適ꇉ" @@ -59609,7 +64713,7 @@ msgstr "č£½ä½œé€£ēµäø¦ę›æę›é€£ēµ" msgctxt "Operator" msgid "Select Grouped..." -msgstr "ē¾¤ēµ„éø取..." +msgstr "éø取已分ēµ„..." msgctxt "Operator" @@ -59639,6 +64743,10 @@ msgid "Slot {:d}" msgstr "ę§½ {:d}" +msgid "Types" +msgstr "锞型" + + msgctxt "Operator" msgid "Show Object Hierarchy" msgstr "é”Æē¤ŗē‰©ä»¶éšŽå±¤" @@ -59651,7 +64759,7 @@ msgstr "é”Æē¤ŗäø€å€‹å±¤ē“š" msgctxt "Operator" msgid "Isolate" -msgstr "å­¤ē«‹" +msgstr "隔離" msgctxt "Operator" @@ -59678,6 +64786,14 @@ msgid "All View Layers" msgstr "ꉀ꜉ęŖ¢č¦–層" +msgid "Object Children" +msgstr "ē‰©é«”子ē“š" + + +msgid "Empties" +msgstr "ē©ŗ體" + + msgctxt "Collection" msgid "New" msgstr "ę–°å¢ž" @@ -59693,13 +64809,18 @@ msgid "Make" msgstr "å»ŗē«‹" +msgctxt "Operator" +msgid "Troubleshoot" +msgstr "ē–‘é›£ęŽ’é™¤" + + msgid "Others" msgstr "其他" msgctxt "Operator" msgid "Purge" -msgstr "åˆŖ除" +msgstr "å…ØéƒØę·Øē©ŗ" msgid "Active Tools" @@ -59710,16 +64831,40 @@ msgid "Color Tags" msgstr "č‰²å½©ęؙē±¤" +msgid "Offsets" +msgstr "偏ē§»" + + +msgctxt "Operator" +msgid "Setup" +msgstr "čØ­ē½®" + + +msgctxt "Operator" +msgid "Rebuild" +msgstr "重å»ŗ" + + msgctxt "Operator" msgid "Refresh All" msgstr "å…ØéƒØé‡ę–°ę•“ē†" +msgctxt "Operator" +msgid "Path/Files" +msgstr "č·Æ徑/ęŖ”ę”ˆ" + + msgctxt "Operator" msgid "Movie" msgstr "å½±ē‰‡" +msgctxt "Operator" +msgid "Image/Sequence" +msgstr "影像/åŗę®µ" + + msgctxt "Operator" msgid "Fade" msgstr "ę·”åŒ–" @@ -59739,10 +64884,23 @@ msgid "Position X" msgstr "位ē½® X" +msgid "Raw" +msgstr "Raw" + + +msgid "Preprocessed" +msgstr "é å…ˆč™•ē†" + + msgid "Storage" msgstr "å„²č—" +msgctxt "Operator" +msgid "Both" +msgstr "å…©č€…" + + msgctxt "Operator" msgid "Left" msgstr "å·¦" @@ -59753,6 +64911,20 @@ msgid "Right" msgstr "右" +msgid "Handle" +msgstr "ęŽ§åˆ¶ę”æ" + + +msgctxt "Operator" +msgid "Clip..." +msgstr "å‰Ŗč¼Æ..." + + +msgctxt "Operator" +msgid "Mask..." +msgstr "遮ē½©..." + + msgctxt "Operator" msgid "Color" msgstr "č‰²å½©" @@ -59813,10 +64985,31 @@ msgid "Reload Strips and Adjust Length" msgstr "é‡ę–°č¼‰å…„ē‰‡ę®µäø¦čŖæę•“é•·åŗ¦" +msgid "Resolutions" +msgstr "č§£ęžåŗ¦" + + +msgctxt "Operator" +msgid "Clip" +msgstr "å‰Ŗč¼Æ" + + msgid "Unpack" msgstr "č§£åŒ…" +msgid "Pack" +msgstr "ę‰“åŒ…" + + +msgid "Hz" +msgstr "Hz" + + +msgid "dB" +msgstr "dB" + + msgid "No active viewer node" msgstr "ę²’ęœ‰ä½œē”Øäø­ēš„ęŖ¢č¦–å™Øēƀ點" @@ -59969,8 +65162,16 @@ msgid "Properties and Sidebars" msgstr "å±¬ę€§čˆ‡å“é‚Šę¬„" +msgid "Miter Outer" +msgstr "ę–œęŽ„å¤–å“" + + +msgid "Intersections" +msgstr "äŗ¤é›†" + + msgid "Annotation:" -msgstr "čØ»čؘ" +msgstr "čØ»č§£ļ¼š" msgctxt "Operator" @@ -59993,6 +65194,11 @@ msgid "Quit" msgstr "離開" +msgctxt "Operator" +msgid "Auto Save..." +msgstr "č‡Ŗ動儲存..." + + msgctxt "Operator" msgid "Render Animation" msgstr "ē®—ē¹Ŗ動ē•«" @@ -60000,7 +65206,7 @@ msgstr "ē®—ē¹Ŗ動ē•«" msgctxt "Operator" msgid "Render Audio..." -msgstr "č¼øå‡ŗ音č؊..." +msgstr "ē®—儏音č؊..." msgctxt "Operator" @@ -60102,6 +65308,11 @@ msgid "Alembic (.abc)" msgstr "Alembic (.abc)" +msgctxt "Operator" +msgid "STL (.stl)" +msgstr "STL (.stl)" + + msgctxt "Operator" msgid "Render Image" msgstr "ē®—ē¹Ŗ影像" @@ -60122,6 +65333,10 @@ msgid "Python API Reference" msgstr "Python API 參ē…§" +msgid "Node Label" +msgstr "ēƀ點ęؙē±¤" + + msgid "Auto-Save Preferences" msgstr "č‡Ŗ動儲存偏儽čح定" @@ -60131,6 +65346,19 @@ msgid "Revert to Saved Preferences" msgstr "å›žå¾©ęˆå·²å„²å­˜ēš„čح定" +msgid "Hinting" +msgstr "字ē¹Ŗꏐē¤ŗ" + + +msgctxt "Preferences" +msgid "Translate" +msgstr "ēæ»č­Æ" + + +msgid "Reports" +msgstr "回報" + + msgid "New Data" msgstr "ę–°č³‡ę–™" @@ -60139,12 +65367,20 @@ msgid "Render In" msgstr "ē®—ē¹Ŗé”Æē¤ŗę–¹ę³•" +msgid "Scene Statistics" +msgstr "å “ę™Æēµ±čØˆč³‡ę–™" + + msgid "System Memory" msgstr "ē³»ēµ±čØ˜ę†¶é«”" msgid "Video Memory" -msgstr "é”Æē¤ŗ協čØ˜ę†¶é«”" +msgstr "視č؊čØ˜ę†¶é«”" + + +msgid "Blender Version" +msgstr "Blender ē‰ˆęœ¬" msgid "Top Level" @@ -60159,6 +65395,10 @@ msgid "Link Materials To" msgstr "連ēµęč³Ŗč‡³" +msgid "Lock Adjust" +msgstr "鎖定čŖæę•“" + + msgid "Default Color" msgstr "預čØ­č‰²å½©" @@ -60167,6 +65407,10 @@ msgid "Eraser Radius" msgstr "ę©”ēš®ę“¦åŠå¾‘" +msgid "Custom Gradient" +msgstr "č‡Ŗč؂ę¼ø層" + + msgid "Auto-Offset" msgstr "č‡Ŗ動偏ē§»" @@ -60187,6 +65431,10 @@ msgid "Only Insert Needed" msgstr "åŖåœØéœ€č¦ę™‚ę’å…„" +msgid "Keyframing" +msgstr "éµå¹€č™•ē†" + + msgid "Auto-Keyframing" msgstr "č‡Ŗå‹•éµå¹€č™•ē†" @@ -60248,7 +65496,7 @@ msgstr "ę–‡å­—č³‡čØŠč¦†č“‹é”Æē¤ŗ" msgid "View Name" -msgstr "č¦–åœ–åēر" +msgstr "ęŖ¢č¦–名ēر" msgid "Playback Frame Rate (FPS)" @@ -60337,6 +65585,10 @@ msgid "Show Locations" msgstr "é”Æē¤ŗ位ē½®" +msgid "No custom MatCaps configured" +msgstr "ē„”č‡ŖčØ‚ęč³Ŗꍕꍉēƒēµ„ę…‹" + + msgid "No custom Studio Lights configured" msgstr "ęœŖčح定č‡ŖčØ‚ę”å½±ę£šē‡ˆå…‰" @@ -60357,13 +65609,17 @@ msgstr "čػ冊" msgctxt "Operator" msgid "Unregister" -msgstr "č§£é™¤čػ冊" +msgstr "å–ę¶ˆčػ冊" msgid "For All Users" msgstr "å„—ē”Øēµ¦ę‰€ęœ‰ä½æē”Ø者" +msgid "Player" +msgstr "ę’­ę”¾å™Ø" + + msgid "Wheel" msgstr "ę»¾č¼Ŗ" @@ -60372,12 +65628,16 @@ msgid "Invert Wheel Zoom Direction" msgstr "åč½‰ę»¾č¼Ŗ遠čæ‘čŖæē„¦ę–¹å‘" +msgid "Fly/Walk" +msgstr "é£›č”Œ/ę­„č”Œ" + + msgid "Error (see console)" msgstr "éŒÆčŖ¤ (ęŸ„ēœ‹äø»ęŽ§č‡ŗ)" msgid "Missing script files" -msgstr "éŗ失ēš„ęŒ‡ä»¤ēØæęŖ”ę”ˆ" +msgstr "éŗ失ēš„命令ēØæęŖ”ę”ˆ" msgid "No custom {:s} configured" @@ -60444,9 +65704,14 @@ msgid "Orbit Opposite" msgstr "ē›ø反ē¹žč»Œ" +msgctxt "Operator" +msgid "Dolly View..." +msgstr "čµ°é”ęŖ¢č¦–..." + + msgctxt "Operator" msgid "Align Active Camera to View" -msgstr "將作ē”Øäø­ę”å½±ę©Ÿå°é½Šč¦–圖" +msgstr "將作ē”Øäø­ę”å½±ę©Ÿå°é½ŠęŖ¢č¦–" msgctxt "Operator" @@ -60543,9 +65808,19 @@ msgid "Side of Active" msgstr "作ē”Ø項ēš„同偓" +msgctxt "Operator" +msgid "First" +msgstr "ē¬¬äø€" + + +msgctxt "Operator" +msgid "Last" +msgstr "ęœ€å¾Œ" + + msgctxt "Operator" msgid "Set Color Attribute" -msgstr "čØ­å®šč‰²å½©å±¬ę€§" +msgstr "čØ­å®šč‰²å½©ē‰¹ę€§" msgctxt "Operator" @@ -60553,6 +65828,21 @@ msgid "Levels" msgstr "層ē“š" +msgctxt "Operator" +msgid "Hue/Saturation/Value" +msgstr "č‰²ē›ø/飽和åŗ¦/꘎åŗ¦" + + +msgctxt "Operator" +msgid "Brightness/Contrast" +msgstr "äŗ®åŗ¦/對ęƔ" + + +msgctxt "Operator" +msgid "Endpoints" +msgstr "ē«Æ點" + + msgctxt "Operator" msgid "Plane" msgstr "平面" @@ -60608,6 +65898,11 @@ msgid "Path" msgstr "č·Æ徑" +msgctxt "Operator" +msgid "Fur" +msgstr "ēµØęƛ" + + msgctxt "Operator" msgid "Nurbs Surface" msgstr "Nurbs ę›²é¢" @@ -60643,6 +65938,11 @@ msgid "Import OpenVDB..." msgstr "åŒÆå…„ OpenVDB..." +msgctxt "Volume" +msgid "Empty" +msgstr "ē©ŗ體" + + msgctxt "Operator" msgid "Speaker" msgstr "喇叭" @@ -60739,12 +66039,12 @@ msgstr "č¤‡č£½ UV ę˜ å°„" msgctxt "Operator" msgid "Normalize All" -msgstr "å…ØéƒØę­£č¦åŒ–" +msgstr "å…ØéƒØę­øäø€åŒ–" msgctxt "Operator" msgid "Normalize" -msgstr "ę­£č¦åŒ–" +msgstr "ę­øäø€åŒ–" msgctxt "Operator" @@ -60762,6 +66062,10 @@ msgid "Limit Total" msgstr "限制ēø½č؈" +msgid "Locks" +msgstr "鎖定" + + msgctxt "Operator" msgid "Toggle Visibility" msgstr "åˆ‡ę›åÆ見ꀧ" @@ -60786,6 +66090,11 @@ msgid "Lasso Show" msgstr "å„—ē“¢é”Æē¤ŗ" +msgctxt "Operator" +msgid "Box Add" +msgstr "ꔆéøę–°å¢ž" + + msgctxt "Operator" msgid "Lasso Add" msgstr "å„—ē“¢ę–°å¢ž" @@ -61024,16 +66333,60 @@ msgid "Extrude Faces Along Normals" msgstr "ę²æę³•ē·šę“ å‡ŗ面" +msgctxt "Operator" +msgid "Weak" +msgstr "å¼±" + + +msgctxt "Operator" +msgid "Medium" +msgstr "äø­" + + +msgctxt "Operator" +msgid "Strong" +msgstr "å¼·" + + +msgctxt "Operator" +msgid "Flip" +msgstr "ēæ»č½‰" + + +msgctxt "Operator" +msgid "Rotate..." +msgstr "ę—‹č½‰ā€¦" + + msgctxt "Operator" msgid "Edge Loops" msgstr "å¾Ŗē’°ē·š" +msgctxt "Operator" +msgid "Bones" +msgstr "éŖØéŖ¼" + + +msgctxt "Operator" +msgid "Arrange" +msgstr "ęŽ’åˆ—" + + msgctxt "Operator" msgid "View Selected" msgstr "ęŖ¢č¦–ꉀéø" +msgctxt "View3D" +msgid "Floor" +msgstr "地面" + + +msgid "Statistics" +msgstr "ēµ±č؈ę•øꓚ" + + msgid "Origins" msgstr "原點" @@ -61059,6 +66412,10 @@ msgid "Edge Marks" msgstr "邊ē·šęؙčؘ" +msgid "Armature Overlays" +msgstr "éŖØꞶ覆ē–Šå±¤" + + msgid "Zero Weights" msgstr "é”Æē¤ŗé›¶ę¬Šé‡" @@ -61113,6 +66470,11 @@ msgid "Edge Rings" msgstr "ē’°å½¢ē·š" +msgctxt "Operator" +msgid "Armature" +msgstr "éŖØꞶ" + + msgctxt "Operator" msgid "Lattice" msgstr "ę™¶ę ¼" @@ -61123,6 +66485,16 @@ msgid "Collection Instance" msgstr "集ē›’åƦ例" +msgctxt "Operator" +msgid "Reference" +msgstr "參ē…§" + + +msgctxt "Operator" +msgid "Background" +msgstr "背ę™Æ" + + msgctxt "Operator" msgid "Add Active" msgstr "ę·»åŠ äø»å‹•" @@ -61206,6 +66578,11 @@ msgid "Clear Sharp" msgstr "ęø…除銳利" +msgctxt "Operator" +msgid "Face Area" +msgstr "面區域" + + msgctxt "Operator" msgid "Recalculate Outside" msgstr "重ē®—外éƒØ" @@ -61251,6 +66628,11 @@ msgid "Hide Inactive Layers" msgstr "éš±č—éžä½œē”Øäø­åˆ†å±¤" +msgctxt "Operator" +msgid "Close" +msgstr "閉合" + + msgid "Exclude Non-Selectable" msgstr "ꎒ除關閉éø꓇ēš„ē‰©é«”" @@ -61263,11 +66645,21 @@ msgid "No Materials" msgstr "ę²’ęœ‰ęč³Ŗ" +msgctxt "Operator" +msgid "Simplify" +msgstr "ē°”化" + + msgctxt "Operator" msgid "Set as Active Material" msgstr "čØ­ē‚ŗ作ē”Øäø­ęč³Ŗ" +msgctxt "View3D" +msgid "Mix" +msgstr "ę··åˆ" + + msgctxt "Operator" msgid "Assign to Active Group" msgstr "ęŒ‡ę“¾č‡³ä½œē”Øäø­ē¾¤ēµ„" @@ -61283,6 +66675,16 @@ msgid "Remove All Groups" msgstr "ē§»é™¤å…ØéƒØē¾¤ēµ„" +msgctxt "Operator" +msgid "Gradient (Linear)" +msgstr "ę¼ø層ļ¼ˆē·šę€§ļ¼‰" + + +msgctxt "Operator" +msgid "Gradient (Radial)" +msgstr "ę¼ø層ļ¼ˆę”¾å°„ļ¼‰" + + msgid "Inflate" msgstr "č†Øč„¹" @@ -61339,6 +66741,10 @@ msgid "Extrude: %.3f" msgstr "ꓠå‡ŗļ¼š%.3f" +msgid "Offset: %.3f" +msgstr "偏ē§»ļ¼š %.3f" + + msgctxt "Operator" msgid "Remove from Active Group" msgstr "從作ē”Øäø­ē¾¤ēµ„ē§»é™¤" @@ -61368,6 +66774,14 @@ msgid "Adjust Empty Display Size" msgstr "čŖæę•“ē©ŗ體é”Æē¤ŗ大小" +msgid "Ridge" +msgstr "脊ē·š" + + +msgid "Valley" +msgstr "č°·ē·š" + + msgid "Affect Only" msgstr "åŖå½±éŸæ" @@ -61380,8 +66794,21 @@ msgid "Parents" msgstr "č¦Ŗ代" +msgid "Detailing" +msgstr "ē“°ēƀ" + + +msgctxt "Operator" +msgid "Remesh" +msgstr "重å»ŗē¶²ę ¼" + + msgid "Auto Normalize" -msgstr "č‡Ŗå‹•ę­£č¦åŒ–" +msgstr "č‡Ŗ動ę­øäø€åŒ–" + + +msgid "Lock-Relative" +msgstr "鎖定ē›ø對" msgid "Multi-Paint" @@ -61419,6 +66846,15 @@ msgid "in memory to enable editing!" msgstr "åœØčØ˜ę†¶é«”äø­ä»„啟ē”Øē·Øč¼Æļ¼" +msgid "Auto-Velocity" +msgstr "č‡Ŗ動速åŗ¦" + + +msgctxt "GPencil" +msgid "Boundary" +msgstr "邊ē•Œ" + + msgid "Cannot change action, as it is still being edited in NLA" msgstr "ē„”ę³•č®Šę›“å‹•ä½œļ¼Œå› ē‚ŗ它仍åœØ NLA ē·Øč¼Æäø­" @@ -61479,6 +66915,14 @@ msgid "Motion path frame extents invalid for %s (%d to %d)%s" msgstr "%s 運動č·Æå¾‘ę”†å¹€ēƄ圍ē„”ꕈ (%d 到 %d)%s" +msgid "Documents" +msgstr "ꖇ件" + + +msgid "armatures" +msgstr "éŖØꞶ" + + msgid "Saved \"%s\"" msgstr "å·²å„²å­˜ć€Œ%s怍" @@ -61523,6 +66967,18 @@ msgid "Path '%s' cannot be made absolute" msgstr "č·Æå¾‘ć€Œ%s怍ē„”ę³•č®Šē‚ŗēµ•å°č·Æ徑" +msgid "brushes" +msgstr "ē­†åˆ·" + + +msgid "cache_files" +msgstr "åæ«å–ęŖ”ę”ˆ" + + +msgid "cameras" +msgstr "ę”å½±ę©Ÿ" + + msgid "Can't initialize cloth" msgstr "ē„”ę³•åˆå§‹åŒ–åøƒę–™" @@ -61539,6 +66995,30 @@ msgid "Scene Collection" msgstr "å “ę™Æ集ē›’" +msgid "Collection %d" +msgstr "集ē›’ %d" + + +msgid "collections" +msgstr "集ē›’" + + +msgid "IK" +msgstr "IK" + + +msgid "curves" +msgstr "ę›²ē·š" + + +msgid "hair_curves" +msgstr "ęÆ›é«®ę›²ē·š" + + +msgid "UVMap" +msgstr "UVč²¼åœ–" + + msgid "Int" msgstr "ę•“ę•ø" @@ -61547,6 +67027,22 @@ msgid "Recast" msgstr "重꧋" +msgid "ShapeKey" +msgstr "外形鍵" + + +msgid "Int8" +msgstr "Int8" + + +msgid "Float3" +msgstr "Float3" + + +msgid "Float2" +msgstr "Float2" + + msgid "Not enough free memory" msgstr "åÆē”ØčØ˜ę†¶é«”äøč¶³" @@ -61584,12 +67080,40 @@ msgid "Untitled" msgstr "ē„”ęؙ锌" +msgid "LineStyle" +msgstr "ē·šę¢ęأ式" + + +msgid "LineSet %i" +msgstr "ē·šę¢é›† %i" + + +msgid "LineSet" +msgstr "ē·šę¢é›†" + + +msgid "\"{}\" attribute from geometry" +msgstr "幾何ēš„ć€Œ{}怍ē‰¹ę€§" + + +msgid "GP_Layer" +msgstr "蠟ē­†å±¤" + + +msgid "grease_pencils" +msgstr "蠟ē­†" + + +msgid "grease_pencils_v3" +msgstr "蠟ē­†_v3" + + msgid "Slot %d" msgstr "ę§½ %d" msgid "Cannot pack multiview images from raw data currently..." -msgstr "ē›®å‰é‚„ē„”ę³•å¾žåŽŸē”Ÿč³‡ę–™ę‰“åŒ…å¤šé‡č¦–åœ–å½±åƒ..." +msgstr "ē›®å‰é‚„ē„”ę³•å¾žåŽŸē”Ÿč³‡ę–™ę‰“包多重ęŖ¢č¦–影像..." msgid "Did not write, no Multilayer Image" @@ -61612,26 +67136,98 @@ msgid "Render error (%s) cannot save: '%s'" msgstr "ē®—ē¹ŖéŒÆčŖ¤ (%s) ē„”ę³•å„²å­˜ļ¼šć€Œ%s怍" +msgid "ipos" +msgstr "ipos" + + msgid "Key %d" msgstr "鍵 %d" +msgid "shape_keys" +msgstr "外形鍵" + + +msgid "lattices" +msgstr "ę™¶ę ¼" + + msgid "AOV" msgstr "AOV" msgid "link_placeholders" -msgstr "link_placeholders" +msgstr "連ēµä½”位ē¬¦" + + +msgid "libraries" +msgstr "藏åŗ«" + + +msgid "lights" +msgstr "ē‡ˆå…‰" + + +msgid "linestyles" +msgstr "ē·šę¢ęأ式" + + +msgid "MaskLayer" +msgstr "遮ē½©å±¤" + + +msgid "masks" +msgstr "遮ē½©" msgid "materials" msgstr "Ꝑč³Ŗ" +msgid "metaballs" +msgstr "č®Šå¹»ēƒ" + + +msgid "meshes" +msgstr "ē¶²ę ¼" + + msgid "Modifier requires original data, bad stack position" msgstr "äæ®ę”¹å™Øéœ€č¦åŽŸå§‹č³‡ę–™ļ¼Œäøč‰Æēš„å †ē–Šä½ē½®" +msgid "movieclips" +msgstr "å½±ē‰‡å‰Ŗč¼Æ" + + +msgid "NlaTrack" +msgstr "Nlač»Œé“" + + +msgid "NlaStrip" +msgstr "Nlaē‰‡ę®µ" + + +msgid "node_groups" +msgstr "ēƀ點ē¾¤ēµ„" + + +msgid "Surf" +msgstr "ę›²é¢" + + +msgid "Mball" +msgstr "č®Šå¹»ēƒ" + + +msgid "GreasePencil" +msgstr "蠟ē­†" + + +msgid "objects" +msgstr "ē‰©é«”" + + msgid "No new files have been packed" msgstr "ęœŖęœ‰ę‰“åŒ…ę–°ęŖ”ę”ˆ" @@ -61676,6 +67272,14 @@ msgid "Cannot unpack individual Library file, '%s'" msgstr "ē„”ę³•č§£åŒ…å€‹åˆ„č—åŗ«ęŖ”ę”ˆļ¼Œć€Œ%s怍" +msgid "palettes" +msgstr "čŖæč‰²ē›¤" + + +msgid "paint_curves" +msgstr "ē¹Ŗč£½ę›²ē·š" + + msgid "ParticleSystem" msgstr "ē²’子ē³»ēµ±" @@ -61684,6 +67288,10 @@ msgid "ParticleSettings" msgstr "ē²’子čح定" +msgid "particles" +msgstr "ē²’子" + + msgid "%i frames found!" msgstr "ę‰¾äøåˆ° %i å¹€ę”†å¹€ļ¼" @@ -61716,6 +67324,10 @@ msgid "%s, not exact since frame %i" msgstr "%sļ¼Œå¾žē¬¬ %i å¹€čµ·ä¾æäøē²¾ē¢ŗ" +msgid "pointclouds" +msgstr "點雲" + + msgid "Invalid Input Error" msgstr "ē„”ꕈēš„č¼øå…„éŒÆčŖ¤" @@ -61741,7 +67353,27 @@ msgstr "ē„”ę³•å»ŗē«‹å‰›é«”äø–ē•Œ" msgid "RenderView" -msgstr "ē®—ē¹Ŗč¦–åœ–" +msgstr "ē®—ē¹ŖęŖ¢č¦–" + + +msgid "screens" +msgstr "čž¢å¹•" + + +msgid "sounds" +msgstr "č²éŸ³" + + +msgid "speakers" +msgstr "喇叭" + + +msgid "texts" +msgstr "ę–‡å­—" + + +msgid "textures" +msgstr "ē“‹ē†" msgctxt "MovieClip" @@ -61757,6 +67389,154 @@ msgid "Original Mode" msgstr "原始ęؔ式" +msgid "Micrometers" +msgstr "å¾®ē±³" + + +msgid "Nanometers" +msgstr "儈ē±³" + + +msgid "Picometers" +msgstr "ēš®ē±³" + + +msgid "Miles" +msgstr "č‹±å“©" + + +msgid "Chains" +msgstr "éˆęŽ„" + + +msgid "Tonnes" +msgstr "公å™ø" + + +msgid "Kilograms" +msgstr "å…¬ę–¤" + + +msgid "Hectograms" +msgstr "ē™¾å…¬å…‹" + + +msgid "Grams" +msgstr "公克" + + +msgid "Milligrams" +msgstr "ęƫ克" + + +msgid "Tons" +msgstr "英å™ø" + + +msgid "Stones" +msgstr "英ēŸ³" + + +msgid "Pounds" +msgstr "ē£…" + + +msgid "Ounces" +msgstr "ē›Žåø" + + +msgid "Days" +msgstr "ę—„" + + +msgid "Hours" +msgstr "å°ę™‚" + + +msgid "Minutes" +msgstr "分" + + +msgid "Milliseconds" +msgstr "ęÆ«ē§’" + + +msgid "Microseconds" +msgstr "å¾®ē§’" + + +msgid "Arcminutes" +msgstr "弧分" + + +msgid "Arcseconds" +msgstr "弧ē§’" + + +msgid "Gigawatts" +msgstr "ē™¾č¬ē“©" + + +msgid "Megawatts" +msgstr "千ē“©" + + +msgid "Kilowatts" +msgstr "ē“©" + + +msgid "Watts" +msgstr "ē“¦" + + +msgid "Milliwatts" +msgstr "ęÆ«ē“¦" + + +msgid "Microwatts" +msgstr "å¾®ē“¦" + + +msgid "Nanowatts" +msgstr "儈ē“¦" + + +msgid "Kelvin" +msgstr "å…‹ę°" + + +msgid "Celsius" +msgstr "ꔝ갏" + + +msgid "Fahrenheit" +msgstr "čÆ갏" + + +msgid "Hertz" +msgstr "čµ«čŒ²" + + +msgid "fonts" +msgstr "字型" + + +msgid "volumes" +msgstr "容體" + + +msgid "workspaces" +msgstr "巄作ē©ŗ間" + + +msgid "worlds" +msgstr "äø–ē•Œ" + + +msgid "insufficient content" +msgstr "äøå®Œę•“內容" + + msgid "unknown error reading file" msgstr "č®€å–ęŖ”ę”ˆę™‚ē™¼ē”ŸéŒÆčŖ¤" @@ -61785,6 +67565,18 @@ msgid "Unable to open '%s': %s" msgstr "ē„”ę³•é–‹å•Ÿć€Œ%s怍ļ¼š%s" +msgid "GP_Palette" +msgstr "蠟ē­†čŖæč‰²ē›¤" + + +msgid "Hidden %d" +msgstr "éš±č— %d" + + +msgid "2D_Animation" +msgstr "2D_動ē•«" + + msgid "Sculpting" msgstr "雕唑" @@ -61793,6 +67585,10 @@ msgid "VFX" msgstr "VFX" +msgid "Video_Editing" +msgstr "å½±ē‰‡ē·Øč¼Æ" + + msgid "Unable to make version backup: filename too short" msgstr "ē„”ę³•č£½ä½œē‰ˆęœ¬å‚™ä»½ļ¼šęŖ”名過ēŸ­" @@ -61861,6 +67657,18 @@ msgid "Edge-rings are not connected" msgstr "ē·šē’°äø¦ęœŖé€£ęŽ„" +msgid "UV/Image" +msgstr "UV/影像" + + +msgid "Select-Next" +msgstr "éø取äø‹äø€é …" + + +msgid "Workbench" +msgstr "巄作台" + + msgid "Toggle visibility of Channels in Graph Editor for editing" msgstr "åœØ圖č”Øē·Øč¼Æå™Øäø­åˆ‡ę›é€šé“åÆ見åŗ¦ä»„供ē·Øč¼Æ" @@ -61925,6 +67733,20 @@ msgid "Delete envelope control point" msgstr "åˆŖé™¤å°å„—ęŽ§åˆ¶é»ž" +msgid "Coefficient" +msgstr "äæ‚ę•ø" + + +msgctxt "Action" +msgid "A" +msgstr "A" + + +msgctxt "Action" +msgid "B" +msgstr "B" + + msgid "No suitable context info for active keying set" msgstr "ē„”適ē•¶ęƒ…å¢ƒč³‡ę–™åÆ供作ē”Øäø­ēš„éµč™•ē†é›†ä½æē”Ø" @@ -62017,12 +67839,16 @@ msgid "Separated bones" msgstr "隔開ēš„éŖØéŖ¼" +msgid "Create" +msgstr "å»ŗē«‹" + + msgid "Bone Heat Weighting: failed to find solution for one or more bones" msgstr "éŖØéŖ¼ē†±ę¬Šé‡ļ¼šē„”ę³•ę‰¾å‡ŗäø€ę ¹ęˆ–å¤šę ¹éŖØéŖ¼ēš„č§£ę±ŗę–¹ę”ˆ" msgid "Failed to find bind solution (increase precision?)" -msgstr "ē„”ę³•ę‰¾å‡ŗē¶å®šč§£ę±ŗę–¹ę”ˆ (ę˜Æå¦č¦ęę˜‡ē²¾ęŗ–åŗ¦ļ¼Ÿ)怂" +msgstr "ē„”ę³•ę‰¾å‡ŗē¶å®šč§£ę±ŗę–¹ę”ˆ (ę˜Æå¦č¦ęę˜‡ē²¾ęŗ–åŗ¦ļ¼Ÿ)" msgid "Cannot pose libdata" @@ -62041,6 +67867,18 @@ msgid "Keying Set does not contain any paths" msgstr "éµč™•ē†é›†ę²’ęœ‰åŒ…å«ä»»ä½•č·Æ徑" +msgid "Relax Pose" +msgstr "ę”¾é¬†å§æ勢" + + +msgid "Sliding-Tool" +msgstr "ę»‘å‹•å·„å…·" + + +msgid "Cancel" +msgstr "å–ę¶ˆ" + + msgid "No keyframes to slide between" msgstr "ē„”åÆåœØå…©č€…ä¹‹é–“ę»‘å‹•ēš„鍵幀" @@ -62176,6 +68014,11 @@ msgid "SurfPatch" msgstr "ę›²é¢ē‰‡" +msgctxt "Curve" +msgid "SurfCylinder" +msgstr "ę›²é¢åœ“ęŸ±" + + msgctxt "Curve" msgid "SurfSphere" msgstr "ę›²é¢ēƒé«”" @@ -62216,7 +68059,7 @@ msgstr "ē„”ę³•å°‡ęŸäŗ›ę›²ē·šåøé™„č‡³č”Ø面" msgid "Add Color Attribute" -msgstr "ę–°å¢žč‰²å½©å±¬ę€§" +msgstr "ę–°å¢žč‰²å½©ē‰¹ę€§" msgid "Convert Attribute Domain" @@ -62224,7 +68067,7 @@ msgstr "č½‰ę›å±¬ę€§é ˜åŸŸ" msgid "Convert Color Attribute Domain" -msgstr "č½‰ę›č‰²å½©å±¬ę€§é ˜åŸŸ" +msgstr "č½‰ę›č‰²å½©ē‰¹ę€§é ˜åŸŸ" msgid "Cannot convert to the selected type" @@ -62263,12 +68106,24 @@ msgid "No active frame to delete" msgstr "ē„”作ē”Øäø­ę”†å¹€åÆåˆŖ除" -msgid "Nothing selected" -msgstr "ęœŖ꜉éø取" +msgid "Grey" +msgstr "ē°č‰²" -msgid "Cancel" -msgstr "å–ę¶ˆ" +msgid "Skin_light" +msgstr "ēš®č†šå…‰" + + +msgid "Skin_shadow" +msgstr "ēš®č†šå½±" + + +msgid "Eyes" +msgstr "ēœ¼ē›" + + +msgid "Nothing selected" +msgstr "ęœŖ꜉éø取" msgid "Could not resolve path '%s'" @@ -62292,6 +68147,10 @@ msgid "%s: %s" msgstr "%sļ¼š%s" +msgid "Non-Keyboard Shortcut" +msgstr "ē„”åæ«ę·éµ" + + msgid "Pin" msgstr "釘住" @@ -62305,6 +68164,11 @@ msgid "Change Shortcut" msgstr "ę›“ę”¹åæ«ę·éµ" +msgctxt "Operator" +msgid "Assign Shortcut" +msgstr "ęŒ‡ę“¾åæ«ę·éµ" + + msgctxt "Operator" msgid "Replace Keyframes" msgstr "ę›æę›éµå¹€" @@ -62365,6 +68229,11 @@ msgid "Add Single to Keying Set" msgstr "ę·»åŠ å–®é …č‡³éµč™•ē†é›†" +msgctxt "Operator" +msgid "Remove Overrides" +msgstr "ē§»é™¤å‡Œé§•" + + msgctxt "Operator" msgid "Reset All to Default Values" msgstr "å…ØéƒØ重čح回預čح值" @@ -62389,6 +68258,10 @@ msgid "OS" msgstr "OS" +msgid "Home" +msgstr "äø»ē›®éŒ„" + + msgid "Esc" msgstr "Esc" @@ -62399,7 +68272,7 @@ msgstr "Space" msgid "Animate property" -msgstr "å‹•ę…‹åŒ–å±¬ę€§" +msgstr "動ē•«å±¬ę€§" msgid "Menu Missing:" @@ -62407,7 +68280,7 @@ msgstr "ē¼ŗ乏éø單ļ¼š" msgid "Active button is not from a script, cannot edit source" -msgstr "作ē”Øäø­ęŒ‰éˆ•äøę˜Æęŗč‡ŖęŒ‡ä»¤ēØæļ¼Œē„”ę³•ē·Øč¼Æ來ęŗ" +msgstr "作ē”Øäø­ęŒ‰éˆ•äøę˜Æęŗč‡Ŗ命令ēØæļ¼Œē„”ę³•ē·Øč¼Æ來ęŗ" msgid "Active button match cannot be found" @@ -62422,6 +68295,34 @@ msgid "%d items" msgstr "%d 項" +msgid "Red:" +msgstr "ē“…č‰²ļ¼š" + + +msgid "Green:" +msgstr "ē¶ č‰²ļ¼š" + + +msgid "Blue:" +msgstr "č—č‰²ļ¼š" + + +msgid "Hue:" +msgstr "č‰²ē›øļ¼š" + + +msgid "Saturation:" +msgstr "飽和åŗ¦ļ¼š" + + +msgid "Lightness:" +msgstr "äŗ®åŗ¦ļ¼š" + + +msgid "Alpha:" +msgstr "Alphaļ¼š" + + msgid "Hex" msgstr "十六進位" @@ -62430,6 +68331,20 @@ msgid "Lightness" msgstr "äŗ®åŗ¦" +msgctxt "Color" +msgid "Value:" +msgstr "꘎åŗ¦ļ¼š" + + +msgctxt "Color" +msgid "Value" +msgstr "꘎åŗ¦" + + +msgid "Redo" +msgstr "å†ę¬”å‹•ä½œ" + + msgid "OK" msgstr "ē¢ŗ定" @@ -62438,18 +68353,35 @@ msgid "Menu \"%s\" not found" msgstr "ę‰¾äøåˆ°ć€Œ%s怍éø單" +msgid "Unsupported context" +msgstr "äøę”Æę“ēš„ęƒ…å¢ƒ" + + msgid "Internal error!" msgstr "內éƒØéŒÆčŖ¤ļ¼" msgid "Tool Keymap:" -msgstr "å·„å…·ęŒ‰éµę˜ å°„ļ¼š" +msgstr "å·„å…·ęŒ‰éµå°ę‡‰ļ¼š" + + +msgid "Value: {}" +msgstr "值ļ¼š {}" + + +msgid "Expression: {}" +msgstr "č”Øčæ°å¼ļ¼š {}" msgid "Movie" msgstr "å½±ē‰‡" +msgctxt "Operator" +msgid "Click" +msgstr "點꓊" + + msgctxt "Operator" msgid "Drag" msgstr "ę‹–ę›³" @@ -62463,6 +68395,10 @@ msgid "Sort By:" msgstr "ꎒåŗę–¹å¼:" +msgid "Eyedropper" +msgstr "ę±²åøå™Ø" + + msgid "Delete the active position" msgstr "åˆŖ除作ē”Øäø­ēš„å§æ勢" @@ -62492,7 +68428,7 @@ msgstr "ęœ€å¤§ Yļ¼š" msgid "Reset View" -msgstr "重čØ­č¦–åœ–" +msgstr "重čØ­ęŖ¢č¦–" msgid "Extend Horizontal" @@ -62527,10 +68463,19 @@ msgid "Reset Black/White point and curves" msgstr "重čح黑/ē™½é»žåŠę›²ē·š" +msgctxt "Color" +msgid "C" +msgstr "C" + + msgid "Preset" msgstr "預čØ­ęŖ”" +msgid "Reverse Path" +msgstr "反向č·Æ徑" + + msgid "ID-Block:" msgstr "ID 唊ļ¼š" @@ -62888,6 +68833,10 @@ msgid "Show Hidden Region" msgstr "é”Æē¤ŗå·²éš±č—ēš„區域" +msgid "Samples Transform" +msgstr "ęØ£ęœ¬č®Šę›" + + msgid "Close" msgstr "關閉" @@ -62896,18 +68845,30 @@ msgid "Use Schema" msgstr "ä½æē”Øē¶±č¦" +msgid "Method Quads" +msgstr "å››č§’åž‹ę–¹ę³•" + + msgid "No filepath given" msgstr "ęœŖęä¾›ęŖ”名" msgid "Global Orientation" -msgstr "å…ØåŸŸę–¹å‘" +msgstr "å…Ø域åŗ§ęؙē³»" msgid "Texture Options" msgstr "ē“‹ē†éø項" +msgid "Armature Options" +msgstr "éŖØꞶéø項" + + +msgid "Collada Options" +msgstr "Collada éø項" + + msgid "Import Data Options" msgstr "åŒÆå…„č³‡ę–™éø項" @@ -62920,10 +68881,18 @@ msgid "Can't overwrite export file" msgstr "ē„”ę³•č¦†åÆ«åŒÆå‡ŗęŖ”" +msgid "Scene Options" +msgstr "å “ę™Æéø項" + + msgid "Export Options" msgstr "åŒÆå‡ŗč³‡ę–™éø項" +msgid "Grouping" +msgstr "分ēµ„" + + msgid "Material Groups" msgstr "Ꝑč³Ŗē¾¤ēµ„" @@ -62932,6 +68901,18 @@ msgid "Smooth Groups" msgstr "å¹³ę»‘ē¾¤ēµ„" +msgid "PBR Extensions" +msgstr "PBR ę““å……" + + +msgid "ASCII" +msgstr "ASCII" + + +msgid "Batch" +msgstr "ę‰¹ę¬”" + + msgid "Rigging" msgstr "ē“¢å…·" @@ -62993,6 +68974,14 @@ msgid "Outer" msgstr "外éƒØ" +msgid "Miter Profile Shape" +msgstr "ę–œęŽ„č¼Ŗ廓外形" + + +msgid "Intersection Type" +msgstr "äŗ¤é›†é”žåž‹" + + msgid "Selected edges/faces required" msgstr "éœ€č¦éø取邊ē·š/面" @@ -63001,6 +68990,10 @@ msgid "Not a valid selection for extrude" msgstr "非꜉ꕈēš„åÆꓠå‡ŗéø取項" +msgid "Invalid/unset axis" +msgstr "ē„”ꕈ/ęœŖčح定č»ø" + + msgid "You have to select a string of connected vertices too" msgstr "ę‚Øåæ…須也éøå–é€£ęŽ„ēš„頂點ēš„å­—äø²" @@ -63017,6 +69010,10 @@ msgid "Selected faces required" msgstr "éœ€č¦éø取面" +msgid "Rip failed" +msgstr "ę‹†åˆ†å¤±ę•—" + + msgid "Face select - Shift-Click for multiple modes, Ctrl-Click expands selection" msgstr "面éø取 - Shift+點꓊ 取得多ēØ®ęؔ式ļ¼ŒCtrl+點꓊ ę““å±•éø取" @@ -63042,7 +69039,7 @@ msgstr "ē„”作ē”Øäø­é ‚點ē¾¤ēµ„" msgid "View not found, cannot sort by view axis" -msgstr "ę‰¾äøåˆ°č¦–圖ļ¼Œē„”ę³•ę ¹ę“šč¦–åœ–č»øꎒåŗ" +msgstr "ę‰¾äøåˆ°ęŖ¢č¦–ļ¼Œē„”ę³•ę ¹ę“šęŖ¢č¦–č»øꎒåŗ" msgid "Does not support Individual Origins as pivot" @@ -63157,6 +69154,26 @@ msgid "LightProbe" msgstr "ē‡ˆå…‰ęŽ”ęØ£å™Ø" +msgctxt "Object" +msgid "Force" +msgstr "力" + + +msgctxt "Object" +msgid "Vortex" +msgstr "ęø¦ęµ" + + +msgctxt "Object" +msgid "Magnet" +msgstr "ē£åŠ›" + + +msgctxt "Object" +msgid "Wind" +msgstr "é¢Ø力" + + msgctxt "Object" msgid "CurveGuide" msgstr "ę›²ē·šå¼•å°Ž" @@ -63192,6 +69209,11 @@ msgid "Turbulence" msgstr "ę“¾å‹•" +msgctxt "Object" +msgid "Drag" +msgstr "ę‹–ę›³" + + msgctxt "Object" msgid "FluidField" msgstr "ęµé«”å “åŸŸ" @@ -63202,6 +69224,21 @@ msgid "Field" msgstr "堓域" +msgctxt "GPencil" +msgid "GPencil" +msgstr "蠟ē­†" + + +msgctxt "GPencil" +msgid "Suzanne" +msgstr "蘇ēŠēŒ“" + + +msgctxt "GPencil" +msgid "LineArt" +msgstr "ē·šę¢č—č”“" + + msgid "Cannot create editmode armature" msgstr "ē„”ę³•å»ŗē«‹ē·Øč¼Æęؔ式éŖØꞶ" @@ -63370,6 +69407,14 @@ msgid "Can't unlink this object data" msgstr "ē„”ę³•å–ę¶ˆę­¤ē‰©é«”č³‡ę–™ēš„連ēµ" +msgid "Voxel remesher cannot run with a voxel size of 0.0" +msgstr "äøčƒ½å°å¤§å°ē‚ŗ 0.0 ēš„é«”ē“ ä½æē”Ø體ē“ ē¶²ę ¼é‡å»ŗå™Ø" + + +msgid "Voxel remesher failed to create mesh" +msgstr "體ē“ ē¶²ę ¼é‡å»ŗå™Øē”¢ē”Ÿē¶²ę ¼å¤±ę•—" + + msgid "Objects have no data to transform" msgstr "ē‰©é«”ę²’ęœ‰č³‡ę–™åÆä¾›č½‰ę›" @@ -63406,6 +69451,10 @@ msgid "%d vertex weights limited" msgstr "%d é ‚é»žę¬Šé‡å—åˆ°é™åˆ¶" +msgid "Volume \"%s\" contains points, only voxel grids are supported" +msgstr "å®¹é«”ć€Œ%sć€åŒ…å«é»žļ¼ŒåŖę”Æę“é«”ē“ ę ¼ē·š" + + msgid "No frames to bake" msgstr "ē„”ę”†å¹€åÆēƒ˜ē„™" @@ -63419,7 +69468,7 @@ msgstr "ēƒ˜ē„™å¤±ę•—ļ¼šē„”ꕈēš„ē•«åøƒ" msgid "Baking canceled!" -msgstr "ēƒ˜ē„™å·²å–ę¶ˆļ¼" +msgstr "ēƒ˜ē„™å–ę¶ˆļ¼" msgid "Linked data-blocks do not allow editing caches" @@ -63642,8 +69691,28 @@ msgid "Rigid Body World has no associated physics data to export" msgstr "剛體äø–ē•Œę²’ęœ‰ē›ø關čÆēš„ē‰©ē†č³‡ę–™åÆåŒÆå‡ŗ" +msgid "3D Local View " +msgstr "3D 局域ęŖ¢č¦– " + + msgid "3D View " -msgstr "3D č¦–åœ– " +msgstr "3D ęŖ¢č¦– " + + +msgid "Frame:" +msgstr "ę”†å¹€ļ¼š" + + +msgid "Time:" +msgstr "Ꙃ間ļ¼š" + + +msgid "Mem:%.2fM (Peak %.2fM)" +msgstr "čØ˜ę†¶é«”ļ¼š%.2fMļ¼ˆå³°å€¼ļ¼š%.2fMļ¼‰" + + +msgid "Mem:%.2fM, Peak: %.2fM" +msgstr "čØ˜ę†¶ļ¼š%.2fMļ¼Œå³°å€¼ļ¼š%.2fM" msgid "Cannot write a single file with an animation format selected" @@ -63730,6 +69799,18 @@ msgid "No fullscreen areas were found" msgstr "ę‰¾äøåˆ°å…Øčž¢å¹•é¢ē©" +msgid "Missing: %s.%s" +msgstr "éŗ失ļ¼š %s.%s" + + +msgid "Quick Favorites" +msgstr "åæ«é€Ÿę”¶č—" + + +msgid "screen" +msgstr "čž¢å¹•" + + msgid "File not found '%s'" msgstr "ę‰¾äøåˆ°ć€Œ%s怍ęŖ”ę”ˆ" @@ -63746,18 +69827,35 @@ msgid "Asset blend file is not editable" msgstr "ē“ ę blend ęŖ”ę”ˆäøåÆē·Øč¼Æ" -msgid "ON" -msgstr "開" +msgctxt "GPencil" +msgid "Interpolation" +msgstr "ę’č£œę³•" -msgid "OFF" -msgstr "關" +msgid "Trace" +msgstr "čæ½č¹¤" + + +msgid "Target object library-data, ignoring!" +msgstr "ē›®ęؙē‰©é«”č—åŗ«č³‡ę–™ļ¼Œåæ½ē•„ļ¼" + + +msgid "PaintCurve" +msgstr "ē¹Ŗč£½ę›²ē·š" + + +msgid " UVs," +msgstr " UV," msgid " Materials," msgstr " Ꝑč³Ŗļ¼Œ" +msgid " Stencil," +msgstr " ęØ”ęæļ¼Œ" + + msgid "Image could not be found" msgstr "ē„”ę³•ę‰¾åˆ°å½±åƒ" @@ -63774,10 +69872,18 @@ msgid "Missing%s%s%s%s detected!" msgstr "偵ęø¬åˆ°éŗ失%s%s%s%sļ¼" +msgid "Palette created" +msgstr "čŖæč‰²ē›¤å·²å»ŗē«‹" + + msgid "Warning!" msgstr "č­¦å‘Šļ¼" +msgid "Attribute Data Detected" +msgstr "偵ęø¬åˆ°ē‰¹ę€§č³‡ę–™" + + msgid "non-triangle face" msgstr "非äø‰č§’面" @@ -63798,6 +69904,10 @@ msgid "face data" msgstr "é¢č³‡ę–™" +msgid "constructive modifier" +msgstr "꧋造äæ®ę”¹å™Ø" + + msgid "Compiled without sound support" msgstr "äøä½æē”ØéŸ³ę•ˆę”Æę“ē·Øč­Æ" @@ -64018,6 +70128,14 @@ msgid "Path to asset library does not exist:" msgstr "ē“ ęč—åŗ«č·Æ徑äøå­˜åœØļ¼š" +msgid "seconds" +msgstr "ē§’" + + +msgid "bytes" +msgstr "位元ēµ„" + + msgid "File does not exist" msgstr "ęŖ”ę”ˆäøå­˜åœØ" @@ -64050,6 +70168,30 @@ msgid "Desktop" msgstr "ę”Œé¢" +msgid "Downloads" +msgstr "äø‹č¼‰" + + +msgid "Music" +msgstr "音ę؂" + + +msgid "Pictures" +msgstr "圖ē‰‡" + + +msgid "Videos" +msgstr "視č؊" + + +msgid "OneDrive" +msgstr "OneDrive" + + +msgid "Movies" +msgstr "å½±ē‰‡" + + msgid "Cursor X" msgstr "ęøøęؙ X" @@ -64082,6 +70224,10 @@ msgid "Driven Property:" msgstr "č¢«é©…å‹•å±¬ę€§:" +msgid "Driver:" +msgstr "驅動å™Øļ¼š" + + msgid "Invalid variable name, click here for details" msgstr "ē„”ꕈēš„變ę•ø名ēرļ¼Œč«‹é»žęŒ‰ę­¤č™•å–å¾—č©³ē“°č³‡ę–™" @@ -64203,14 +70349,14 @@ msgid "Missing %s%s%s component(s) of euler rotation for ID='%s' and RNA-Path='% msgstr "ID='%s' 與 RNA-Path='%s' ēš„å°¤ę‹‰ę—‹č½‰éŗ失 %s%s%s éƒØ份" -msgid "Decimate Keyframes" -msgstr "削ęø›éµå¹€" - - msgid "Decimate F-Curves by specifying how much they can deviate from the original curve" msgstr "利ē”ØęŒ‡å®šåé›¢åŽŸå§‹ę›²ē·šēš„ē؋åŗ¦ä¾†å‰Šęø›å‡½ę•øę›²ē·š" +msgid "Discard" +msgstr "äøŸę£„" + + msgid "Select Slot" msgstr "éøå–ę§½" @@ -64315,6 +70461,18 @@ msgid "Verts:%s/%s" msgstr "點ļ¼š%s/%s" +msgid " | Objects:%s/%s" +msgstr " | ē‰©é«”ļ¼š%s/%s" + + +msgid "Memory: %s" +msgstr "čØ˜ę†¶é«”ļ¼š %s" + + +msgid "Joints" +msgstr "關ēƀ" + + msgid "Sync Length" msgstr "åŒę­„é•·åŗ¦" @@ -64375,14 +70533,70 @@ msgid "Node tree type %s undefined" msgstr "ēƀ點ęع锞型 %s 尚ęœŖ定ē¾©" +msgid "{} (String)" +msgstr "{} (字äø²)" + + +msgid "{} (Integer)" +msgstr "{} (ę•“ę•ø)" + + +msgid "{} (Float)" +msgstr "{} (굮點)" + + +msgid "{} (Boolean)" +msgstr "{} (åøƒęž—)" + + +msgid "True" +msgstr "ēœŸ" + + +msgid "False" +msgstr "假" + + +msgid "ā€¢ {}" +msgstr "ā€¢ {}" + + msgid "Geometry:" msgstr "幾何:" +msgid "positions" +msgstr "位ē½®" + + +msgid "matrices" +msgstr "ēŸ©é™£" + + +msgid "Supported: " +msgstr "å·²ę”Æę“ļ¼š " + + +msgid "Accessed named attributes:" +msgstr "存取ēš„命名ē‰¹ę€§ļ¼š" + + +msgid " ā€¢ \"{}\": " +msgstr " ā€¢ \"{}\": " + + msgid "read" msgstr "č®€å–" +msgid "write" +msgstr "åÆ«å…„" + + +msgid "remove" +msgstr "ē§»é™¤" + + msgid " Named Attribute" msgstr " 具名ēš„å±¬ę€§" @@ -64503,6 +70717,18 @@ msgid "Not yet implemented" msgstr "尚ęœŖåƦ作" +msgid "Additive override" +msgstr "åŠ ę³•å‡Œé§•" + + +msgid "Subtractive override" +msgstr "ęø›ę³•å‡Œé§•" + + +msgid "Multiplicative override" +msgstr "ä¹˜ę³•å‡Œé§•" + + msgid "(empty)" msgstr "(ē©ŗ)" @@ -64551,6 +70777,14 @@ msgid "No active sequence!" msgstr "ē„”作ē”Øäø­åŗę®µļ¼" +msgid "Columns:" +msgstr "ꬄļ¼š" + + +msgid "Class" +msgstr "锞刄" + + msgid "File Modified Outside and Inside Blender" msgstr "ęŖ”ę”ˆå·²åœØ Blender ä¹‹å¤–čˆ‡ä¹‹å…§äæ®ę”¹" @@ -64627,10 +70861,22 @@ msgid "Undo History" msgstr "復原ē“€éŒ„" +msgid "Add New Extension Repository" +msgstr "ę–°å¢žę““å……å„—ä»¶č»Ÿé«”åŗ«" + + msgid "Unable to remove files for \"System\" repositories" msgstr "ē„”ę³•ē§»é™¤ć€Œē³»ēµ±ć€č»Ÿé«”åŗ«ēš„ęŖ”ę”ˆ" +msgid "Extension operator not found \"%s\"" +msgstr "ę‰¾äøåˆ°ę““å……å„—ä»¶ę“ä½œå™Ø怌%s怍" + + +msgid "There is no extension repository to remove" +msgstr "ę²’ęœ‰åÆē§»é™¤ēš„ę““å……å„—ä»¶č»Ÿé«”åŗ«" + + msgid "Create object instance from object-data" msgstr "從ē‰©é«”č³‡ę–™å»ŗē«‹ē‰©é«”åƦ例" @@ -64731,6 +70977,10 @@ msgid "Mean Tilt:" msgstr "å¹³å‡å‚¾ę–œļ¼š" +msgid "Dimensions:" +msgstr "å°ŗåÆøļ¼š" + + msgid "4L" msgstr "4L" @@ -64780,7 +71030,7 @@ msgstr "ę›²ē·šęŽ§åˆ¶é»žēš„å‚¾ę–œ" msgid "Normalize weights of active vertex (if affected groups are unlocked)" -msgstr "ę­£č¦åŒ–ä½œē”Øäø­é ‚點ēš„ę¬Šé‡ (å¦‚ęžœå½±éŸæēš„ē¾¤ēµ„ęœ‰äøŠéŽ–ēš„話)" +msgstr "ę­øäø€åŒ–作ē”Øäø­é ‚點ēš„ę¬Šé‡ (å¦‚ęžœå½±éŸæēš„ē¾¤ēµ„ęœ‰äøŠéŽ–ēš„話)" msgid "Copy active vertex to other selected vertices (if affected groups are unlocked)" @@ -64823,10 +71073,18 @@ msgid "User Perspective" msgstr "ä½æē”Øč€…é€č¦–ę³•" +msgid " (Local)" +msgstr " (局域)" + + msgid " (Clipped)" msgstr " (å·²ęˆŖ割)" +msgid " (Viewer)" +msgstr " (ęŖ¢č¦–å™Ø)" + + msgid "fps: %.2f" msgstr "fpsļ¼š%.2f" @@ -64959,6 +71217,10 @@ msgid "(Random)" msgstr "(éšØę©Ÿ)" +msgid "(InvSquare)" +msgstr "(åå¹³ę–¹)" + + msgid " Proportional size: %.2f" msgstr " ęƔ例大小ļ¼š%.2f" @@ -65039,6 +71301,14 @@ msgid "Edge Slide: " msgstr "邊ē·šę»‘å‹•ļ¼š " +msgid "Opacity: %s" +msgstr "äøé€ę˜Žåŗ¦ļ¼š %s" + + +msgid "Opacity: %3f" +msgstr "äøé€ę˜Žåŗ¦ļ¼š %3f" + + msgid "Feather Shrink/Fatten: %s" msgstr "ē¾½ęÆ›ę”¶ēø®/ę““å……ļ¼š%s" @@ -65071,6 +71341,10 @@ msgid "Shear: %s %s" msgstr "åˆ‡č®Šļ¼š%s %s" +msgid "Shrink/Fatten: " +msgstr "ꔶēø®/ę““å……ļ¼š " + + msgid "ScaleX: %s" msgstr "ēø®ę”¾ Xļ¼š%s" @@ -65107,6 +71381,10 @@ msgid "left" msgstr "å·¦" +msgid "Vertex Slide: " +msgstr "é ‚é»žę»‘å‹•ļ¼š " + + msgid "(E)ven: %s, " msgstr "å¹³ę»‘(E)ļ¼š%sļ¼Œ " @@ -65143,6 +71421,14 @@ msgid "view" msgstr "ęŖ¢č¦–" +msgid "cursor" +msgstr "ęøøęؙ" + + +msgid "custom" +msgstr "č‡Ŗč؂" + + msgctxt "Scene" msgid "Space" msgstr "ē©ŗ間" @@ -65217,7 +71503,7 @@ msgstr "Freestyleļ¼šč¼‰å…„ē¶²ę ¼" msgid "Freestyle: View map creation" -msgstr "Freestyleļ¼šč£½ä½œč¦–åœ–ę˜ å°„" +msgstr "Freestyleļ¼šč£½ä½œęŖ¢č¦–ę˜ å°„" msgid "Freestyle: Stroke rendering" @@ -65416,6 +71702,10 @@ msgid "Fuel field" msgstr "ē‡ƒē‡’å “域" +msgid "Mini" +msgstr "čæ·ä½ " + + msgid "Image not packed" msgstr "影像ęœŖę‰“åŒ…" @@ -65559,7 +71849,17 @@ msgstr "ē„”ę³•č¤‡č£½é …ē›®" msgctxt "NodeTree" msgid "Functions" -msgstr "函ę•ø" +msgstr "函式" + + +msgctxt "NodeTree" +msgid "Comparison" +msgstr "ęÆ”č¼ƒ" + + +msgctxt "NodeTree" +msgid "Rounding" +msgstr "ęØå…„" msgctxt "NodeTree" @@ -65567,6 +71867,11 @@ msgid "Trigonometric" msgstr "äø‰č§’函ę•ø" +msgctxt "NodeTree" +msgid "Conversion" +msgstr "č½‰ę›" + + msgid "Same input/output direction of sockets" msgstr "ęŽ„å£č¼øå…„/č¼øå‡ŗę–¹å‘ē›ø同" @@ -65679,6 +71984,10 @@ msgid "Object '%s' does not support shapes" msgstr "ē‰©é«”ć€Œ%s怍äøę”Æę“å¤–å½¢" +msgid "Invalid target!" +msgstr "ē„”ꕈēš„ē›®ęؙļ¼" + + msgid "Mesh has no UV data" msgstr "ē¶²ę ¼ę²’ęœ‰ UV č³‡ę–™" @@ -65716,7 +72025,7 @@ msgstr "Blender ē·Øč­ÆꙂęœŖ開啟 Audaspace ę”Æę“" msgid "Scripting" -msgstr "ęŒ‡ä»¤ēØæ" +msgstr "命令ēØæ" msgid "MovieTracking '%s' cannot be removed" @@ -65731,6 +72040,10 @@ msgid "Region not found in space type" msgstr "ē©ŗ間锞型äø­ę‰¾äøåˆ°å€å”Š" +msgid "%s '%s' has category '%s'" +msgstr "%s '%s' ꜉怌%sć€åˆ†é”ž" + + msgid "Registering asset shelf class: '%s' is too long, maximum length is %d" msgstr "ē“ ęęž¶é”žåˆ„čػ冊ļ¼š'%s' å¤Ŗ長äŗ†ļ¼Œęœ€å¤§é•·åŗ¦ē‚ŗ %d" @@ -65747,6 +72060,10 @@ msgid "Asset Library not found" msgstr "ę‰¾äøåˆ°ē“ ęåŗ«" +msgid "Extension repository not found" +msgstr "ę‰¾äøåˆ°ę““å……å„—ä»¶č»Ÿé«”åŗ«" + + msgctxt "UI_Events_KeyMaps" msgid "Top" msgstr "頂éƒØ" @@ -65777,6 +72094,10 @@ msgid "Ctrl" msgstr "Ctrl" +msgid "No active window in context!" +msgstr "ęƒ…å¢ƒäø‹ē„”作ē”Øäø­ēš„視ēŖ—ļ¼" + + msgid "Not a non-modal keymap" msgstr "äøę˜Æ非å…øēÆ„ęŒ‰éµå°ę‡‰č”Ø" @@ -65797,6 +72118,10 @@ msgid "KeyConfig '%s' cannot be removed" msgstr "ē„”ę³•ē§»é™¤ KeyConfig怌%s怍" +msgid "Unknown operator" +msgstr "ęœŖēŸ„ę“ä½œå™Ø" + + msgid "Operator '%s' not found!" msgstr "ę‰¾äøåˆ°ć€Œ%sć€ę“ä½œå™Øļ¼" @@ -65805,6 +72130,10 @@ msgid "Gizmo group '%s' not found!" msgstr "ę‰¾äøåˆ°ć€Œ%s怍꓍ēø±å™Øē¾¤ēµ„ļ¼" +msgid "Bind To" +msgstr "ē¶å®šč‡³" + + msgid "Bone Envelopes" msgstr "éŖØéŖ¼å°å„—" @@ -65813,10 +72142,26 @@ msgid "Settings are inside the Physics tab" msgstr "čØ­å®šå€¼ä½ę–¼ē‰©ē†åˆ†é å…§" +msgid "Unbind" +msgstr "å–ę¶ˆē¶å®š" + + +msgid "Bind" +msgstr "ē¶å®š" + + +msgid "CorrectiveSmooth" +msgstr "äæ®ę­£å¹³ę»‘" + + msgid "Bind data required" msgstr "éœ€č¦ē¶å®šč³‡ę–™" +msgid "DataTransfer" +msgstr "č³‡ę–™å‚³č¼ø" + + msgid "Modifier requires more than 3 input faces" msgstr "äæ®ę”¹å™Øéœ€č¦č¶…éŽ 3 個č¼ø兄面" @@ -65829,6 +72174,22 @@ msgid "Refresh" msgstr "é‡ę–°ę•“ē†" +msgid "Curvature" +msgstr "ę›²ēŽ‡" + + +msgid "TimeOffset" +msgstr "ę™‚é–“åē§»" + + +msgid "Recenter" +msgstr "重定äø­åæƒ" + + +msgid "LaplacianDeform" +msgstr "ꋉꙮꋉę–Æč®Šå½¢" + + msgid "Vertices changed from %d to %d" msgstr "頂點從 %d 變ē‚ŗ %d" @@ -65841,6 +72202,10 @@ msgid "The system did not find a solution" msgstr "ē³»ēµ±ę‰¾äøåˆ°č§£ę±ŗę–¹ę”ˆ" +msgid "LaplacianSmooth" +msgstr "ꋉꙮꋉę–Æå¹³ę»‘" + + msgid "Material Borders" msgstr "Ꝑč³Ŗ邊ē•Œ" @@ -65849,6 +72214,22 @@ msgid "Light Contour" msgstr "ē‡ˆå…‰č¼Ŗ廓" +msgid "Custom Camera" +msgstr "č‡ŖčØ‚ę”å½±ę©Ÿ" + + +msgid "Edge Types" +msgstr "邊ē·šé”žåž‹" + + +msgid "Composition" +msgstr "åˆęˆ" + + +msgid "MeshCache" +msgstr "ē¶²ę ¼åæ«å–" + + msgid "'Integrate' only valid for Mesh objects" msgstr "ć€Œę•“åˆć€åƒ…é©ē”Øē¶²ę ¼ē‰©é«”" @@ -65865,6 +72246,14 @@ msgid "Time Remapping" msgstr "ę™‚é–“é‡ę–°ę˜ å°„" +msgid "Axis Mapping" +msgstr "č»øå‘ę˜ å°„" + + +msgid "MeshDeform" +msgstr "ē¶²ę ¼č®Šå½¢" + + msgid "Cannot get mesh from cage object" msgstr "ē„”ę³•å¾žē½©é«”ē‰©é«”取得ē¶²ę ¼" @@ -65873,23 +72262,56 @@ msgid "Bind data missing" msgstr "ē¶å®šč³‡ę–™éŗ失" +msgid "MeshSequenceCache" +msgstr "ē¶²ę ¼åŗę®µåæ«å–" + + msgctxt "Mesh" msgid "Clipping" msgstr "ęˆŖ割" +msgid "Levels Viewport" +msgstr "層ē“šč¦–圖" + + +msgid "Unsubdivide" +msgstr "å–ę¶ˆē“°åˆ†" + + +msgid "Reshape" +msgstr "重唑外形" + + msgid "Rebuild Subdivisions" msgstr "重å»ŗē“°åˆ†" +msgid "Multires" +msgstr "多ē“šē²¾åŗ¦" + + +msgid "Manage" +msgstr "ē®”ē†" + + msgid "No named attributes used" msgstr "ęœŖä½æē”Ø具名ēš„å±¬ę€§" +msgid "NormalEdit" +msgstr "ę³•ē·šē·Øč¼Æ" + + msgid "Coverage" msgstr "ꔶꖂ" +msgctxt "Mesh" +msgid "Spray" +msgstr "噓ęæŗ" + + msgid "Create Instances" msgstr "創å»ŗåƦ例" @@ -65902,27 +72324,80 @@ msgid "ParticleInstance" msgstr "ē²’子åƦ例" +msgid "Steps Viewport" +msgstr "ę­„éšŽč¦–åœ–" + + +msgid "SimpleDeform" +msgstr "ē°”å–®č®Šå½¢" + + msgid "Hull error" msgstr "귘éøéŒÆčŖ¤" +msgid "Crease Inner" +msgstr "ēšŗę‘ŗ內偓" + + +msgid "Shell" +msgstr "ę®¼å±¤" + + +msgctxt "Mesh" +msgid "Rim" +msgstr "邊ꔆ" + + msgid "Adaptive Subdivision" msgstr "適ꇉꀧē“°åˆ†" +msgid "SurfaceDeform" +msgstr "č”Øé¢č®Šå½¢" + + msgctxt "Operator" msgid "Apply as Shape Key" msgstr "å„—ē”Øē‚ŗ外形鍵" +msgid "UVProject" +msgstr "UVęŠ•å½±" + + +msgid "UVWarp" +msgstr "UVå½Žę›²" + + +msgid "Motion" +msgstr "運動" + + msgid "Life" msgstr "ē”Ÿå‘½" +msgid "WeightedNormal" +msgstr "ę¬Šé‡ę³•ē·š" + + msgid "Global Influence:" msgstr "å…Ø域影éŸæļ¼š" +msgid "VertexWeightEdit" +msgstr "é ‚é»žę¬Šé‡ē·Øč¼Æ" + + +msgid "VertexWeightMix" +msgstr "é ‚é»žę¬Šé‡ę··åˆ" + + +msgid "VertexWeightProximity" +msgstr "é ‚é»žę¬Šé‡é„°čæ‘" + + msgid "Replace Original" msgstr "取代原始" @@ -66023,6 +72498,10 @@ msgid "Buffer Edge:" msgstr "ē·©č”é‚Šē·šļ¼š" +msgid "Path:" +msgstr "č·Æ徑ļ¼š" + + msgid "Base Path:" msgstr "åŸŗē¤Žč·Æ徑ļ¼š" @@ -66083,10 +72562,6 @@ msgid "Offset Y" msgstr "偏ē§» Y" -msgid "Undistortion" -msgstr "åę‰­ę›²" - - msgid "Dot" msgstr "點" @@ -66103,6 +72578,33 @@ msgid "Cr" msgstr "Cr" +msgid "C" +msgstr "C" + + +msgid "Result" +msgstr "ēµęžœ" + + +msgctxt "NodeTree" +msgid "A" +msgstr "A" + + +msgctxt "NodeTree" +msgid "B" +msgstr "B" + + +msgctxt "Text" +msgid "Tab" +msgstr "Tab" + + +msgid "Decimals" +msgstr "小ę•ø點" + + msgid "Position of the first control point" msgstr "ē¬¬äø€å€‹ęŽ§åˆ¶é»žēš„位ē½®" @@ -66119,13 +72621,29 @@ msgid "Position of the start control point of the curve" msgstr "ę›²ē·šé–‹é ­ęŽ§åˆ¶é»žēš„位ē½®" +msgid "Start Radius" +msgstr "čµ·å§‹åŠå¾‘" + + +msgid "Outer Radius" +msgstr "外層半徑" + + +msgid "Cuts" +msgstr "åˆ‡å‰²ę¬”ę•ø" + + +msgid "Point Index" +msgstr "點ē“¢å¼•" + + msgid "Surface UV map not defined" msgstr "č”Ø面 UV ę˜ å°„ęœŖ定ē¾©" msgctxt "NodeTree" msgid "Top" -msgstr "頂éƒØ" +msgstr "頂" msgid "Position 1" @@ -66136,10 +72654,23 @@ msgid "Position 2" msgstr "位ē½® 2" +msgctxt "Amount" +msgid "Area" +msgstr "面區" + + +msgid "Face Area Field" +msgstr "é¢å€åŸŸę–‡å­—" + + msgid "Planar" msgstr "平面" +msgid "Tangent node" +msgstr "切ē·šēƀ點" + + msgid "Rotation of the instances" msgstr "åƦ例ēš„ę—‹č½‰" @@ -66162,7 +72693,7 @@ msgstr "半徑åŗ•éƒØ" msgctxt "NodeTree" msgid "Bottom" -msgstr "åŗ•éƒØ" +msgstr "åŗ•" msgid "Position of the first vertex" @@ -66177,10 +72708,22 @@ msgid "Skip" msgstr "ē•„過" +msgid "Delimiter" +msgstr "分隔ē¬¦" + + +msgid "Strings" +msgstr "字äø²" + + msgid "Curve Instances" msgstr "ę›²ē·šåƦ例" +msgid "Remainder" +msgstr "剩餘" + + msgid "Edge Crease" msgstr "邊ē·šēšŗę‘ŗ" @@ -66193,6 +72736,26 @@ msgid "Rotate islands for best fit" msgstr "ę—‹č½‰å³¶å”Šä»„ęœ€ä½³é©ę‡‰" +msgid "Volume density per voxel" +msgstr "各體ē“ ēš„é«”ē©åƆåŗ¦" + + +msgid "Value for voxels outside of the cube" +msgstr "ē«‹ę–¹é«”外面體ē“ ēš„值" + + +msgid "Number of voxels in the X axis" +msgstr "X č»øäøŠēš„é«”ē“ ę•ø量" + + +msgid "Number of voxels in the Y axis" +msgstr "Y č»øäøŠēš„é«”ē“ ę•ø量" + + +msgid "Number of voxels in the Z axis" +msgstr "Z č»øäøŠēš„é«”ē“ ę•ø量" + + msgid "Missing Data-Block" msgstr "éŗ失ę•øꓚēµ„唊" @@ -66225,6 +72788,22 @@ msgid "RoughnessV" msgstr "ē²—ē³™åŗ¦V" +msgid "Melanin Redness" +msgstr "é»‘č‰²ē“ ē“…åŗ¦" + + +msgid "Radial Roughness" +msgstr "徑向ē²—ē³™åŗ¦" + + +msgid "Coat" +msgstr "唗層" + + +msgid "Secondary Reflection" +msgstr "äŗŒę¬”反射" + + msgid "Color of the material" msgstr "Ꝑč³Ŗč‰²å½©" @@ -66249,6 +72828,10 @@ msgid "Subsurface Anisotropy" msgstr "ꬔč”Ø面各向ē•°ę€§" +msgid "Coat IOR" +msgstr "唗層 IOR" + + msgid "Emission Color" msgstr "ē™¼å…‰č‰²" @@ -66258,6 +72841,21 @@ msgid "Specular Tint" msgstr "é”é¢åå°„ęŸ“č‰²" +msgctxt "NodeTree" +msgid "Coat Tint" +msgstr "å”—å±¤ęŸ“č‰²" + + +msgctxt "NodeTree" +msgid "Sheen Tint" +msgstr "å…‰ę¾¤ęŸ“č‰²" + + +msgctxt "NodeTree" +msgid "Tint" +msgstr "ęŸ“č‰²" + + msgid "Subsurface" msgstr "ꬔč”Ø面" @@ -66362,6 +72960,10 @@ msgid "Transmission Depth" msgstr "ē©æé€ę·±åŗ¦" +msgid "Factor (Non-Uniform)" +msgstr "äæ‚ę•øļ¼ˆéžäø€č‡“ļ¼‰" + + msgid "Color1" msgstr "č‰²å½©1" @@ -66382,6 +72984,10 @@ msgid "Alpha Fac" msgstr "Alpha äæ‚ę•ø" +msgid "Age" +msgstr "壽命" + + msgid "BSSRDF" msgstr "BSSRDF" @@ -66470,6 +73076,10 @@ msgid "iScale" msgstr "iScale" +msgid "%s: %.*s" +msgstr "%s: %.*s" + + msgid "Could not resolve path (%s)" msgstr "ē„”ę³•č§£ęžč·Æ徑 (%s)" @@ -66515,11 +73125,11 @@ msgstr "å “ę™Æ怌%s怍äø­ę‰¾äøåˆ°ę”å½±ę©Ÿ" msgid "Camera \"%s\" is not a multi-view camera" -msgstr "怌%sć€ę”å½±ę©Ÿäøę˜Æå¤šč¦–åœ–ę”å½±ę©Ÿ" +msgstr "怌%sć€ę”å½±ę©Ÿäøę˜Æ多ęŖ¢č¦–ę”å½±ę©Ÿ" msgid "No active view found in scene \"%s\"" -msgstr "怌%sć€å “ę™Æäø­ę‰¾äøåˆ°ä½œē”Øäø­č¦–圖" +msgstr "怌%sć€å “ę™Æäø­ę‰¾äøåˆ°ä½œē”Øäø­ęŖ¢č¦–" msgid "%s: no Combined pass found in the render layer '%s'" @@ -66553,6 +73163,26 @@ msgid "Hue Correct" msgstr "č‰²ē›øę ”ę­£" +msgctxt "Sequence" +msgid "Brightness/Contrast" +msgstr "äŗ®åŗ¦/對ęƔ" + + +msgctxt "Sequence" +msgid "White Balance" +msgstr "ē™½å¹³č””" + + +msgctxt "Sequence" +msgid "Tonemap" +msgstr "č‰²čŖæę˜ å°„" + + +msgctxt "Sequence" +msgid "Equalizer" +msgstr "ē­‰åŒ–å™Ø" + + msgid "Strips must be the same length" msgstr "ē‰‡ę®µåæ…須長åŗ¦ē›ø同" @@ -66565,6 +73195,25 @@ msgid "Strips must have the same number of inputs" msgstr "ē‰‡ę®µåæ…é ˆęœ‰ē›ø同ēš„č¼øå…„ę•ø" +msgctxt "Sequence" +msgid "Audio" +msgstr "音č؊" + + +msgctxt "Sequence" +msgid "Multicam" +msgstr "å¤šę”å½±ę©Ÿ" + + +msgctxt "Sequence" +msgid "Adjustment" +msgstr "čŖæę•“" + + +msgid "Colorize" +msgstr "äøŠč‰²" + + msgid "Glow" msgstr "ē™¼å…‰" @@ -66577,6 +73226,18 @@ msgid "Object Pivot" msgstr "ē‰©é«”ę؞ē“é»ž" +msgid "Wave Effect" +msgstr "ę³¢ęµŖꕈꞜ" + + +msgid "WaveDistortion" +msgstr "ę³¢ęµŖę‰­ę›²" + + +msgid "window_managers" +msgstr "視ēŖ—ē®”ē†å™Ø" + + msgid "Input pending " msgstr "ē­‰å€™č¼øå…„ " @@ -66630,15 +73291,15 @@ msgstr "äøč¦å„²å­˜" msgid "Reload file with execution of Python scripts enabled" -msgstr "é‡ę–°č¼‰å…„ęŖ”ę”ˆäø¦å•Ÿē”Ø Python ęŒ‡ä»¤ēØæåŸ·č”Œ" +msgstr "é‡ę–°č¼‰å…„ęŖ”ę”ˆäø¦å•Ÿē”Ø Python 命令ēØæåŸ·č”Œ" msgid "Enable scripts" -msgstr "啟ē”ØęŒ‡ä»¤ēØæ" +msgstr "啟ē”Ø命令ēØæ" msgid "Continue using file without Python scripts" -msgstr "ē¹¼ēŗŒä½æē”ØęŖ”ę”ˆč€Œäøē”Ø Python ęŒ‡ä»¤ēØæ" +msgstr "ē¹¼ēŗŒä½æē”ØęŖ”ę”ˆč€Œäøē”Ø Python 命令ēØæ" msgid "unable to open the file" @@ -66646,7 +73307,7 @@ msgstr "ē„”ę³•é–‹å•ŸęŖ”ę”ˆ" msgid "For security reasons, automatic execution of Python scripts in this file was disabled:" -msgstr "åŸŗę–¼å®‰å…Øꀧ考量ļ¼Œę­¤ęŖ”ę”ˆēš„ Python ęŒ‡ä»¤ēØæč‡Ŗå‹•åŸ·č”ŒåŠŸčƒ½å·²åœē”Øļ¼š" +msgstr "åŸŗę–¼å®‰å…Øꀧ考量ļ¼Œę­¤ęŖ”ę”ˆēš„ Python 命令ēØæč‡Ŗå‹•åŸ·č”ŒåŠŸčƒ½å·²åœē”Øļ¼š" msgid "This may lead to unexpected behavior" @@ -66654,7 +73315,7 @@ msgstr "這åÆčƒ½å°Žč‡“é ęœŸå¤–ēš„č”Œē‚ŗ" msgid "Permanently allow execution of scripts" -msgstr "ę°ø遠允čØ±åŸ·č”ŒęŒ‡ä»¤ēØæ" +msgstr "ę°ø遠允čØ±åŸ·č”Œå‘½ä»¤ēØæ" msgid "Save changes before closing?" @@ -66733,6 +73394,18 @@ msgid "dbl-" msgstr "dbl-" +msgid "drag-" +msgstr "ę‹–ę›³-" + + +msgid "ON" +msgstr "開" + + +msgid "OFF" +msgstr "關" + + msgid "unsupported format" msgstr "尚ęœŖę”Æę“ēš„ę ¼å¼" @@ -66831,6 +73504,11 @@ msgid "Platform Unsupported" msgstr "ęœŖę”Æę“ēš„å¹³č‡ŗ" +msgctxt "WindowManager" +msgid "Your graphics card or macOS version is not supported" +msgstr "尚ęœŖę”Æę“ę‚Øēš„圖形é”Æē¤ŗå”ęˆ– macOS ē‰ˆęœ¬" + + msgctxt "WindowManager" msgid "Your graphics card or driver is not supported." msgstr "尚ęœŖę”Æę“ę‚Øēš„圖形é”Æē¤ŗå”ęˆ–é©…å‹•ēØ‹å¼ć€‚" @@ -66849,6 +73527,134 @@ msgid "(Unsaved)" msgstr "(ęœŖ儲存)" +msgid " (Recovered)" +msgstr " (已復原)" + + +msgid "1 inch" +msgstr "1 č‹±å‹" + + +msgid "1/1.8 inch" +msgstr "1/1.8 č‹±å‹" + + +msgid "1/2.3 inch" +msgstr "1/2.3 č‹±å‹" + + +msgid "1/2.5 inch" +msgstr "1/2.5 č‹±å‹" + + +msgid "1/2.7 inch" +msgstr "1/2.7 č‹±å‹" + + +msgid "1/3.2 inch" +msgstr "1/3.2 č‹±å‹" + + +msgid "APS-C" +msgstr "APS-C" + + +msgid "APS-C (Canon)" +msgstr "APS-Cļ¼ˆä½³čƒ½ļ¼‰" + + +msgid "APS-H (Canon)" +msgstr "APS-Hļ¼ˆä½³čƒ½ļ¼‰" + + +msgid "Analog 16mm" +msgstr "锞ęƔ 16mm" + + +msgid "Analog 35mm" +msgstr "锞ęƔ 35mm" + + +msgid "Analog 65mm" +msgstr "锞ęƔ 65mm" + + +msgid "Analog IMAX" +msgstr "锞ęƔ IMAX" + + +msgid "Fullframe" +msgstr "å…Øē‰‡å¹…" + + +msgid "MFT" +msgstr "MFT" + + +msgid "Cotton" +msgstr "ę£‰" + + +msgid "Leather" +msgstr "ēš®é©" + + +msgid "Silk" +msgstr "ēµ²ē¶¢" + + +msgid "Fast Global Illumination" +msgstr "åæ«é€Ÿå…Ø域ē…§ę˜Ž" + + +msgid "Full Global Illumination" +msgstr "å®Œę•“å…Ø域ē…§ę˜Ž" + + +msgid "Limited Global Illumination" +msgstr "受限å…Ø域ē…§ę˜Ž" + + +msgid "WebM (VP9+Opus)" +msgstr "WebM (VP9+Opus)" + + +msgid "Xvid" +msgstr "Xvid" + + +msgid "Honey" +msgstr "蜂蜜" + + +msgid "Oil" +msgstr "ę²¹" + + +msgid "Water" +msgstr "ę°“" + + +msgid "Industry Compatible" +msgstr "ę„­ē•Œē›ø容" + + +msgid "HDTV 1080p" +msgstr "HDTV 1080p" + + +msgid "HDTV 720p" +msgstr "HDTV 720p" + + +msgid "HDV 1080p" +msgstr "HDV 1080p" + + +msgid "16:9" +msgstr "16:9" + + msgctxt "WorkSpace" msgid "2D Animation" msgstr "2D 動ē•«" @@ -66886,7 +73692,7 @@ msgstr "ē®—ē¹Ŗ" msgctxt "WorkSpace" msgid "Scripting" -msgstr "ęŒ‡ä»¤ēØæ" +msgstr "命令ēØæ" msgctxt "WorkSpace" @@ -66918,6 +73724,14 @@ msgid "Import-Export BVH from armature objects" msgstr "從éŖØꞶē‰©ä»¶åŒÆå…„/åŒÆå‡ŗ BVH" +msgid "Blender Extensions" +msgstr "Blender ę““å……å„—ä»¶" + + +msgid "Extension repository support for remote repositories" +msgstr "ę““å……å„—ä»¶č»Ÿé«”åŗ«ę”Æę“é ē«Æč»Ÿé«”åŗ«" + + msgid "Cycles Render Engine" msgstr "Cycles ē®—ē¹Ŗå¼•ę“Ž" @@ -66934,6 +73748,10 @@ msgid "Pose Library" msgstr "å§æ勢åŗ«" +msgid "Pose Library based on the asset system." +msgstr "仄ē“ ęē³»ēµ±ē‚ŗåŸŗē¤Žēš„å§æ勢åŗ«ć€‚" + + msgid "Import SVG as curves" msgstr "åŒÆå…„ SVG ē‚ŗę›²ē·š" @@ -66952,7 +73770,7 @@ msgstr "åŒÆå…„/åŒÆå‡ŗ" msgctxt "Preferences" msgid "3D View" -msgstr "3D č¦–åœ–" +msgstr "3D ęŖ¢č¦–" msgctxt "Preferences" @@ -67030,6 +73848,10 @@ msgid "Catalan (CatalĆ )" msgstr "åŠ ę³°ē¾…å°¼äŗžę–‡ (CatalĆ )" +msgid "Czech (ČeÅ”tina)" +msgstr "ę·å…‹čŖž (ČeÅ”tina)" + + msgid "Portuguese (PortuguĆŖs)" msgstr "葔萄ē‰™ę–‡ (PortuguĆŖs)" @@ -67146,6 +73968,22 @@ msgid "Slovak (Slovenčina)" msgstr "ę–Æę“›ä¼å…‹ę–‡ (Slovenčina)" +msgid "Georgian (įƒ„įƒįƒ įƒ—įƒ£įƒšįƒ˜)" +msgstr "å–¬ę²»äŗžčŖž (įƒ„įƒįƒ įƒ—įƒ£įƒšįƒ˜)" + + +msgid "Tamil (ą®¤ą®®ą®æą®“ąÆ)" +msgstr "坦ē±³ēˆ¾čŖž (ą®¤ą®®ą®æą®“ąÆ)" + + +msgid "Khmer (įžįŸ’įž˜įŸ‚įžš)" +msgstr "é«˜ę£‰čŖž (įžįŸ’įž˜įŸ‚įžš)" + + +msgid "Swahili (Kiswahili)" +msgstr "ę–Æē“¦åøŒé‡ŒčŖž (Kiswahili)" + + msgid "Complete" msgstr "å®Œęˆ" @@ -67154,6 +73992,38 @@ msgid "In Progress" msgstr "處ē†äø­" +msgid "Starting" +msgstr "ę­£é–‹å§‹" + + +msgid "Generation" +msgstr "ē”¢ē”Ÿ" + + +msgid "Utility" +msgstr "公ē”Øē؋式" + + +msgid "Preserve Length" +msgstr "預ē•™é•·åŗ¦" + + +msgid "Shape Asymmetry" +msgstr "å½¢ē‹€äøå°ēر" + + +msgid "Hair Tie" +msgstr "é«®åø¶" + + +msgid "Distance Falloff" +msgstr "č·é›¢č”°ęø›" + + +msgid "Segment Length" +msgstr "åˆ†ę®µé•·åŗ¦" + + msgid "Viewport Amount" msgstr "č¦–åœ–é‡" diff --git a/scripts/addons_core/copy_global_transform.py b/scripts/addons_core/copy_global_transform.py index c6aa61cd4141..65991d9e227a 100644 --- a/scripts/addons_core/copy_global_transform.py +++ b/scripts/addons_core/copy_global_transform.py @@ -235,12 +235,12 @@ def _channelbag_for_id(animated_id: ID) -> ActionChannelbag | None: if action is None: return None - slot_handle = adt.action_slot_handle + slot = adt.action_slot for layer in action.layers: for strip in layer.strips: assert strip.type == 'KEYFRAME' - channelbag = strip.channels(slot_handle) + channelbag = strip.channelbag(slot) return channelbag return None diff --git a/scripts/addons_core/io_scene_gltf2/__init__.py b/scripts/addons_core/io_scene_gltf2/__init__.py index 4b168ad08751..d8b3526aefbc 100755 --- a/scripts/addons_core/io_scene_gltf2/__init__.py +++ b/scripts/addons_core/io_scene_gltf2/__init__.py @@ -5,7 +5,7 @@ bl_info = { 'name': 'glTF 2.0 format', 'author': 'Julien Duroure, Scurest, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin SchmithĆ¼sen, Jim Eckerlein, and many external contributors', - "version": (4, 4, 35), + "version": (4, 4, 42), 'blender': (4, 4, 0), 'location': 'File > Import-Export', 'description': 'Import-Export as glTF 2.0', @@ -1045,21 +1045,6 @@ def invoke(self, context, event): self.report({"ERROR"}, "Loading export settings failed. Removed corrupted settings") del context.scene[self.scene_key] - import sys - preferences = bpy.context.preferences - for addon_name in preferences.addons.keys(): - try: - if hasattr( - sys.modules[addon_name], - 'glTF2ExportUserExtension') or hasattr( - sys.modules[addon_name], - 'glTF2ExportUserExtensions'): - exporter_extension_layout_draw[addon_name] = sys.modules[addon_name].draw_export if hasattr( - sys.modules[addon_name], 'draw_export') else sys.modules[addon_name].draw - except Exception: - pass - - self.has_active_exporter_extensions = len(exporter_extension_layout_draw.keys()) > 0 return ExportHelper.invoke(self, context, event) def save_settings(self, context): @@ -1087,6 +1072,7 @@ def execute(self, context): import os import datetime import logging + from .io.exp.user_extensions import export_user_extensions from .io.com.debug import Log from .blender.exp import export as gltf2_blender_export from .io.com.path import path_to_uri @@ -1337,6 +1323,9 @@ def execute(self, context): # Initialize logging for export export_settings['log'] = Log(export_settings['loglevel']) + # Pre-export hook + export_user_extensions('pre_export_hook', export_settings) + profile = bpy.app.debug_value == 102 if profile: import cProfile @@ -1361,6 +1350,9 @@ def execute(self, context): export_settings['log'].flush() + # Post-export hook + export_user_extensions('post_export_hook', export_settings) + return res def draw(self, context): diff --git a/scripts/addons_core/io_scene_gltf2/blender/com/data_path.py b/scripts/addons_core/io_scene_gltf2/blender/com/data_path.py index 1c762c1ae695..41e64e3aab0b 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/com/data_path.py +++ b/scripts/addons_core/io_scene_gltf2/blender/com/data_path.py @@ -97,3 +97,14 @@ def get_object_from_datapath(blender_object, data_path: str): # path_attr = data_path return prop + + +def get_channelbag_for_slot(action, slot): + # This is on purpose limited to the first layer and strip. To support more + # than 1 layer, a rewrite of this operator is needed which ideally would + # happen in C++. + for layer in action.layers: + for strip in layer.strips: + channelbag = strip.channelbag(slot) + return channelbag + return None diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/action.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/action.py index 2a1969c11db8..cea12f5875d7 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/action.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/action.py @@ -8,7 +8,7 @@ from ....io.com import gltf2_io from ....io.exp.user_extensions import export_user_extensions from ....blender.com.conversion import get_gltf_interpolation -from ...com.data_path import is_bone_anim_channel +from ...com.data_path import is_bone_anim_channel, get_channelbag_for_slot from ...com.extras import generate_extras from ..cache import cached from ..tree import VExportNode @@ -20,7 +20,7 @@ from .sampled.object.channels import gather_object_sampled_channels, gather_sampled_object_channel from .sampled.shapekeys.channels import gather_sampled_sk_channel from .drivers import get_sk_drivers, get_driver_on_shapekey -from .anim_utils import reset_bone_matrix, reset_sk_data, link_samplers, add_slide_data, merge_tracks_perform, bake_animation, get_channelbag_for_slot +from .anim_utils import reset_bone_matrix, reset_sk_data, link_samplers, add_slide_data, merge_tracks_perform, bake_animation class ActionsData: @@ -546,16 +546,16 @@ def gather_action_animations(obj_uuid: int, if export_settings['gltf_force_sampling'] is True: if export_settings['vtree'].nodes[obj_uuid].blender_object.type == "ARMATURE": channels, extra_samplers = gather_action_armature_sampled( - obj_uuid, blender_action, slot.slot.handle, None, export_settings) + obj_uuid, blender_action, slot.slot.identifier, None, export_settings) if channels: all_channels.extend(channels) elif on_type == "OBJECT": channels, extra_samplers = gather_action_object_sampled( - obj_uuid, blender_action, slot.slot.handle, None, export_settings) + obj_uuid, blender_action, slot.slot.identifier, None, export_settings) if channels: all_channels.extend(channels) else: - channels = gather_action_sk_sampled(obj_uuid, blender_action, slot.slot.handle, None, export_settings) + channels = gather_action_sk_sampled(obj_uuid, blender_action, slot.slot.identifier, None, export_settings) if channels: all_channels.extend(channels) else: @@ -565,25 +565,25 @@ def gather_action_animations(obj_uuid: int, # - fcurve that cannot be handled not sampled, to be sampled # to_be_sampled is : (object_uuid , type , prop, optional(bone.name) ) channels, to_be_sampled, extra_samplers = gather_animation_fcurves( - obj_uuid, blender_action, slot.slot.handle, export_settings) + obj_uuid, blender_action, slot.slot.identifier, export_settings) if channels: all_channels.extend(channels) for (obj_uuid, type_, prop, bone) in to_be_sampled: if type_ == "BONE": - channel = gather_sampled_bone_channel( + channel = gather_sampled_bone_channel( #TODOSLOT obj_uuid, bone, prop, blender_action.name, - slot.slot.handle, + slot.slot.identifier, True, get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings), export_settings) elif type_ == "OBJECT": channel = gather_sampled_object_channel( - obj_uuid, prop, blender_action.name, slot.slot.handle, True, get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings), export_settings) + obj_uuid, prop, blender_action.name, slot.slot.identifier, True, get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings), export_settings) elif type_ == "SK": - channel = gather_sampled_sk_channel(obj_uuid, blender_action.name, slot.slot.handle, export_settings) + channel = gather_sampled_sk_channel(obj_uuid, blender_action.name, slot.slot.identifier, export_settings) elif type_ == "EXTRA": # TODOSLOT slot-3 channel = None else: diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/anim_utils.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/anim_utils.py index 2aa99e9d6c90..4c3a2380a47d 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/anim_utils.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/anim_utils.py @@ -269,13 +269,13 @@ def bake_animation(obj_uuid: str, animation_key: str, export_settings, mode=None name=export_settings['vtree'].nodes[obj_uuid].blender_object.name if obj_uuid == animation_key else animation_key, samplers=[] ) - link_samplers(animation, export_settings) + link_samplers(animation, export_settings) if animation is not None: return animation return None -def bake_data_animation(blender_type_data, blender_id, animation_key, slot_handle, on_type, export_settings): +def bake_data_animation(blender_type_data, blender_id, animation_key, slot_identifier, on_type, export_settings): # if there is no animation in file => no need to bake if len(bpy.data.actions) == 0: return None @@ -300,7 +300,7 @@ def bake_data_animation(blender_type_data, blender_id, animation_key, slot_handl if len(export_settings['KHR_animation_pointer'][blender_type_data][i]['paths']) == 0: continue - channels = gather_data_sampled_channels(blender_type_data, i, animation_key, slot_handle, on_type, export_settings) + channels = gather_data_sampled_channels(blender_type_data, i, animation_key, slot_identifier, on_type, export_settings) if channels is not None: total_channels.extend(channels) @@ -317,13 +317,3 @@ def bake_data_animation(blender_type_data, blender_id, animation_key, slot_handl link_samplers(animation, export_settings) return animation - -def get_channelbag_for_slot(action, slot): - # This is on purpose limited to the first layer and strip. To support more - # than 1 layer, a rewrite of this operator is needed which ideally would - # happen in C++. - for layer in action.layers: - for strip in layer.strips: - channelbag = strip.channels(slot.handle) - return channelbag - return None diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/animation.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/animation.py index 0f104f7c244d..6e91ba53d8cb 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/animation.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/animation.py @@ -12,11 +12,11 @@ def gather_animation_fcurves( obj_uuid: str, blender_action: bpy.types.Action, - slot_handle: int, + slot_identifier: str, export_settings ): - channels, to_be_sampled, extra_samplers = __gather_channels_fcurves(obj_uuid, blender_action, slot_handle, export_settings) + channels, to_be_sampled, extra_samplers = __gather_channels_fcurves(obj_uuid, blender_action, slot_identifier, export_settings) if not channels: return None, to_be_sampled, extra_samplers @@ -30,6 +30,6 @@ def gather_animation_fcurves( def __gather_channels_fcurves( obj_uuid: str, blender_action: bpy.types.Action, - slot_handle: int, + slot_identifier: str, export_settings): - return gather_animation_fcurves_channels(obj_uuid, blender_action, slot_handle, export_settings) + return gather_animation_fcurves_channels(obj_uuid, blender_action, slot_identifier, export_settings) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/channels.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/channels.py index 166e11baa63a..69915156f9f1 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/channels.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/fcurves/channels.py @@ -7,7 +7,7 @@ from .....io.exp.user_extensions import export_user_extensions from .....io.com import gltf2_io from ....exp.cache import cached -from ....com.data_path import get_target_object_path, get_target_property_name, get_rotation_modes, get_object_from_datapath, skip_sk +from ....com.data_path import get_target_object_path, get_target_property_name, get_rotation_modes, get_object_from_datapath, skip_sk, get_channelbag_for_slot from ....com.conversion import get_target, get_channel_from_target from .channel_target import gather_fcurve_channel_target from .sampler import gather_animation_fcurves_sampler @@ -17,12 +17,12 @@ def gather_animation_fcurves_channels( obj_uuid: int, blender_action: bpy.types.Action, - slot_handle: int, + slot_identifier: str, export_settings ): channels_to_perform, to_be_sampled, extra_channels_to_perform = get_channel_groups( - obj_uuid, blender_action, slot_handle, export_settings) + obj_uuid, blender_action, blender_action.slots[slot_identifier], export_settings) custom_range = None if blender_action.use_frame_range: @@ -51,7 +51,7 @@ def gather_animation_fcurves_channels( return channels, to_be_sampled, extra_samplers -def get_channel_groups(obj_uuid: str, blender_action: bpy.types.Action, slot_handle: int, export_settings, no_sample_option=False): +def get_channel_groups(obj_uuid: str, blender_action: bpy.types.Action, slot: bpy.types.ActionSlot, export_settings, no_sample_option=False): # no_sample_option is used when we want to retrieve all SK channels, to be evaluate. targets = {} targets_extra = {} @@ -64,7 +64,7 @@ def get_channel_groups(obj_uuid: str, blender_action: bpy.types.Action, slot_han # When both normal and delta are used --> Set to to_be_sampled list to_be_sampled = [] # (object_uuid , type , prop, optional(bone.name) ) - channelbag = __get_channelbag_for_slot_handle(blender_action, slot_handle) + channelbag = get_channelbag_for_slot(blender_action, slot) fcurves = channelbag.fcurves if channelbag else [] for fcurve in fcurves: type_ = None @@ -376,11 +376,3 @@ def all_equal(lst): return True return False - - -def __get_channelbag_for_slot_handle(action, slot_handle): - for layer in action.layers: - for strip in layer.strips: - channelbag = strip.channels(slot_handle) - return channelbag - return None diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/action_sampled.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/action_sampled.py index e84fc3c2619f..360cf7ffad5d 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/action_sampled.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/action_sampled.py @@ -13,7 +13,7 @@ def gather_action_armature_sampled(armature_uuid: str, blender_action: typing.Optional[bpy.types.Action], - slot_handle: int, + slot_identifier: str, cache_key: str, export_settings): @@ -21,12 +21,12 @@ def gather_action_armature_sampled(armature_uuid: str, try: channels, extra_channels = __gather_channels( - armature_uuid, blender_action.name if blender_action else cache_key, slot_handle if blender_action else None, export_settings) + armature_uuid, blender_action.name if blender_action else cache_key, slot_identifier if blender_action else None, export_settings) except RuntimeError as error: export_settings['log'].warning("Animation channels on action '{}' could not be exported. Cause: {}".format(name, error)) return None - export_user_extensions('pre_gather_animation_hook', export_settings, channels, blender_action, slot_handle, blender_object) + export_user_extensions('pre_gather_animation_hook', export_settings, channels, blender_action, slot_identifier, blender_object) extra_samplers = [] if export_settings['gltf_export_extra_animations']: @@ -46,10 +46,10 @@ def gather_action_armature_sampled(armature_uuid: str, # To allow reuse of samplers in one animation : This will be done later, when we know all channels are here export_user_extensions('animation_channels_armature_sampled', export_settings, - channels, blender_object, blender_action, slot_handle, cache_key) + channels, blender_object, blender_action, slot_identifier, cache_key) return channels, extra_samplers -def __gather_channels(armature_uuid, blender_action_name, slot_handle, export_settings) -> typing.List[gltf2_io.AnimationChannel]: - return gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_handle, export_settings) +def __gather_channels(armature_uuid, blender_action_name, slot_identifier, export_settings) -> typing.List[gltf2_io.AnimationChannel]: + return gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_identifier, export_settings) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/channels.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/channels.py index 434e08b9cb5c..a7441db8a1f1 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/channels.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/channels.py @@ -17,7 +17,7 @@ from .sampler import gather_bone_sampled_animation_sampler -def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_handle, +def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_identifier, export_settings) -> typing.List[gltf2_io.AnimationChannel]: channels = [] extra_channels = {} @@ -30,11 +30,12 @@ def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_ha # List of really animated bones is needed for optimization decision list_of_animated_bone_channels = {} - if slot_handle is not None: + if slot_identifier is not None: if armature_uuid != blender_action_name and blender_action_name in bpy.data.actions: # Not bake situation channels_animated, to_be_sampled, extra_channels = get_channel_groups( - armature_uuid, bpy.data.actions[blender_action_name], slot_handle, export_settings) + armature_uuid, bpy.data.actions[blender_action_name], + bpy.data.actions[blender_action_name].slots[slot_identifier], export_settings) for chan in [chan for chan in channels_animated.values() if chan['bone'] is not None]: for prop in chan['properties'].keys(): list_of_animated_bone_channels[(chan['bone'], get_channel_from_target(get_target(prop)))] = get_gltf_interpolation( @@ -49,7 +50,7 @@ def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_ha ] = get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings) # if forced to be sampled, keep the interpolation chosen by the user else: pass - # There is no animated channels (because if it was, we would have a slot_handle) + # There is no animated channels (because if it was, we would have a slot_identifier) # We are in a bake situation for bone in bones_to_be_animated: @@ -59,7 +60,7 @@ def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_ha bone, p, blender_action_name, - slot_handle, + slot_identifier, (bone, p) in list_of_animated_bone_channels.keys(), list_of_animated_bone_channels[(bone, p)] if (bone, p) in list_of_animated_bone_channels.keys() else get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings), export_settings) @@ -79,7 +80,7 @@ def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_ha else: # The armature has some channel(s) animated, checking which one(s) armature_channels = __gather_armature_object_channel( - armature_uuid, bpy.data.actions[blender_action_name], slot_handle, export_settings) + armature_uuid, bpy.data.actions[blender_action_name], slot_identifier, export_settings) animated_channels = armature_channels for (p, i) in armature_channels: @@ -87,7 +88,7 @@ def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_ha armature_uuid, p, blender_action_name, - slot_handle, + slot_identifier, p in [a[0] for a in animated_channels], [c[1] for c in animated_channels if c[0] == p][0] if p in [a[0] for a in animated_channels] else bake_interpolation, export_settings @@ -99,7 +100,7 @@ def gather_armature_sampled_channels(armature_uuid, blender_action_name, slot_ha # Retrieve channels for drivers, if needed drivers_to_manage = get_sk_drivers(armature_uuid, export_settings) for obj_driver_uuid in drivers_to_manage: - channel = gather_sampled_sk_channel(obj_driver_uuid, armature_uuid + "_" + blender_action_name, slot_handle, export_settings) + channel = gather_sampled_sk_channel(obj_driver_uuid, armature_uuid + "_" + blender_action_name, slot_identifier, export_settings) if channel is not None: channels.append(channel) @@ -111,7 +112,7 @@ def gather_sampled_bone_channel( bone: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, node_channel_interpolation: str, export_settings @@ -124,7 +125,7 @@ def gather_sampled_bone_channel( bone, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, node_channel_interpolation, export_settings) @@ -169,7 +170,7 @@ def __gather_sampler( bone, channel, action_name, - slot_handle, + slot_identifier, #TODOSLOT node_channel_is_animated, node_channel_interpolation, export_settings): @@ -178,17 +179,17 @@ def __gather_sampler( bone, channel, action_name, - slot_handle, + slot_identifier, #TODOSLOT node_channel_is_animated, node_channel_interpolation, export_settings ) -def __gather_armature_object_channel(obj_uuid: str, blender_action, slot_handle, export_settings): +def __gather_armature_object_channel(obj_uuid: str, blender_action, slot_identifier, export_settings): channels = [] - channels_animated, to_be_sampled, extra_channels = get_channel_groups(obj_uuid, blender_action, slot_handle, export_settings) + channels_animated, to_be_sampled, extra_channels = get_channel_groups(obj_uuid, blender_action, blender_action.slots[slot_identifier], export_settings) # Remove all channel linked to bones, keep only directly object channels channels_animated = [c for c in channels_animated.values() if c['type'] == "OBJECT"] to_be_sampled = [c for c in to_be_sampled if c[1] == "OBJECT"] diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/keyframes.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/keyframes.py index 2a47067772d4..a1452f869e00 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/keyframes.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/keyframes.py @@ -15,7 +15,7 @@ def gather_bone_sampled_keyframes( bone: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, export_settings ) -> typing.List[Keyframe]: @@ -38,7 +38,7 @@ def gather_bone_sampled_keyframes( action_name, frame, step, - slot_handle, + slot_identifier, export_settings) trans, rot, scale = mat.decompose() diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/sampler.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/sampler.py index 946682782857..772f3bbd3d14 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/sampler.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/armature/sampler.py @@ -22,7 +22,7 @@ def gather_bone_sampled_animation_sampler( bone: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, node_channel_interpolation: str, export_settings @@ -35,7 +35,7 @@ def gather_bone_sampled_animation_sampler( bone, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, export_settings) @@ -74,7 +74,7 @@ def __gather_keyframes( bone: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, export_settings ): @@ -84,7 +84,7 @@ def __gather_keyframes( bone, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, export_settings ) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/channels.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/channels.py index 8e893d0f4eb0..dc965f2fd6ce 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/channels.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/channels.py @@ -10,7 +10,7 @@ from .sampler import gather_data_sampled_animation_sampler -def gather_data_sampled_channels(blender_type_data, blender_id, blender_action_name, slot_handle, +def gather_data_sampled_channels(blender_type_data, blender_id, blender_action_name, slot_identifier, additional_key, export_settings) -> typing.List[gltf2_io.AnimationChannel]: channels = [] @@ -29,7 +29,7 @@ def gather_data_sampled_channels(blender_type_data, blender_id, blender_action_n blender_id, path, blender_action_name, - slot_handle, + slot_identifier, path in list_of_animated_data_channels.keys(), list_of_animated_data_channels[path] if path in list_of_animated_data_channels.keys() else get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings), additional_key, @@ -48,7 +48,7 @@ def gather_sampled_data_channel( blender_id: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, node_channel_interpolation: str, additional_key: str, # Used to differentiate between material / material node_tree @@ -62,7 +62,7 @@ def gather_sampled_data_channel( blender_id, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, node_channel_interpolation, additional_key, @@ -100,7 +100,7 @@ def __gather_sampler( blender_id, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, node_channel_interpolation, additional_key, @@ -110,7 +110,7 @@ def __gather_sampler( blender_id, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, node_channel_interpolation, additional_key, diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/keyframes.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/keyframes.py index 82eab1a77c18..ab055dbaa744 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/keyframes.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/keyframes.py @@ -18,7 +18,7 @@ def gather_data_sampled_keyframes( blender_id, channel, action_name, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, additional_key, # Used to differentiate between material / material node_tree export_settings): @@ -47,7 +47,7 @@ def gather_data_sampled_keyframes( action_name, frame, step, - slot_handle, + slot_identifier, export_settings ) @@ -69,7 +69,7 @@ def gather_data_sampled_keyframes( action_name, frame, step, - slot_handle, + slot_identifier, export_settings ) @@ -94,7 +94,7 @@ def gather_data_sampled_keyframes( action_name, frame, step, - slot_handle, + slot_identifier, export_settings ) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/sampler.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/sampler.py index eb7000999386..aa74a967fa79 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/sampler.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/data/sampler.py @@ -18,7 +18,7 @@ def gather_data_sampled_animation_sampler( blender_id: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, node_channel_interpolation: str, additional_key: str, # Used to differentiate between material / material node_tree @@ -30,7 +30,7 @@ def gather_data_sampled_animation_sampler( blender_id, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, additional_key, export_settings) @@ -53,7 +53,7 @@ def __gather_keyframes( blender_id, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, additional_key, # Used to differentiate between material / material node_tree export_settings): @@ -63,7 +63,7 @@ def __gather_keyframes( blender_id, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, additional_key, export_settings diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/action_sampled.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/action_sampled.py index 0c15ff22e7ef..26aa42d20735 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/action_sampled.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/action_sampled.py @@ -13,7 +13,7 @@ def gather_action_object_sampled(object_uuid: str, blender_action: typing.Optional[bpy.types.Action], - slot_handle: int, + slot_identifier: str, cache_key: str, export_settings): @@ -24,7 +24,7 @@ def gather_action_object_sampled(object_uuid: str, return None, extra_samplers channels, extra_channels = __gather_channels( - object_uuid, blender_action.name if blender_action else cache_key, slot_handle if blender_action else None, export_settings) + object_uuid, blender_action.name if blender_action else cache_key, slot_identifier if blender_action else None, export_settings) if export_settings['gltf_export_extra_animations']: for chan in [chan for chan in extra_channels.values() if len(chan['properties']) != 0]: @@ -47,12 +47,12 @@ def gather_action_object_sampled(object_uuid: str, channels, blender_object, blender_action, - slot_handle, + slot_identifier, cache_key) return channels, extra_samplers -def __gather_channels(object_uuid: str, blender_action_name: str, slot_handle: int, +def __gather_channels(object_uuid: str, blender_action_name: str, slot_identifier: str, export_settings) -> typing.List[gltf2_io.AnimationChannel]: - return gather_object_sampled_channels(object_uuid, blender_action_name, slot_handle, export_settings) + return gather_object_sampled_channels(object_uuid, blender_action_name, slot_identifier, export_settings) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/channels.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/channels.py index 03d13b8a5311..2045f53c396f 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/channels.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/channels.py @@ -13,7 +13,7 @@ from .channel_target import gather_object_sampled_channel_target -def gather_object_sampled_channels(object_uuid: str, blender_action_name: str, slot_handle: int, +def gather_object_sampled_channels(object_uuid: str, blender_action_name: str, slot_identifier: str, export_settings) -> typing.List[gltf2_io.AnimationChannel]: channels = [] extra_channels = {} @@ -22,11 +22,11 @@ def gather_object_sampled_channels(object_uuid: str, blender_action_name: str, s # Access to fcurve and action data list_of_animated_channels = {} - if slot_handle is not None: + if slot_identifier is not None: if object_uuid != blender_action_name and blender_action_name in bpy.data.actions: # Not bake situation channels_animated, to_be_sampled, extra_channels = get_channel_groups( - object_uuid, bpy.data.actions[blender_action_name], slot_handle, export_settings) + object_uuid, bpy.data.actions[blender_action_name], bpy.data.actions[blender_action_name].slots[slot_identifier], export_settings) for chan in [chan for chan in channels_animated.values() if chan['bone'] is None]: for prop in chan['properties'].keys(): list_of_animated_channels[get_channel_from_target(get_target(prop))] = get_gltf_interpolation( @@ -37,7 +37,7 @@ def gather_object_sampled_channels(object_uuid: str, blender_action_name: str, s export_settings['gltf_sampling_interpolation_fallback'], export_settings) # if forced to be sampled, keep the interpolation choosen by the user else: pass - # There is no animated channels (because if it was, we would have a slot_handle) + # There is no animated channels (because if it was, we would have a slot_identifier) # We are in a bake situation for p in ["location", "rotation_quaternion", "scale"]: @@ -45,7 +45,7 @@ def gather_object_sampled_channels(object_uuid: str, blender_action_name: str, s object_uuid, p, blender_action_name, - slot_handle, + slot_identifier, #TODOSLOT p in list_of_animated_channels.keys(), list_of_animated_channels[p] if p in list_of_animated_channels.keys() else get_gltf_interpolation(export_settings['gltf_sampling_interpolation_fallback'], export_settings), export_settings @@ -64,7 +64,7 @@ def gather_sampled_object_channel( obj_uuid: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, node_channel_interpolation: str, export_settings @@ -76,7 +76,7 @@ def gather_sampled_object_channel( obj_uuid, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, node_channel_interpolation, export_settings) @@ -120,7 +120,7 @@ def __gather_sampler( obj_uuid: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: int, node_channel_is_animated: bool, node_channel_interpolation: str, export_settings): @@ -129,7 +129,7 @@ def __gather_sampler( obj_uuid, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, node_channel_interpolation, export_settings diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/keyframes.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/keyframes.py index 78e9acb43d28..c0ff47024ad0 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/keyframes.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/keyframes.py @@ -14,7 +14,7 @@ def gather_object_sampled_keyframes( obj_uuid: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, export_settings ): @@ -37,7 +37,7 @@ def gather_object_sampled_keyframes( action_name, frame, step, - slot_handle, + slot_identifier, export_settings) trans, rot, sca = mat.decompose() diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/sampler.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/sampler.py index ed3b95311356..280a7ba69c99 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/sampler.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/object/sampler.py @@ -21,7 +21,7 @@ def gather_object_sampled_animation_sampler( obj_uuid: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: str, node_channel_is_animated: bool, node_channel_interpolation: str, export_settings @@ -31,7 +31,7 @@ def gather_object_sampled_animation_sampler( obj_uuid, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, export_settings) @@ -63,7 +63,7 @@ def __gather_keyframes( obj_uuid: str, channel: str, action_name: str, - slot_handle: int, + slot_identifier: int, node_channel_is_animated: bool, export_settings ): @@ -72,7 +72,7 @@ def __gather_keyframes( obj_uuid, channel, action_name, - slot_handle, + slot_identifier, node_channel_is_animated, export_settings ) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/sampling_cache.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/sampling_cache.py index 3886974a632f..3b7aeb3b59bd 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/sampling_cache.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/sampling_cache.py @@ -21,14 +21,14 @@ def get_cache_data(path: str, action_name: str, current_frame: int, step: int, - slot_handle: int, + slot_identifier: str, export_settings, only_gather_provided=False ): data = {} - # Ranges are stored at action level, so no need to give the slot_handle here + # Ranges are stored at action level, so no need to give the slot_identifier here min_, max_ = get_range(blender_obj_uuid, action_name, export_settings) if only_gather_provided: @@ -70,14 +70,14 @@ def get_cache_data(path: str, bpy.context.scene.frame_set(int(frame)) current_instance = {} # For GN instances, we are going to track instances by their order in instance iterator - object_caching(data, obj_uuids, current_instance, action_name, slot_handle, frame, depsgraph, export_settings) + object_caching(data, obj_uuids, current_instance, action_name, slot_identifier, frame, depsgraph, export_settings) # KHR_animation_pointer caching for materials, lights, cameras if export_settings['gltf_export_anim_pointer'] is True: - material_nodetree_caching(data, action_name, slot_handle, frame, export_settings) - material_caching(data, action_name, slot_handle, frame, export_settings) - light_nodetree_caching(data, action_name, slot_handle, frame, export_settings) - camera_caching(data, action_name, slot_handle, frame, export_settings) + material_nodetree_caching(data, action_name, slot_identifier, frame, export_settings) + material_caching(data, action_name, slot_identifier, frame, export_settings) + light_nodetree_caching(data, action_name, slot_identifier, frame, export_settings) + camera_caching(data, action_name, slot_identifier, frame, export_settings) frame += step @@ -120,7 +120,7 @@ def initialize_data_dict(data, key1, key2, key3, key4, key5): data[key1][key2][key3][key4][key5] = {} -def material_caching(data, action_name, slot_handle, frame, export_settings): +def material_caching(data, action_name, slot_identifier, frame, export_settings): for mat in export_settings['KHR_animation_pointer']['materials'].keys(): if len(export_settings['KHR_animation_pointer']['materials'][mat]['paths']) == 0: continue @@ -137,15 +137,15 @@ def material_caching(data, action_name, slot_handle, frame, export_settings): if blender_material and blender_material.animation_data and blender_material.animation_data.action \ and blender_material.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS"]: - key1, key2, key3, key4 = mat, blender_material.animation_data.action.name, blender_material.animation_data.action_slot_handle, "value" + key1, key2, key3, key4 = mat, blender_material.animation_data.action.name, blender_material.animation_data.action_slot.identifier, "value" elif export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4 = mat, action_name, slot_handle, "value" + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4 = mat, action_name, slot_identifier, "value" else: # case of baking materials (scene export). # There is no animation, so use id as key - # slot_handle is always None for scene export - key1, key2, key3, key4 = mat, mat, slot_handle, "value" + # slot_identifier is always None for scene export + key1, key2, key3, key4 = mat, mat, slot_identifier, "value" if key2 not in data[key1].keys(): data[key1][key2] = {} @@ -174,7 +174,7 @@ def material_caching(data, action_name, slot_handle, frame, export_settings): data[key1][key2][key3][key4][path][frame] = list(val) -def material_nodetree_caching(data, action_name, slot_handle, frame, export_settings): +def material_nodetree_caching(data, action_name, slot_identifier, frame, export_settings): # After caching objects, caching materials, for KHR_animation_pointer for mat in export_settings['KHR_animation_pointer']['materials'].keys(): if len(export_settings['KHR_animation_pointer']['materials'][mat]['paths']) == 0: @@ -192,15 +192,15 @@ def material_nodetree_caching(data, action_name, slot_handle, frame, export_sett if blender_material.node_tree and blender_material.node_tree.animation_data and blender_material.node_tree.animation_data.action \ and blender_material.node_tree.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS"]: - key1, key2, key3, key4 = mat, blender_material.node_tree.animation_data.action.name, blender_material.node_tree.animation_data.action_slot_handle, "value" + key1, key2, key3, key4 = mat, blender_material.node_tree.animation_data.action.name, blender_material.node_tree.animation_data.action_slot.identifier, "value" elif export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4 = mat, action_name, slot_handle, "value" + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4 = mat, action_name, slot_identifier, "value" else: # case of baking materials (scene export). # There is no animation, so use id as key - # slot_handle is always None for scene export - key1, key2, key3, key4 = mat, mat, slot_handle, "value" + # slot_identifier is always None for scene export + key1, key2, key3, key4 = mat, mat, slot_identifier, "value" if key2 not in data[key1].keys(): data[key1][key2] = {} @@ -365,19 +365,19 @@ def material_nodetree_caching(data, action_name, slot_handle, frame, export_sett :export_settings['KHR_animation_pointer']['materials'][mat]['paths'][path]['length']] -def armature_caching(data, obj_uuid, blender_obj, action_name, slot_handle, frame, export_settings): +def armature_caching(data, obj_uuid, blender_obj, action_name, slot_identifier, frame, export_settings): bones = export_settings['vtree'].get_all_bones(obj_uuid) if blender_obj.animation_data and blender_obj.animation_data.action \ and blender_obj.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS", "BROADCAST"]: - key1, key2, key3, key4 = obj_uuid, blender_obj.animation_data.action.name, blender_obj.animation_data.action_slot_handle, "bone" + key1, key2, key3, key4 = obj_uuid, blender_obj.animation_data.action.name, blender_obj.animation_data.action_slot.identifier, "bone" elif blender_obj.animation_data \ and export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4 = obj_uuid, action_name, slot_handle, "bone" + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4 = obj_uuid, action_name, slot_identifier, "bone" else: - # slot_handle is always None for scene export - key1, key2, key3, key4 = obj_uuid, obj_uuid, slot_handle, "bone" + # slot_identifier is always None for scene export + key1, key2, key3, key4 = obj_uuid, obj_uuid, slot_identifier, "bone" if key3 not in data[key1][key2].keys(): data[key1][key2][key3] = {} @@ -410,7 +410,7 @@ def armature_caching(data, obj_uuid, blender_obj, action_name, slot_handle, fram data[key1][key2][key3][key4][blender_bone.name][frame] = matrix -def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, frame, depsgraph, export_settings): +def object_caching(data, obj_uuids, current_instance, action_name, slot_identifier, frame, depsgraph, export_settings): for obj_uuid in obj_uuids: # Do not cache real collection @@ -473,15 +473,15 @@ def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, if blender_obj and blender_obj.animation_data and blender_obj.animation_data.action \ and blender_obj.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS", "BROADCAST"]: - key1, key2, key3, key4, key5 = obj_uuid, blender_obj.animation_data.action.name, blender_obj.animation_data.action_slot_handle, "matrix", None + key1, key2, key3, key4, key5 = obj_uuid, blender_obj.animation_data.action.name, blender_obj.animation_data.action_slot.identifier, "matrix", None elif export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4, key5 = obj_uuid, action_name, slot_handle, "matrix", None + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4, key5 = obj_uuid, action_name, slot_identifier, "matrix", None else: # case of baking object. # There is no animation, so use uuid of object as key - # slot_handle is always None for scene export - key1, key2, key3, key4, key5 = obj_uuid, obj_uuid, slot_handle, "matrix", None + # slot_identifier is always None for scene export + key1, key2, key3, key4, key5 = obj_uuid, obj_uuid, slot_identifier, "matrix", None initialize_data_dict(data, key1, key2, key3, key4, key5) data[key1][key2][key3][key4][key5][frame] = mat @@ -489,13 +489,13 @@ def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, # Store data for all bones, if object is an armature if blender_obj and blender_obj.type == "ARMATURE": - armature_caching(data, obj_uuid, blender_obj, action_name, slot_handle, frame, export_settings) + armature_caching(data, obj_uuid, blender_obj, action_name, slot_identifier, frame, export_settings) elif blender_obj is None: # GN instances # case of baking object, for GN instances # There is no animation, so use uuid of object as key - # slot_handle is always None for baking - key1, key2, key3, key4, key5 = obj_uuid, obj_uuid, slot_handle, "matrix", None + # slot_identifier is always None for baking + key1, key2, key3, key4, key5 = obj_uuid, obj_uuid, slot_identifier, "matrix", None initialize_data_dict(data, key1, key2, key3, key4, key5) data[key1][key2][key3][key4][key5][frame] = mat @@ -510,7 +510,7 @@ def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, and blender_obj.data.shape_keys.animation_data.action_slot is not None \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS", "BROADCAST"]: - key1, key2, key3, key4, key5 = obj_uuid, blender_obj.data.shape_keys.animation_data.action.name, blender_obj.data.shape_keys.animation_data.action_slot_handle, "sk", None + key1, key2, key3, key4, key5 = obj_uuid, blender_obj.data.shape_keys.animation_data.action.name, blender_obj.data.shape_keys.animation_data.action_slot.identifier, "sk", None cache_sk = True elif export_settings['gltf_morph_anim'] and blender_obj and blender_obj.type == "MESH" \ @@ -519,15 +519,15 @@ def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, and blender_obj.data.shape_keys.animation_data is not None \ and export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4, key5 = obj_uuid, action_name, slot_handle, "sk", None + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4, key5 = obj_uuid, action_name, slot_identifier, "sk", None cache_sk = True elif export_settings['gltf_morph_anim'] and blender_obj and blender_obj.type == "MESH" \ and blender_obj.data is not None \ and blender_obj.data.shape_keys is not None: - # slot_handle is always None for scene export - key1, key2, key3, key4, key5 = obj_uuid, obj_uuid, slot_handle, "sk", None + # slot_identifier is always None for scene export + key1, key2, key3, key4, key5 = obj_uuid, obj_uuid, slot_identifier, "sk", None cache_sk = True if cache_sk: @@ -554,16 +554,16 @@ def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, if blender_obj.animation_data and blender_obj.animation_data.action \ and blender_obj.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS", "BROADCAST"]: - key1, key2, key3, key4, key5 = dr_obj, obj_uuid + "_" + blender_obj.animation_data.action.name, blender_obj.animation_data.action_slot_handle, "sk", None + key1, key2, key3, key4, key5 = dr_obj, obj_uuid + "_" + blender_obj.animation_data.action.name, blender_obj.animation_data.action_slot.identifier, "sk", None cache_sk = True elif blender_obj.animation_data \ and export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4, key5 = dr_obj, obj_uuid + "_" + action_name, slot_handle, "sk", None + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4, key5 = dr_obj, obj_uuid + "_" + action_name, slot_identifier, "sk", None cache_sk = True else: - # slot_handle is always None for scene export - key1, key2, key3, key4, key5 = dr_obj, obj_uuid + "_" + obj_uuid, slot_handle, "sk", None + # slot_identifier is always None for scene export + key1, key2, key3, key4, key5 = dr_obj, obj_uuid + "_" + obj_uuid, slot_identifier, "sk", None cache_sk = True if cache_sk: @@ -579,7 +579,7 @@ def object_caching(data, obj_uuids, current_instance, action_name, slot_handle, cache_sk = False -def light_nodetree_caching(data, action_name, slot_handle, frame, export_settings): +def light_nodetree_caching(data, action_name, slot_identifier, frame, export_settings): # After caching materials, caching lights, for KHR_animation_pointer for light in export_settings['KHR_animation_pointer']['lights'].keys(): if len(export_settings['KHR_animation_pointer']['lights'][light]['paths']) == 0: @@ -592,15 +592,15 @@ def light_nodetree_caching(data, action_name, slot_handle, frame, export_setting if blender_light.node_tree and blender_light.node_tree.animation_data and blender_light.node_tree.animation_data.action \ and blender_light.node_tree.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS"]: - key1, key2, key3, key4 = light, blender_light.node_tree.animation_data.action.name, blender_light.node_tree.animation_data.action_slot_handle, "value" + key1, key2, key3, key4 = light, blender_light.node_tree.animation_data.action.name, blender_light.node_tree.animation_data.action_slot.identifier, "value" elif export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4 = light, action_name, slot_handle, "value" + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4 = light, action_name, slot_identifier, "value" else: # case of baking materials (scene export). # There is no animation, so use id as key - # slot_handle is always None for scene export - key1, key2, key3, key4 = light, light, slot_handle, "value" + # slot_identifier is always None for scene export + key1, key2, key3, key4 = light, light, slot_identifier, "value" if key2 not in data[key1].keys(): data[key1][key2] = {} @@ -622,7 +622,7 @@ def light_nodetree_caching(data, action_name, slot_handle, frame, export_setting data[key1][key2][key3][key4][path][frame] = list(val) -def light_caching(data, action_name, slot_handle, frame, export_settings): +def light_caching(data, action_name, slot_identifier, frame, export_settings): # After caching materials, caching lights, for KHR_animation_pointer for light in export_settings['KHR_animation_pointer']['lights'].keys(): if len(export_settings['KHR_animation_pointer']['lights'][light]['paths']) == 0: @@ -635,14 +635,14 @@ def light_caching(data, action_name, slot_handle, frame, export_settings): if blender_light and blender_light.animation_data and blender_light.animation_data.action \ and blender_light.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS"]: - key1, key2, key3, key4 = light, blender_light.animation_data.action.name, blender_light.animation_data.action_slot_handle, "value" + key1, key2, key3, key4 = light, blender_light.animation_data.action.name, blender_light.animation_data.action_slot.identifier, "value" elif export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - key1, key2, key3, key4 = light, action_name, slot_handle, "value" + key1, key2, key3, key4 = light, action_name, slot_identifier, "value" else: # case of baking materials (scene export). # There is no animation, so use id as key - # slot_handle is always None for scene export - key1, key2, key3, key4 = light, light, slot_handle, "value" + # slot_identifier is always None for scene export + key1, key2, key3, key4 = light, light, slot_identifier, "value" if key2 not in data[key1].keys(): data[key1][key2] = {} @@ -677,7 +677,7 @@ def light_caching(data, action_name, slot_handle, frame, export_settings): data[key1][key2][key3][key4][path][frame] = list(val) -def camera_caching(data, action_name, slot_handle, frame, export_settings): +def camera_caching(data, action_name, slot_identifier, frame, export_settings): # After caching lights, caching cameras, for KHR_animation_pointer for cam in export_settings['KHR_animation_pointer']['cameras'].keys(): if len(export_settings['KHR_animation_pointer']['cameras'][cam]['paths']) == 0: @@ -690,15 +690,15 @@ def camera_caching(data, action_name, slot_handle, frame, export_settings): if blender_camera and blender_camera.animation_data and blender_camera.animation_data.action \ and blender_camera.animation_data.action_slot \ and export_settings['gltf_animation_mode'] in ["ACTIVE_ACTIONS", "ACTIONS"]: - key1, key2, key3, key4 = cam, blender_camera.animation_data.action.name, blender_camera.animation_data.action_slot_handle, "value" + key1, key2, key3, key4 = cam, blender_camera.animation_data.action.name, blender_camera.animation_data.action_slot.identifier, "value" elif export_settings['gltf_animation_mode'] in ["NLA_TRACKS"]: - # We can keep the input slot_handle here, as we are caching only one object / NLA track - key1, key2, key3, key4 = cam, action_name, slot_handle, "value" + # We can keep the input slot_identifier here, as we are caching only one object / NLA track + key1, key2, key3, key4 = cam, action_name, slot_identifier, "value" else: # case of baking camera data (scene export). # There is no animation, so use id as key - # No really matter for slot_handle, as we bake all when exporting with scene export - key1, key2, key3, key4 = cam, cam, slot_handle, "value" + # No really matter for slot_identifier, as we bake all when exporting with scene export + key1, key2, key3, key4 = cam, cam, slot_identifier, "value" if key2 not in data[key1].keys(): data[key1][key2] = {} diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/action_sampled.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/action_sampled.py index 8971a6afc941..dfc698ddb5b1 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/action_sampled.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/action_sampled.py @@ -12,7 +12,7 @@ def gather_action_sk_sampled(object_uuid: str, blender_action: typing.Optional[bpy.types.Action], - slot_handle: int, + slot_identifier: str, cache_key: str, export_settings): @@ -20,7 +20,7 @@ def gather_action_sk_sampled(object_uuid: str, if len(bpy.data.actions) == 0: return None - channels = __gather_channels(object_uuid, blender_action.name if blender_action else cache_key, slot_handle if blender_action else None, export_settings) + channels = __gather_channels(object_uuid, blender_action.name if blender_action else cache_key, slot_identifier if blender_action else None, export_settings) if not channels: return None @@ -32,12 +32,12 @@ def gather_action_sk_sampled(object_uuid: str, channels, blender_object, blender_action, - slot_handle, + slot_identifier, cache_key) return channels -def __gather_channels(object_uuid: str, blender_action_name: str, slot_handle: int, +def __gather_channels(object_uuid: str, blender_action_name: str, slot_identifier: str, export_settings) -> typing.List[gltf2_io.AnimationChannel]: - return gather_sk_sampled_channels(object_uuid, blender_action_name, slot_handle, export_settings) + return gather_sk_sampled_channels(object_uuid, blender_action_name, slot_identifier, export_settings) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/channels.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/channels.py index e2d9c8aa39ec..183b16231ed2 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/channels.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/channels.py @@ -12,7 +12,7 @@ def gather_sk_sampled_channels( object_uuid: str, blender_action_name: str, - slot_handle: int, + slot_identifier: str, export_settings): # Only 1 channel when exporting shape keys @@ -22,7 +22,7 @@ def gather_sk_sampled_channels( channel = gather_sampled_sk_channel( object_uuid, blender_action_name, - slot_handle, + slot_identifier, export_settings ) @@ -39,13 +39,13 @@ def gather_sk_sampled_channels( def gather_sampled_sk_channel( obj_uuid: str, action_name: str, - slot_handle: int, + slot_identifier: str, export_settings ): __target = __gather_target(obj_uuid, export_settings) if __target.path is not None: - sampler = __gather_sampler(obj_uuid, action_name, slot_handle, export_settings) + sampler = __gather_sampler(obj_uuid, action_name, slot_identifier, export_settings) if sampler is None: # After check, no need to animate this node for this channel @@ -70,10 +70,10 @@ def __gather_target(obj_uuid: str, export_settings): obj_uuid, export_settings) -def __gather_sampler(obj_uuid: str, action_name: str, slot_handle: int, export_settings): +def __gather_sampler(obj_uuid: str, action_name: str, slot_identifier: str, export_settings): return gather_sk_sampled_animation_sampler( obj_uuid, action_name, - slot_handle, + slot_identifier, export_settings ) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/keyframes.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/keyframes.py index ad1cb86ada7c..57e991855c3d 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/keyframes.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/keyframes.py @@ -18,7 +18,7 @@ @cached def gather_sk_sampled_keyframes(obj_uuid, action_name, - slot_handle, + slot_identifier, #TODOSLOT export_settings): start_frame = export_settings['ranges'][obj_uuid][action_name]['start'] @@ -37,21 +37,21 @@ def gather_sk_sampled_keyframes(obj_uuid, if channels is None: - if slot_handle is not None: + if slot_identifier is not None: # If we are here because of a shapekey animation, we need to get the fcurves if action_name in bpy.data.actions: channel_group, _, _ = get_channel_groups( - obj_uuid, bpy.data.actions[action_name], slot_handle, export_settings, no_sample_option=True) + obj_uuid, bpy.data.actions[action_name], bpy.data.actions[action_name].slots[slot_identifier], export_settings, no_sample_option=True) elif blender_obj.data.shape_keys.animation_data and blender_obj.data.shape_keys.animation_data.action: channel_group, _, _ = get_channel_groups( - obj_uuid, blender_obj.data.shape_keys.animation_data.action, slot_handle, export_settings, no_sample_option=True) + obj_uuid, blender_obj.data.shape_keys.animation_data.action, blender_obj.data.shape_keys.animation_data.action.slots[slot_identifier], export_settings, no_sample_option=True) else: channel_group = {} channels = [None] * len(get_sk_exported(blender_obj.data.shape_keys.key_blocks)) else: - # No slot handle, we are in a bake situation + # No slot identifier, we are in a bake situation # So consider no channels are animated channel_group = {} channels = [None] * len(get_sk_exported(blender_obj.data.shape_keys.key_blocks)) @@ -87,7 +87,7 @@ def gather_sk_sampled_keyframes(obj_uuid, action_name, frame, step, - slot_handle, + slot_identifier, export_settings ) @@ -106,7 +106,7 @@ def gather_sk_sampled_keyframes(obj_uuid, action_name, frame, step, - slot_handle, + slot_identifier, export_settings ) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/sampler.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/sampler.py index b685bb417926..a3e9c5e1e244 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/sampler.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/sampled/shapekeys/sampler.py @@ -14,14 +14,14 @@ def gather_sk_sampled_animation_sampler( obj_uuid, action_name, - slot_handle, + slot_identifier, export_settings ): keyframes = __gather_keyframes( obj_uuid, action_name, - slot_handle, + slot_identifier, export_settings) if keyframes is None: @@ -48,13 +48,13 @@ def gather_sk_sampled_animation_sampler( def __gather_keyframes( obj_uuid, action_name, - slot_handle, + slot_identifier, export_settings): keyframes = gather_sk_sampled_keyframes( obj_uuid, action_name, - slot_handle, + slot_identifier, export_settings ) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/scene_animation.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/scene_animation.py index df6eb5ec0992..f1b55c9300bf 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/scene_animation.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/scene_animation.py @@ -72,7 +72,7 @@ def gather_scene_animations(export_settings): if blender_object and blender_object.type != "ARMATURE": # We have to check if this is a skinned mesh, because we don't have to force animation baking on this case if export_settings['vtree'].nodes[obj_uuid].skin is None: - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels, _ = gather_object_sampled_channels(obj_uuid, obj_uuid, None, export_settings) if channels is not None: total_channels.extend(channels) @@ -90,7 +90,7 @@ def gather_scene_animations(export_settings): ignore_sk = True if ignore_sk is False: - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels = gather_sk_sampled_channels(obj_uuid, obj_uuid, None, export_settings) if channels is not None: total_channels.extend(channels) @@ -98,12 +98,12 @@ def gather_scene_animations(export_settings): # This is GN instances # Currently, not checking if this instance is skinned.... #TODO # No action / slot for GN instances - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels, _ = gather_object_sampled_channels(obj_uuid, obj_uuid, None, export_settings) if channels is not None: total_channels.extend(channels) else: - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels, _ = gather_armature_sampled_channels(obj_uuid, obj_uuid, None, export_settings) if channels is not None: total_channels.extend(channels) @@ -137,7 +137,7 @@ def gather_scene_animations(export_settings): if export_settings['gltf_anim_slide_to_zero'] is True and start_frame > 0: add_slide_data(start_frame, mat, mat, export_settings, add_drivers=False) - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels = gather_data_sampled_channels('materials', mat, mat, None, None, export_settings) if channels is not None: total_channels.extend(channels) @@ -169,7 +169,7 @@ def gather_scene_animations(export_settings): if export_settings['gltf_anim_slide_to_zero'] is True and start_frame > 0: add_slide_data(start_frame, light, light, export_settings, add_drivers=False) - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels = gather_data_sampled_channels('lights', light, light, None, None, export_settings) if channels is not None: total_channels.extend(channels) @@ -201,7 +201,7 @@ def gather_scene_animations(export_settings): if export_settings['gltf_anim_slide_to_zero'] is True and start_frame > 0: add_slide_data(start_frame, cam, cam, export_settings, add_drivers=False) - # Setting slot_handle to None, always + # Setting slot_identifier to None, always channels = gather_data_sampled_channels('cameras', cam, cam, None, None, export_settings) if channels is not None: total_channels.extend(channels) diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/tracks.py b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/tracks.py index 736850d1c74e..676344fe9f4d 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/animation/tracks.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/animation/tracks.py @@ -366,15 +366,18 @@ def __get_nla_tracks_obj(obj_uuid: str, export_settings): # Start a new stack current_exported_tracks.append(stored_track) - # End of loop. Keep the last one(s) - exported_tracks.append(current_exported_tracks) - # Store data for the last one - track_data = TrackData( - current_exported_tracks, - obj.animation_data.nla_tracks[exported_tracks[-1][0].idx].name, - "OBJECT" - ) - tracks_data.add(track_data) + # End of loop. Keep the last one(s), if any + if len(current_exported_tracks) != 0: + exported_tracks.append(current_exported_tracks) + + if len(exported_tracks) != 0: + # Store data for the last one + track_data = TrackData( + current_exported_tracks, + obj.animation_data.nla_tracks[exported_tracks[-1][0].idx].name, + "OBJECT" + ) + tracks_data.add(track_data) return tracks_data diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/cache.py b/scripts/addons_core/io_scene_gltf2/blender/exp/cache.py index e104c7e21caf..690d8e6480c5 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/cache.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/cache.py @@ -111,7 +111,7 @@ def wrapper_objectcache(*args, **kwargs): if cache_key_args[1] not in func.__cache.keys(): result = func(*args) func.__cache = result - # Here are the key used: result[obj_uuid][action_name][slot_handle][path][bone][frame] + # Here are the key used: result[obj_uuid][action_name][slot_identifier][path][bone][frame] return result[cache_key_args[1]][cache_key_args[3]][cache_key_args[6]][cache_key_args[0]][cache_key_args[2]][cache_key_args[4]] # object is in cache, but not this action # We need to not erase other actions of this object @@ -120,7 +120,7 @@ def wrapper_objectcache(*args, **kwargs): # The result can contains multiples animations, in case this is an armature with drivers # Need to create all newly retrieved animations func.__cache.update(result) - # Here are the key used: result[obj_uuid][action_name][slot_handle][path][bone][frame] + # Here are the key used: result[obj_uuid][action_name][slot_identifier][path][bone][frame] return result[cache_key_args[1]][cache_key_args[3]][cache_key_args[6]][cache_key_args[0]][cache_key_args[2]][cache_key_args[4]] # object and action are in cache, but not this slot elif cache_key_args[6] not in func.__cache[cache_key_args[1]][cache_key_args[3]].keys(): @@ -130,18 +130,18 @@ def wrapper_objectcache(*args, **kwargs): # So if there are some data for a slot, use them if len(func.__cache[cache_key_args[1]][cache_key_args[3]]) > 0: first_key = list(func.__cache[cache_key_args[1]][cache_key_args[3]].keys())[0] - # Here are the key used: result[obj_uuid][action_name][slot_handle][path][bone][frame] + # Here are the key used: result[obj_uuid][action_name][slot_identifier][path][bone][frame] return func.__cache[cache_key_args[1]][cache_key_args[3]][first_key][cache_key_args[0]][cache_key_args[2]][cache_key_args[4]] else: result = func(*args, only_gather_provided=True) # The result can contains multiples animations, in case this is an armature with drivers # Need to create all newly retrieved animations func.__cache[cache_key_args[1]].update(result) - # Here are the key used: result[obj_uuid][action_name][slot_handle][path][bone][frame] + # Here are the key used: result[obj_uuid][action_name][slot_identifier][path][bone][frame] return result[cache_key_args[1]][cache_key_args[3]][cache_key_args[6]][cache_key_args[0]][cache_key_args[2]][cache_key_args[4]] # all is already cached else: - # Here are the key used: result[obj_uuid][action_name][slot_handle][path][bone][frame] + # Here are the key used: result[obj_uuid][action_name][slot_identifier][path][bone][frame] return func.__cache[cache_key_args[1]][cache_key_args[3] ][cache_key_args[6]][cache_key_args[0]][cache_key_args[2]][cache_key_args[4]] return wrapper_objectcache diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/export.py b/scripts/addons_core/io_scene_gltf2/blender/exp/export.py index c7bb28322b21..7992298db319 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/export.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/export.py @@ -53,6 +53,14 @@ def save(context, export_settings): def __export(export_settings): exporter = GlTF2Exporter(export_settings) __gather_gltf(exporter, export_settings) + + # If the directory does not exist, create it + if not os.path.isdir(export_settings['gltf_filedirectory']): + os.makedirs(export_settings['gltf_filedirectory']) + if export_settings['gltf_format'] == "GLTF_SEPARATE" \ + and not os.path.isdir(export_settings['gltf_texturedirectory']): + os.makedirs(export_settings['gltf_texturedirectory']) + buffer = __create_buffer(exporter, export_settings) exporter.finalize_images() diff --git a/scripts/addons_core/io_scene_gltf2/blender/exp/gather.py b/scripts/addons_core/io_scene_gltf2/blender/exp/gather.py index 25eb2c5d506e..47a916e92ce9 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/exp/gather.py +++ b/scripts/addons_core/io_scene_gltf2/blender/exp/gather.py @@ -129,5 +129,9 @@ def __gather_scene(blender_scene, export_settings): def __gather_extras(blender_object, export_settings): if export_settings['gltf_extras']: + # If case of collection export, use custom properties of the collection instead of the scene + # So Collection custom properties are exported as glTF Scene extras + if export_settings['gltf_collection']: + return generate_extras(bpy.data.collections[export_settings['gltf_collection']]) return generate_extras(blender_object) return None diff --git a/scripts/addons_core/io_scene_gltf2/blender/imp/animation_utils.py b/scripts/addons_core/io_scene_gltf2/blender/imp/animation_utils.py index db84b2967dc7..acec2c852c8b 100644 --- a/scripts/addons_core/io_scene_gltf2/blender/imp/animation_utils.py +++ b/scripts/addons_core/io_scene_gltf2/blender/imp/animation_utils.py @@ -4,6 +4,7 @@ import bpy from .vnode import VNode +from ..com.data_path import get_channelbag_for_slot # Here data can be object, object.data, material, material.node_tree, camera, light @@ -84,17 +85,6 @@ def make_fcurve(action, slot, co, data_path, index=0, group_name='', interpolati return fcurve - -def get_channelbag_for_slot(action, slot): - # This is on purpose limited to the first layer and strip. To support more - # than 1 layer, a rewrite of this operator is needed which ideally would - # happen in C++. - for layer in action.layers: - for strip in layer.strips: - channelbag = strip.channels(slot.handle) - return channelbag - return None - # This is use for TRS & weights animations # For pointers, see the same function in animation_pointer.py diff --git a/scripts/addons_core/rigify/ui.py b/scripts/addons_core/rigify/ui.py index 1f2086959df3..fb36b4debdd5 100644 --- a/scripts/addons_core/rigify/ui.py +++ b/scripts/addons_core/rigify/ui.py @@ -966,14 +966,16 @@ class VIEW3D_PT_rigify_animation_tools(bpy.types.Panel): @classmethod def poll(cls, context): obj = context.active_object - if obj and obj.type == 'ARMATURE': - rig_id = obj.data.get("rig_id") - if rig_id is not None: - has_arm = hasattr(bpy.types, 'POSE_OT_rigify_arm_ik2fk_' + rig_id) - has_leg = hasattr(bpy.types, 'POSE_OT_rigify_leg_ik2fk_' + rig_id) - return has_arm or has_leg + if not obj or obj.type != 'ARMATURE': + return False - return False + rig_id = obj.data.get("rig_id", "") + if not rig_id: + return False + + has_arm = hasattr(bpy.types, f'POSE_OT_rigify_arm_ik2fk_{rig_id}') + has_leg = hasattr(bpy.types, f'POSE_OT_rigify_leg_ik2fk_{rig_id}') + return has_arm or has_leg def draw(self, context): obj = context.active_object diff --git a/scripts/modules/bpy_extras/anim_utils.py b/scripts/modules/bpy_extras/anim_utils.py index 568805866bab..20e537feaee7 100644 --- a/scripts/modules/bpy_extras/anim_utils.py +++ b/scripts/modules/bpy_extras/anim_utils.py @@ -81,18 +81,15 @@ def _get_channelbag_for_slot(action: Action, slot: ActionSlot): # happen in C++. for layer in action.layers: for strip in layer.strips: - channelbag = strip.channels(slot.handle) + channelbag = strip.channelbag(slot) return channelbag def _ensure_channelbag_exists(action: Action, slot: ActionSlot): - channelbag = _get_channelbag_for_slot(action, slot) - if channelbag: - return channelbag - for layer in action.layers: for strip in layer.strips: - return strip.channelbags.new(slot) + channelbag = strip.channelbag(slot, ensure=True) + return channelbag def bake_action( diff --git a/scripts/presets/keyconfig/keymap_data/blender_default.py b/scripts/presets/keyconfig/keymap_data/blender_default.py index 9a321685bcf3..dfc701696ebb 100644 --- a/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -2990,6 +2990,8 @@ def km_sequencercommon(params): {"properties": [("data_path", "scene.sequence_editor.show_overlay_frame")]}), ("wm.context_toggle_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, {"properties": [("data_path", "space_data.view_type"), ("value_1", 'SEQUENCER'), ("value_2", 'PREVIEW')]}), + ("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True}, + {"properties": [("data_path", "tool_settings.use_snap_sequencer")]}), ("sequencer.refresh_all", {"type": 'E', "value": 'PRESS', "ctrl": True}, None), ]) @@ -3120,6 +3122,8 @@ def km_sequencer(params): {"properties": [("view2d_edge_pan", True), ("use_restore_handle_selection", True)]}), ("transform.seq_slide", {"type": params.select_mouse, "value": 'CLICK_DRAG', "alt": True}, {"properties": [("view2d_edge_pan", True), ("use_restore_handle_selection", True)]}), + ("transform.seq_slide", {"type": params.select_mouse, "value": 'CLICK_DRAG', "ctrl": True}, + {"properties": [("view2d_edge_pan", True), ("use_restore_handle_selection", True)]}), ("transform.transform", {"type": 'E', "value": 'PRESS'}, {"properties": [("mode", 'TIME_EXTEND')]}), ("marker.add", {"type": 'M', "value": 'PRESS'}, None), @@ -3127,8 +3131,6 @@ def km_sequencer(params): {"properties": [("side", 'LEFT')]}), ("sequencer.select_side_of_frame", {"type": 'RIGHT_BRACKET', "value": 'PRESS'}, {"properties": [("side", 'RIGHT')]}), - ("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True}, - {"properties": [("data_path", "tool_settings.use_snap_sequencer")]}), ("wm.context_toggle", {"type": 'Z', "value": 'PRESS', "alt": True, "shift": True}, {"properties": [("data_path", "space_data.show_overlays")]}), *_template_items_context_menu("SEQUENCER_MT_context_menu", params.context_menu_event), diff --git a/scripts/startup/bl_ui/space_view3d.py b/scripts/startup/bl_ui/space_view3d.py index 844a10d1b700..995ae3755d24 100644 --- a/scripts/startup/bl_ui/space_view3d.py +++ b/scripts/startup/bl_ui/space_view3d.py @@ -983,6 +983,9 @@ def draw(self, context): canvas_source = tool_settings.paint_mode.canvas_source icon = 'GROUP_VCOL' if canvas_source == 'COLOR_ATTRIBUTE' else canvas_source row.popover(panel="VIEW3D_PT_slots_paint_canvas", icon=icon) + # TODO: Update this boolean condition so that the Canvas button is only active when + # the appropriate color types are selected in Solid mode, I.E. 'TEXTURE' + row.active = is_paint_tool else: row.popover(panel="VIEW3D_PT_slots_color_attributes", icon='GROUP_VCOL') diff --git a/scripts/startup/bl_ui/space_view3d_toolbar.py b/scripts/startup/bl_ui/space_view3d_toolbar.py index 07dd226dc887..dc548b85f4c7 100644 --- a/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -607,7 +607,20 @@ def poll(cls, context): tool = ToolSelectPanelHelper.tool_active_from_context(context) if tool is None: return False - return tool.use_paint_canvas + + is_paint_tool = False + if tool.use_brushes: + brush = context.tool_settings.sculpt.brush + if brush: + is_paint_tool = brush.sculpt_tool in {'PAINT', 'SMEAR'} + else: + # TODO: The property use_paint_canvas doesn't work anymore since its associated + # C++ function 'rna_WorkSpaceTool_use_paint_canvas_get' passes in a nullptr for + # the bContext. This property should be fixed in the future, but will require + # some extensive refactoring. For now, use the workaround above. + is_paint_tool = tool.use_paint_canvas + + return is_paint_tool def get_mode_settings(self, context): return context.tool_settings.paint_mode diff --git a/scripts/templates_toml/blender_manifest.toml b/scripts/templates_toml/blender_manifest.toml index 843ff2836a2e..c425027c1cd7 100644 --- a/scripts/templates_toml/blender_manifest.toml +++ b/scripts/templates_toml/blender_manifest.toml @@ -72,4 +72,4 @@ license = [ # "__pycache__/", # "/.git/", # "/*.zip", -# ] \ No newline at end of file +# ] diff --git a/source/blender/animrig/ANIM_action.hh b/source/blender/animrig/ANIM_action.hh index d511a6011dfb..fe0676405f46 100644 --- a/source/blender/animrig/ANIM_action.hh +++ b/source/blender/animrig/ANIM_action.hh @@ -220,6 +220,35 @@ class Action : public ::bAction { */ void slot_display_name_set(Main &bmain, Slot &slot, StringRefNull new_display_name); + /** + * Set the slot display name (the part of the identifier after the two-letter + * ID prefix), and ensure the resulting identifier is unique. + * + * This has to be done on the Action level to ensure each slot has a unique + * identifier within the Action. + * + * \note This does NOT propagate the resulting slot identifier to the slot's + * users. + * + * \see #Action::slot_display_name_set + * \see #Action::slot_identifier_propagate + */ + void slot_display_name_define(Slot &slot, StringRefNull new_display_name); + + /** + * Set the slot's target ID type, updating the identifier prefix to match and + * ensuring that the resulting identifier is unique. + * + * This has to be done on the Action level to ensure each slot has a unique + * identifier within the Action. + * + * \note This does NOT propagate the identifier to the slot's users. That is + * the caller's responsibility. + * + * \see #Action::slot_identifier_propagate + */ + void slot_idtype_define(Slot &slot, ID_Type idtype); + /** * Set the slot identifier, ensure it is unique, and propagate the new identifier to * all data-blocks that use it. diff --git a/source/blender/animrig/ANIM_action_legacy.hh b/source/blender/animrig/ANIM_action_legacy.hh index 1abfdb900a83..c37df2aaeb7e 100644 --- a/source/blender/animrig/ANIM_action_legacy.hh +++ b/source/blender/animrig/ANIM_action_legacy.hh @@ -18,6 +18,9 @@ namespace blender::animrig::legacy { +constexpr const char *DEFAULT_LEGACY_SLOT_NAME = "Legacy Slot"; +constexpr const char *DEFAULT_LEGACY_LAYER_NAME = "Legacy Layer"; + /** * Return the Channelbag for compatibility with the legacy Python API. * diff --git a/source/blender/animrig/intern/action.cc b/source/blender/animrig/intern/action.cc index 0e097f294684..1d47f6919223 100644 --- a/source/blender/animrig/intern/action.cc +++ b/source/blender/animrig/intern/action.cc @@ -398,6 +398,12 @@ static void slot_identifier_ensure_unique(Action &action, Slot &slot) } void Action::slot_display_name_set(Main &bmain, Slot &slot, StringRefNull new_display_name) +{ + this->slot_display_name_define(slot, new_display_name); + this->slot_identifier_propagate(bmain, slot); +} + +void Action::slot_display_name_define(Slot &slot, StringRefNull new_display_name) { BLI_assert_msg(StringRef(new_display_name).size() >= 1, "Action Slot display names must not be empty"); @@ -407,7 +413,13 @@ void Action::slot_display_name_set(Main &bmain, Slot &slot, StringRefNull new_di BLI_strncpy_utf8(slot.identifier + 2, new_display_name.c_str(), ARRAY_SIZE(slot.identifier) - 2); slot_identifier_ensure_unique(*this, slot); - this->slot_identifier_propagate(bmain, slot); +} + +void Action::slot_idtype_define(Slot &slot, ID_Type idtype) +{ + slot.idtype = idtype; + slot.identifier_ensure_prefix(); + slot_identifier_ensure_unique(*this, slot); } void Action::slot_identifier_set(Main &bmain, Slot &slot, const StringRefNull new_identifier) diff --git a/source/blender/animrig/intern/action_legacy.cc b/source/blender/animrig/intern/action_legacy.cc index 68ad136db375..e4f2ab944ae7 100644 --- a/source/blender/animrig/intern/action_legacy.cc +++ b/source/blender/animrig/intern/action_legacy.cc @@ -9,6 +9,8 @@ #include "BKE_fcurve.hh" +#include "BLT_translation.hh" + namespace blender::animrig::legacy { static Strip *first_keyframe_strip(Action &action) @@ -46,13 +48,23 @@ Channelbag &channelbag_ensure(Action &action) Slot *slot; if (action.slots().is_empty()) { slot = &action.slot_add(); + action.slot_display_name_define(*slot, DATA_(DEFAULT_LEGACY_SLOT_NAME)); } else { slot = action.slot(0); } - /* Ensure a Layer + keyframe Strip. */ - action.layer_keystrip_ensure(); + /* Ensure a Layer + keyframe Strip. + * + * Normally we would use `Action::layer_keystrip_ensure()` for this, but that + * doesn't let us specify the name of the layer if newly created. */ + if (action.layers().is_empty()) { + action.layer_add(DATA_(DEFAULT_LEGACY_LAYER_NAME)); + } + if (action.layer(0)->strips().is_empty()) { + action.layer(0)->strip_add(action, Strip::Type::Keyframe); + } + Strip &keystrip = *action.layer(0)->strip(0); /* Ensure a Channelbag. */ diff --git a/source/blender/animrig/intern/versioning.cc b/source/blender/animrig/intern/versioning.cc index c40ee0f507f9..b4ed14fd5f13 100644 --- a/source/blender/animrig/intern/versioning.cc +++ b/source/blender/animrig/intern/versioning.cc @@ -12,6 +12,7 @@ #include "ANIM_action.hh" #include "ANIM_action_iterators.hh" +#include "ANIM_action_legacy.hh" #include "ANIM_versioning.hh" #include "DNA_action_defaults.h" @@ -30,9 +31,6 @@ namespace blender::animrig::versioning { -constexpr const char *DEFAULT_VERSIONED_SLOT_NAME = "Legacy Slot"; -constexpr const char *DEFAULT_VERSIONED_LAYER_NAME = "Legacy Layer"; - bool action_is_layered(const bAction &dna_action) { /* NOTE: due to how forward-compatibility is handled when writing Actions to @@ -105,10 +103,10 @@ void convert_legacy_animato_action(bAction &dna_action) slot.idtype = idtype; const std::string slot_identifier{slot.identifier_prefix_for_idtype() + - DATA_(DEFAULT_VERSIONED_SLOT_NAME)}; + DATA_(legacy::DEFAULT_LEGACY_SLOT_NAME)}; action.slot_identifier_define(slot, slot_identifier); - Layer &layer = action.layer_add(DATA_(DEFAULT_VERSIONED_LAYER_NAME)); + Layer &layer = action.layer_add(DATA_(legacy::DEFAULT_LEGACY_LAYER_NAME)); blender::animrig::Strip &strip = layer.strip_add(action, blender::animrig::Strip::Type::Keyframe); Channelbag &bag = strip.data(action).channelbag_for_slot_ensure(slot); @@ -223,7 +221,7 @@ void convert_legacy_action_assignments(Main &bmain, ReportList *reports) static_assert(Slot::identifier_length_max > 2); /* Because of the -2 below. */ BLI_strncpy_utf8(last_used_slot_identifier + 2, - DATA_(DEFAULT_VERSIONED_SLOT_NAME), + DATA_(legacy::DEFAULT_LEGACY_SLOT_NAME), Slot::identifier_length_max - 2); Slot *slot_to_assign = generic_slot_for_autoassign( diff --git a/source/blender/asset_system/AS_asset_representation.hh b/source/blender/asset_system/AS_asset_representation.hh index c7b679fafd11..867a9f65fece 100644 --- a/source/blender/asset_system/AS_asset_representation.hh +++ b/source/blender/asset_system/AS_asset_representation.hh @@ -26,6 +26,7 @@ struct AssetMetaData; struct ID; +struct PreviewImage; namespace blender::asset_system { @@ -44,6 +45,7 @@ class AssetRepresentation : NonCopyable, NonMovable { std::string name; int id_type = 0; std::unique_ptr metadata_ = nullptr; + PreviewImage *preview_ = nullptr; }; std::variant asset_; @@ -63,7 +65,7 @@ class AssetRepresentation : NonCopyable, NonMovable { AssetRepresentation(StringRef relative_asset_path, ID &id, const AssetLibrary &owner_asset_library); - ~AssetRepresentation() = default; + ~AssetRepresentation(); /** * Create a weak reference for this asset that can be written to files, but can break under a @@ -72,6 +74,25 @@ class AssetRepresentation : NonCopyable, NonMovable { */ AssetWeakReference make_weak_reference() const; + /** + * Makes sure the asset ready to load a preview, if necessary. + * + * For local IDs it calls #BKE_previewimg_id_ensure(). For others, this sets loading information + * to the preview but doesn't actually load it. To load it, attach its + * #PreviewImageRuntime::icon_id to a UI button (UI loads it asynchronously then) or call + * #BKE_previewimg_ensure() (not asynchronous). + * + * \returns the prepared preview, same as calling #get_preview(). + */ + void ensure_previewable(); + /** + * Get the preview of this asset. + * + * This will only return a preview for local ID assets or after #ensure_previewable() was + * called. + */ + PreviewImage *get_preview() const; + StringRefNull get_name() const; ID_Type get_id_type() const; AssetMetaData &get_metadata() const; diff --git a/source/blender/asset_system/CMakeLists.txt b/source/blender/asset_system/CMakeLists.txt index 1f7ea7b729cc..cf3d5839d508 100644 --- a/source/blender/asset_system/CMakeLists.txt +++ b/source/blender/asset_system/CMakeLists.txt @@ -48,6 +48,7 @@ set(LIB PRIVATE bf::blenkernel PRIVATE bf::blenlib PRIVATE bf::dna + PRIVATE bf::imbuf PRIVATE bf::intern::clog PRIVATE bf::intern::guardedalloc ) diff --git a/source/blender/asset_system/intern/asset_representation.cc b/source/blender/asset_system/intern/asset_representation.cc index 245075da83c1..bdfdcd5ff4a9 100644 --- a/source/blender/asset_system/intern/asset_representation.cc +++ b/source/blender/asset_system/intern/asset_representation.cc @@ -11,10 +11,14 @@ #include "BLI_path_utils.hh" #include "BKE_blendfile.hh" +#include "BKE_icons.h" +#include "BKE_preview_image.hh" #include "DNA_ID.h" #include "DNA_asset_types.h" +#include "IMB_thumbs.hh" + #include "AS_asset_library.hh" #include "AS_asset_representation.hh" @@ -27,7 +31,7 @@ AssetRepresentation::AssetRepresentation(StringRef relative_asset_path, const AssetLibrary &owner_asset_library) : owner_asset_library_(owner_asset_library), relative_identifier_(relative_asset_path), - asset_(AssetRepresentation::ExternalAsset{name, id_type, std::move(metadata)}) + asset_(AssetRepresentation::ExternalAsset{name, id_type, std::move(metadata), nullptr}) { } @@ -43,11 +47,46 @@ AssetRepresentation::AssetRepresentation(StringRef relative_asset_path, } } +AssetRepresentation::~AssetRepresentation() +{ + if (const ExternalAsset *extern_asset = std::get_if(&asset_); + extern_asset && extern_asset->preview_) + { + BKE_previewimg_cached_release(this->full_path().c_str()); + } +} + AssetWeakReference AssetRepresentation::make_weak_reference() const { return AssetWeakReference::make_reference(owner_asset_library_, relative_identifier_); } +void AssetRepresentation::ensure_previewable() +{ + if (ID *id = this->local_id()) { + BKE_previewimg_id_ensure(id); + } + + ExternalAsset &extern_asset = std::get(asset_); + + /* Use the full path as preview name, it's the only unique identifier we have. */ + const std::string full_path = this->full_path(); + /* Doesn't do the actual reading, just allocates and attaches the derrived load info. */ + extern_asset.preview_ = BKE_previewimg_cached_thumbnail_read( + full_path.c_str(), full_path.c_str(), THB_SOURCE_BLEND, false); + + BKE_icon_preview_ensure(nullptr, extern_asset.preview_); +} + +PreviewImage *AssetRepresentation::get_preview() const +{ + if (const ID *id = this->local_id()) { + return BKE_previewimg_id_get(id); + } + + return std::get(asset_).preview_; +} + StringRefNull AssetRepresentation::get_name() const { if (const ID *id = this->local_id()) { diff --git a/source/blender/blenkernel/BKE_icons.h b/source/blender/blenkernel/BKE_icons.h index 182147ad39af..2ae9c913ce45 100644 --- a/source/blender/blenkernel/BKE_icons.h +++ b/source/blender/blenkernel/BKE_icons.h @@ -108,9 +108,6 @@ struct ImBuf *BKE_icon_imbuf_get_buffer(int icon_id) ATTR_WARN_UNUSED_RESULT; */ struct Icon *BKE_icon_get(int icon_id); -bool BKE_icon_is_preview(int icon_id); -bool BKE_icon_is_image(int icon_id); - /** * Set icon for id if not already defined. * Used for inserting the internal icons. diff --git a/source/blender/blenkernel/BKE_paint_bvh.hh b/source/blender/blenkernel/BKE_paint_bvh.hh index b7d7679d84e0..5dd130fc725c 100644 --- a/source/blender/blenkernel/BKE_paint_bvh.hh +++ b/source/blender/blenkernel/BKE_paint_bvh.hh @@ -226,9 +226,6 @@ class Tree { /** Memory backing for #Node::prim_indices. Without an inline buffer to make #Tree movable. */ Array prim_indices_; - public: - std::variant, Vector, Vector> nodes_; - /** * If true, the bounds for the corresponding node index is out of date. * \note Values are only meaningful for leaf nodes. @@ -250,6 +247,9 @@ class Tree { */ BitVector<> visibility_dirty_; + public: + std::variant, Vector, Vector> nodes_; + pixels::PBVHData *pixels_ = nullptr; std::unique_ptr draw_data; @@ -273,7 +273,7 @@ class Tree { Type type() const { - return this->type_; + return type_; } /** @@ -302,6 +302,26 @@ class Tree { */ void tag_attribute_changed(const IndexMask &node_mask, StringRef attribute_name); + /** + * Run the last step of the BVH bounds recalculation process, propagating updated leaf node + * bounds to their parent/ancestor inner nodes. This is meant to be used after leaf node bounds + * have been computed separately. + */ + void flush_bounds_to_parents(); + + /** + * Recalculate node bounding boxes based on the current coordinates. Calculation is only done for + * affected nodes that have been tagged by #PBVH::tag_positions_changed(). + */ + void update_bounds(const Depsgraph &depsgraph, const Object &object); + void update_bounds_mesh(Span vert_positions); + void update_bounds_grids(Span positions, int grid_area); + void update_bounds_bmesh(const BMesh &bm); + + void update_normals(Object &object_orig, Object &object_eval); + + void update_visibility(const Object &object); + private: explicit Tree(Type type); }; @@ -505,15 +525,6 @@ void BKE_pbvh_bmesh_after_stroke(BMesh &bm, blender::bke::pbvh::Tree &pbvh); namespace blender::bke::pbvh { -/** - * Recalculate node bounding boxes based on the current coordinates. Calculation is only done for - * affected nodes that have been tagged by #PBVH::tag_positions_changed(). - */ -void update_bounds(const Depsgraph &depsgraph, const Object &object, Tree &pbvh); -void update_bounds_mesh(Span vert_positions, Tree &pbvh); -void update_bounds_grids(const CCGKey &key, Span positions, Tree &pbvh); -void update_bounds_bmesh(const BMesh &bm, Tree &pbvh); - /** * Copy all current node bounds to the original bounds. "Original" bounds are typically from before * a brush stroke started (while the "regular" bounds update on every change of positions). These @@ -527,7 +538,6 @@ void update_mask_mesh(const Mesh &mesh, const IndexMask &node_mask, Tree &pbvh); void update_mask_grids(const SubdivCCG &subdiv_ccg, const IndexMask &node_mask, Tree &pbvh); void update_mask_bmesh(const BMesh &bm, const IndexMask &node_mask, Tree &pbvh); -void update_visibility(const Object &object, Tree &pbvh); void update_normals(const Depsgraph &depsgraph, Object &object_orig, Tree &pbvh); /** Update geometry normals (potentially on the original object geometry). */ void update_normals_from_eval(Object &object_eval, Tree &pbvh); @@ -602,13 +612,6 @@ void update_node_bounds_mesh(Span positions, MeshNode &node); void update_node_bounds_grids(int grid_area, Span positions, GridsNode &node); void update_node_bounds_bmesh(BMeshNode &node); -/** - * Run the last step of the BVH bounds recalculation process, propagating updated leaf node bounds - * to their parent/ancestor inner nodes. This is meant to be used after leaf node bounds have been - * computed separately. - */ -void flush_bounds_to_parents(Tree &pbvh); - inline Span MeshNode::faces() const { return this->face_indices_; diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 9184c3228c87..7915c9704abc 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -89,7 +89,10 @@ typedef struct SPHData { ParticleData *pa; float mass; std::optional> eh; - float *gravity; + + /** The gravity as a `float[3]`, may also be null when the simulation doesn't use gravity. */ + const float *gravity; + float hfac; /* Average distance to neighbors (other particles in the support domain), * for calculating the Courant number (adaptive time step). */ diff --git a/source/blender/blenkernel/BKE_subdiv.hh b/source/blender/blenkernel/BKE_subdiv.hh index 7d169554e23a..9140ef9819a1 100644 --- a/source/blender/blenkernel/BKE_subdiv.hh +++ b/source/blender/blenkernel/BKE_subdiv.hh @@ -301,7 +301,8 @@ BLI_INLINE void rotate_grid_to_quad( int corner, float grid_u, float grid_v, float *r_quad_u, float *r_quad_v); /* Convert Blender edge crease value to OpenSubdiv sharpness. */ -BLI_INLINE float crease_to_sharpness(float edge_crease); +BLI_INLINE float crease_to_sharpness(float crease); +BLI_INLINE float sharpness_to_crease(float sharpness); } // namespace blender::bke::subdiv diff --git a/source/blender/blenkernel/intern/grease_pencil.cc b/source/blender/blenkernel/intern/grease_pencil.cc index 13acdddee9fe..f5d9de344a71 100644 --- a/source/blender/blenkernel/intern/grease_pencil.cc +++ b/source/blender/blenkernel/intern/grease_pencil.cc @@ -2892,6 +2892,48 @@ bool GreasePencil::remove_frames(blender::bke::greasepencil::Layer &layer, return false; } +void GreasePencil::copy_frames_from_layer(blender::bke::greasepencil::Layer &dst_layer, + const GreasePencil &src_grease_pencil, + const blender::bke::greasepencil::Layer &src_layer, + const std::optional frame_select) +{ + using namespace blender; + + const Span src_drawings = src_grease_pencil.drawings(); + Array drawing_index_map(src_grease_pencil.drawing_array_num, -1); + + for (auto [frame_number, src_frame] : src_layer.frames().items()) { + if (frame_select && *frame_select != frame_number) { + continue; + } + + const int src_drawing_index = src_frame.drawing_index; + int dst_drawing_index = drawing_index_map[src_drawing_index]; + if (dst_drawing_index < 0) { + switch (src_drawings[src_drawing_index]->type) { + case GP_DRAWING: { + const bke::greasepencil::Drawing &src_drawing = + reinterpret_cast(src_drawings[src_drawing_index]) + ->wrap(); + this->add_duplicate_drawings(1, src_drawing); + break; + } + case GP_DRAWING_REFERENCE: + /* Dummy drawing to keep frame reference valid. */ + this->add_empty_drawings(1); + break; + } + dst_drawing_index = this->drawings().size() - 1; + drawing_index_map[src_drawing_index] = dst_drawing_index; + } + BLI_assert(this->drawings().index_range().contains(dst_drawing_index)); + + GreasePencilFrame *dst_frame = dst_layer.add_frame(frame_number); + dst_frame->flag = src_frame.flag; + dst_frame->drawing_index = dst_drawing_index; + } +} + void GreasePencil::add_layers_with_empty_drawings_for_eval(const int num) { using namespace blender; @@ -3480,18 +3522,12 @@ blender::bke::greasepencil::Layer &GreasePencil::duplicate_layer( using namespace blender; std::string unique_name = unique_layer_name(duplicate_layer.name()); std::optional duplicate_layer_idx = get_layer_index(duplicate_layer); + BLI_assert(duplicate_layer_idx.has_value()); const int numLayers = layers().size(); CustomData_realloc(&layers_data, numLayers, numLayers + 1); - if (duplicate_layer_idx.has_value()) { - for (const int layer_index : IndexRange(layers_data.totlayer)) { - CustomData_copy_data_layer(&layers_data, - &layers_data, - layer_index, - layer_index, - *duplicate_layer_idx, - numLayers, - 1); - } + for (const int layer_index : IndexRange(layers_data.totlayer)) { + CustomData_copy_data_layer( + &layers_data, &layers_data, layer_index, layer_index, *duplicate_layer_idx, numLayers, 1); } bke::greasepencil::Layer *new_layer = MEM_new(__func__, duplicate_layer); diff --git a/source/blender/blenkernel/intern/icons.cc b/source/blender/blenkernel/intern/icons.cc index 36b099504912..e0791efe7dce 100644 --- a/source/blender/blenkernel/intern/icons.cc +++ b/source/blender/blenkernel/intern/icons.cc @@ -413,18 +413,6 @@ Icon *BKE_icon_get(const int icon_id) return icon; } -bool BKE_icon_is_preview(const int icon_id) -{ - const Icon *icon = BKE_icon_get(icon_id); - return icon != nullptr && icon->obj_type == ICON_DATA_PREVIEW; -} - -bool BKE_icon_is_image(const int icon_id) -{ - const Icon *icon = BKE_icon_get(icon_id); - return icon != nullptr && icon->obj_type == ICON_DATA_IMBUF; -} - void BKE_icon_set(const int icon_id, Icon *icon) { void **val_p; diff --git a/source/blender/blenkernel/intern/particle_system.cc b/source/blender/blenkernel/intern/particle_system.cc index dd65ef00ad62..3dfe805070f1 100644 --- a/source/blender/blenkernel/intern/particle_system.cc +++ b/source/blender/blenkernel/intern/particle_system.cc @@ -1795,7 +1795,7 @@ static void sph_force_cb(void *sphdata_v, ParticleKey *state, float *force, floa ParticleSpring *spring = nullptr; SPHRangeData pfr; SPHNeighbor *pfn; - float *gravity = sphdata->gravity; + const float *gravity = sphdata->gravity; const std::optional> &springhash = sphdata->eh; float q, u, rij, dv[3]; @@ -1996,7 +1996,7 @@ static void sphclassical_force_cb(void *sphdata_v, SPHFluidSettings *fluid = psys[0]->part->fluid; SPHRangeData pfr; SPHNeighbor *pfn; - float *gravity = sphdata->gravity; + const float *gravity = sphdata->gravity; float dq, u, rij, dv[3]; float pressure, npressure; diff --git a/source/blender/blenkernel/intern/pbvh.cc b/source/blender/blenkernel/intern/pbvh.cc index 6dd2c4e64c8d..056184115f11 100644 --- a/source/blender/blenkernel/intern/pbvh.cc +++ b/source/blender/blenkernel/intern/pbvh.cc @@ -273,7 +273,7 @@ Tree Tree::from_mesh(const Mesh &mesh) pbvh.tag_positions_changed(nodes.index_range()); - update_bounds_mesh(vert_positions, pbvh); + pbvh.update_bounds_mesh(vert_positions); store_bounds_orig(pbvh); if (!hide_vert.is_empty()) { @@ -457,7 +457,7 @@ Tree Tree::from_grids(const Mesh &base_mesh, const SubdivCCG &subdiv_ccg) pbvh.tag_positions_changed(nodes.index_range()); - update_bounds_grids(key, positions, pbvh); + pbvh.update_bounds_grids(positions, key.grid_area); store_bounds_orig(pbvh); const BitGroupVector<> &grid_hidden = subdiv_ccg.grid_hidden; @@ -536,12 +536,10 @@ Tree::~Tree() void Tree::tag_positions_changed(const IndexMask &node_mask) { - this->bounds_dirty_.resize(std::max(this->bounds_dirty_.size(), node_mask.min_array_size()), - false); - this->normals_dirty_.resize(std::max(this->normals_dirty_.size(), node_mask.min_array_size()), - false); - node_mask.set_bits(this->bounds_dirty_); - node_mask.set_bits(this->normals_dirty_); + bounds_dirty_.resize(std::max(bounds_dirty_.size(), node_mask.min_array_size()), false); + normals_dirty_.resize(std::max(normals_dirty_.size(), node_mask.min_array_size()), false); + node_mask.set_bits(bounds_dirty_); + node_mask.set_bits(normals_dirty_); if (this->draw_data) { this->draw_data->tag_positions_changed(node_mask); } @@ -549,9 +547,8 @@ void Tree::tag_positions_changed(const IndexMask &node_mask) void Tree::tag_visibility_changed(const IndexMask &node_mask) { - this->visibility_dirty_.resize(std::max(this->bounds_dirty_.size(), node_mask.min_array_size()), - false); - node_mask.set_bits(this->visibility_dirty_); + visibility_dirty_.resize(std::max(visibility_dirty_.size(), node_mask.min_array_size()), false); + node_mask.set_bits(visibility_dirty_); if (this->draw_data) { this->draw_data->tag_visibility_changed(node_mask); } @@ -1015,20 +1012,20 @@ static void update_normals_mesh(Object &object_orig, } } -static void update_normals(Object &object_orig, Object &object_eval, Tree &pbvh) +void Tree::update_normals(Object &object_orig, Object &object_eval) { IndexMaskMemory memory; - const IndexMask nodes_to_update = IndexMask::from_bits(pbvh.normals_dirty_, memory); + const IndexMask nodes_to_update = IndexMask::from_bits(normals_dirty_, memory); - switch (pbvh.type()) { + switch (this->type()) { case Type::Mesh: { - update_normals_mesh(object_orig, object_eval, pbvh.nodes(), nodes_to_update); + update_normals_mesh(object_orig, object_eval, this->nodes(), nodes_to_update); break; } case Type::Grids: { SculptSession &ss = *object_orig.sculpt; SubdivCCG &subdiv_ccg = *ss.subdiv_ccg; - MutableSpan nodes = pbvh.nodes(); + MutableSpan nodes = this->nodes(); IndexMaskMemory memory; const IndexMask faces_to_update = nodes_to_face_selection_grids( subdiv_ccg, nodes, nodes_to_update, memory); @@ -1036,18 +1033,18 @@ static void update_normals(Object &object_orig, Object &object_eval, Tree &pbvh) break; } case Type::BMesh: { - bmesh_normals_update(pbvh, nodes_to_update); + bmesh_normals_update(*this, nodes_to_update); break; } } - pbvh.normals_dirty_.clear_and_shrink(); + normals_dirty_.clear_and_shrink(); } void update_normals(const Depsgraph &depsgraph, Object &object_orig, Tree &pbvh) { BLI_assert(DEG_is_original_object(&object_orig)); Object &object_eval = *DEG_get_evaluated_object(&depsgraph, &object_orig); - update_normals(object_orig, object_eval, pbvh); + pbvh.update_normals(object_orig, object_eval); } void update_normals_from_eval(Object &object_eval, Tree &pbvh) @@ -1057,7 +1054,7 @@ void update_normals_from_eval(Object &object_eval, Tree &pbvh) * their result), and also because (currently) sculpt deformations skip tagging the mesh normals * caches dirty. */ Object &object_orig = *DEG_get_original_object(&object_eval); - update_normals(object_orig, object_eval, pbvh); + pbvh.update_normals(object_orig, object_eval); } void update_node_bounds_mesh(const Span positions, MeshNode &node) @@ -1117,75 +1114,74 @@ static BoundsMergeInfo merge_child_bounds(MutableSpan nodes, return {node.bounds_, update}; } -void flush_bounds_to_parents(Tree &pbvh) +void Tree::flush_bounds_to_parents() { std::visit( [&](auto &nodes) { nodes.first().bounds_ = - merge_child_bounds(nodes.as_mutable_span(), pbvh.bounds_dirty_, 0).bounds; + merge_child_bounds(nodes.as_mutable_span(), bounds_dirty_, 0).bounds; }, - pbvh.nodes_); - pbvh.bounds_dirty_.clear_and_shrink(); + this->nodes_); + bounds_dirty_.clear_and_shrink(); } -void update_bounds_mesh(const Span vert_positions, Tree &pbvh) +void Tree::update_bounds_mesh(const Span vert_positions) { IndexMaskMemory memory; - const IndexMask nodes_to_update = IndexMask::from_bits(pbvh.bounds_dirty_, memory); + const IndexMask nodes_to_update = IndexMask::from_bits(bounds_dirty_, memory); if (nodes_to_update.is_empty()) { return; } - MutableSpan nodes = pbvh.nodes(); + MutableSpan nodes = this->nodes(); nodes_to_update.foreach_index( GrainSize(1), [&](const int i) { update_node_bounds_mesh(vert_positions, nodes[i]); }); - flush_bounds_to_parents(pbvh); + this->flush_bounds_to_parents(); } -void update_bounds_grids(const CCGKey &key, const Span positions, Tree &pbvh) +void Tree::update_bounds_grids(const Span positions, const int grid_area) { IndexMaskMemory memory; - const IndexMask nodes_to_update = IndexMask::from_bits(pbvh.bounds_dirty_, memory); + const IndexMask nodes_to_update = IndexMask::from_bits(bounds_dirty_, memory); if (nodes_to_update.is_empty()) { return; } - MutableSpan nodes = pbvh.nodes(); + MutableSpan nodes = this->nodes(); nodes_to_update.foreach_index(GrainSize(1), [&](const int i) { - update_node_bounds_grids(key.grid_area, positions, nodes[i]); + update_node_bounds_grids(grid_area, positions, nodes[i]); }); - flush_bounds_to_parents(pbvh); + this->flush_bounds_to_parents(); } -void update_bounds_bmesh(const BMesh & /*bm*/, Tree &pbvh) +void Tree::update_bounds_bmesh(const BMesh & /*bm*/) { IndexMaskMemory memory; - const IndexMask nodes_to_update = IndexMask::from_bits(pbvh.bounds_dirty_, memory); + const IndexMask nodes_to_update = IndexMask::from_bits(bounds_dirty_, memory); if (nodes_to_update.is_empty()) { return; } - MutableSpan nodes = pbvh.nodes(); + MutableSpan nodes = this->nodes(); nodes_to_update.foreach_index(GrainSize(1), [&](const int i) { update_node_bounds_bmesh(nodes[i]); }); - flush_bounds_to_parents(pbvh); + this->flush_bounds_to_parents(); } -void update_bounds(const Depsgraph &depsgraph, const Object &object, Tree &pbvh) +void Tree::update_bounds(const Depsgraph &depsgraph, const Object &object) { - switch (pbvh.type()) { + switch (this->type()) { case Type::Mesh: { const Span positions = bke::pbvh::vert_positions_eval(depsgraph, object); - update_bounds_mesh(positions, pbvh); + this->update_bounds_mesh(positions); break; } case Type::Grids: { const SculptSession &ss = *object.sculpt; const SubdivCCG &subdiv_ccg = *ss.subdiv_ccg; - const CCGKey key = BKE_subdiv_ccg_key_top_level(subdiv_ccg); - update_bounds_grids(key, subdiv_ccg.positions, pbvh); + this->update_bounds_grids(subdiv_ccg.positions, subdiv_ccg.grid_area); break; } case Type::BMesh: { const SculptSession &ss = *object.sculpt; - update_bounds_bmesh(*ss.bm, pbvh); + this->update_bounds_bmesh(*ss.bm); break; } } @@ -1362,27 +1358,27 @@ static void update_visibility_bmesh(const MutableSpan nodes, const In [&](const int i) { node_update_visibility_bmesh(nodes[i]); }); } -void update_visibility(const Object &object, Tree &pbvh) +void Tree::update_visibility(const Object &object) { IndexMaskMemory memory; - const IndexMask node_mask = IndexMask::from_bits(pbvh.visibility_dirty_, memory); + const IndexMask node_mask = IndexMask::from_bits(visibility_dirty_, memory); if (node_mask.is_empty()) { return; } - pbvh.visibility_dirty_.clear_and_shrink(); - switch (pbvh.type()) { + visibility_dirty_.clear_and_shrink(); + switch (this->type()) { case Type::Mesh: { const Mesh &mesh = *static_cast(object.data); - update_visibility_faces(mesh, pbvh.nodes(), node_mask); + update_visibility_faces(mesh, this->nodes(), node_mask); break; } case Type::Grids: { const SculptSession &ss = *object.sculpt; - update_visibility_grids(*ss.subdiv_ccg, pbvh.nodes(), node_mask); + update_visibility_grids(*ss.subdiv_ccg, this->nodes(), node_mask); break; } case Type::BMesh: { - update_visibility_bmesh(pbvh.nodes(), node_mask); + update_visibility_bmesh(this->nodes(), node_mask); break; } } @@ -2356,7 +2352,7 @@ void BKE_pbvh_vert_coords_apply(blender::bke::pbvh::Tree &pbvh, { using namespace blender::bke::pbvh; pbvh.tag_positions_changed(blender::IndexRange(pbvh.nodes_num())); - update_bounds_mesh(vert_positions, pbvh); + pbvh.update_bounds_mesh(vert_positions); store_bounds_orig(pbvh); } diff --git a/source/blender/blenkernel/intern/pbvh_bmesh.cc b/source/blender/blenkernel/intern/pbvh_bmesh.cc index cd19150122b7..9b3cfb55a89a 100644 --- a/source/blender/blenkernel/intern/pbvh_bmesh.cc +++ b/source/blender/blenkernel/intern/pbvh_bmesh.cc @@ -2262,7 +2262,7 @@ Tree Tree::from_bmesh(BMesh &bm) nodes, cd_vert_node_offset, cd_face_node_offset, nodeinfo, face_bounds, &rootnode, 0); pbvh.tag_positions_changed(nodes.index_range()); - update_bounds_bmesh(bm, pbvh); + pbvh.update_bounds_bmesh(bm); store_bounds_orig(pbvh); threading::parallel_for(nodes.index_range(), 8, [&](const IndexRange range) { diff --git a/source/blender/blenkernel/intern/preview_image.cc b/source/blender/blenkernel/intern/preview_image.cc index 977ce9354125..841469d8c296 100644 --- a/source/blender/blenkernel/intern/preview_image.cc +++ b/source/blender/blenkernel/intern/preview_image.cc @@ -354,6 +354,10 @@ PreviewImage *BKE_previewimg_cached_thumbnail_read(const char *name, void BKE_previewimg_cached_release(const char *name) { BLI_assert(BLI_thread_is_main()); + if (!gCachedPreviews) { + /* Static cache was already freed including all contained previews. Can happen on shutdown. */ + return; + } PreviewImage *prv = (PreviewImage *)BLI_ghash_popkey(gCachedPreviews, name, MEM_freeN); diff --git a/source/blender/blenkernel/intern/subdiv_inline.hh b/source/blender/blenkernel/intern/subdiv_inline.hh index 92203df0fb79..897e8598598d 100644 --- a/source/blender/blenkernel/intern/subdiv_inline.hh +++ b/source/blender/blenkernel/intern/subdiv_inline.hh @@ -13,6 +13,8 @@ #include "BKE_subdiv.hh" +#include + namespace blender::bke::subdiv { BLI_INLINE void ptex_face_uv_to_grid_uv(const float ptex_u, @@ -90,9 +92,14 @@ BLI_INLINE void rotate_grid_to_quad( } } -BLI_INLINE float crease_to_sharpness(float edge_crease) +BLI_INLINE float crease_to_sharpness(float crease) +{ + return crease * crease * 10.0f; +} + +BLI_INLINE float sharpness_to_crease(float sharpness) { - return edge_crease * edge_crease * 10.0f; + return sqrt(sharpness * 0.1f); } } // namespace blender::bke::subdiv diff --git a/source/blender/blenlib/intern/fileops_c.cc b/source/blender/blenlib/intern/fileops_c.cc index d8c987a6ce30..9ef7953cd754 100644 --- a/source/blender/blenlib/intern/fileops_c.cc +++ b/source/blender/blenlib/intern/fileops_c.cc @@ -1212,7 +1212,12 @@ int BLI_delete_soft(const char *filepath, const char **r_error_message) /* May contain `:` delimiter characters according to version 1.5 of the spec: * https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html */ - const char *xdg_current_desktop = getenv("XDG_CURRENT_DESKTOP"); + const char *xdg_current_desktop = [] { + /* Account for VSCode overriding this value (tsk!), see: #133921. */ + const char *key = "ORIGINAL_XDG_CURRENT_DESKTOP"; + const char *value = getenv(key); + return value ? value : getenv(key + 9); + }(); const char *xdg_session_desktop = getenv("XDG_SESSION_DESKTOP"); if ((xdg_current_desktop && BLI_string_elem_split_by_delim(xdg_current_desktop, ':', "KDE")) || diff --git a/source/blender/blenloader/intern/readfile.cc b/source/blender/blenloader/intern/readfile.cc index ee8efd9ae6b9..62ad475e2a6f 100644 --- a/source/blender/blenloader/intern/readfile.cc +++ b/source/blender/blenloader/intern/readfile.cc @@ -2225,6 +2225,14 @@ static void direct_link_id_common(BlendDataReader *reader, id->tag = id_tag; } + if (!BLO_read_data_is_undo(reader)) { + /* Reset the runtime data, as there were versions of Blender that did not do + * this before writing to disk. */ + memset(&id->runtime, 0, sizeof(id->runtime)); + } + readfile_id_runtime_data_ensure(*id); + id->runtime.readfile_data->tags = id_read_tags; + if ((id_tag & ID_TAG_TEMP_MAIN) == 0) { BKE_lib_libblock_session_uid_ensure(id); } @@ -2236,17 +2244,6 @@ static void direct_link_id_common(BlendDataReader *reader, BLO_read_struct(reader, LibraryWeakReference, &id->library_weak_reference); } - if (!BLO_read_data_is_undo(reader)) { - /* Reset the runtime data, as there were versions of Blender that did not do - * this before writing to disk. */ - memset(&id->runtime, 0, sizeof(id->runtime)); - - /* Only track the readfile tags when loading from disk. During 'undo' there is no versioning, - * no linking, etc. so there is no need for these flags. */ - readfile_id_runtime_data_ensure(*id); - id->runtime.readfile_data->tags = id_read_tags; - } - if (BLO_readfile_id_runtime_tags(*id).is_link_placeholder) { /* For placeholder we only need to set the tag and properly initialize generic ID fields above, * no further data to read. */ diff --git a/source/blender/compositor/COM_result.hh b/source/blender/compositor/COM_result.hh index 3edd17e8d5d3..b0f923749f86 100644 --- a/source/blender/compositor/COM_result.hh +++ b/source/blender/compositor/COM_result.hh @@ -18,13 +18,13 @@ #include "GPU_shader.hh" #include "GPU_texture.hh" -#include "COM_derived_resources.hh" #include "COM_domain.hh" #include "COM_meta_data.hh" namespace blender::compositor { class Context; +class DerivedResources; /* Make sure to update the format related static methods in the Result class. */ enum class ResultType : uint8_t { diff --git a/source/blender/compositor/intern/result.cc b/source/blender/compositor/intern/result.cc index df496f10737b..510c87391746 100644 --- a/source/blender/compositor/intern/result.cc +++ b/source/blender/compositor/intern/result.cc @@ -13,6 +13,7 @@ #include "GPU_texture.hh" #include "COM_context.hh" +#include "COM_derived_resources.hh" #include "COM_domain.hh" #include "COM_result.hh" diff --git a/source/blender/compositor/shaders/compositor_glare_simple_star_anti_diagonal_pass.glsl b/source/blender/compositor/shaders/compositor_glare_simple_star_anti_diagonal_pass.glsl index 16085c32ef43..b0802b06260a 100644 --- a/source/blender/compositor/shaders/compositor_glare_simple_star_anti_diagonal_pass.glsl +++ b/source/blender/compositor/shaders/compositor_glare_simple_star_anti_diagonal_pass.glsl @@ -30,6 +30,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(anti_diagonal_img, texel, causal_output); + imageFence(anti_diagonal_img); } /* Non Causal Pass: @@ -45,6 +46,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 non_causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(anti_diagonal_img, texel, non_causal_output); + imageFence(anti_diagonal_img); } } diff --git a/source/blender/compositor/shaders/compositor_glare_simple_star_diagonal_pass.glsl b/source/blender/compositor/shaders/compositor_glare_simple_star_diagonal_pass.glsl index 8f0ce6af4b73..4495d91e0d97 100644 --- a/source/blender/compositor/shaders/compositor_glare_simple_star_diagonal_pass.glsl +++ b/source/blender/compositor/shaders/compositor_glare_simple_star_diagonal_pass.glsl @@ -29,6 +29,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(diagonal_img, texel, causal_output); + imageFence(diagonal_img); } /* Non Causal Pass: @@ -44,6 +45,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 non_causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(diagonal_img, texel, non_causal_output); + imageFence(diagonal_img); } } } diff --git a/source/blender/compositor/shaders/compositor_glare_simple_star_horizontal_pass.glsl b/source/blender/compositor/shaders/compositor_glare_simple_star_horizontal_pass.glsl index e46606911645..4792b2fd37de 100644 --- a/source/blender/compositor/shaders/compositor_glare_simple_star_horizontal_pass.glsl +++ b/source/blender/compositor/shaders/compositor_glare_simple_star_horizontal_pass.glsl @@ -22,6 +22,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(horizontal_img, texel, causal_output); + imageFence(horizontal_img); } /* Non Causal Pass: @@ -37,6 +38,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 non_causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(horizontal_img, texel, non_causal_output); + imageFence(horizontal_img); } } } diff --git a/source/blender/compositor/shaders/compositor_glare_simple_star_vertical_pass.glsl b/source/blender/compositor/shaders/compositor_glare_simple_star_vertical_pass.glsl index e993eed597fa..154a6711e9fd 100644 --- a/source/blender/compositor/shaders/compositor_glare_simple_star_vertical_pass.glsl +++ b/source/blender/compositor/shaders/compositor_glare_simple_star_vertical_pass.glsl @@ -24,6 +24,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(vertical_img, texel, causal_output); + imageFence(vertical_img); } /* Non Causal Pass: @@ -39,6 +40,7 @@ void main() vec4 neighbor_average = (previous_output + next_input) / 2.0; vec4 non_causal_output = mix(current_input, neighbor_average, fade_factor); imageStore(vertical_img, texel, non_causal_output); + imageFence(vertical_img); } } diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl index 8deb061a95bf..d0d5fe7c3405 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_film_lib.glsl @@ -623,11 +623,6 @@ void film_store_weight(ivec2 texel, float value) float film_display_depth_amend(ivec2 texel, float depth) { - if (scaling_factor > 1) { - /* The workaround below creates ugly artifacts for overlays relying on depth equal tests. - * In this case, it is better to rely on overlay engine to do a depth pass (see #124013). */ - return 1.0; - } /* This effectively offsets the depth of the whole 2x2 region to the lowest value of the region * twice. One for X and one for Y direction. */ /* TODO(fclem): This could be improved as it gives flickering result at depth discontinuity. diff --git a/source/blender/draw/engines/overlay/overlay_next_armature.hh b/source/blender/draw/engines/overlay/overlay_next_armature.hh index c8bee4d156d5..fdfbef46d899 100644 --- a/source/blender/draw/engines/overlay/overlay_next_armature.hh +++ b/source/blender/draw/engines/overlay/overlay_next_armature.hh @@ -606,7 +606,7 @@ class Armatures : Overlay { } for (CustomShapeBuf item : bb.custom_shape_wire.items()) { /* WORKAROUND: This shape needs a special vertex shader path that should be triggered by - * its vclass attribute. However, to avoid many changes in the primitive expansion API, + * its `vclass` attribute. However, to avoid many changes in the primitive expansion API, * we create a specific path inside the shader only for this shape batch and infer the * value of the `vclass` attribute based on the vertex index. */ if (item.key == arrow_batch) { diff --git a/source/blender/draw/engines/overlay/overlay_next_attribute_viewer.hh b/source/blender/draw/engines/overlay/overlay_next_attribute_viewer.hh index 7b7b679ed41f..d8d45d639313 100644 --- a/source/blender/draw/engines/overlay/overlay_next_attribute_viewer.hh +++ b/source/blender/draw/engines/overlay/overlay_next_attribute_viewer.hh @@ -129,12 +129,12 @@ class AttributeViewer : Overlay { { gpu::Batch *batch = DRW_cache_mesh_surface_get(&object); auto &sub = *instance_sub_; - sub.push_constant("ucolor", color); + sub.push_constant("ucolor", float4(color)); sub.draw(batch, res_handle); } if (gpu::Batch *batch = DRW_cache_mesh_loose_edges_get(&object)) { auto &sub = *instance_sub_; - sub.push_constant("ucolor", color); + sub.push_constant("ucolor", float4(color)); sub.draw(batch, res_handle); } @@ -143,14 +143,14 @@ class AttributeViewer : Overlay { case OB_POINTCLOUD: { auto &sub = *pointcloud_sub_; gpu::Batch *batch = point_cloud_sub_pass_setup(sub, &object, nullptr); - sub.push_constant("ucolor", color); + sub.push_constant("ucolor", float4(color)); sub.draw(batch, manager.unique_handle(ob_ref)); break; } case OB_CURVES_LEGACY: { gpu::Batch *batch = DRW_cache_curve_edge_wire_get(&object); auto &sub = *instance_sub_; - sub.push_constant("ucolor", color); + sub.push_constant("ucolor", float4(color)); ResourceHandle res_handle = manager.resource_handle(object.object_to_world()); sub.draw(batch, res_handle); break; diff --git a/source/blender/draw/engines/overlay/overlay_next_instance.cc b/source/blender/draw/engines/overlay/overlay_next_instance.cc index 4a2261fc0950..1a87cde1fc29 100644 --- a/source/blender/draw/engines/overlay/overlay_next_instance.cc +++ b/source/blender/draw/engines/overlay/overlay_next_instance.cc @@ -59,6 +59,12 @@ void Instance::init() state.xray_opacity = state.xray_enabled ? XRAY_ALPHA(state.v3d) : 1.0f; state.xray_flag_enabled = SHADING_XRAY_FLAG_ENABLED(state.v3d->shading) && !state.is_depth_only_drawing; + /* Only workbench ensures the depth buffer is matching overlays. + * Force depth prepass for other render engines. + * EEVEE is an exception (if not using mixed resolution) to avoid a significant overhead. */ + state.is_render_depth_available = state.v3d->shading.type <= OB_SOLID || + (BKE_scene_uses_blender_eevee(state.scene) && + BKE_render_preview_pixel_size(&state.scene->r) == 1); if (!state.hide_overlays) { state.overlay = state.v3d->overlay; @@ -88,6 +94,8 @@ void Instance::init() state.is_wireframe_mode = false; state.hide_overlays = (space_image->overlay.flag & SI_OVERLAY_SHOW_OVERLAYS) == 0; state.xray_enabled = false; + /* Avoid triggering the depth prepass. */ + state.is_render_depth_available = true; /* During engine initialization phase the `space_image` isn't locked and we are able to * retrieve the needed data. During cache_init the image engine locks the `space_image` and @@ -520,7 +528,14 @@ void Instance::draw_v3d(Manager &manager, View &view) GPU_framebuffer_clear_color_depth(resources.overlay_line_fb, clear_color, 1.0f); } else { - GPU_framebuffer_clear_color(resources.overlay_line_fb, clear_color); + if (!state.is_render_depth_available) { + /* If the render engine is not outputing correct depth, + * clear the depth and render a depth prepass. */ + GPU_framebuffer_clear_color_depth(resources.overlay_line_fb, clear_color, 1.0f); + } + else { + GPU_framebuffer_clear_color(resources.overlay_line_fb, clear_color); + } } /* TODO(fclem): Split overlay and rename draw functions. */ @@ -719,10 +734,8 @@ bool Instance::object_needs_prepass(const ObjectRef &ob_ref, bool in_paint_mode) } if (!state.xray_enabled) { - /* Only workbench ensures the depth buffer is matching overlays. - * Force depth prepass for other render engines. */ - /* TODO(fclem): Make an exception for EEVEE if not using mixed resolution. */ - return state.v3d && (state.v3d->shading.type > OB_SOLID) && (ob_ref.object->dt >= OB_SOLID); + /* Force depth prepass if depth buffer form render engine is not available. */ + return !state.is_render_depth_available && (ob_ref.object->dt >= OB_SOLID); } return false; diff --git a/source/blender/draw/engines/overlay/overlay_next_mesh.hh b/source/blender/draw/engines/overlay/overlay_next_mesh.hh index d10ae87c0664..d31edc277307 100644 --- a/source/blender/draw/engines/overlay/overlay_next_mesh.hh +++ b/source/blender/draw/engines/overlay/overlay_next_mesh.hh @@ -45,6 +45,7 @@ class Meshes : Overlay { PassSimple::Sub *loop_normals_ = nullptr; PassSimple::Sub *loop_normals_subdiv_ = nullptr; PassSimple::Sub *vert_normals_ = nullptr; + PassSimple::Sub *vert_normals_subdiv_ = nullptr; PassSimple edit_mesh_analysis_ps_ = {"Mesh Analysis"}; PassSimple edit_mesh_weight_ps_ = {"Edit Weight"}; @@ -177,6 +178,7 @@ class Meshes : Overlay { loop_normals_ = shader_pass(res.shaders.mesh_loop_normal.get(), "LoopNor"); } if (show_vert_nor) { + vert_normals_subdiv_ = shader_pass(res.shaders.mesh_vert_normal_subdiv.get(), "SubdVNor"); vert_normals_ = shader_pass(res.shaders.mesh_vert_normal.get(), "VertexNor"); } } @@ -299,6 +301,7 @@ class Meshes : Overlay { * refactored. */ const bool use_gpu_subdiv = BKE_subsurf_modifier_has_gpu_subdiv(static_cast(ob->data)); const bool draw_as_solid = (ob->dt > OB_WIRE) && !state.xray_enabled; + const bool has_edit_cage = mesh_has_edit_cage(ob); if (show_retopology_) { gpu::Batch *geom = DRW_mesh_batch_cache_get_edit_triangles(mesh); @@ -321,17 +324,18 @@ class Meshes : Overlay { if (face_normals_) { gpu::Batch *geom = DRW_mesh_batch_cache_get_edit_facedots(mesh); - (use_gpu_subdiv ? face_normals_subdiv_ : face_normals_) + (use_gpu_subdiv && !has_edit_cage ? face_normals_subdiv_ : face_normals_) ->draw_expand(geom, GPU_PRIM_LINES, 1, 1, res_handle); } if (loop_normals_) { gpu::Batch *geom = DRW_mesh_batch_cache_get_edit_loop_normals(mesh); - (use_gpu_subdiv ? loop_normals_subdiv_ : loop_normals_) + (use_gpu_subdiv && !has_edit_cage ? loop_normals_subdiv_ : loop_normals_) ->draw_expand(geom, GPU_PRIM_LINES, 1, 1, res_handle); } if (vert_normals_) { gpu::Batch *geom = DRW_mesh_batch_cache_get_edit_vert_normals(mesh); - vert_normals_->draw_expand(geom, GPU_PRIM_LINES, 1, 1, res_handle); + ((use_gpu_subdiv && !has_edit_cage) ? vert_normals_subdiv_ : vert_normals_) + ->draw_expand(geom, GPU_PRIM_LINES, 1, 1, res_handle); } { @@ -340,8 +344,7 @@ class Meshes : Overlay { } { gpu::Batch *geom = DRW_mesh_batch_cache_get_edit_triangles(mesh); - (mesh_has_edit_cage(ob) ? &edit_mesh_cages_ps_ : &edit_mesh_faces_ps_) - ->draw(geom, res_handle); + (has_edit_cage ? &edit_mesh_cages_ps_ : &edit_mesh_faces_ps_)->draw(geom, res_handle); } if (select_vert_) { gpu::Batch *geom = DRW_mesh_batch_cache_get_edit_vertices(mesh); diff --git a/source/blender/draw/engines/overlay/overlay_next_prepass.hh b/source/blender/draw/engines/overlay/overlay_next_prepass.hh index 05ba36a0803a..0a628963e6b8 100644 --- a/source/blender/draw/engines/overlay/overlay_next_prepass.hh +++ b/source/blender/draw/engines/overlay/overlay_next_prepass.hh @@ -256,7 +256,7 @@ class Prepass : Overlay { pass = curves_ps_; break; case OB_GREASE_PENCIL: - if (!res.is_selection()) { + if (!res.is_selection() && state.is_render_depth_available) { /* Disable during display, only enable for selection. * The grease pencil engine already renders it properly. */ return; diff --git a/source/blender/draw/engines/overlay/overlay_next_private.hh b/source/blender/draw/engines/overlay/overlay_next_private.hh index 79fffc85ede9..a693e7ebd56d 100644 --- a/source/blender/draw/engines/overlay/overlay_next_private.hh +++ b/source/blender/draw/engines/overlay/overlay_next_private.hh @@ -144,6 +144,8 @@ struct State { bool is_material_select = false; /** Whether we should render the background or leave it transparent. */ bool draw_background = false; + /** True if the render engine outputs satisfactory depth information to the depth buffer. */ + bool is_render_depth_available = false; /** Should text draw in this mode? */ bool show_text = false; bool hide_overlays = false; @@ -414,6 +416,7 @@ class ShaderModule { ShaderPtr mesh_loop_normal = shader_clippable("overlay_mesh_loop_normal"); ShaderPtr mesh_loop_normal_subdiv = shader_clippable("overlay_mesh_loop_normal_subdiv"); ShaderPtr mesh_vert_normal = shader_clippable("overlay_mesh_vert_normal"); + ShaderPtr mesh_vert_normal_subdiv = shader_clippable("overlay_mesh_vert_normal_subdiv"); ShaderPtr motion_path_line = shader_clippable("overlay_motion_path_line"); ShaderPtr motion_path_vert = shader_clippable("overlay_motion_path_point"); ShaderPtr outline_detect = shader("overlay_outline_detect"); diff --git a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh index 688bccc6c521..aa4923cbb9f8 100644 --- a/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh +++ b/source/blender/draw/engines/overlay/shaders/infos/overlay_edit_mode_info.hh @@ -155,7 +155,9 @@ PUSH_CONSTANT(FLOAT, normalScreenSize) PUSH_CONSTANT(FLOAT, alpha) PUSH_CONSTANT(BOOL, isConstantScreenSizeNormals) VERTEX_OUT(overlay_edit_flat_color_iface) +DEFINE("LINE_OUTPUT") FRAGMENT_OUT(0, VEC4, fragColor) +FRAGMENT_OUT(1, VEC4, lineOutput) VERTEX_SOURCE("overlay_edit_mesh_normal_vert.glsl") FRAGMENT_SOURCE("overlay_varying_color.glsl") GPU_SHADER_CREATE_END() @@ -239,6 +241,22 @@ GPU_SHADER_CREATE_END() OVERLAY_INFO_CLIP_VARIATION(overlay_mesh_vert_normal) +GPU_SHADER_CREATE_INFO(overlay_mesh_vert_normal_subdiv) +DO_STATIC_COMPILATION() +ADDITIONAL_INFO(overlay_edit_mesh_normal) +ADDITIONAL_INFO(draw_view) +ADDITIONAL_INFO(draw_modelmat_new) +ADDITIONAL_INFO(draw_resource_handle_new) +ADDITIONAL_INFO(draw_globals) +ADDITIONAL_INFO(gpu_index_buffer_load) +STORAGE_BUF_FREQ(1, READ, float, pos[], GEOMETRY) +DEFINE("VERT_NORMAL") +DEFINE("FLOAT_NORMAL") +STORAGE_BUF_FREQ(0, READ, float, vnor[], GEOMETRY) +GPU_SHADER_CREATE_END() + +OVERLAY_INFO_CLIP_VARIATION(overlay_mesh_vert_normal_subdiv) + GPU_SHADER_INTERFACE_INFO(overlay_edit_mesh_analysis_iface) SMOOTH(VEC4, weightColor) GPU_SHADER_INTERFACE_END() @@ -470,7 +488,9 @@ VERTEX_OUT(overlay_edit_smooth_color_iface) PUSH_CONSTANT(BOOL, showCurveHandles) PUSH_CONSTANT(INT, curveHandleDisplay) PUSH_CONSTANT(FLOAT, alpha) +DEFINE("LINE_OUTPUT") FRAGMENT_OUT(0, VEC4, fragColor) +FRAGMENT_OUT(1, VEC4, lineOutput) VERTEX_SOURCE("overlay_edit_curve_handle_vert.glsl") FRAGMENT_SOURCE("overlay_varying_color.glsl") ADDITIONAL_INFO(draw_view) @@ -612,7 +632,9 @@ GPU_SHADER_CREATE_INFO(overlay_edit_lattice_point_base) VERTEX_IN(0, VEC3, pos) VERTEX_IN(1, UINT, data) VERTEX_OUT(overlay_edit_flat_color_iface) +DEFINE("LINE_OUTPUT") FRAGMENT_OUT(0, VEC4, fragColor) +FRAGMENT_OUT(1, VEC4, lineOutput) VERTEX_SOURCE("overlay_edit_lattice_point_vert.glsl") FRAGMENT_SOURCE("overlay_point_varying_color_frag.glsl") ADDITIONAL_INFO(draw_view) @@ -627,7 +649,9 @@ VERTEX_IN(0, VEC3, pos) VERTEX_IN(1, FLOAT, weight) SAMPLER(0, FLOAT_1D, weightTex) VERTEX_OUT(overlay_edit_smooth_color_iface) +DEFINE("LINE_OUTPUT") FRAGMENT_OUT(0, VEC4, fragColor) +FRAGMENT_OUT(1, VEC4, lineOutput) VERTEX_SOURCE("overlay_edit_lattice_wire_vert.glsl") FRAGMENT_SOURCE("overlay_varying_color.glsl") ADDITIONAL_INFO(draw_view) @@ -806,7 +830,9 @@ GPU_SHADER_CREATE_INFO(overlay_uniform_color) DO_STATIC_COMPILATION() VERTEX_IN(0, VEC3, pos) PUSH_CONSTANT(VEC4, ucolor) +DEFINE("LINE_OUTPUT") FRAGMENT_OUT(0, VEC4, fragColor) +FRAGMENT_OUT(1, VEC4, lineOutput) VERTEX_SOURCE("overlay_depth_only_vert.glsl") FRAGMENT_SOURCE("overlay_uniform_color_frag.glsl") ADDITIONAL_INFO(draw_view) diff --git a/source/blender/draw/engines/overlay/shaders/overlay_armature_shape_wire_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_armature_shape_wire_vert.glsl index ef18001ad131..e4798d0c32a9 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_armature_shape_wire_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_armature_shape_wire_vert.glsl @@ -40,12 +40,12 @@ VertOut vertex_main(VertIn v_in) VertOut v_out; /* WORKAROUND: This shape needs a special vertex shader path that should be triggered by - * its vclass attribute. However, to avoid many changes in the primitive expansion API, + * its `vclass` attribute. However, to avoid many changes in the primitive expansion API, * we create a specific path inside the shader only for this shape batch and infer the * value of the `vclass` attribute based on the vertex index. */ if (use_arrow_drawing) { /* Keep in sync with the arrows shape batch creation. */ - /* Adapted from overlay_extra_vert.glsl. */ + /* Adapted from `overlay_extra_vert.glsl`. */ vec3 vpos = v_in.lP; vec3 vofs = vec3(0.0); uint axis = uint(vpos.z); diff --git a/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_normal_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_normal_vert.glsl index 5035bb5b3bab..af09892f1930 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_normal_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_edit_mesh_normal_vert.glsl @@ -65,7 +65,12 @@ void main() finalColor = colorNormal; #elif defined(VERT_NORMAL) +# if defined(FLOAT_NORMAL) + /* Path for opensubdiv. To be phased out at some point. */ + nor = gpu_attr_load_float3(vnor, gpu_attr_0, vert_i); +# else nor = gpu_attr_load_uint_1010102_snorm(vnor, gpu_attr_0, vert_i).xyz; +# endif finalColor = colorVNormal; #elif defined(LOOP_NORMAL) diff --git a/source/blender/draw/engines/overlay/shaders/overlay_uniform_color_frag.glsl b/source/blender/draw/engines/overlay/shaders/overlay_uniform_color_frag.glsl index 37806fbc3845..6aeee027e294 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_uniform_color_frag.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_uniform_color_frag.glsl @@ -5,4 +5,7 @@ void main() { fragColor = ucolor; +#ifdef LINE_OUTPUT + lineOutput = vec4(0.0); +#endif } diff --git a/source/blender/draw/engines/overlay/shaders/overlay_wireframe_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_wireframe_vert.glsl index 4590b48a0199..24da1b165257 100644 --- a/source/blender/draw/engines/overlay/shaders/overlay_wireframe_vert.glsl +++ b/source/blender/draw/engines/overlay/shaders/overlay_wireframe_vert.glsl @@ -140,7 +140,10 @@ void main() } #endif + /* Curves do not need the offset since they *are* the curve geometry. */ +#if !defined(CURVES) gl_Position.z -= ndc_offset_factor * 0.5; +#endif vec3 rim_col, wire_col; if (colorType == V3D_SHADING_OBJECT_COLOR || colorType == V3D_SHADING_RANDOM_COLOR) { diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.cc b/source/blender/draw/intern/draw_cache_impl_mesh.cc index 920f4885e05b..e9fb4847cc6b 100644 --- a/source/blender/draw/intern/draw_cache_impl_mesh.cc +++ b/source/blender/draw/intern/draw_cache_impl_mesh.cc @@ -1721,7 +1721,7 @@ void DRW_mesh_batch_cache_create_requested(TaskGraph &task_graph, if (edit_mapping_valid) { DRW_ibo_request(cache.batch.edit_vnor, &mbuflist->ibo.points); DRW_vbo_request(cache.batch.edit_vnor, &mbuflist->vbo.pos); - if (!do_subdivision) { + if (!do_subdivision || do_cage) { /* For GPU subdivision, vertex normals are included in the `pos` VBO. */ DRW_vbo_request(cache.batch.edit_vnor, &mbuflist->vbo.vnor); } diff --git a/source/blender/draw/intern/draw_debug.cc b/source/blender/draw/intern/draw_debug.cc index c6d6e6891487..57b6fb31f8ce 100644 --- a/source/blender/draw/intern/draw_debug.cc +++ b/source/blender/draw/intern/draw_debug.cc @@ -20,13 +20,6 @@ #include "draw_shader.hh" #include "draw_shader_shared.hh" -#if defined(_DEBUG) || defined(WITH_DRAW_DEBUG) -# define DRAW_DEBUG -#else -/* Uncomment to forcibly enable debug draw in release mode. */ -// #define DRAW_DEBUG -#endif - namespace blender::draw { /* -------------------------------------------------------------------- */ @@ -301,7 +294,7 @@ blender::draw::DebugDraw *DRW_debug_get() void drw_debug_draw() { -#ifdef DRAW_DEBUG +#ifdef WITH_DRAW_DEBUG if (DST.debug == nullptr) { return; } @@ -316,7 +309,7 @@ void drw_debug_init() /* Module should not be used in release builds. */ /* TODO(@fclem): Hide the functions declarations without using `ifdefs` everywhere. */ -#ifdef DRAW_DEBUG +#ifdef WITH_DRAW_DEBUG /* TODO(@fclem): Convenience for now. Will have to move to #DRWManager. */ if (DST.debug == nullptr) { DST.debug = reinterpret_cast(new blender::draw::DebugDraw()); @@ -350,7 +343,7 @@ void DRW_debug_modelmat_reset() void DRW_debug_modelmat(const float modelmat[4][4]) { -#ifdef DRAW_DEBUG +#ifdef WITH_DRAW_DEBUG reinterpret_cast(DST.debug)->modelmat_set(modelmat); #else UNUSED_VARS(modelmat); @@ -384,7 +377,7 @@ void DRW_debug_m4_as_bbox(const float m[4][4], bool invert, const float color[4] void DRW_debug_bbox(const BoundBox *bbox, const float color[4]) { -#ifdef DRAW_DEBUG +#ifdef WITH_DRAW_DEBUG reinterpret_cast(DST.debug)->draw_bbox(*bbox, color); #else UNUSED_VARS(bbox, color); diff --git a/source/blender/draw/intern/draw_manager.cc b/source/blender/draw/intern/draw_manager.cc index 4eb8da24b2a2..c4cf22c173ab 100644 --- a/source/blender/draw/intern/draw_manager.cc +++ b/source/blender/draw/intern/draw_manager.cc @@ -141,7 +141,7 @@ void Manager::end_sync() void Manager::debug_bind() { -#ifdef _DEBUG +#ifdef WITH_DRAW_DEBUG if (DST.debug == nullptr) { return; } diff --git a/source/blender/draw/intern/draw_view.cc b/source/blender/draw/intern/draw_view.cc index 71fce7bb3306..3afa1adfbe37 100644 --- a/source/blender/draw/intern/draw_view.cc +++ b/source/blender/draw/intern/draw_view.cc @@ -262,7 +262,7 @@ void View::compute_visibility(ObjectBoundsBuf &bounds, culling_freeze_[0] = static_cast(culling_[0]); culling_freeze_.push_update(); } -#ifdef _DEBUG +#ifdef WITH_DRAW_DEBUG if (debug_freeze) { float4x4 persmat = data_freeze_[0].winmat * data_freeze_[0].viewmat; drw_debug_matrix_as_bbox(math::invert(persmat), float4(0, 1, 0, 1)); diff --git a/source/blender/editors/armature/pose_slide.cc b/source/blender/editors/armature/pose_slide.cc index 0f449e9177f1..3168f240185c 100644 --- a/source/blender/editors/armature/pose_slide.cc +++ b/source/blender/editors/armature/pose_slide.cc @@ -887,78 +887,67 @@ static void pose_slide_reset(tPoseSlideOp *pso) */ static void pose_slide_draw_status(bContext *C, tPoseSlideOp *pso) { - char status_str[UI_MAX_DRAW_STR]; - char limits_str[UI_MAX_DRAW_STR]; - char axis_str[50]; - char mode_str[32]; - char slider_str[UI_MAX_DRAW_STR]; - char bone_vis_str[50]; - + const char *mode_st; switch (pso->mode) { case POSESLIDE_PUSH: - STRNCPY(mode_str, IFACE_("Push Pose")); + mode_st = IFACE_("Push Pose"); break; case POSESLIDE_RELAX: - STRNCPY(mode_str, IFACE_("Relax Pose")); + mode_st = IFACE_("Relax Pose"); break; case POSESLIDE_BREAKDOWN: - STRNCPY(mode_str, IFACE_("Breakdown")); + mode_st = IFACE_("Breakdown"); break; case POSESLIDE_BLEND: - STRNCPY(mode_str, IFACE_("Blend to Neighbor")); + mode_st = IFACE_("Blend to Neighbor"); break; - default: /* Unknown. */ - STRNCPY(mode_str, IFACE_("Sliding-Tool")); + mode_st = IFACE_("Sliding-Tool"); break; } - switch (pso->axislock) { - case PS_LOCK_X: - STRNCPY(axis_str, IFACE_("[X]/Y/Z axis only (X to clear)")); - break; - case PS_LOCK_Y: - STRNCPY(axis_str, IFACE_("X/[Y]/Z axis only (Y to clear)")); - break; - case PS_LOCK_Z: - STRNCPY(axis_str, IFACE_("X/Y/[Z] axis only (Z to clear)")); - break; + ED_slider_property_label_set(pso->slider, mode_st); - default: - if (ELEM(pso->channels, PS_TFM_LOC, PS_TFM_ROT, PS_TFM_SIZE)) { - STRNCPY(axis_str, IFACE_("X/Y/Z = Axis Constraint")); - } - else { - axis_str[0] = '\0'; - } - break; - } + WorkspaceStatus status(C); + + status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); + status.item(IFACE_("Adjust"), ICON_MOUSE_MOVE); + + status.item_bool("", pso->channels == PS_TFM_LOC, ICON_EVENT_G); + status.item_bool("", pso->channels == PS_TFM_ROT, ICON_EVENT_R); + status.item_bool("", pso->channels == PS_TFM_SIZE, ICON_EVENT_S); + status.item_bool("", pso->channels == PS_TFM_BBONE_SHAPE, ICON_EVENT_B); + status.item_bool("", pso->channels == PS_TFM_PROPS, ICON_EVENT_C); switch (pso->channels) { case PS_TFM_LOC: - SNPRINTF(limits_str, IFACE_("[G]/R/S/B/C - Location only (G to clear) | %s"), axis_str); + status.item("Location Only", ICON_NONE); break; case PS_TFM_ROT: - SNPRINTF(limits_str, IFACE_("G/[R]/S/B/C - Rotation only (R to clear) | %s"), axis_str); + status.item("Rotation Only", ICON_NONE); break; case PS_TFM_SIZE: - SNPRINTF(limits_str, IFACE_("G/R/[S]/B/C - Scale only (S to clear) | %s"), axis_str); + status.item("Scale Only", ICON_NONE); break; case PS_TFM_BBONE_SHAPE: - STRNCPY(limits_str, IFACE_("G/R/S/[B]/C - Bendy Bone properties only (B to clear) | %s")); + status.item("Bendy Bones Only", ICON_NONE); break; case PS_TFM_PROPS: - STRNCPY(limits_str, IFACE_("G/R/S/B/[C] - Custom Properties only (C to clear) | %s")); + status.item("Custom Properties Only", ICON_NONE); break; default: - STRNCPY(limits_str, IFACE_("G/R/S/B/C - Limit to Transform/Property Set")); + status.item("Transform limits", ICON_NONE); break; } - STRNCPY(bone_vis_str, IFACE_("[H] - Toggle bone visibility")); - - ED_slider_status_string_get(pso->slider, slider_str, sizeof(slider_str)); + if (ELEM(pso->channels, PS_TFM_LOC, PS_TFM_ROT, PS_TFM_SIZE)) { + status.item_bool("", pso->axislock & PS_LOCK_X, ICON_EVENT_X); + status.item_bool("", pso->axislock & PS_LOCK_Y, ICON_EVENT_Y); + status.item_bool("", pso->axislock & PS_LOCK_Z, ICON_EVENT_Z); + status.item(pso->axislock == 0 ? IFACE_("Axis Constraint") : IFACE_("Axis Only"), ICON_NONE); + } if (hasNumInput(&pso->num)) { Scene *scene = pso->scene; @@ -966,13 +955,15 @@ static void pose_slide_draw_status(bContext *C, tPoseSlideOp *pso) outputNumInput(&pso->num, str_offs, scene->unit); - SNPRINTF(status_str, "%s: %s | %s", mode_str, str_offs, limits_str); + status.item(str_offs, ICON_NONE); } else { - SNPRINTF(status_str, "%s: %s | %s | %s", mode_str, limits_str, slider_str, bone_vis_str); + ED_slider_status_get(pso->slider, status); + View3D *v3d = static_cast(pso->area->spacedata.first); + status.item_bool( + IFACE_("Bone Visibility"), !(v3d->overlay.flag & V3D_OVERLAY_HIDE_BONES), ICON_EVENT_H); } - ED_workspace_status_text(C, status_str); ED_area_status_text(pso->area, ""); } diff --git a/source/blender/editors/asset/ED_asset_handle.hh b/source/blender/editors/asset/ED_asset_handle.hh index 2ba12bd4c288..e81f62252ac1 100644 --- a/source/blender/editors/asset/ED_asset_handle.hh +++ b/source/blender/editors/asset/ED_asset_handle.hh @@ -14,8 +14,6 @@ #pragma once -#include "DNA_asset_types.h" - struct AssetHandle; namespace blender::asset_system { class AssetRepresentation; @@ -24,7 +22,5 @@ class AssetRepresentation; namespace blender::ed::asset { asset_system::AssetRepresentation *handle_get_representation(const AssetHandle *asset); -int handle_get_preview_icon_id(const AssetHandle *asset); -int handle_get_preview_or_type_icon_id(const AssetHandle *asset); } // namespace blender::ed::asset diff --git a/source/blender/editors/asset/ED_asset_library.hh b/source/blender/editors/asset/ED_asset_library.hh index 61a207520c5b..3c61e5c31616 100644 --- a/source/blender/editors/asset/ED_asset_library.hh +++ b/source/blender/editors/asset/ED_asset_library.hh @@ -40,12 +40,17 @@ AssetLibraryReference library_reference_from_enum_value(int value); * Since this is meant for UI display, skips non-displayable libraries, that is, libraries with an * empty name or path. * - * \param include_generated: Whether to include libraries that are generated and thus cannot be - * written to. Setting this to false means only custom libraries will be - * included, since they are stored on disk with a single root directory, - * thus have a well defined location that can be written to. + * \param include_readonly: If set, the "All" and "Essentials" asset libraries will be added, which + * cannot be written to. + * \param include_current_file: If set, "Current File" asset library will be added. */ -const EnumPropertyItem *library_reference_to_rna_enum_itemf(bool include_generated); +const EnumPropertyItem *library_reference_to_rna_enum_itemf(bool include_readonly, + bool include_current_file); +/** + * Same as #library_reference_to_rna_enum_itemf(), but only includes custom asset libraries + * (libraries on disk, configured in the Preferences). + */ +const EnumPropertyItem *custom_libraries_rna_enum_itemf(); /** * Find the catalog with the given path in the library. Creates it in case it doesn't exist. diff --git a/source/blender/editors/asset/ED_asset_list.hh b/source/blender/editors/asset/ED_asset_list.hh index 719cda412fe4..3572af373f82 100644 --- a/source/blender/editors/asset/ED_asset_list.hh +++ b/source/blender/editors/asset/ED_asset_list.hh @@ -66,7 +66,6 @@ void iterate(const AssetLibraryReference &library_reference, AssetListIterFn fn) */ void storage_fetch(const AssetLibraryReference *library_reference, const bContext *C); bool is_loaded(const AssetLibraryReference *library_reference); -void previews_fetch(const AssetLibraryReference *library_reference, const bContext *C); /** * Clears this asset library and the "All" asset library for reload in both the static asset list * storage, as well as for all open asset browsers. Call this whenever the content of the given @@ -104,12 +103,6 @@ AssetHandle asset_handle_get_by_index(const AssetLibraryReference *library_refer asset_system::AssetRepresentation *asset_get_by_index( const AssetLibraryReference &library_reference, int asset_index); -bool asset_image_is_loading(const AssetLibraryReference *library_reference, - const AssetHandle *asset_handle); -void asset_preview_ensure_requested(const bContext &C, - const AssetLibraryReference *library_reference, - AssetHandle *asset_handle); - /** * \return True if the region needs a UI redraw. */ diff --git a/source/blender/editors/asset/intern/asset_handle.cc b/source/blender/editors/asset/intern/asset_handle.cc index cb72e185f01e..2510bfbb5aae 100644 --- a/source/blender/editors/asset/intern/asset_handle.cc +++ b/source/blender/editors/asset/intern/asset_handle.cc @@ -6,6 +6,8 @@ * \ingroup edasset */ +#include "AS_asset_representation.hh" + #include "DNA_space_types.h" #include "ED_fileselect.hh" @@ -19,14 +21,4 @@ asset_system::AssetRepresentation *handle_get_representation(const AssetHandle * return asset->file_data->asset; } -int handle_get_preview_icon_id(const AssetHandle *asset) -{ - return asset->file_data->preview_icon_id; -} - -int handle_get_preview_or_type_icon_id(const AssetHandle *asset) -{ - return ED_file_icon(asset->file_data); -} - } // namespace blender::ed::asset diff --git a/source/blender/editors/asset/intern/asset_library_reference_enum.cc b/source/blender/editors/asset/intern/asset_library_reference_enum.cc index 1bdd61d618ee..765a4199bd2f 100644 --- a/source/blender/editors/asset/intern/asset_library_reference_enum.cc +++ b/source/blender/editors/asset/intern/asset_library_reference_enum.cc @@ -75,29 +75,8 @@ AssetLibraryReference library_reference_from_enum_value(int value) return library; } -const EnumPropertyItem *library_reference_to_rna_enum_itemf(const bool include_generated) +static void rna_enum_add_custom_libraries(EnumPropertyItem **item, int *totitem) { - EnumPropertyItem *item = nullptr; - int totitem = 0; - - if (include_generated) { - /* Add predefined libraries that are generated and not simple directories that can be written - * to. */ - BLI_assert(rna_enum_asset_library_type_items[0].value == ASSET_LIBRARY_ALL); - RNA_enum_item_add(&item, &totitem, &rna_enum_asset_library_type_items[0]); - RNA_enum_item_add_separator(&item, &totitem); - - BLI_assert(rna_enum_asset_library_type_items[1].value == ASSET_LIBRARY_LOCAL); - RNA_enum_item_add(&item, &totitem, &rna_enum_asset_library_type_items[1]); - BLI_assert(rna_enum_asset_library_type_items[2].value == ASSET_LIBRARY_ESSENTIALS); - RNA_enum_item_add(&item, &totitem, &rna_enum_asset_library_type_items[2]); - } - - /* Add separator if needed. */ - if (!BLI_listbase_is_empty(&U.asset_libraries)) { - RNA_enum_item_add_separator(&item, &totitem); - } - int i; LISTBASE_FOREACH_INDEX (bUserAssetLibrary *, user_library, &U.asset_libraries, i) { /* Note that the path itself isn't checked for validity here. If an invalid library path is @@ -115,9 +94,47 @@ const EnumPropertyItem *library_reference_to_rna_enum_itemf(const bool include_g /* Use library path as description, it's a nice hint for users. */ EnumPropertyItem tmp = { enum_value, user_library->name, ICON_NONE, user_library->name, user_library->dirpath}; - RNA_enum_item_add(&item, &totitem, &tmp); + RNA_enum_item_add(item, totitem, &tmp); + } +} + +const EnumPropertyItem *library_reference_to_rna_enum_itemf(const bool include_readonly, + const bool include_current_file) +{ + EnumPropertyItem *item = nullptr; + int totitem = 0; + + if (include_readonly) { + BLI_assert(rna_enum_asset_library_type_items[0].value == ASSET_LIBRARY_ALL); + RNA_enum_item_add(&item, &totitem, &rna_enum_asset_library_type_items[0]); + RNA_enum_item_add_separator(&item, &totitem); + } + if (include_current_file) { + BLI_assert(rna_enum_asset_library_type_items[1].value == ASSET_LIBRARY_LOCAL); + RNA_enum_item_add(&item, &totitem, &rna_enum_asset_library_type_items[1]); + } + if (include_readonly) { + BLI_assert(rna_enum_asset_library_type_items[2].value == ASSET_LIBRARY_ESSENTIALS); + RNA_enum_item_add(&item, &totitem, &rna_enum_asset_library_type_items[2]); } + /* Add separator if needed. */ + if (!BLI_listbase_is_empty(&U.asset_libraries) && (include_readonly || include_current_file)) { + RNA_enum_item_add_separator(&item, &totitem); + } + rna_enum_add_custom_libraries(&item, &totitem); + + RNA_enum_item_end(&item, &totitem); + return item; +} + +const EnumPropertyItem *custom_libraries_rna_enum_itemf() +{ + EnumPropertyItem *item = nullptr; + int totitem = 0; + + rna_enum_add_custom_libraries(&item, &totitem); + RNA_enum_item_end(&item, &totitem); return item; } diff --git a/source/blender/editors/asset/intern/asset_list.cc b/source/blender/editors/asset/intern/asset_list.cc index 026202766bec..21d568548550 100644 --- a/source/blender/editors/asset/intern/asset_list.cc +++ b/source/blender/editors/asset/intern/asset_list.cc @@ -16,6 +16,7 @@ #include #include "AS_asset_library.hh" +#include "AS_asset_representation.hh" #include "BKE_context.hh" #include "BKE_screen.hh" @@ -32,6 +33,7 @@ #include "../space_file/file_indexer.hh" #include "../space_file/filelist.hh" +#include "ED_asset_handle.hh" #include "ED_asset_indexer.hh" #include "ED_asset_list.hh" #include "ED_fileselect.hh" @@ -77,32 +79,9 @@ class FileListWrapper { } }; -class PreviewTimer { - /* Non-owning! The Window-Manager registers and owns this. */ - wmTimer *timer_ = nullptr; - - public: - void ensure_running(const bContext *C) - { - if (!timer_) { - timer_ = WM_event_timer_add_notifier( - CTX_wm_manager(C), CTX_wm_window(C), NC_ASSET | ND_ASSET_LIST_PREVIEW, 0.01); - } - } - - void stop(const bContext *C) - { - if (timer_) { - WM_event_timer_remove_notifier(CTX_wm_manager(C), CTX_wm_window(C), timer_); - timer_ = nullptr; - } - } -}; - class AssetList : NonCopyable { FileListWrapper filelist_; AssetLibraryReference library_ref_; - PreviewTimer previews_timer_; public: AssetList() = delete; @@ -114,16 +93,12 @@ class AssetList : NonCopyable { void setup(); void fetch(const bContext &C); - void update_previews(const bContext &C); void clear(const bContext *C); AssetHandle asset_get_by_index(int index) const; - void previews_job_update(const bContext *C); bool needs_refetch() const; bool is_loaded() const; - bool is_asset_preview_loading(const AssetHandle &asset) const; - void ensure_asset_preview_requested(const bContext &C, AssetHandle &asset); asset_system::AssetLibrary *asset_library() const; void iterate(AssetListIndexIterFn fn) const; void iterate(AssetListIterFn fn) const; @@ -157,7 +132,6 @@ void AssetList::setup() true, "", ""); - filelist_set_no_preview_auto_cache(files); const bool use_asset_indexer = !USER_EXPERIMENTAL_TEST(&U, no_asset_indexing); filelist_setindexer(files, use_asset_indexer ? &index::file_indexer_asset : &file_indexer_noop); @@ -187,16 +161,6 @@ void AssetList::fetch(const bContext &C) filelist_filter(files); } -void AssetList::update_previews(const bContext &C) -{ - if (filelist_cache_previews_enabled(filelist_)) { - /* Get newest loaded previews from the background thread queue. */ - filelist_cache_previews_update(filelist_); - } - /* Update preview job, it might have to be stopped. */ - this->previews_job_update(&C); -} - bool AssetList::needs_refetch() const { return filelist_needs_force_reset(filelist_) || filelist_needs_reading(filelist_); @@ -207,23 +171,6 @@ bool AssetList::is_loaded() const return filelist_is_ready(filelist_); } -void AssetList::ensure_asset_preview_requested(const bContext &C, AssetHandle &asset) -{ - /* Ensure previews are enabled. */ - filelist_cache_previews_set(filelist_, true); - - if (filelist_file_ensure_preview_requested(filelist_, - const_cast(asset.file_data))) - { - previews_timer_.ensure_running(&C); - } -} - -bool AssetList::is_asset_preview_loading(const AssetHandle &asset) const -{ - return filelist_file_is_preview_pending(filelist_, asset.file_data); -} - asset_system::AssetLibrary *AssetList::asset_library() const { return reinterpret_cast(filelist_asset_library(filelist_)); @@ -264,28 +211,6 @@ void AssetList::iterate(AssetListIterFn fn) const } } -void AssetList::previews_job_update(const bContext *C) -{ - FileList *files = filelist_; - - if (!filelist_cache_previews_enabled(files)) { - previews_timer_.stop(C); - return; - } - - { - const bool previews_running = filelist_cache_previews_running(files) && - !filelist_cache_previews_done(files); - if (previews_running) { - previews_timer_.ensure_running(C); - } - else { - /* Preview is not running, no need to keep generating update events! */ - previews_timer_.stop(C); - } - } -} - void AssetList::clear(const bContext *C) { /* Based on #ED_fileselect_clear() */ @@ -466,14 +391,6 @@ bool is_loaded(const AssetLibraryReference *library_reference) return list->is_loaded(); } -void previews_fetch(const AssetLibraryReference *library_reference, const bContext *C) -{ - AssetList *list = lookup_list(*library_reference); - if (list) { - list->update_previews(*C); - } -} - void clear(const AssetLibraryReference *library_reference, const bContext *C) { AssetList *list = lookup_list(*library_reference); @@ -556,21 +473,6 @@ asset_system::AssetRepresentation *asset_get_by_index( return reinterpret_cast(asset_handle.file_data->asset); } -bool asset_image_is_loading(const AssetLibraryReference *library_reference, - const AssetHandle *asset_handle) -{ - const AssetList *list = lookup_list(*library_reference); - return list->is_asset_preview_loading(*asset_handle); -} - -void asset_preview_ensure_requested(const bContext &C, - const AssetLibraryReference *library_reference, - AssetHandle *asset_handle) -{ - AssetList *list = lookup_list(*library_reference); - list->ensure_asset_preview_requested(C, *asset_handle); -} - bool listen(const wmNotifier *notifier) { return AssetList::listen(*notifier); diff --git a/source/blender/editors/asset/intern/asset_ops.cc b/source/blender/editors/asset/intern/asset_ops.cc index 74fff033f6b2..16ae92b64e59 100644 --- a/source/blender/editors/asset/intern/asset_ops.cc +++ b/source/blender/editors/asset/intern/asset_ops.cc @@ -836,7 +836,7 @@ static const EnumPropertyItem *rna_asset_library_reference_itemf(bContext * /*C* PropertyRNA * /*prop*/, bool *r_free) { - const EnumPropertyItem *items = library_reference_to_rna_enum_itemf(false); + const EnumPropertyItem *items = custom_libraries_rna_enum_itemf(); if (!items) { *r_free = false; return nullptr; diff --git a/source/blender/editors/asset/intern/asset_shelf_asset_view.cc b/source/blender/editors/asset/intern/asset_shelf_asset_view.cc index ef6019067435..7dbded3b7f48 100644 --- a/source/blender/editors/asset/intern/asset_shelf_asset_view.cc +++ b/source/blender/editors/asset/intern/asset_shelf_asset_view.cc @@ -206,7 +206,7 @@ static std::optional create_activate_operator_params( return wmOperatorCallParams{ot, op_props, WM_OP_INVOKE_REGION_WIN}; } -void AssetViewItem::build_grid_tile(const bContext &C, uiLayout &layout) const +void AssetViewItem::build_grid_tile(const bContext & /*C*/, uiLayout &layout) const { const AssetView &asset_view = reinterpret_cast(this->get_view()); const AssetShelfType &shelf_type = *asset_view.shelf_.type; @@ -254,13 +254,17 @@ void AssetViewItem::build_grid_tile(const bContext &C, uiLayout &layout) const /* Request preview when drawing. Grid views have an optimization to only draw items that are * actually visible, so only previews scrolled into view will be loaded this way. This reduces * total loading time and memory footprint. */ - list::asset_preview_ensure_requested(C, &asset_view.library_ref_, &asset_handle); + asset_.ensure_previewable(); const int preview_id = [&]() -> int { - if (list::asset_image_is_loading(&asset_view.library_ref_, &asset_handle)) { + /* Show loading icon while list is loading still. Previews might get pushed out of view again + * while the list grows, which can cause a lot of flickering. Note that this also means the + * actual loading of previews is delayed, because that only happens when a preview icon-ID is + * attached to a button. */ + if (!list::is_loaded(&asset_view.library_ref_)) { return ICON_TEMP; } - return handle_get_preview_or_type_icon_id(&asset_handle); + return asset_preview_or_icon(asset_); }(); ui::PreviewGridItem::build_grid_tile_button(layout, preview_id); @@ -337,7 +341,6 @@ void build_asset_view(uiLayout &layout, const bContext &C) { list::storage_fetch(&library_ref, &C); - list::previews_fetch(&library_ref, &C); const asset_system::AssetLibrary *library = list::library_get_once_available(library_ref); if (!library) { diff --git a/source/blender/editors/asset/intern/asset_ui_utils.cc b/source/blender/editors/asset/intern/asset_ui_utils.cc index 7189136725de..e6bfe6cdc805 100644 --- a/source/blender/editors/asset/intern/asset_ui_utils.cc +++ b/source/blender/editors/asset/intern/asset_ui_utils.cc @@ -12,6 +12,11 @@ #include "AS_asset_representation.hh" #include "BKE_preferences.h" +#include "BKE_preview_image.hh" + +#include "UI_interface_icons.hh" +#include "UI_resources.hh" + #include "DNA_userdef_types.h" #include "ED_asset.hh" #include "RNA_access.hh" @@ -35,6 +40,28 @@ std::string asset_tooltip(const asset_system::AssetRepresentation &asset, const return complete_string; } +BIFIconID asset_preview_icon_id(const asset_system::AssetRepresentation &asset) +{ + if (const PreviewImage *preview = asset.get_preview()) { + if (!BKE_previewimg_is_invalid(preview)) { + return preview->runtime->icon_id; + } + } + + return ICON_NONE; +} + +BIFIconID asset_preview_or_icon(const asset_system::AssetRepresentation &asset) +{ + const BIFIconID preview_icon = asset_preview_icon_id(asset); + if (preview_icon != ICON_NONE) { + return preview_icon; + } + + /* Preview image not found or invalid. Use type icon. */ + return UI_icon_from_idcode(asset.get_id_type()); +} + const bUserAssetLibrary *get_asset_library_from_opptr(PointerRNA &ptr) { const int enum_value = RNA_enum_get(&ptr, "asset_library_reference"); diff --git a/source/blender/editors/curves/intern/curves_selection.cc b/source/blender/editors/curves/intern/curves_selection.cc index 07bef3dfca90..1e5a9b89e4a6 100644 --- a/source/blender/editors/curves/intern/curves_selection.cc +++ b/source/blender/editors/curves/intern/curves_selection.cc @@ -837,7 +837,7 @@ static std::optional find_closest_curve_to_screen_co( return; } - best_match = {curve, std::sqrt(distance_proj_sq)}; + best_match = {curve, distance_proj_sq}; return; } @@ -853,7 +853,7 @@ static std::optional find_closest_curve_to_screen_co( return; } - best_match = {curve, std::sqrt(distance_proj_sq)}; + best_match = {curve, distance_proj_sq}; }; for (const int segment_i : points.drop_back(1)) { process_segment(segment_i, segment_i + 1); diff --git a/source/blender/editors/curves/intern/select_linked_pick.cc b/source/blender/editors/curves/intern/select_linked_pick.cc index 3e213a7e515f..faa5b3c36612 100644 --- a/source/blender/editors/curves/intern/select_linked_pick.cc +++ b/source/blender/editors/curves/intern/select_linked_pick.cc @@ -21,7 +21,7 @@ namespace blender::ed::curves { struct ClosestCurveDataBlock { Curves *curves_id = nullptr; - FindClosestData elem = {}; + FindClosestData elem; }; static ClosestCurveDataBlock find_closest_curve(const Depsgraph &depsgraph, const ViewContext &vc, diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc index 8892923ff3f1..7e610c305724 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc @@ -3088,6 +3088,7 @@ static int grease_pencil_reproject_exec(bContext *C, wmOperator *op) const bke::greasepencil::Layer &layer = grease_pencil.layer(info.layer_index); if (mode == ReprojectMode::Surface) { const float4x4 layer_space_to_world_space = layer.to_world_space(*object); + const float4x4 world_space_to_layer_space = math::invert(layer_space_to_world_space); points_to_reproject.foreach_index(GrainSize(4096), [&](const int point_i) { float3 &position = positions[point_i]; const float3 world_pos = math::transform_point(layer_space_to_world_space, position); @@ -3122,7 +3123,9 @@ static int grease_pencil_reproject_exec(bContext *C, wmOperator *op) hit_normal)) { /* Apply offset over surface. */ - position = hit_position + math::normalize(ray_start - hit_position) * offset; + position = math::transform_point( + world_space_to_layer_space, + hit_position + math::normalize(ray_start - hit_position) * offset); } }); } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_layers.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_layers.cc index b0e65bf08a02..e651f76716d7 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_layers.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_layers.cc @@ -10,6 +10,7 @@ #include "BLI_math_matrix.hh" #include "BLI_string.h" +#include "BKE_attribute_math.hh" #include "BKE_context.hh" #include "BKE_grease_pencil.hh" #include "BKE_object.hh" @@ -444,21 +445,36 @@ static int grease_pencil_layer_hide_exec(bContext *C, wmOperator *op) GreasePencil &grease_pencil = *blender::ed::greasepencil::from_context(*C); const bool unselected = RNA_boolean_get(op->ptr, "unselected"); - if (!grease_pencil.has_active_layer()) { + TreeNode *active_node = grease_pencil.get_active_node(); + + if (!active_node) { return OPERATOR_CANCELLED; } if (unselected) { - /* hide unselected */ - for (Layer *layer : grease_pencil.layers_for_write()) { - const bool is_active = grease_pencil.is_layer_active(layer); - layer->set_visible(is_active); + /* If active node is a layer group, only show parent layer groups and child nodes. + * If active node is a layer, only show parent layer groups and active node. */ + + for (TreeNode *node : grease_pencil.nodes_for_write()) { + bool should_be_visible = false; + + if (active_node->is_group()) { + should_be_visible = node->is_child_of(active_node->as_group()); + if (node->is_group()) { + should_be_visible |= active_node->is_child_of(node->as_group()); + } + } + else if (node->is_group()) { + should_be_visible = active_node->is_child_of(node->as_group()); + } + + node->set_visible(should_be_visible); } + active_node->set_visible(true); } else { /* hide selected/active */ - Layer &active_layer = *grease_pencil.get_active_layer(); - active_layer.set_visible(false); + active_node->set_visible(false); } /* notifiers */ @@ -590,12 +606,12 @@ static int grease_pencil_layer_lock_all_exec(bContext *C, wmOperator *op) GreasePencil &grease_pencil = *blender::ed::greasepencil::from_context(*C); const bool lock_value = RNA_boolean_get(op->ptr, "lock"); - if (grease_pencil.layers().is_empty()) { + if (grease_pencil.nodes().is_empty()) { return OPERATOR_CANCELLED; } - for (Layer *layer : grease_pencil.layers_for_write()) { - layer->set_locked(lock_value); + for (TreeNode *node : grease_pencil.nodes_for_write()) { + node->set_locked(lock_value); } DEG_id_tag_update(&grease_pencil.id, ID_RECALC_GEOMETRY); @@ -615,7 +631,7 @@ static void GREASE_PENCIL_OT_layer_lock_all(wmOperatorType *ot) /* callbacks */ ot->exec = grease_pencil_layer_lock_all_exec; - ot->poll = active_grease_pencil_layer_poll; + ot->poll = grease_pencil_context_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -1061,24 +1077,65 @@ static void duplicate_layer_and_frames(GreasePencil &dst_grease_pencil, const int current_frame) { using namespace blender::bke::greasepencil; - Layer &dst_layer = dst_grease_pencil.duplicate_layer(src_layer); - dst_layer.frames_for_write().clear(); - for (const auto [frame_number, frame] : src_layer.frames().items()) { - if ((copy_frame_mode == DuplicateCopyMode::Active) && - (&frame != src_layer.frame_at(current_frame))) - { - continue; + if (&dst_grease_pencil == &src_grease_pencil) { + /* Duplicating frames is valid if copying from the same object. + * The resulting frames will reference existing drawings, which is more efficient than making + * full copies. */ + Layer &dst_layer = dst_grease_pencil.duplicate_layer(src_layer); + + dst_layer.frames_for_write().clear(); + for (const auto [frame_number, frame] : src_layer.frames().items()) { + if ((copy_frame_mode == DuplicateCopyMode::Active) && + (&frame != src_layer.frame_at(current_frame))) + { + continue; + } + const int duration = src_layer.get_frame_duration_at(frame_number); + + Drawing *dst_drawing = dst_grease_pencil.insert_frame( + dst_layer, frame_number, duration, eBezTriple_KeyframeType(frame.type)); + if (dst_drawing != nullptr) { + /* Duplicate drawing. */ + const Drawing &src_drawing = *src_grease_pencil.get_drawing_at(src_layer, frame_number); + *dst_drawing = src_drawing; + } } - const int duration = src_layer.get_frame_duration_at(frame_number); + } + else { + /* When copying from another object a new layer is created and all drawings are copied. */ + const int src_layer_index = *src_grease_pencil.get_layer_index(src_layer); - Drawing *dst_drawing = dst_grease_pencil.insert_frame( - dst_layer, frame_number, duration, eBezTriple_KeyframeType(frame.type)); - if (dst_drawing != nullptr) { - /* Duplicate drawing. */ - const Drawing &src_drawing = *src_grease_pencil.get_drawing_at(src_layer, frame_number); - *dst_drawing = src_drawing; + Layer &dst_layer = dst_grease_pencil.add_layer(src_layer.name()); + const int dst_layer_index = dst_grease_pencil.layers().size() - 1; + + BKE_grease_pencil_copy_layer_parameters(src_layer, dst_layer); + + const bke::AttributeAccessor src_attributes = src_grease_pencil.attributes(); + bke::MutableAttributeAccessor dst_attributes = dst_grease_pencil.attributes_for_write(); + src_attributes.foreach_attribute([&](const bke::AttributeIter &iter) { + if (iter.domain != bke::AttrDomain::Layer) { + return; + } + bke::GAttributeReader reader = src_attributes.lookup(iter.name, iter.domain, iter.data_type); + BLI_assert(reader); + bke::GAttributeWriter writer = dst_attributes.lookup_or_add_for_write( + iter.name, iter.domain, iter.data_type); + if (writer) { + const CPPType &cpptype = *bke::custom_data_type_to_cpp_type(iter.data_type); + BUFFER_FOR_CPP_TYPE_VALUE(cpptype, buffer); + reader.varray.get(src_layer_index, buffer); + writer.varray.set_by_copy(dst_layer_index, buffer); + } + writer.finish(); + }); + + std::optional frame_select = std::nullopt; + if (copy_frame_mode == DuplicateCopyMode::Active) { + frame_select = current_frame; } + dst_grease_pencil.copy_frames_from_layer( + dst_layer, src_grease_pencil, src_layer, frame_select); } } diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_weight_paint.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_weight_paint.cc index e114a883e4f6..bdf51951ea05 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_weight_paint.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_weight_paint.cc @@ -447,8 +447,8 @@ void add_armature_automatic_weights(Scene &scene, Object &object, const Object & struct ClosestGreasePencilDrawing { const bke::greasepencil::Drawing *drawing = nullptr; - int active_defgroup_index; - ed::curves::FindClosestData elem = {}; + int active_defgroup_index = -1; + ed::curves::FindClosestData elem; }; static int weight_sample_invoke(bContext *C, wmOperator * /*op*/, const wmEvent *event) diff --git a/source/blender/editors/include/ED_asset.hh b/source/blender/editors/include/ED_asset.hh index 5fc4cfcec413..adf74eb37f15 100644 --- a/source/blender/editors/include/ED_asset.hh +++ b/source/blender/editors/include/ED_asset.hh @@ -25,6 +25,9 @@ #include "../asset/ED_asset_filter.hh" // IWYU pragma: export #include "../asset/ED_asset_import.hh" // IWYU pragma: export +/** From UI_resources.hh. */ +using BIFIconID = int; + struct PointerRNA; namespace blender::ed::asset { @@ -32,6 +35,9 @@ namespace blender::ed::asset { std::string asset_tooltip(const asset_system::AssetRepresentation &asset, bool include_name = true); +BIFIconID asset_preview_icon_id(const asset_system::AssetRepresentation &asset); +BIFIconID asset_preview_or_icon(const asset_system::AssetRepresentation &asset); + void operatortypes_asset(); /** diff --git a/source/blender/editors/interface/eyedroppers/eyedropper_color.cc b/source/blender/editors/interface/eyedroppers/eyedropper_color.cc index 3031be6e8ead..bd616053ed2f 100644 --- a/source/blender/editors/interface/eyedroppers/eyedropper_color.cc +++ b/source/blender/editors/interface/eyedroppers/eyedropper_color.cc @@ -634,8 +634,8 @@ static int eyedropper_modal(bContext *C, wmOperator *op, const wmEvent *event) } else { WorkspaceStatus status(C); - status.opmodal(IFACE_("Cancel"), op->type, EYE_MODAL_CANCEL); status.opmodal(IFACE_("Confirm"), op->type, EYE_MODAL_SAMPLE_CONFIRM); + status.opmodal(IFACE_("Cancel"), op->type, EYE_MODAL_CANCEL); #ifdef __APPLE__ status.item(TIP_("Press 'Enter' to sample outside of a Blender window"), ICON_INFO); #endif diff --git a/source/blender/editors/interface/interface_context_menu.cc b/source/blender/editors/interface/interface_context_menu.cc index 69605d009781..c8b93eb432f2 100644 --- a/source/blender/editors/interface/interface_context_menu.cc +++ b/source/blender/editors/interface/interface_context_menu.cc @@ -417,7 +417,7 @@ static void ui_but_user_menu_add(bContext *C, uiBut *but, bUserMenu *um) } } #else - STRNCPY(drawstr, idname); + drawstr = idname; #endif } else if (but->tip_label_func) { diff --git a/source/blender/editors/interface/interface_icons.cc b/source/blender/editors/interface/interface_icons.cc index e1b39949aba0..4c476637585e 100644 --- a/source/blender/editors/interface/interface_icons.cc +++ b/source/blender/editors/interface/interface_icons.cc @@ -1135,6 +1135,32 @@ void ui_icon_ensure_deferred(const bContext *C, const int icon_id, const bool bi } } +bool ui_icon_is_preview_deferred_loading(const int icon_id, const bool big) +{ + const Icon *icon = BKE_icon_get(icon_id); + if (icon == nullptr) { + return false; + } + + const DrawInfo *di = static_cast(icon->drawinfo); + if (icon->drawinfo == nullptr) { + return false; + } + + if (di->type == ICON_TYPE_PREVIEW) { + const ID *id = (icon->id_type != 0) ? static_cast(icon->obj) : nullptr; + const PreviewImage *prv = id ? BKE_previewimg_id_get(id) : + static_cast(icon->obj); + + if (prv) { + const int size = big ? ICON_SIZE_PREVIEW : ICON_SIZE_ICON; + return (prv->flag[size] & PRV_RENDERING) != 0; + } + } + + return false; +} + /** * * Only call with valid pointer from UI_icon_draw. * * Only called when icon has changed. diff --git a/source/blender/editors/interface/interface_intern.hh b/source/blender/editors/interface/interface_intern.hh index aed8a989bfa0..5efcda1287e4 100644 --- a/source/blender/editors/interface/interface_intern.hh +++ b/source/blender/editors/interface/interface_intern.hh @@ -1353,8 +1353,7 @@ void ui_draw_preview_item_stateless(const uiFontStyle *fstyle, blender::StringRef name, int iconid, const uchar text_col[4], - eFontStyle_Align text_align, - bool draw_as_icon = false); + eFontStyle_Align text_align); #define UI_TEXT_MARGIN_X 0.4f #define UI_POPUP_MARGIN (UI_SCALE_FAC * 12) @@ -1378,6 +1377,8 @@ void uiStyleInit(); /* interface_icons.cc */ void ui_icon_ensure_deferred(const bContext *C, int icon_id, bool big); +/** Is \a icon_id a preview icon that is being loaded/rendered? */ +bool ui_icon_is_preview_deferred_loading(int icon_id, bool big); int ui_id_icon_get(const bContext *C, ID *id, bool big); /* interface_icons_event.cc */ diff --git a/source/blender/editors/interface/interface_ops.cc b/source/blender/editors/interface/interface_ops.cc index ca2d7b525d7f..8c18515353f7 100644 --- a/source/blender/editors/interface/interface_ops.cc +++ b/source/blender/editors/interface/interface_ops.cc @@ -386,7 +386,7 @@ static void UI_OT_reset_default_button(wmOperatorType *ot) /* flags */ /* Don't set #OPTYPE_UNDO because #operator_button_property_finish_with_undo * is responsible for the undo push. */ - ot->flag = 0; + ot->flag = OPTYPE_REGISTER; /* properties */ RNA_def_boolean( diff --git a/source/blender/editors/interface/interface_query.cc b/source/blender/editors/interface/interface_query.cc index 702452b9a34c..4ea5120ec848 100644 --- a/source/blender/editors/interface/interface_query.cc +++ b/source/blender/editors/interface/interface_query.cc @@ -160,6 +160,13 @@ int ui_but_icon(const uiBut *but) return ICON_NONE; } + const bool is_preview = (but->flag & UI_BUT_ICON_PREVIEW) != 0; + + /* While icon is loading, show loading icon at the normal icon size. */ + if (is_preview && ui_icon_is_preview_deferred_loading(but->icon, true)) { + return ICON_TEMP; + } + /* Consecutive icons can be toggle between. */ if (but->drawflag & UI_BUT_ICON_REVERSE) { return but->icon - but->iconadd; diff --git a/source/blender/editors/interface/interface_widgets.cc b/source/blender/editors/interface/interface_widgets.cc index e816cce9cec6..1cf4bd911eca 100644 --- a/source/blender/editors/interface/interface_widgets.cc +++ b/source/blender/editors/interface/interface_widgets.cc @@ -1226,24 +1226,6 @@ static float widget_alpha_factor(const uiWidgetStateInfo *state) return 1.0f; } -static void widget_draw_preview(BIFIconID icon, float alpha, const rcti *rect) -{ - if (icon == ICON_NONE) { - return; - } - - const int w = BLI_rcti_size_x(rect); - const int h = BLI_rcti_size_y(rect); - const int size = std::min(w, h) - PREVIEW_PAD * 2; - - if (size > 0) { - const int x = rect->xmin + w / 2 - size / 2; - const int y = rect->ymin + h / 2 - size / 2; - - UI_icon_draw_preview(x, y, icon, 1.0f, alpha, size); - } -} - static void widget_draw_icon_centered(const BIFIconID icon, const float aspect, const float alpha, @@ -1271,6 +1253,39 @@ static void widget_draw_icon_centered(const BIFIconID icon, } } +/** + * \param mono_color: Only for drawing monochrome icons. + */ +static void widget_draw_preview_icon( + BIFIconID icon, float alpha, float aspect, const rcti *rect, const uchar mono_color[4]) +{ + if (icon == ICON_NONE) { + return; + } + + if (icon < BIFICONID_LAST_STATIC) { + const bool is_loading_icon = icon == ICON_TEMP; + /* Special handling: Previews often want to show a loading icon while the preview is being + * loaded. Draw this with reduced opacity. */ + if (is_loading_icon) { + alpha *= 0.5f; + } + widget_draw_icon_centered(icon, aspect, alpha, rect, mono_color); + return; + } + + const int w = BLI_rcti_size_x(rect); + const int h = BLI_rcti_size_y(rect); + const int size = std::min(w, h) - PREVIEW_PAD * 2; + + if (size > 0) { + const int x = rect->xmin + w / 2 - size / 2; + const int y = rect->ymin + h / 2 - size / 2; + + UI_icon_draw_preview(x, y, icon, 1.0f, alpha, size); + } +} + static int ui_but_draw_menu_icon(const uiBut *but) { return (but->flag & UI_BUT_ICON_SUBMENU) && (but->emboss == UI_EMBOSS_PULLDOWN); @@ -1281,9 +1296,11 @@ static int ui_but_draw_menu_icon(const uiBut *but) static void widget_draw_icon( const uiBut *but, BIFIconID icon, float alpha, const rcti *rect, const uchar mono_color[4]) { + const float aspect = but->block->aspect * UI_INV_SCALE_FAC; + if (but->flag & UI_BUT_ICON_PREVIEW) { GPU_blend(GPU_BLEND_ALPHA); - widget_draw_preview(icon, alpha, rect); + widget_draw_preview_icon(icon, alpha, aspect, rect, mono_color); GPU_blend(GPU_BLEND_NONE); return; } @@ -1293,7 +1310,6 @@ static void widget_draw_icon( return; } - const float aspect = but->block->aspect * UI_INV_SCALE_FAC; const float height = ICON_DEFAULT_HEIGHT / aspect; /* calculate blend color */ @@ -2252,11 +2268,14 @@ static void widget_draw_text_icon(const uiFontStyle *fstyle, widget_draw_node_link_socket(wcol, &temp, but, alpha); } + const uchar *icon_color = (but->col[3] != 0) ? but->col : wcol->text; + /* If there's an icon too (made with uiDefIconTextBut) then draw the icon * and offset the text label to accommodate it */ /* Big previews with optional text label below */ if (but->flag & UI_BUT_ICON_PREVIEW && ui_block_is_menu(but->block)) { + const float aspect = but->block->aspect * UI_INV_SCALE_FAC; const BIFIconID icon = ui_but_icon(but); int icon_size = BLI_rcti_size_y(rect); int text_size = 0; @@ -2271,7 +2290,7 @@ static void widget_draw_text_icon(const uiFontStyle *fstyle, /* draw icon in rect above the space reserved for the label */ rect->ymin += text_size; GPU_blend(GPU_BLEND_ALPHA); - widget_draw_preview(icon, alpha, rect); + widget_draw_preview_icon(icon, alpha, aspect, rect, icon_color); GPU_blend(GPU_BLEND_NONE); /* offset rect to draw label in */ @@ -2323,7 +2342,7 @@ static void widget_draw_text_icon(const uiFontStyle *fstyle, } /* By default icon is the color of text, but can optionally override with but->col. */ - widget_draw_icon(but, icon, alpha, rect, (but->col[3] != 0) ? but->col : wcol->text); + widget_draw_icon(but, icon, alpha, rect, icon_color); if (show_menu_icon) { BLI_assert(but->block->content_hints & UI_BLOCK_CONTAINS_SUBMENU_BUT); @@ -2732,6 +2751,12 @@ static void widget_state_menu_item(uiWidgetType *wt, wt->wcol.inner[3] = 255; wt->wcol.text[3] = 255; } + /* Subtle background for larger preview buttons, so text and icons feel connected (esp. for while + * previews are loading still and a loading icon is displayed). */ + else if (state->but_flag & UI_BUT_ICON_PREVIEW) { + copy_v3_v3_uchar(wt->wcol.inner, wt->wcol.text); + wt->wcol.inner[3] = 11; + } } /** \} */ @@ -4321,17 +4346,9 @@ static void widget_preview_tile(uiBut *but, widget_list_itembut(but, wcol, rect, state, roundboxalign, zoom); } - /* When the button is not tagged as having a preview icon, do regular icon drawing with the - * standard icon size. */ - const bool draw_as_icon = !(but->flag & UI_BUT_ICON_PREVIEW); - - ui_draw_preview_item_stateless(&UI_style_get()->widget, - rect, - but->drawstr, - but->icon, - wcol->text, - UI_STYLE_TEXT_CENTER, - draw_as_icon); + const BIFIconID icon = ui_but_icon(but); + ui_draw_preview_item_stateless( + &UI_style_get()->widget, rect, but->drawstr, icon, wcol->text, UI_STYLE_TEXT_CENTER); } static void widget_optionbut(uiWidgetColors *wcol, @@ -5723,8 +5740,7 @@ void ui_draw_preview_item_stateless(const uiFontStyle *fstyle, const blender::StringRef name, int iconid, const uchar text_col[4], - eFontStyle_Align text_align, - bool draw_as_icon) + eFontStyle_Align text_align) { rcti trect = *rect; const float text_size = UI_UNIT_Y; @@ -5732,27 +5748,12 @@ void ui_draw_preview_item_stateless(const uiFontStyle *fstyle, float alpha = 1.0f; - { - /* Special handling: Previews often want to show a loading icon while the preview is being - * loaded. Draw this with reduced opacity. */ - const bool is_loading_icon = iconid == ICON_TEMP; - if (is_loading_icon) { - alpha *= 0.5f; - draw_as_icon = true; - } - } - if (has_text) { /* draw icon in rect above the space reserved for the label */ rect->ymin += text_size; } GPU_blend(GPU_BLEND_ALPHA); - if (draw_as_icon) { - widget_draw_icon_centered(iconid, 1.0f, alpha, rect, text_col); - } - else { - widget_draw_preview(iconid, alpha, rect); - } + widget_draw_preview_icon(iconid, alpha, 1.0f, rect, text_col); GPU_blend(GPU_BLEND_NONE); if (!has_text) { diff --git a/source/blender/editors/interface/regions/interface_region_hud.cc b/source/blender/editors/interface/regions/interface_region_hud.cc index 9f453969cf6e..f5deead52f5a 100644 --- a/source/blender/editors/interface/regions/interface_region_hud.cc +++ b/source/blender/editors/interface/regions/interface_region_hud.cc @@ -40,11 +40,70 @@ /** \name Utilities * \{ */ +/** + * Return the index of `region` of other regions in the area (of the same type). + */ +static int area_calc_region_type_index(const ScrArea *area, const ARegion *region) +{ + const int region_type = region->regiontype; + int index = 0; + LISTBASE_FOREACH (const ARegion *, region_iter, &area->regionbase) { + if (region_iter->regiontype != region_type) { + continue; + } + if (region_iter == region) { + return index; + } + index += 1; + } + + /* Bad input as the `region` was not found in the `area`, + * -1 causes the first to be returned. */ + BLI_assert_unreachable(); + return -1; +} + +/** + * Find the areas region by type and index, or just by type (if the index isn't found). + */ +static ARegion *area_find_region_by_type_and_index_hint(const ScrArea *area, + const short region_type, + int index_hint) +{ + ARegion *region_match_type = nullptr; + /* Any negative values can return the first match. */ + index_hint = std::max(0, index_hint); + int index = 0; + LISTBASE_FOREACH (ARegion *, region, &area->regionbase) { + if (region->regiontype != region_type) { + continue; + } + if (index == index_hint) { + region_match_type = region; + break; + } + if (region_match_type == nullptr) { + region_match_type = region; + } + index += 1; + } + return region_match_type; +} + struct HudRegionData { short regionid; + /** + * The region index of this region type in the `area`. + * When this cannot be resolved, use the first region of `regionid`. + * + * This is needed because it's possible the index is no longer available + * if exiting quad-view int the 3D viewport after performing an operation for e.g. + * so in this case use the first region. + */ + int region_index_hint; }; -static bool last_redo_poll(const bContext *C, short region_type) +static bool last_redo_poll(const bContext *C, short region_type, int region_index_hint) { wmOperator *op = WM_operator_last_redo(C); if (op == nullptr) { @@ -58,7 +117,8 @@ static bool last_redo_poll(const bContext *C, short region_type) * wrong context. */ ScrArea *area = CTX_wm_area(C); - ARegion *region_op = (region_type != -1) ? BKE_area_find_region_type(area, region_type) : + ARegion *region_op = (region_type != -1) ? area_find_region_by_type_and_index_hint( + area, region_type, region_index_hint) : nullptr; ARegion *region_prev = CTX_wm_region(C); CTX_wm_region_set((bContext *)C, region_op); @@ -92,7 +152,7 @@ static bool hud_panel_operator_redo_poll(const bContext *C, PanelType * /*pt*/) if (region != nullptr) { HudRegionData *hrd = static_cast(region->regiondata); if (hrd != nullptr) { - return last_redo_poll(C, hrd->regionid); + return last_redo_poll(C, hrd->regionid, hrd->region_index_hint); } } return false; @@ -159,7 +219,7 @@ static void hud_region_free(ARegion *region) static void hud_region_layout(const bContext *C, ARegion *region) { HudRegionData *hrd = static_cast(region->regiondata); - if (hrd == nullptr || !last_redo_poll(C, hrd->regionid)) { + if (hrd == nullptr || !last_redo_poll(C, hrd->regionid, hrd->region_index_hint)) { ED_region_tag_redraw(region); hud_region_hide(region); return; @@ -313,7 +373,8 @@ void ED_area_type_hud_ensure(bContext *C, ScrArea *area) const bool was_hidden = region == nullptr || region->runtime->visible == false; ARegion *region_op = CTX_wm_region(C); BLI_assert((region_op == nullptr) || (region_op->regiontype != RGN_TYPE_HUD)); - if (!last_redo_poll(C, region_op ? region_op->regiontype : -1)) { + const int region_index_hint = region_op ? area_calc_region_type_index(area, region_op) : -1; + if (!last_redo_poll(C, region_op ? region_op->regiontype : -1, region_index_hint)) { if (region) { ED_region_tag_redraw(region); hud_region_hide(region); @@ -348,9 +409,11 @@ void ED_area_type_hud_ensure(bContext *C, ScrArea *area) } if (region_op) { hrd->regionid = region_op->regiontype; + hrd->region_index_hint = region_index_hint; } else { hrd->regionid = -1; + hrd->region_index_hint = -1; } } @@ -410,7 +473,7 @@ ARegion *ED_area_type_hud_redo_region_find(const ScrArea *area, const ARegion *h return nullptr; } - return BKE_area_find_region_type(area, hrd->regionid); + return area_find_region_by_type_and_index_hint(area, hrd->regionid, hrd->region_index_hint); } /** \} */ diff --git a/source/blender/editors/interface/templates/interface_template_asset_view.cc b/source/blender/editors/interface/templates/interface_template_asset_view.cc index fad2811b1a40..f46374298fdf 100644 --- a/source/blender/editors/interface/templates/interface_template_asset_view.cc +++ b/source/blender/editors/interface/templates/interface_template_asset_view.cc @@ -58,12 +58,12 @@ static void asset_view_item_but_drag_set(uiBut *but, AssetHandle *asset_handle) UI_but_drag_set_asset(but, asset, import_method, - asset::handle_get_preview_or_type_icon_id(asset_handle), - asset::handle_get_preview_icon_id(asset_handle)); + asset::asset_preview_or_icon(*asset), + asset::asset_preview_icon_id(*asset)); } static void asset_view_draw_item(uiList *ui_list, - const bContext *C, + const bContext * /*C*/, uiLayout *layout, PointerRNA * /*dataptr*/, PointerRNA * /*itemptr*/, @@ -77,6 +77,7 @@ static void asset_view_draw_item(uiList *ui_list, AssetHandle asset_handle = asset::list::asset_handle_get_by_index(&list_data->asset_library_ref, index); + asset_system::AssetRepresentation *asset = asset::handle_get_representation(&asset_handle); PointerRNA file_ptr = RNA_pointer_create_discrete( &list_data->screen->id, @@ -84,28 +85,27 @@ static void asset_view_draw_item(uiList *ui_list, const_cast(asset_handle.file_data)); uiLayoutSetContextPointer(layout, "active_file", &file_ptr); - asset::list::asset_preview_ensure_requested(*C, &list_data->asset_library_ref, &asset_handle); + asset->ensure_previewable(); uiBlock *block = uiLayoutGetBlock(layout); const bool show_names = list_data->show_names; const float size_x = UI_preview_tile_size_x(); const float size_y = show_names ? UI_preview_tile_size_y() : UI_preview_tile_size_y_no_label(); - uiBut *but = uiDefIconTextBut( - block, - UI_BTYPE_PREVIEW_TILE, - 0, - asset::handle_get_preview_icon_id(&asset_handle), - show_names ? asset::handle_get_representation(&asset_handle)->get_name().c_str() : "", - 0, - 0, - size_x, - size_y, - nullptr, - 0, - 0, - ""); + uiBut *but = uiDefIconTextBut(block, + UI_BTYPE_PREVIEW_TILE, + 0, + asset::asset_preview_icon_id(*asset), + show_names ? asset->get_name().c_str() : "", + 0, + 0, + size_x, + size_y, + nullptr, + 0, + 0, + ""); ui_def_but_icon(but, - asset::handle_get_preview_icon_id(&asset_handle), + asset::asset_preview_icon_id(*asset), /* NOLINTNEXTLINE: bugprone-suspicious-enum-usage */ UI_HAS_ICON | UI_BUT_ICON_PREVIEW); but->emboss = UI_EMBOSS_NONE; @@ -256,7 +256,6 @@ void uiTemplateAssetView(uiLayout *layout, } asset::list::storage_fetch(&asset_library_ref, C); - asset::list::previews_fetch(&asset_library_ref, C); const int tot_items = asset::list::size(&asset_library_ref); populate_asset_collection(asset_library_ref, *assets_dataptr, assets_propname); diff --git a/source/blender/editors/interface/view2d/view2d_gizmo_navigate.cc b/source/blender/editors/interface/view2d/view2d_gizmo_navigate.cc index 3a13616a0e2b..0845a4b0ae09 100644 --- a/source/blender/editors/interface/view2d/view2d_gizmo_navigate.cc +++ b/source/blender/editors/interface/view2d/view2d_gizmo_navigate.cc @@ -189,8 +189,13 @@ static void WIDGETGROUP_navigate_setup(const bContext * /*C*/, wmGizmoGroup *gzg gz->ptr, "draw_options", ED_GIZMO_BUTTON_SHOW_OUTLINE | ED_GIZMO_BUTTON_SHOW_BACKDROP); } - wmOperatorType *ot = WM_operatortype_find(info->opname, true); - WM_gizmo_operator_set(gz, 0, ot, nullptr); + wmOperatorType *ot = WM_operatortype_find(info->opname, false); +#ifdef WITH_PYTHON + if (ot != nullptr) +#endif + { + WM_gizmo_operator_set(gz, 0, ot, nullptr); + } } /* Modal operators, don't use initial mouse location since we're clicking on a button. */ diff --git a/source/blender/editors/interface/views/grid_view.cc b/source/blender/editors/interface/views/grid_view.cc index c91b4573238f..fee9d6d7f943 100644 --- a/source/blender/editors/interface/views/grid_view.cc +++ b/source/blender/editors/interface/views/grid_view.cc @@ -504,15 +504,10 @@ void PreviewGridItem::build_grid_tile_button(uiLayout &layout, const BIFIconID icon_id = override_preview_icon_id ? override_preview_icon_id : preview_icon_id; - /* Draw icons that are not previews or images as normal icons with a fixed icon size. Otherwise - * they will be upscaled to the button size. Should probably be done by the widget code. */ - const int is_preview_flag = (BKE_icon_is_preview(icon_id) || BKE_icon_is_image(icon_id)) ? - int(UI_BUT_ICON_PREVIEW) : - 0; ui_def_but_icon(but, icon_id, /* NOLINTNEXTLINE: bugprone-suspicious-enum-usage */ - UI_HAS_ICON | is_preview_flag); + UI_HAS_ICON | UI_BUT_ICON_PREVIEW); but->emboss = UI_EMBOSS_NONE; } diff --git a/source/blender/editors/mesh/editmesh_tools.cc b/source/blender/editors/mesh/editmesh_tools.cc index e74f0baf56bc..6d973470bd42 100644 --- a/source/blender/editors/mesh/editmesh_tools.cc +++ b/source/blender/editors/mesh/editmesh_tools.cc @@ -8112,8 +8112,8 @@ static void point_normals_update_statusbar(bContext *C, wmOperator *op) { WorkspaceStatus status(C); - status.opmodal(IFACE_("Cancel"), op->type, EDBM_CLNOR_MODAL_CANCEL); status.opmodal(IFACE_("Confirm"), op->type, EDBM_CLNOR_MODAL_CONFIRM); + status.opmodal(IFACE_("Cancel"), op->type, EDBM_CLNOR_MODAL_CANCEL); status.opmodal(IFACE_("Reset"), op->type, EDBM_CLNOR_MODAL_POINTTO_RESET); status.opmodal(IFACE_("Invert"), diff --git a/source/blender/editors/sculpt_paint/brush_asset_ops.cc b/source/blender/editors/sculpt_paint/brush_asset_ops.cc index 7b93d90ad755..6ec99cb9dbd3 100644 --- a/source/blender/editors/sculpt_paint/brush_asset_ops.cc +++ b/source/blender/editors/sculpt_paint/brush_asset_ops.cc @@ -256,7 +256,11 @@ static const EnumPropertyItem *rna_asset_library_reference_itemf(bContext * /*C* PropertyRNA * /*prop*/, bool *r_free) { - const EnumPropertyItem *items = asset::library_reference_to_rna_enum_itemf(false); + const EnumPropertyItem *items = asset::library_reference_to_rna_enum_itemf( + /* Only get writable libraries. */ + /*include_readonly=*/false, + /* Saving brushes to the current file isn't working correctly yet. */ + /*include_current_file=*/false); if (!items) { *r_free = false; return nullptr; diff --git a/source/blender/editors/sculpt_paint/brushes/bmesh_topology_rake.cc b/source/blender/editors/sculpt_paint/brushes/bmesh_topology_rake.cc index 785b979f1f9d..62cbc8755229 100644 --- a/source/blender/editors/sculpt_paint/brushes/bmesh_topology_rake.cc +++ b/source/blender/editors/sculpt_paint/brushes/bmesh_topology_rake.cc @@ -115,7 +115,7 @@ void do_bmesh_topology_rake_brush(const Depsgraph &depsgraph, }); } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/clay.cc b/source/blender/editors/sculpt_paint/brushes/clay.cc index 591001a108c2..b12566ade16f 100644 --- a/source/blender/editors/sculpt_paint/brushes/clay.cc +++ b/source/blender/editors/sculpt_paint/brushes/clay.cc @@ -227,7 +227,7 @@ void do_clay_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/clay_strips.cc b/source/blender/editors/sculpt_paint/brushes/clay_strips.cc index 64daa1265608..daacc0e36cf3 100644 --- a/source/blender/editors/sculpt_paint/brushes/clay_strips.cc +++ b/source/blender/editors/sculpt_paint/brushes/clay_strips.cc @@ -349,7 +349,7 @@ void do_clay_strips_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/clay_thumb.cc b/source/blender/editors/sculpt_paint/brushes/clay_thumb.cc index 4a1294d80fd5..cb0d53d67c14 100644 --- a/source/blender/editors/sculpt_paint/brushes/clay_thumb.cc +++ b/source/blender/editors/sculpt_paint/brushes/clay_thumb.cc @@ -257,7 +257,7 @@ void do_clay_thumb_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } float clay_thumb_get_stabilized_pressure(const StrokeCache &cache) diff --git a/source/blender/editors/sculpt_paint/brushes/crease.cc b/source/blender/editors/sculpt_paint/brushes/crease.cc index 7c53d8ac3832..59d92145739f 100644 --- a/source/blender/editors/sculpt_paint/brushes/crease.cc +++ b/source/blender/editors/sculpt_paint/brushes/crease.cc @@ -258,7 +258,7 @@ static void do_crease_or_blob_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace crease_cc diff --git a/source/blender/editors/sculpt_paint/brushes/draw.cc b/source/blender/editors/sculpt_paint/brushes/draw.cc index a33776cb46b3..04970d6fb5e3 100644 --- a/source/blender/editors/sculpt_paint/brushes/draw.cc +++ b/source/blender/editors/sculpt_paint/brushes/draw.cc @@ -172,7 +172,7 @@ static void offset_positions(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } void do_draw_brush(const Depsgraph &depsgraph, diff --git a/source/blender/editors/sculpt_paint/brushes/draw_sharp.cc b/source/blender/editors/sculpt_paint/brushes/draw_sharp.cc index 69dd51d0e818..bc10883789b5 100644 --- a/source/blender/editors/sculpt_paint/brushes/draw_sharp.cc +++ b/source/blender/editors/sculpt_paint/brushes/draw_sharp.cc @@ -175,7 +175,7 @@ static void offset_positions(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } void do_draw_sharp_brush(const Depsgraph &depsgraph, diff --git a/source/blender/editors/sculpt_paint/brushes/draw_vector_displacement.cc b/source/blender/editors/sculpt_paint/brushes/draw_vector_displacement.cc index 9bd6641e3e33..aaf28e89eac2 100644 --- a/source/blender/editors/sculpt_paint/brushes/draw_vector_displacement.cc +++ b/source/blender/editors/sculpt_paint/brushes/draw_vector_displacement.cc @@ -259,7 +259,7 @@ void do_draw_vector_displacement_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/elastic_deform.cc b/source/blender/editors/sculpt_paint/brushes/elastic_deform.cc index 74270ddd097d..b0c949467465 100644 --- a/source/blender/editors/sculpt_paint/brushes/elastic_deform.cc +++ b/source/blender/editors/sculpt_paint/brushes/elastic_deform.cc @@ -282,7 +282,7 @@ void do_elastic_deform_brush(const Depsgraph &depsgraph, } break; } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/enhance_details.cc b/source/blender/editors/sculpt_paint/brushes/enhance_details.cc index 610fc12d1fdf..1f9a4238e5e7 100644 --- a/source/blender/editors/sculpt_paint/brushes/enhance_details.cc +++ b/source/blender/editors/sculpt_paint/brushes/enhance_details.cc @@ -316,7 +316,7 @@ void do_enhance_details_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/grab.cc b/source/blender/editors/sculpt_paint/brushes/grab.cc index 22c0e971c4df..b89a02db8290 100644 --- a/source/blender/editors/sculpt_paint/brushes/grab.cc +++ b/source/blender/editors/sculpt_paint/brushes/grab.cc @@ -223,7 +223,7 @@ void do_grab_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } void geometry_preview_lines_update(Depsgraph &depsgraph, diff --git a/source/blender/editors/sculpt_paint/brushes/inflate.cc b/source/blender/editors/sculpt_paint/brushes/inflate.cc index c773c1cd0901..f7ac2553b308 100644 --- a/source/blender/editors/sculpt_paint/brushes/inflate.cc +++ b/source/blender/editors/sculpt_paint/brushes/inflate.cc @@ -184,7 +184,7 @@ void do_inflate_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/layer.cc b/source/blender/editors/sculpt_paint/brushes/layer.cc index 84315694fc25..fc6290cc1c1f 100644 --- a/source/blender/editors/sculpt_paint/brushes/layer.cc +++ b/source/blender/editors/sculpt_paint/brushes/layer.cc @@ -505,7 +505,7 @@ void do_layer_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/multiplane_scrape.cc b/source/blender/editors/sculpt_paint/brushes/multiplane_scrape.cc index 15544fe0e0c9..0d2b4f5aa8a9 100644 --- a/source/blender/editors/sculpt_paint/brushes/multiplane_scrape.cc +++ b/source/blender/editors/sculpt_paint/brushes/multiplane_scrape.cc @@ -726,7 +726,7 @@ void do_multiplane_scrape_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } void multiplane_scrape_preview_draw(const uint gpuattr, diff --git a/source/blender/editors/sculpt_paint/brushes/multires_displacement_eraser.cc b/source/blender/editors/sculpt_paint/brushes/multires_displacement_eraser.cc index d91da7b966b8..8186d8c8017b 100644 --- a/source/blender/editors/sculpt_paint/brushes/multires_displacement_eraser.cc +++ b/source/blender/editors/sculpt_paint/brushes/multires_displacement_eraser.cc @@ -95,7 +95,7 @@ void do_displacement_eraser_brush(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_grids(subdiv_ccg.grid_area, positions, nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/multires_displacement_smear.cc b/source/blender/editors/sculpt_paint/brushes/multires_displacement_smear.cc index 1e987671de6b..ed49173b33db 100644 --- a/source/blender/editors/sculpt_paint/brushes/multires_displacement_smear.cc +++ b/source/blender/editors/sculpt_paint/brushes/multires_displacement_smear.cc @@ -180,7 +180,7 @@ void do_displacement_smear_brush(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_grids(subdiv_ccg.grid_area, positions, nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/pinch.cc b/source/blender/editors/sculpt_paint/brushes/pinch.cc index a1d7bd9c7a83..8b3690126438 100644 --- a/source/blender/editors/sculpt_paint/brushes/pinch.cc +++ b/source/blender/editors/sculpt_paint/brushes/pinch.cc @@ -249,7 +249,7 @@ void do_pinch_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/plane.cc b/source/blender/editors/sculpt_paint/brushes/plane.cc index 1f701d59d8d2..51efefba2c01 100644 --- a/source/blender/editors/sculpt_paint/brushes/plane.cc +++ b/source/blender/editors/sculpt_paint/brushes/plane.cc @@ -241,7 +241,7 @@ static void do_plane_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace flatten_cc diff --git a/source/blender/editors/sculpt_paint/brushes/relax.cc b/source/blender/editors/sculpt_paint/brushes/relax.cc index 0b6960133527..27aaa0c51f89 100644 --- a/source/blender/editors/sculpt_paint/brushes/relax.cc +++ b/source/blender/editors/sculpt_paint/brushes/relax.cc @@ -209,7 +209,7 @@ static void do_relax_face_sets_brush_mesh(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_mesh(position_data.eval, nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } BLI_NOINLINE static void calc_factors_grids(const Depsgraph &depsgraph, @@ -337,7 +337,7 @@ static void do_relax_face_sets_brush_grids(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_grids(subdiv_ccg.grid_area, positions, nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } static void calc_factors_bmesh(const Depsgraph &depsgraph, @@ -435,7 +435,7 @@ static void do_relax_face_sets_brush_bmesh(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_bmesh(nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ @@ -542,7 +542,7 @@ static void do_topology_relax_brush_mesh(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_mesh(position_data.eval, nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } BLI_NOINLINE static void calc_topology_relax_factors_grids(const Depsgraph &depsgraph, @@ -653,7 +653,7 @@ static void do_topology_relax_brush_grids(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_grids(subdiv_ccg.grid_area, positions, nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } static void calc_topology_relax_factors_bmesh(const Depsgraph &depsgraph, @@ -749,7 +749,7 @@ static void do_topology_relax_brush_bmesh(const Depsgraph &depsgraph, bke::pbvh::update_node_bounds_bmesh(nodes[i]); }); pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ diff --git a/source/blender/editors/sculpt_paint/brushes/rotate.cc b/source/blender/editors/sculpt_paint/brushes/rotate.cc index f07b21e3c823..f226d65d47ff 100644 --- a/source/blender/editors/sculpt_paint/brushes/rotate.cc +++ b/source/blender/editors/sculpt_paint/brushes/rotate.cc @@ -215,7 +215,7 @@ void do_rotate_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/smooth.cc b/source/blender/editors/sculpt_paint/brushes/smooth.cc index 185da991354d..26f813a16dee 100644 --- a/source/blender/editors/sculpt_paint/brushes/smooth.cc +++ b/source/blender/editors/sculpt_paint/brushes/smooth.cc @@ -280,7 +280,7 @@ void do_smooth_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::update_bounds(depsgraph, object, pbvh); + pbvh.update_bounds(depsgraph, object); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/snake_hook.cc b/source/blender/editors/sculpt_paint/brushes/snake_hook.cc index 8ece2dc231f3..0ac1726dc775 100644 --- a/source/blender/editors/sculpt_paint/brushes/snake_hook.cc +++ b/source/blender/editors/sculpt_paint/brushes/snake_hook.cc @@ -421,7 +421,7 @@ void do_snake_hook_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/surface_smooth.cc b/source/blender/editors/sculpt_paint/brushes/surface_smooth.cc index 79a81d96cf6a..025c9c64cf02 100644 --- a/source/blender/editors/sculpt_paint/brushes/surface_smooth.cc +++ b/source/blender/editors/sculpt_paint/brushes/surface_smooth.cc @@ -405,7 +405,7 @@ void do_surface_smooth_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::update_bounds(depsgraph, object, pbvh); + pbvh.update_bounds(depsgraph, object); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/thumb.cc b/source/blender/editors/sculpt_paint/brushes/thumb.cc index 28e0ad2894dd..782a4af813e6 100644 --- a/source/blender/editors/sculpt_paint/brushes/thumb.cc +++ b/source/blender/editors/sculpt_paint/brushes/thumb.cc @@ -180,7 +180,7 @@ void do_thumb_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/brushes/topology_slide.cc b/source/blender/editors/sculpt_paint/brushes/topology_slide.cc index 2cdd2910bac2..d8c693c03999 100644 --- a/source/blender/editors/sculpt_paint/brushes/topology_slide.cc +++ b/source/blender/editors/sculpt_paint/brushes/topology_slide.cc @@ -331,7 +331,7 @@ void do_topology_slide_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint diff --git a/source/blender/editors/sculpt_paint/paint_hide.cc b/source/blender/editors/sculpt_paint/paint_hide.cc index 5fb58fa0f4d0..6df0b4bcfd81 100644 --- a/source/blender/editors/sculpt_paint/paint_hide.cc +++ b/source/blender/editors/sculpt_paint/paint_hide.cc @@ -143,7 +143,7 @@ void mesh_show_all(const Depsgraph &depsgraph, Object &object, const IndexMask & attributes.remove(".hide_vert"); bke::mesh_hide_vert_flush(mesh); - bke::pbvh::update_visibility(object, pbvh); + pbvh.update_visibility(object); } void grids_show_all(Depsgraph &depsgraph, Object &object, const IndexMask &node_mask) @@ -171,7 +171,7 @@ void grids_show_all(Depsgraph &depsgraph, Object &object, const IndexMask &node_ BKE_subdiv_ccg_grid_hidden_free(subdiv_ccg); BKE_pbvh_sync_visibility_from_verts(object); - bke::pbvh::update_visibility(object, pbvh); + pbvh.update_visibility(object); multires_mark_as_modified(&depsgraph, &object, MULTIRES_HIDDEN_MODIFIED); } @@ -443,7 +443,7 @@ static void partialvis_update_bmesh_nodes(const Depsgraph &depsgraph, }); pbvh.tag_visibility_changed(node_mask); - bke::pbvh::update_visibility(ob, pbvh); + pbvh.update_visibility(ob); } /** \} */ @@ -735,7 +735,7 @@ static void invert_visibility_mesh(const Depsgraph &depsgraph, hide_poly.finish(); bke::mesh_hide_face_flush(mesh); pbvh.tag_visibility_changed(node_mask); - bke::pbvh::update_visibility(object, *bke::object::pbvh_get(object)); + pbvh.update_visibility(object); } static void invert_visibility_grids(Depsgraph &depsgraph, @@ -918,12 +918,13 @@ static void update_undo_state(const Depsgraph &depsgraph, }); } -static void update_node_visibility_from_face_changes(MutableSpan nodes, +static void update_node_visibility_from_face_changes(bke::pbvh::Tree &pbvh, const IndexMask &node_mask, const Span orig_hide_poly, const Span new_hide_poly, const Span hide_vert) { + MutableSpan nodes = pbvh.nodes(); Array node_changed(node_mask.min_array_size(), false); node_mask.foreach_index(GrainSize(1), [&](const int i) { @@ -942,7 +943,12 @@ static void update_node_visibility_from_face_changes(MutableSpantag_visibility_changed(changed_nodes); + } } static void grow_shrink_visibility_mesh(const Depsgraph &depsgraph, @@ -981,11 +987,7 @@ static void grow_shrink_visibility_mesh(const Depsgraph &depsgraph, flush_edge_changes(mesh, last_buffer); update_node_visibility_from_face_changes( - bke::object::pbvh_get(object)->nodes(), - node_mask, - orig_hide_poly, - hide_poly, - last_buffer); + *bke::object::pbvh_get(object), node_mask, orig_hide_poly, hide_poly, last_buffer); array_utils::copy(last_buffer, hide_vert.span); hide_vert.finish(); } @@ -1072,7 +1074,7 @@ static void grow_shrink_visibility_grid(Depsgraph &depsgraph, grid_hidden = std::move(last_buffer); pbvh.tag_visibility_changed(node_mask); - bke::pbvh::update_visibility(object, pbvh); + pbvh.update_visibility(object); multires_mark_as_modified(&depsgraph, &object, MULTIRES_HIDDEN_MODIFIED); BKE_pbvh_sync_visibility_from_verts(object); diff --git a/source/blender/editors/sculpt_paint/paint_vertex.cc b/source/blender/editors/sculpt_paint/paint_vertex.cc index db62305787a3..3f759a862736 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.cc +++ b/source/blender/editors/sculpt_paint/paint_vertex.cc @@ -540,7 +540,7 @@ void update_cache_variants(bContext *C, VPaint &vp, Object &ob, PointerRNA *ptr) cache->radius_squared = cache->radius * cache->radius; if (bke::pbvh::Tree *pbvh = bke::object::pbvh_get(ob)) { - bke::pbvh::update_bounds(depsgraph, ob, *pbvh); + pbvh->update_bounds(depsgraph, ob); } } diff --git a/source/blender/editors/sculpt_paint/sculpt.cc b/source/blender/editors/sculpt_paint/sculpt.cc index 061c0cf29743..18ed860a7998 100644 --- a/source/blender/editors/sculpt_paint/sculpt.cc +++ b/source/blender/editors/sculpt_paint/sculpt.cc @@ -3041,7 +3041,7 @@ static void push_undo_nodes(const Depsgraph &depsgraph, else if (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_MASK) { undo::push_nodes(depsgraph, ob, node_mask, undo::Type::Mask); } - else if (SCULPT_brush_type_is_paint(brush.sculpt_brush_type)) { + else if (brush_type_is_paint(brush.sculpt_brush_type)) { undo::push_nodes(depsgraph, ob, node_mask, undo::Type::Color); } else { @@ -3192,9 +3192,7 @@ static void do_brush_action(const Depsgraph &depsgraph, /* Apply one type of brush action. */ switch (brush.sculpt_brush_type) { case SCULPT_BRUSH_TYPE_DRAW: { - const bool use_vector_displacement = (brush.flag2 & BRUSH_USE_COLOR_AS_DISPLACEMENT && - (brush.mtex.brush_map_mode == MTEX_MAP_MODE_AREA)); - if (use_vector_displacement) { + if (brush_uses_vector_displacement(brush)) { do_draw_vector_displacement_brush(depsgraph, sd, ob, node_mask); } else { @@ -4385,7 +4383,7 @@ static bool sculpt_needs_connectivity_info(const Sculpt &sd, (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_POSE) || (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_BOUNDARY) || (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_SLIDE_RELAX) || - SCULPT_brush_type_is_paint(brush.sculpt_brush_type) || + brush_type_is_paint(brush.sculpt_brush_type) || (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_CLOTH) || (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_SMEAR) || (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_DRAW_FACE_SETS) || @@ -4408,7 +4406,7 @@ void SCULPT_stroke_modifiers_check(const bContext *C, Object &ob, const Brush &b { Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C); BKE_sculpt_update_object_for_edit( - depsgraph, &ob, SCULPT_brush_type_is_paint(brush.sculpt_brush_type)); + depsgraph, &ob, brush_type_is_paint(brush.sculpt_brush_type)); } } @@ -4929,7 +4927,8 @@ static void brush_stroke_init(bContext *C) } brush_init_tex(sd, ss); - const bool needs_colors = SCULPT_brush_type_is_paint(brush->sculpt_brush_type) && + const bool needs_colors = blender::ed::sculpt_paint::brush_type_is_paint( + brush->sculpt_brush_type) && !SCULPT_use_image_paint_brush(tool_settings->paint_mode, ob); if (needs_colors) { @@ -4940,7 +4939,7 @@ static void brush_stroke_init(bContext *C) * earlier steps modifying the data. */ Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); BKE_sculpt_update_object_for_edit( - depsgraph, &ob, SCULPT_brush_type_is_paint(brush->sculpt_brush_type)); + depsgraph, &ob, blender::ed::sculpt_paint::brush_type_is_paint(brush->sculpt_brush_type)); ED_image_paint_brush_type_update_sticky_shading_color(C, &ob); } @@ -5260,7 +5259,7 @@ static bool stroke_test_start(bContext *C, wmOperator *op, const float mval[2]) /* NOTE: This should be removed when paint mode is available. Paint mode can force based on the * canvas it is painting on. (ref. use_sculpt_texture_paint). */ - if (brush && SCULPT_brush_type_is_paint(brush->sculpt_brush_type) && + if (brush && brush_type_is_paint(brush->sculpt_brush_type) && !SCULPT_use_image_paint_brush(tool_settings->paint_mode, ob)) { View3D *v3d = CTX_wm_view3d(C); @@ -5321,7 +5320,7 @@ static void stroke_update_step(bContext *C, if (brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_MASK) { flush_update_step(C, UpdateType::Mask); } - else if (SCULPT_brush_type_is_paint(brush.sculpt_brush_type)) { + else if (brush_type_is_paint(brush.sculpt_brush_type)) { if (SCULPT_use_image_paint_brush(tool_settings.paint_mode, ob)) { flush_update_step(C, UpdateType::Image); } @@ -5416,16 +5415,16 @@ static int sculpt_brush_stroke_invoke(bContext *C, wmOperator *op, const wmEvent Sculpt &sd = *CTX_data_tool_settings(C)->sculpt; Brush &brush = *BKE_paint_brush(&sd.paint); - if (SCULPT_brush_type_is_paint(brush.sculpt_brush_type) && + if (brush_type_is_paint(brush.sculpt_brush_type) && !color_supported_check(scene, ob, op->reports)) { return OPERATOR_CANCELLED; } - if (SCULPT_brush_type_is_mask(brush.sculpt_brush_type)) { + if (brush_type_is_mask(brush.sculpt_brush_type)) { MultiresModifierData *mmd = BKE_sculpt_multires_active(&scene, &ob); BKE_sculpt_mask_layers_ensure(CTX_data_depsgraph_pointer(C), CTX_data_main(C), &ob, mmd); } - if (!SCULPT_brush_type_is_attribute_only(brush.sculpt_brush_type) && + if (!brush_type_is_attribute_only(brush.sculpt_brush_type) && report_if_shape_key_is_locked(ob, op->reports)) { return OPERATOR_CANCELLED; diff --git a/source/blender/editors/sculpt_paint/sculpt_boundary.cc b/source/blender/editors/sculpt_paint/sculpt_boundary.cc index b39757e79ae5..13145d4130e6 100644 --- a/source/blender/editors/sculpt_paint/sculpt_boundary.cc +++ b/source/blender/editors/sculpt_paint/sculpt_boundary.cc @@ -1362,7 +1362,7 @@ static void do_bend_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ @@ -1644,7 +1644,7 @@ static void do_slide_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ @@ -1909,7 +1909,7 @@ static void do_inflate_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ @@ -2180,7 +2180,7 @@ static void do_grab_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ @@ -2459,7 +2459,7 @@ static void do_twist_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /** \} */ @@ -2821,7 +2821,7 @@ static void do_smooth_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } /* -------------------------------------------------------------------- */ diff --git a/source/blender/editors/sculpt_paint/sculpt_cloth.cc b/source/blender/editors/sculpt_paint/sculpt_cloth.cc index d7ed48a793be..5be16acc0dcf 100644 --- a/source/blender/editors/sculpt_paint/sculpt_cloth.cc +++ b/source/blender/editors/sculpt_paint/sculpt_cloth.cc @@ -1530,7 +1530,7 @@ void do_simulation_step(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } static void cloth_brush_apply_brush_forces(const Depsgraph &depsgraph, @@ -2379,7 +2379,7 @@ static int sculpt_cloth_filter_modal(bContext *C, wmOperator *op, const wmEvent } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); /* Activate all nodes. */ sim_activate_nodes(object, *ss.filter_cache->cloth_sim, node_mask); diff --git a/source/blender/editors/sculpt_paint/sculpt_face_set.cc b/source/blender/editors/sculpt_paint/sculpt_face_set.cc index 864c6c001dc0..0f228f41b287 100644 --- a/source/blender/editors/sculpt_paint/sculpt_face_set.cc +++ b/source/blender/editors/sculpt_paint/sculpt_face_set.cc @@ -1080,7 +1080,7 @@ static int change_visibility_exec(bContext *C, wmOperator *op) undo::push_end(object); - bke::pbvh::update_visibility(object, pbvh); + pbvh.update_visibility(object); islands::invalidate(*object.sculpt); hide::tag_update_visibility(*C); @@ -1483,8 +1483,6 @@ static void edit_modify_coordinates( undo::push_begin(scene, ob, op); undo::push_nodes(depsgraph, ob, node_mask, undo::Type::Position); - pbvh.tag_positions_changed(node_mask); - switch (mode) { case EditMode::FairPositions: edit_fairing(depsgraph, sd, ob, active_face_set, MESH_FAIRING_DEPTH_POSITION, strength); @@ -1496,7 +1494,8 @@ static void edit_modify_coordinates( BLI_assert_unreachable(); } - bke::pbvh::update_bounds(depsgraph, ob, pbvh); + pbvh.tag_positions_changed(node_mask); + pbvh.update_bounds(depsgraph, ob); flush_update_step(C, UpdateType::Position); flush_update_done(C, ob, UpdateType::Position); undo::push_end(ob); diff --git a/source/blender/editors/sculpt_paint/sculpt_filter_mesh.cc b/source/blender/editors/sculpt_paint/sculpt_filter_mesh.cc index 354f3efed7ce..d41dd1d92669 100644 --- a/source/blender/editors/sculpt_paint/sculpt_filter_mesh.cc +++ b/source/blender/editors/sculpt_paint/sculpt_filter_mesh.cc @@ -2179,10 +2179,10 @@ static void sculpt_mesh_filter_apply(bContext *C, wmOperator *op, bool is_replay bke::pbvh::Tree &pbvh = *bke::object::pbvh_get(ob); pbvh.tag_positions_changed(node_mask); + pbvh.update_bounds(depsgraph, ob); ss.filter_cache->iteration_count++; - bke::pbvh::update_bounds(depsgraph, ob, pbvh); flush_update_step(C, UpdateType::Position); } @@ -2264,7 +2264,7 @@ static void sculpt_mesh_filter_cancel(bContext *C, wmOperator * /*op*/) undo::restore_position_from_undo_step(depsgraph, ob); bke::pbvh::update_normals(depsgraph, ob, *pbvh); - bke::pbvh::update_bounds(depsgraph, ob, *pbvh); + pbvh->update_bounds(depsgraph, ob); } static int sculpt_mesh_filter_modal(bContext *C, wmOperator *op, const wmEvent *event) diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.hh b/source/blender/editors/sculpt_paint/sculpt_intern.hh index 7fdcc9b33dcf..6ad468bfe61f 100644 --- a/source/blender/editors/sculpt_paint/sculpt_intern.hh +++ b/source/blender/editors/sculpt_paint/sculpt_intern.hh @@ -23,6 +23,7 @@ #include "BLI_vector.hh" #include "DNA_brush_enums.h" +#include "DNA_brush_types.h" #include "ED_view3d.hh" @@ -942,24 +943,31 @@ float clay_thumb_get_stabilized_pressure(const blender::ed::sculpt_paint::Stroke void SCULPT_OT_brush_stroke(wmOperatorType *ot); -} // namespace blender::ed::sculpt_paint - -inline bool SCULPT_brush_type_is_paint(int tool) +inline bool brush_type_is_paint(const int tool) { return ELEM(tool, SCULPT_BRUSH_TYPE_PAINT, SCULPT_BRUSH_TYPE_SMEAR); } -inline bool SCULPT_brush_type_is_mask(int tool) +inline bool brush_type_is_mask(const int tool) { return ELEM(tool, SCULPT_BRUSH_TYPE_MASK); } -BLI_INLINE bool SCULPT_brush_type_is_attribute_only(int tool) +BLI_INLINE bool brush_type_is_attribute_only(const int tool) { - return SCULPT_brush_type_is_paint(tool) || SCULPT_brush_type_is_mask(tool) || + return brush_type_is_paint(tool) || brush_type_is_mask(tool) || ELEM(tool, SCULPT_BRUSH_TYPE_DRAW_FACE_SETS); } +inline bool brush_uses_vector_displacement(const Brush &brush) +{ + return brush.sculpt_brush_type == SCULPT_BRUSH_TYPE_DRAW && + brush.flag2 & BRUSH_USE_COLOR_AS_DISPLACEMENT && + brush.mtex.brush_map_mode == MTEX_MAP_MODE_AREA; +} + +} // namespace blender::ed::sculpt_paint + namespace blender::ed::sculpt_paint { void ensure_valid_pivot(const Object &ob, Scene &scene); } diff --git a/source/blender/editors/sculpt_paint/sculpt_pose.cc b/source/blender/editors/sculpt_paint/sculpt_pose.cc index bcb95ef34337..67c2d2068057 100644 --- a/source/blender/editors/sculpt_paint/sculpt_pose.cc +++ b/source/blender/editors/sculpt_paint/sculpt_pose.cc @@ -2173,7 +2173,7 @@ void do_pose_brush(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } } // namespace blender::ed::sculpt_paint::pose diff --git a/source/blender/editors/sculpt_paint/sculpt_project.cc b/source/blender/editors/sculpt_paint/sculpt_project.cc index 78e3f4e11bd4..f1ea6820c29c 100644 --- a/source/blender/editors/sculpt_paint/sculpt_project.cc +++ b/source/blender/editors/sculpt_paint/sculpt_project.cc @@ -200,7 +200,7 @@ static void gesture_apply_for_symmetry_pass(bContext &C, gesture::GestureData &g break; } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } static void gesture_end(bContext &C, gesture::GestureData &gesture_data) diff --git a/source/blender/editors/sculpt_paint/sculpt_transform.cc b/source/blender/editors/sculpt_paint/sculpt_transform.cc index 204b1fea1cfc..a8fbe41199f1 100644 --- a/source/blender/editors/sculpt_paint/sculpt_transform.cc +++ b/source/blender/editors/sculpt_paint/sculpt_transform.cc @@ -334,7 +334,7 @@ static void sculpt_transform_all_vertices(const Depsgraph &depsgraph, const Scul } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } BLI_NOINLINE static void calc_transform_translations(const float4x4 &elastic_transform_mat, @@ -532,7 +532,7 @@ static void transform_radius_elastic(const Depsgraph &depsgraph, } } pbvh.tag_positions_changed(node_mask); - bke::pbvh::flush_bounds_to_parents(pbvh); + pbvh.flush_bounds_to_parents(); } void update_modal_transform(bContext *C, Object &ob) diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.cc b/source/blender/editors/sculpt_paint/sculpt_undo.cc index b484690da7fe..71e43039d5f5 100644 --- a/source/blender/editors/sculpt_paint/sculpt_undo.cc +++ b/source/blender/editors/sculpt_paint/sculpt_undo.cc @@ -898,7 +898,7 @@ static void restore_list(bContext *C, Depsgraph *depsgraph, StepData &step_data) * We need to manually clear that cache. */ mesh.runtime->corner_normals_cache.tag_dirty(); } - bke::pbvh::update_bounds(*depsgraph, object, pbvh); + pbvh.update_bounds(*depsgraph, object); bke::pbvh::store_bounds_orig(pbvh); break; } @@ -939,7 +939,7 @@ static void restore_list(bContext *C, Depsgraph *depsgraph, StepData &step_data) } BKE_pbvh_sync_visibility_from_verts(object); - bke::pbvh::update_visibility(object, pbvh); + pbvh.update_visibility(object); if (BKE_sculpt_multires_active(scene, &object)) { multires_mark_as_modified(depsgraph, &object, MULTIRES_HIDDEN_MODIFIED); } @@ -982,7 +982,7 @@ static void restore_list(bContext *C, Depsgraph *depsgraph, StepData &step_data) } hide::sync_all_from_faces(object); - bke::pbvh::update_visibility(object, pbvh); + pbvh.update_visibility(object); break; } case Type::Mask: { diff --git a/source/blender/editors/space_file/filelist.cc b/source/blender/editors/space_file/filelist.cc index c7c1527c80b0..6de30854c042 100644 --- a/source/blender/editors/space_file/filelist.cc +++ b/source/blender/editors/space_file/filelist.cc @@ -304,12 +304,6 @@ enum { FL_NEED_SORTING = 1 << 4, FL_NEED_FILTERING = 1 << 5, FL_SORT_INVERT = 1 << 6, - /** - * By default, #filelist_file_cache_block() will attempt to load previews around the visible - * "window" of visible files. When this flag is set it won't do so, and each preview has to be - * queried through a #filelist_cache_previews_push() call. - */ - FL_PREVIEWS_NO_AUTO_CACHE = 1 << 7, }; /** #FileList.tags */ @@ -360,8 +354,6 @@ static int groupname_to_code(const char *group); static void filelist_cache_clear(FileListEntryCache *cache, size_t new_size); static bool filelist_intern_entry_is_main_file(const FileListInternEntry *intern_entry); -static bool filelist_cache_previews_push(FileList *filelist, FileDirEntry *entry, const int index); -static bool filelist_file_preview_load_poll(const FileDirEntry *entry); /* ********** Sort helpers ********** */ @@ -1166,35 +1158,6 @@ bool filelist_file_is_preview_pending(const FileList *filelist, const FileDirEnt return !filelist_ready || file->flags & FILE_ENTRY_PREVIEW_LOADING; } -bool filelist_file_ensure_preview_requested(FileList *filelist, FileDirEntry *file) -{ - if (file->preview_icon_id) { - /* Already loaded. */ - return false; - } - - /* Wait with requests until file list reading is done, and previews may be loaded. */ - if (!filelist_cache_previews_enabled(filelist)) { - return false; - } - /* #filelist_cache_previews_push() will repeat this, do here already to avoid lookup below. */ - if (!filelist_file_preview_load_poll(file)) { - return false; - } - - const int numfiles = filelist_files_ensure(filelist); - for (int i = 0; i < numfiles; i++) { - if (filelist->filelist_intern.filtered[i]->uid == file->uid) { - if (filelist_cache_previews_push(filelist, file, i)) { - return true; - } - break; - } - } - - return false; -} - static FileDirEntry *filelist_geticon_get_file(FileList *filelist, const int index) { BLI_assert(G.background == false); @@ -2115,11 +2078,6 @@ void filelist_setrecursion(FileList *filelist, const int recursion_level) } } -void filelist_set_no_preview_auto_cache(FileList *filelist) -{ - filelist->flags |= FL_PREVIEWS_NO_AUTO_CACHE; -} - bool filelist_needs_force_reset(const FileList *filelist) { return (filelist->flags & (FL_FORCE_RESET | FL_FORCE_RESET_MAIN_FILES)) != 0; @@ -2618,7 +2576,7 @@ bool filelist_file_cache_block(FileList *filelist, const int index) // printf("Re-queueing previews...\n"); - if ((cache->flags & FLC_PREVIEWS_ACTIVE) && !(filelist->flags & FL_PREVIEWS_NO_AUTO_CACHE)) { + if (cache->flags & FLC_PREVIEWS_ACTIVE) { /* Note we try to preview first images around given index - i.e. assumed visible ones. */ int block_index = cache->block_cursor + (index - start_index); int offs_max = max_ii(end_index - index, index - start_index); @@ -2641,11 +2599,6 @@ bool filelist_file_cache_block(FileList *filelist, const int index) return true; } -bool filelist_cache_previews_enabled(const FileList *filelist) -{ - return (filelist->filelist_cache.flags & FLC_PREVIEWS_ACTIVE) != 0; -} - void filelist_cache_previews_set(FileList *filelist, const bool use_previews) { FileListEntryCache *cache = &filelist->filelist_cache; @@ -2671,11 +2624,6 @@ void filelist_cache_previews_set(FileList *filelist, const bool use_previews) } } -void filelist_cache_previews_ensure_running(FileList *filelist) -{ - filelist_cache_preview_ensure_running(&filelist->filelist_cache); -} - bool filelist_cache_previews_update(FileList *filelist) { FileListEntryCache *cache = &filelist->filelist_cache; diff --git a/source/blender/editors/space_file/filelist.hh b/source/blender/editors/space_file/filelist.hh index 7083ede9ce84..4c84f779e25f 100644 --- a/source/blender/editors/space_file/filelist.hh +++ b/source/blender/editors/space_file/filelist.hh @@ -87,7 +87,6 @@ bool filelist_file_is_preview_pending(const FileList *filelist, const FileDirEnt * \return True if a new preview request was pushed, false otherwise (e.g. because the preview is * already loaded, invalid or not supported). */ -bool filelist_file_ensure_preview_requested(FileList *filelist, FileDirEntry *file); ImBuf *filelist_get_preview_image(FileList *filelist, int index); ImBuf *filelist_file_get_preview_image(const FileDirEntry *file); ImBuf *filelist_geticon_special_file_image_ex(const FileDirEntry *file); @@ -177,8 +176,6 @@ void filelist_file_cache_slidingwindow_set(FileList *filelist, size_t window_siz */ bool filelist_file_cache_block(FileList *filelist, int index); -void filelist_set_no_preview_auto_cache(FileList *filelist); - bool filelist_needs_force_reset(const FileList *filelist); void filelist_tag_force_reset(FileList *filelist); void filelist_tag_force_reset_mainfiles(FileList *filelist); @@ -237,9 +234,7 @@ void filelist_readjob_start(FileList *filelist, int space_notifier, const bConte void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm); int filelist_readjob_running(FileList *filelist, wmWindowManager *wm); -void filelist_cache_previews_ensure_running(FileList *filelist); bool filelist_cache_previews_update(FileList *filelist); -bool filelist_cache_previews_enabled(const FileList *filelist); void filelist_cache_previews_set(FileList *filelist, bool use_previews); bool filelist_cache_previews_running(FileList *filelist); bool filelist_cache_previews_done(FileList *filelist); diff --git a/source/blender/editors/space_graph/graph_slider_ops.cc b/source/blender/editors/space_graph/graph_slider_ops.cc index 92d52622365d..a7d6c3ebf8ca 100644 --- a/source/blender/editors/space_graph/graph_slider_ops.cc +++ b/source/blender/editors/space_graph/graph_slider_ops.cc @@ -126,8 +126,8 @@ static void apply_fcu_segment_function(bAnimContext *ac, static void common_draw_status_header(bContext *C, tGraphSliderOp *gso) { WorkspaceStatus status(C); - status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Adjust"), ICON_MOUSE_MOVE); if (hasNumInput(&gso->num)) { char str_ofs[NUM_STR_REP_LEN]; @@ -457,8 +457,8 @@ static void decimate_graph_keys(bAnimContext *ac, float factor, float error_sq_m static void decimate_draw_status(bContext *C, tGraphSliderOp *gso) { WorkspaceStatus status(C); - status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Adjust"), ICON_MOUSE_MOVE); if (hasNumInput(&gso->num)) { char str_ofs[NUM_STR_REP_LEN]; @@ -949,8 +949,8 @@ static void ease_draw_status_header(bContext *C, wmOperator *op) { tGraphSliderOp *gso = static_cast(op->customdata); WorkspaceStatus status(C); - status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Adjust"), ICON_MOUSE_MOVE); if (hasNumInput(&gso->num)) { char str_ofs[NUM_STR_REP_LEN]; @@ -1552,8 +1552,8 @@ static void shear_graph_keys(bAnimContext *ac, const float factor, tShearDirecti static void shear_draw_status_header(bContext *C, tGraphSliderOp *gso, tShearDirection direction) { WorkspaceStatus status(C); - status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Adjust"), ICON_MOUSE_MOVE); if (hasNumInput(&gso->num)) { char str_ofs[NUM_STR_REP_LEN]; @@ -2427,8 +2427,8 @@ static void scale_from_neighbor_draw_status_header(bContext *C, wmOperator *op) { tGraphSliderOp *gso = static_cast(op->customdata); WorkspaceStatus status(C); - status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Adjust"), ICON_MOUSE_MOVE); if (hasNumInput(&gso->num)) { diff --git a/source/blender/editors/space_image/image_ops.cc b/source/blender/editors/space_image/image_ops.cc index 7f77389f514c..5bb880bcc741 100644 --- a/source/blender/editors/space_image/image_ops.cc +++ b/source/blender/editors/space_image/image_ops.cc @@ -11,6 +11,7 @@ #include #include #include +#include #ifndef WIN32 # include #else @@ -1673,7 +1674,8 @@ static int image_file_browse_invoke(bContext *C, wmOperator *op, const wmEvent * static bool image_file_browse_poll(bContext *C) { - return image_from_context(C) != nullptr; + Image *ima = image_from_context(C); + return (ima && ID_IS_EDITABLE(ima)); } void IMAGE_OT_file_browse(wmOperatorType *ot) @@ -3354,28 +3356,50 @@ void IMAGE_OT_resize(wmOperatorType *ot) /** \name Pack Operator * \{ */ -static bool image_pack_test(bContext *C, wmOperator *op) +static bool image_pack_test(Image *ima, const char *error_message) { - Image *ima = image_from_context(C); - if (!ima) { return false; } + if (!ID_IS_EDITABLE(&ima->id)) { + error_message = "Image is not editable"; + return false; + } + if (ELEM(ima->source, IMA_SRC_SEQUENCE, IMA_SRC_MOVIE)) { - BKE_report(op->reports, RPT_ERROR, "Packing movies or image sequences not supported"); + error_message = "Movies or image sequences do not support packing"; return false; } return true; } +static bool image_pack_poll(bContext *C) +{ + Image *ima = image_from_context(C); + const char *error_message = nullptr; + + if (image_pack_test(ima, error_message)) { + return true; + } + + if (error_message) { + CTX_wm_operator_poll_msg_set(C, error_message); + } + return false; +} + static int image_pack_exec(bContext *C, wmOperator *op) { Main *bmain = CTX_data_main(C); Image *ima = image_from_context(C); - if (!image_pack_test(C, op)) { + const char *error_message = nullptr; + if (!image_pack_test(ima, error_message)) { + if (error_message) { + BKE_report(op->reports, RPT_ERROR, error_message); + } return OPERATOR_CANCELLED; } @@ -3400,6 +3424,7 @@ void IMAGE_OT_pack(wmOperatorType *ot) /* api callbacks */ ot->exec = image_pack_exec; + ot->poll = image_pack_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -3507,6 +3532,7 @@ void IMAGE_OT_unpack(wmOperatorType *ot) /* api callbacks */ ot->exec = image_unpack_exec; ot->invoke = image_unpack_invoke; + ot->poll = image_pack_poll; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; diff --git a/source/blender/editors/space_info/info_ops.cc b/source/blender/editors/space_info/info_ops.cc index 20786d7aae83..e1b4010e7830 100644 --- a/source/blender/editors/space_info/info_ops.cc +++ b/source/blender/editors/space_info/info_ops.cc @@ -338,6 +338,11 @@ static int unpack_item_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } + if (!ID_IS_EDITABLE(id)) { + BKE_report(op->reports, RPT_WARNING, "Data-block using this packed file is not editable"); + return OPERATOR_CANCELLED; + } + if (method != PF_KEEP) { WM_cursor_wait(true); BKE_packedfile_id_unpack(bmain, id, op->reports, method); /* XXX PF_ASK can't work here */ diff --git a/source/blender/editors/space_sequencer/sequencer_intern.hh b/source/blender/editors/space_sequencer/sequencer_intern.hh index 90dab59a5852..9f7978947e4b 100644 --- a/source/blender/editors/space_sequencer/sequencer_intern.hh +++ b/source/blender/editors/space_sequencer/sequencer_intern.hh @@ -141,7 +141,7 @@ int sequencer_draw_get_transform_preview_frame(Scene *scene); void sequencer_special_update_set(Strip *strip); /* Get handle width in 2d-View space. */ -float sequence_handle_size_get_clamped(const Scene *scene, Strip *strip, float pixelx); +float strip_handle_draw_size_get(const Scene *scene, Strip *strip, float pixelx); /* UNUSED */ /* void seq_reset_imageofs(SpaceSeq *sseq); */ diff --git a/source/blender/editors/space_sequencer/sequencer_select.cc b/source/blender/editors/space_sequencer/sequencer_select.cc index 1644fc0aa2a9..b1582f1386e1 100644 --- a/source/blender/editors/space_sequencer/sequencer_select.cc +++ b/source/blender/editors/space_sequencer/sequencer_select.cc @@ -897,8 +897,13 @@ static void select_linked_time(const Scene *scene, } } -/* Similar to `sequence_handle_size_get_clamped()` but allows for larger clickable area. */ -static float clickable_handle_size_get(const Scene *scene, const Strip *strip, const View2D *v2d) +/* Similar to `strip_handle_draw_size_get()`, but returns a larger clickable area that is + * the same for a given zoom level no matter whether "simplified tweaking" is turned off or on. + * `strip_clickable_areas_get` will pad this past strip bounds by 1/3 of the inner handle size, + * making the full handle size either 15 + 5 = 20px or 1/4 + 1/12 = 1/3 of the strip size. */ +static float inner_clickable_handle_size_get(const Scene *scene, + const Strip *strip, + const View2D *v2d) { const float pixelx = 1 / UI_view2d_scale_get_x(v2d); const float strip_len = SEQ_time_right_handle_frame_get(scene, strip) - @@ -918,6 +923,10 @@ bool ED_sequencer_can_select_handle(const Scene *scene, const Strip *strip, cons return false; } + /* This ensures clickable handles are deactivated when the strip gets too small (25 or 15 + * frames). Since the full handle size for a small strip is 1/3 of the strip size (see + * `inner_clickable_handle_size_get`), this means handles cannot be smaller than 25/3 = 8px for + * simple tweaking, 15/3 = 5px for legacy behavior. */ int min_len = 25 * U.pixelsize; if ((U.sequencer_editor_flag & USER_SEQ_ED_SIMPLE_TWEAKING) == 0) { min_len = 15 * U.pixelsize; @@ -929,6 +938,11 @@ bool ED_sequencer_can_select_handle(const Scene *scene, const Strip *strip, cons if (strip_len / pixelx < min_len) { return false; } + + if (UI_view2d_scale_get_y(v2d) < 16 * U.pixelsize) { + return false; + } + return true; } @@ -943,11 +957,11 @@ static void strip_clickable_areas_get(const Scene *scene, *r_left_handle = *r_body; *r_right_handle = *r_body; - const float handsize = clickable_handle_size_get(scene, strip, v2d); - BLI_rctf_pad(r_left_handle, handsize / 3, 0.0f); - BLI_rctf_pad(r_right_handle, handsize / 3, 0.0f); + const float handsize = inner_clickable_handle_size_get(scene, strip, v2d); r_left_handle->xmax = r_body->xmin + handsize; r_right_handle->xmin = r_body->xmax - handsize; + BLI_rctf_pad(r_left_handle, handsize / 3, 0.0f); + BLI_rctf_pad(r_right_handle, handsize / 3, 0.0f); BLI_rctf_pad(r_body, -handsize, 0.0f); } @@ -2046,9 +2060,8 @@ static int sequencer_box_select_exec(bContext *C, wmOperator *op) strip_rectf(scene, strip, &rq); if (BLI_rctf_isect(&rq, &rectf, nullptr)) { if (handles) { - /* Get the handles draw size. */ - float pixelx = BLI_rctf_size_x(&v2d->cur) / BLI_rcti_size_x(&v2d->mask); - float handsize = sequence_handle_size_get_clamped(scene, strip, pixelx) * 4; + /* Get the clickable handle size, ignoring padding. */ + float handsize = inner_clickable_handle_size_get(scene, strip, v2d) * 4; /* Right handle. */ if (rectf.xmax > (SEQ_time_right_handle_frame_get(scene, strip) - handsize)) { diff --git a/source/blender/editors/space_sequencer/sequencer_timeline_draw.cc b/source/blender/editors/space_sequencer/sequencer_timeline_draw.cc index 653d31abf088..582ed8938049 100644 --- a/source/blender/editors/space_sequencer/sequencer_timeline_draw.cc +++ b/source/blender/editors/space_sequencer/sequencer_timeline_draw.cc @@ -234,7 +234,7 @@ static StripDrawContext strip_draw_context_get(TimelineDrawContext *ctx, Strip * !strip_ctx.can_draw_strip_content); strip_ctx.is_active_strip = strip == SEQ_select_active_get(scene); strip_ctx.is_single_image = SEQ_transform_single_image_check(strip); - strip_ctx.handle_width = sequence_handle_size_get_clamped(ctx->scene, strip, ctx->pixelx); + strip_ctx.handle_width = strip_handle_draw_size_get(ctx->scene, strip, ctx->pixelx); strip_ctx.show_strip_color_tag = (ctx->sseq->timeline_overlay.flag & SEQ_TIMELINE_SHOW_STRIP_COLOR_TAG); @@ -772,7 +772,7 @@ static void draw_handle_transform_text(const TimelineDrawContext *timeline_ctx, UI_view2d_text_cache_add(timeline_ctx->v2d, text_x, text_y, numstr, numstr_len, col); } -float sequence_handle_size_get_clamped(const Scene *scene, Strip *strip, const float pixelx) +float strip_handle_draw_size_get(const Scene *scene, Strip *strip, const float pixelx) { const bool use_thin_handle = (U.sequencer_editor_flag & USER_SEQ_ED_SIMPLE_TWEAKING) != 0; const float handle_size = use_thin_handle ? 5.0f : 8.0f; diff --git a/source/blender/editors/space_sequencer/space_sequencer.cc b/source/blender/editors/space_sequencer/space_sequencer.cc index ea1f73832825..fe68aea41846 100644 --- a/source/blender/editors/space_sequencer/space_sequencer.cc +++ b/source/blender/editors/space_sequencer/space_sequencer.cc @@ -707,9 +707,7 @@ static void sequencer_main_cursor(wmWindow *win, ScrArea *area, ARegion *region) return; } - const float scale_y = UI_view2d_scale_get_y(v2d); - - if (!ED_sequencer_can_select_handle(scene, selection.seq1, v2d) || scale_y < 16 * U.pixelsize) { + if (!ED_sequencer_can_select_handle(scene, selection.seq1, v2d)) { WM_cursor_set(win, wmcursor); return; } diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt index 4612783d18b4..a0ef79c5f476 100644 --- a/source/blender/editors/space_view3d/CMakeLists.txt +++ b/source/blender/editors/space_view3d/CMakeLists.txt @@ -84,6 +84,7 @@ set(LIB bf_editor_curves bf_editor_lattice bf_editor_mesh + PRIVATE bf::extern::fmtlib PRIVATE bf::functions PRIVATE bf::gpu PRIVATE bf::imbuf diff --git a/source/blender/editors/space_view3d/view3d_gizmo_navigate.cc b/source/blender/editors/space_view3d/view3d_gizmo_navigate.cc index 7693750c0cf5..af1526cc5657 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_navigate.cc +++ b/source/blender/editors/space_view3d/view3d_gizmo_navigate.cc @@ -205,9 +205,14 @@ static void WIDGETGROUP_navigate_setup(const bContext *C, wmGizmoGroup *gzgroup) } wmOperatorType *ot = WM_operatortype_find(info->opname, true); - PointerRNA *ptr = WM_gizmo_operator_set(gz, 0, ot, nullptr); - if (info->op_prop_fn != nullptr) { - info->op_prop_fn(ptr); +#ifndef WITH_PYTHON + if (ot != nullptr) +#endif + { + PointerRNA *ptr = WM_gizmo_operator_set(gz, 0, ot, nullptr); + if (info->op_prop_fn != nullptr) { + info->op_prop_fn(ptr); + } } } diff --git a/source/blender/editors/space_view3d/view3d_navigate.cc b/source/blender/editors/space_view3d/view3d_navigate.cc index b9ae31eac0bc..66269645343e 100644 --- a/source/blender/editors/space_view3d/view3d_navigate.cc +++ b/source/blender/editors/space_view3d/view3d_navigate.cc @@ -593,6 +593,13 @@ bool view3d_zoom_or_dolly_poll(bContext *C) return view3d_navigation_poll_impl(C, RV3D_LOCK_ZOOM_AND_DOLLY); } +bool view3d_zoom_or_dolly_or_rotation_poll(bContext *C) +{ + /* This combination of flags is needed for the dolly operator, + * see code-comments there for details. */ + return view3d_navigation_poll_impl(C, RV3D_LOCK_ZOOM_AND_DOLLY | RV3D_LOCK_ROTATION); +} + int view3d_navigate_modal_fn(bContext *C, wmOperator *op, const wmEvent *event) { ViewOpsData *vod = static_cast(op->customdata); diff --git a/source/blender/editors/space_view3d/view3d_navigate.hh b/source/blender/editors/space_view3d/view3d_navigate.hh index e2605fc784d9..61beefa6bdc5 100644 --- a/source/blender/editors/space_view3d/view3d_navigate.hh +++ b/source/blender/editors/space_view3d/view3d_navigate.hh @@ -204,6 +204,7 @@ struct ViewOpsData { bool view3d_location_poll(bContext *C); bool view3d_rotation_poll(bContext *C); bool view3d_zoom_or_dolly_poll(bContext *C); +bool view3d_zoom_or_dolly_or_rotation_poll(bContext *C); int view3d_navigate_invoke_impl(bContext *C, wmOperator *op, diff --git a/source/blender/editors/space_view3d/view3d_navigate_fly.cc b/source/blender/editors/space_view3d/view3d_navigate_fly.cc index e03288b5b6d9..7e1fd930ec65 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_fly.cc +++ b/source/blender/editors/space_view3d/view3d_navigate_fly.cc @@ -32,6 +32,8 @@ #include "BKE_report.hh" #include "BKE_screen.hh" +#include "BLT_translation.hh" + #include "WM_api.hh" #include "WM_types.hh" @@ -46,6 +48,8 @@ #include "view3d_intern.hh" /* own include */ #include "view3d_navigate.hh" +#include + #include "BLI_strict_flags.h" /* IWYU pragma: keep. Keep last. */ /* -------------------------------------------------------------------- */ @@ -441,6 +445,8 @@ static int flyEnd(bContext *C, FlyInfo *fly) win = CTX_wm_window(C); rv3d = fly->rv3d; + ED_workspace_status_text(C, nullptr); + WM_event_timer_remove(CTX_wm_manager(C), win, fly->timer); ED_region_draw_cb_exit(fly->region->runtime->type, fly->draw_handle_pixel); @@ -1058,6 +1064,40 @@ static void flyApply_ndof(bContext *C, FlyInfo *fly, bool is_confirm) /** \name Fly Operator * \{ */ +static void fly_draw_status(bContext *C, wmOperator *op) +{ + FlyInfo *fly = static_cast(op->customdata); + + WorkspaceStatus status(C); + + status.opmodal(IFACE_("Confirm"), op->type, FLY_MODAL_CONFIRM); + status.opmodal(IFACE_("Cancel"), op->type, FLY_MODAL_CANCEL); + + status.opmodal("", op->type, FLY_MODAL_DIR_FORWARD); + status.opmodal("", op->type, FLY_MODAL_DIR_LEFT); + status.opmodal("", op->type, FLY_MODAL_DIR_BACKWARD); + status.opmodal("", op->type, FLY_MODAL_DIR_RIGHT); + status.item(IFACE_("Move"), ICON_NONE); + + status.opmodal("", op->type, FLY_MODAL_DIR_UP); + status.opmodal("", op->type, FLY_MODAL_DIR_DOWN); + status.item(IFACE_("Up/Down"), ICON_NONE); + + status.opmodal(IFACE_("Pan"), op->type, FLY_MODAL_PAN_ENABLE); + status.opmodal(IFACE_("Speed"), op->type, FLY_MODAL_SPEED); + + status.opmodal("", op->type, FLY_MODAL_AXIS_LOCK_X, fly->xlock != FLY_AXISLOCK_STATE_OFF); + status.opmodal("", op->type, FLY_MODAL_AXIS_LOCK_Z, fly->zlock != FLY_AXISLOCK_STATE_OFF); + status.item(IFACE_("Axis Lock"), ICON_NONE); + + status.opmodal(IFACE_("Precision"), op->type, FLY_MODAL_PRECISION_ENABLE, fly->use_precision); + status.opmodal(IFACE_("Free Look"), op->type, FLY_MODAL_FREELOOK_ENABLE, fly->use_freelook); + + status.opmodal("", op->type, FLY_MODAL_ACCELERATE); + status.opmodal("", op->type, FLY_MODAL_DECELERATE); + status.item(fmt::format("{} ({:.2f})", IFACE_("Acceleration"), fly->speed), ICON_NONE); +} + static int fly_invoke(bContext *C, wmOperator *op, const wmEvent *event) { RegionView3D *rv3d = CTX_wm_region_view3d(C); @@ -1077,6 +1117,8 @@ static int fly_invoke(bContext *C, wmOperator *op, const wmEvent *event) flyEvent(fly, event); + fly_draw_status(C, op); + WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; @@ -1104,6 +1146,8 @@ static int fly_modal(bContext *C, wmOperator *op, const wmEvent *event) flyEvent(fly, event); + fly_draw_status(C, op); + #ifdef WITH_INPUT_NDOF if (fly->ndof) { /* 3D mouse overrules [2D mouse + timer]. */ if (event->type == NDOF_MOTION) { diff --git a/source/blender/editors/space_view3d/view3d_navigate_view_dolly.cc b/source/blender/editors/space_view3d/view3d_navigate_view_dolly.cc index a7f7d8ae73a2..72f29466102a 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_view_dolly.cc +++ b/source/blender/editors/space_view3d/view3d_navigate_view_dolly.cc @@ -234,9 +234,10 @@ static int viewdolly_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } -/* copied from viewzoom_invoke(), changes here may apply there */ static int viewdolly_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + /* Near duplicate logic in #viewzoom_invoke(), changes here may apply there too. */ + ViewOpsData *vod; if (viewdolly_offset_lock_check(C, op)) { @@ -250,8 +251,25 @@ static int viewdolly_invoke(bContext *C, wmOperator *op, const wmEvent *event) ED_view3d_smooth_view_force_finish(C, vod->v3d, vod->region); - /* needs to run before 'viewops_data_create' so the backup 'rv3d->ofs' is correct */ - /* switch from camera view when: */ + /* Rationale for enforcing a perspective projection: + * + * While translating the view center (the #RegionView3D::ofs) is possible, + * in most cases there is no user feedback that anything is changing, + * because only "panning" the view is shown in orthographic projections. + * + * From a user perspective it seems like a bug when interactive operators appear to do nothing, + * so force a perspective view. + * + * There are some exceptions where users would notice (mentioning for completeness), + * but they're obscure enough for the logic to stay as-is. + * + * - With a small far-clip plane "dolly" may move contents in/out of the visible clipping range. + * - With quad-view and "Sync Zoom/Pan" enabled, "dolly" will be visible other views. + * We could even make an exception for this and allow dolly however even in this case + * the user might as well pan the other views directly. + * + * NOTE: needs to run before #viewops_data_create so the backup `rv3d->ofs` is correct. + */ if (vod->rv3d->persp != RV3D_PERSP) { if (vod->rv3d->persp == RV3D_CAMOB) { /* ignore rv3d->lpersp because dolly only makes sense in perspective mode */ @@ -316,7 +334,9 @@ void VIEW3D_OT_dolly(wmOperatorType *ot) ot->invoke = viewdolly_invoke; ot->exec = viewdolly_exec; ot->modal = viewdolly_modal; - ot->poll = view3d_rotation_poll; + /* Check rotation because this operator switches from orthographic to perspective view. + * See inline code-comments for details. */ + ot->poll = view3d_zoom_or_dolly_or_rotation_poll; ot->cancel = view3d_navigate_cancel_fn; /* flags */ diff --git a/source/blender/editors/space_view3d/view3d_navigate_view_zoom.cc b/source/blender/editors/space_view3d/view3d_navigate_view_zoom.cc index f850acad53f4..8dc9d5d7adb9 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_view_zoom.cc +++ b/source/blender/editors/space_view3d/view3d_navigate_view_zoom.cc @@ -519,9 +519,9 @@ static int viewzoom_invoke_impl(bContext *C, return OPERATOR_RUNNING_MODAL; } -/* viewdolly_invoke() copied this function, changes here may apply there */ static int viewzoom_invoke(bContext *C, wmOperator *op, const wmEvent *event) { + /* Near duplicate logic in #viewdolly_invoke(), changes here may apply there too. */ return view3d_navigate_invoke_impl(C, op, event, &ViewOpsType_zoom); } diff --git a/source/blender/editors/space_view3d/view3d_navigate_walk.cc b/source/blender/editors/space_view3d/view3d_navigate_walk.cc index ae83cbba5746..29040c9e6fbe 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_walk.cc +++ b/source/blender/editors/space_view3d/view3d_navigate_walk.cc @@ -30,6 +30,8 @@ #include "BKE_report.hh" #include "BKE_screen.hh" +#include "BLT_translation.hh" + #include "WM_api.hh" #include "WM_types.hh" @@ -45,6 +47,8 @@ #include "view3d_intern.hh" /* own include */ #include "view3d_navigate.hh" +#include + #include "BLI_strict_flags.h" /* IWYU pragma: keep. Keep last. */ #ifdef WITH_INPUT_NDOF @@ -667,6 +671,8 @@ static int walkEnd(bContext *C, WalkInfo *walk) win = CTX_wm_window(C); rv3d = walk->rv3d; + ED_workspace_status_text(C, nullptr); + WM_event_timer_remove(CTX_wm_manager(C), win, walk->timer); ED_region_draw_cb_exit(walk->region->runtime->type, walk->draw_handle_pixel); @@ -1461,6 +1467,65 @@ static void walkApply_ndof(bContext *C, WalkInfo *walk, bool is_confirm) /** \name Walk Operator * \{ */ +static void walk_draw_status(bContext *C, wmOperator *op) +{ + WalkInfo *walk = static_cast(op->customdata); + + WorkspaceStatus status(C); + + status.opmodal(IFACE_("Confirm"), op->type, WALK_MODAL_CONFIRM); + status.opmodal(IFACE_("Cancel"), op->type, WALK_MODAL_CANCEL); + + status.opmodal( + "", op->type, WALK_MODAL_DIR_FORWARD, walk->active_directions & WALK_BIT_LOCAL_FORWARD); + status.opmodal("", op->type, WALK_MODAL_DIR_LEFT, walk->active_directions & WALK_BIT_LOCAL_LEFT); + status.opmodal( + "", op->type, WALK_MODAL_DIR_BACKWARD, walk->active_directions & WALK_BIT_LOCAL_BACKWARD); + status.opmodal( + "", op->type, WALK_MODAL_DIR_RIGHT, walk->active_directions & WALK_BIT_LOCAL_RIGHT); + status.item(IFACE_("Move"), ICON_NONE); + + status.opmodal("", op->type, WALK_MODAL_DIR_UP, walk->active_directions & WALK_BIT_GLOBAL_UP); + status.opmodal( + "", op->type, WALK_MODAL_DIR_DOWN, walk->active_directions & WALK_BIT_GLOBAL_DOWN); + status.item(IFACE_("Up/Down"), ICON_NONE); + + status.opmodal( + "", op->type, WALK_MODAL_DIR_LOCAL_UP, walk->active_directions & WALK_BIT_LOCAL_UP); + status.opmodal( + "", op->type, WALK_MODAL_DIR_LOCAL_DOWN, walk->active_directions & WALK_BIT_LOCAL_DOWN); + status.item(IFACE_("Local Up/Down"), ICON_NONE); + + status.opmodal( + IFACE_("Jump"), op->type, WALK_MODAL_JUMP, walk->gravity_state == WALK_GRAVITY_STATE_JUMP); + + status.opmodal(IFACE_("Teleport"), + op->type, + WALK_MODAL_TELEPORT, + walk->teleport.state == WALK_TELEPORT_STATE_ON); + + status.opmodal(IFACE_("Fast"), op->type, WALK_MODAL_FAST_ENABLE, walk->is_fast); + status.opmodal(IFACE_("Slow"), op->type, WALK_MODAL_SLOW_ENABLE, walk->is_slow); + + status.opmodal(IFACE_("Gravity"), + op->type, + WALK_MODAL_GRAVITY_TOGGLE, + walk->navigation_mode == WALK_MODE_GRAVITY); + + status.opmodal("", op->type, WALK_MODAL_ACCELERATE); + status.opmodal("", op->type, WALK_MODAL_DECELERATE); + status.item(fmt::format("{} ({:.2f})", IFACE_("Acceleration"), g_walk.base_speed), ICON_NONE); + + status.opmodal("", op->type, WALK_MODAL_INCREASE_JUMP); + status.opmodal("", op->type, WALK_MODAL_DECREASE_JUMP); + status.item(fmt::format("{} ({:.2f})", IFACE_("Jump Height"), g_walk.jump_height), ICON_NONE); + + status.opmodal(IFACE_("Z Axis Correction"), + op->type, + WALK_MODAL_AXIS_LOCK_Z, + walk->zlock != WALK_AXISLOCK_STATE_OFF); +} + static int walk_invoke(bContext *C, wmOperator *op, const wmEvent *event) { RegionView3D *rv3d = CTX_wm_region_view3d(C); @@ -1479,6 +1544,8 @@ static int walk_invoke(bContext *C, wmOperator *op, const wmEvent *event) walkEvent(walk, event); + walk_draw_status(C, op); + WM_event_add_modal_handler(C, op); return OPERATOR_RUNNING_MODAL; @@ -1505,6 +1572,8 @@ static int walk_modal(bContext *C, wmOperator *op, const wmEvent *event) walkEvent(walk, event); + walk_draw_status(C, op); + #ifdef WITH_INPUT_NDOF if (walk->ndof) { /* 3D mouse overrules [2D mouse + timer]. */ if (event->type == NDOF_MOTION) { diff --git a/source/blender/editors/space_view3d/view3d_select.cc b/source/blender/editors/space_view3d/view3d_select.cc index 8ecf2512829b..e04cd4ac6cae 100644 --- a/source/blender/editors/space_view3d/view3d_select.cc +++ b/source/blender/editors/space_view3d/view3d_select.cc @@ -3061,7 +3061,7 @@ static bool ed_wpaint_vertex_select_pick(bContext *C, struct ClosestCurveDataBlock { blender::StringRef selection_attribute_name; Curves *curves_id = nullptr; - blender::ed::curves::FindClosestData elem = {}; + blender::ed::curves::FindClosestData elem; }; /** @@ -3198,7 +3198,7 @@ struct ClosestGreasePencilDrawing { blender::StringRef selection_attribute_name; int info_index = -1; blender::bke::greasepencil::Drawing *drawing = nullptr; - blender::ed::curves::FindClosestData elem = {}; + blender::ed::curves::FindClosestData elem; }; /** diff --git a/source/blender/editors/transform/transform_gizmo_3d.cc b/source/blender/editors/transform/transform_gizmo_3d.cc index b69c98898895..6aec54ae4205 100644 --- a/source/blender/editors/transform/transform_gizmo_3d.cc +++ b/source/blender/editors/transform/transform_gizmo_3d.cc @@ -758,7 +758,7 @@ static int gizmo_3d_foreach_selected(const bContext *C, FOREACH_EDIT_OBJECT_BEGIN (ob_iter, use_mat_local) { GreasePencil &grease_pencil = *static_cast(ob_iter->data); - float4x4 mat_local; + float4x4 mat_local = float4x4::identity(); if (use_mat_local) { mat_local = obedit->world_to_object() * ob_iter->object_to_world(); } @@ -773,13 +773,16 @@ static int gizmo_3d_foreach_selected(const bContext *C, bke::crazyspace::get_evaluated_grease_pencil_drawing_deformation( *depsgraph, *ob, info.layer_index, info.frame_number); + const float4x4 layer_transform = + mat_local * grease_pencil.layer(info.layer_index).to_object_space(*ob_iter); + IndexMaskMemory memory; const IndexMask selected_points = ed::curves::retrieve_selected_points(curves, memory); const Span positions = deformation.positions; totsel += selected_points.size(); selected_points.foreach_index([&](const int point_i) { - run_coord_with_matrix(positions[point_i], use_mat_local, mat_local.ptr()); + run_coord_with_matrix(positions[point_i], true, layer_transform.ptr()); }); }); } diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.cc b/source/blender/editors/uvedit/uvedit_smart_stitch.cc index 23b207fb3e39..2d168cb8166f 100644 --- a/source/blender/editors/uvedit/uvedit_smart_stitch.cc +++ b/source/blender/editors/uvedit/uvedit_smart_stitch.cc @@ -272,8 +272,8 @@ static void stitch_preview_delete(StitchPreviewer *stitch_preview) static void stitch_update_header(StitchStateContainer *ssc, bContext *C) { WorkspaceStatus status(C); - status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(IFACE_("Confirm"), ICON_MOUSE_LMB); + status.item(IFACE_("Cancel"), ICON_EVENT_ESC); status.item(fmt::format("{} {}", IFACE_("Select"), (ssc->mode == STITCH_VERT ? IFACE_("Vertices") : IFACE_("Edges"))), diff --git a/source/blender/gpu/metal/mtl_backend.mm b/source/blender/gpu/metal/mtl_backend.mm index 8464f54a7b6d..6eff4caadda5 100644 --- a/source/blender/gpu/metal/mtl_backend.mm +++ b/source/blender/gpu/metal/mtl_backend.mm @@ -448,6 +448,16 @@ static int get_num_efficiency_cpu_cores(id device) } #endif + /** Identify support for tile inputs. */ + const bool is_tile_based_arch = (GPU_platform_architecture() == GPU_ARCHITECTURE_TBDR); + if (is_tile_based_arch) { + MTLBackend::capabilities.supports_native_tile_inputs = true; + } + else { + /* NOTE: If emulating tile input reads, we must ensure we also expose position data. */ + MTLBackend::capabilities.supports_native_tile_inputs = false; + } + /* CPU Info */ MTLBackend::capabilities.num_performance_cores = get_num_performance_cpu_cores(ctx->device); MTLBackend::capabilities.num_efficiency_cores = get_num_efficiency_cpu_cores(ctx->device); @@ -537,6 +547,7 @@ static int get_num_efficiency_cpu_cores(id device) * and can be disabled. */ MTLBackend::capabilities.supports_texture_gather = false; MTLBackend::capabilities.supports_texture_atomics = false; + MTLBackend::capabilities.supports_native_tile_inputs = false; } } diff --git a/source/blender/gpu/metal/mtl_capabilities.hh b/source/blender/gpu/metal/mtl_capabilities.hh index bee844af5a78..6efb78049eb6 100644 --- a/source/blender/gpu/metal/mtl_capabilities.hh +++ b/source/blender/gpu/metal/mtl_capabilities.hh @@ -49,6 +49,7 @@ struct MTLCapabilities { bool supports_argument_buffers_tier2 = false; bool supports_texture_gather = false; bool supports_texture_atomics = false; + bool supports_native_tile_inputs = false; /* GPU Family */ bool supports_family_mac1 = false; diff --git a/source/blender/gpu/metal/mtl_framebuffer.mm b/source/blender/gpu/metal/mtl_framebuffer.mm index f99118156206..4f9f0a02e6d4 100644 --- a/source/blender/gpu/metal/mtl_framebuffer.mm +++ b/source/blender/gpu/metal/mtl_framebuffer.mm @@ -476,8 +476,7 @@ void MTLFrameBuffer::subpass_transition_impl(const GPUAttachmentState /*depth_attachment_state*/, Span color_attachment_states) { - const bool is_tile_based_arch = (GPU_platform_architecture() == GPU_ARCHITECTURE_TBDR); - if (!is_tile_based_arch) { + if (!MTLBackend::capabilities.supports_native_tile_inputs) { /* Break render-pass if tile memory is unsupported to ensure current frame-buffer results are * stored. */ context_->main_command_buffer.end_active_command_encoder(); diff --git a/source/blender/gpu/metal/mtl_shader_generator.hh b/source/blender/gpu/metal/mtl_shader_generator.hh index 5cb6b64badd5..8f015292c887 100644 --- a/source/blender/gpu/metal/mtl_shader_generator.hh +++ b/source/blender/gpu/metal/mtl_shader_generator.hh @@ -346,7 +346,6 @@ class MSLGeneratorInterface { blender::Vector constants; /* Fragment tile inputs. */ blender::Vector fragment_tile_inputs; - bool supports_native_tile_inputs; /* Should match vertex outputs, but defined separately as * some shader permutations will not utilize all inputs/outputs. * Final shader uses the intersection between the two sets. */ diff --git a/source/blender/gpu/metal/mtl_shader_generator.mm b/source/blender/gpu/metal/mtl_shader_generator.mm index a787ceb75f71..15242e9499df 100644 --- a/source/blender/gpu/metal/mtl_shader_generator.mm +++ b/source/blender/gpu/metal/mtl_shader_generator.mm @@ -1299,16 +1299,6 @@ MSLUniform uniform(push_constant.type, fragment_outputs.append(mtl_frag_out); } - /** Identify support for tile inputs. */ - const bool is_tile_based_arch = (GPU_platform_architecture() == GPU_ARCHITECTURE_TBDR); - if (is_tile_based_arch) { - supports_native_tile_inputs = true; - } - else { - /* NOTE: If emulating tile input reads, we must ensure we also expose position data. */ - supports_native_tile_inputs = false; - } - /* Fragment tile inputs. */ for (const shader::ShaderCreateInfo::SubpassIn &frag_tile_in : create_info_->subpass_inputs_) { @@ -1329,7 +1319,7 @@ MSLUniform uniform(push_constant.type, fragment_tile_inputs.append(mtl_frag_in); /* If we do not support native tile inputs, generate an image-binding per input. */ - if (!supports_native_tile_inputs) { + if (!MTLBackend::capabilities.supports_native_tile_inputs) { /* Determine type: */ bool is_layered_fb = bool(create_info_->builtins_ & BuiltinBits::LAYER); /* Start with invalid value to detect failure cases. */ @@ -2265,7 +2255,7 @@ static char parameter_delimiter(bool &is_first_parameter) std::stringstream out; /* Native tile read is supported on tile-based architectures (Apple Silicon). */ - if (supports_native_tile_inputs) { + if (MTLBackend::capabilities.supports_native_tile_inputs) { for (const MSLFragmentTileInputAttribute &tile_input : this->fragment_tile_inputs) { out << "\t" << get_shader_stage_instance_name(ShaderStage::FRAGMENT) << "." << tile_input.name << " = " diff --git a/source/blender/gpu/shaders/metal/mtl_shader_defines.msl b/source/blender/gpu/shaders/metal/mtl_shader_defines.msl index 0b9ef95f80af..98c9c852cc2d 100644 --- a/source/blender/gpu/shaders/metal/mtl_shader_defines.msl +++ b/source/blender/gpu/shaders/metal/mtl_shader_defines.msl @@ -199,10 +199,12 @@ struct _mtl_sampler { * it for linear storage. * For instance, for a [2,2,2] texture store in a [6x4] backing texture: * + * \code{.unparsed} * 001122 * 334455 * 667788 * xxxxxx + * \endcode * * The numbers are rows in the 3D texture. */ @@ -216,7 +218,7 @@ struct _mtl_sampler { /* Convert 3D coordinates to the backing 2D texture coordinates. */ int2 to_internal_coord(thread TextureT *texture, IntCoord coord) const { - /* Index of a pixel in the data array. Assuming data layout is scanline. */ + /* Index of a pixel in the data array. Assuming data layout is scan-line. */ uint linear_pixel = uint(coord.x) + uint(coord.y) * texture_size.x + uint(coord.z) * (texture_size.x * texture_size.y); diff --git a/source/blender/gpu/vulkan/render_graph/nodes/vk_node_info.hh b/source/blender/gpu/vulkan/render_graph/nodes/vk_node_info.hh index 8c95d5c0d036..309df25ef520 100644 --- a/source/blender/gpu/vulkan/render_graph/nodes/vk_node_info.hh +++ b/source/blender/gpu/vulkan/render_graph/nodes/vk_node_info.hh @@ -192,7 +192,7 @@ class VKNodeInfo : public NonCopyable { * files it is implemented as a template function. */ template - static void set_node_data(Node &node, Storage & /* storage */, const CreateInfo &create_info); + static void set_node_data(Node &node, Storage &storage, const CreateInfo &create_info); /** * Extract read/write resource dependencies from `create_info` and add them to `node_links`. diff --git a/source/blender/io/alembic/exporter/abc_writer_mesh.cc b/source/blender/io/alembic/exporter/abc_writer_mesh.cc index 9739b84a9572..14b114fc6af7 100644 --- a/source/blender/io/alembic/exporter/abc_writer_mesh.cc +++ b/source/blender/io/alembic/exporter/abc_writer_mesh.cc @@ -16,6 +16,7 @@ #include "BKE_mesh.hh" #include "BKE_mesh_wrapper.hh" #include "BKE_object.hh" +#include "BKE_subdiv.hh" #include "bmesh.hh" #include "bmesh_tools.hh" @@ -481,12 +482,12 @@ static void get_edge_creases(Mesh *mesh, const VArraySpan creases(*attribute); const Span edges = mesh->edges(); for (const int i : edges.index_range()) { - const float sharpness = creases[i]; + const float crease = std::clamp(creases[i], 0.0f, 1.0f); - if (sharpness != 0.0f) { + if (crease != 0.0f) { indices.push_back(edges[i][0]); indices.push_back(edges[i][1]); - sharpnesses.push_back(sharpness); + sharpnesses.push_back(bke::subdiv::crease_to_sharpness(crease)); } } @@ -508,11 +509,11 @@ static void get_vert_creases(Mesh *mesh, } const VArraySpan creases(*attribute); for (const int i : creases.index_range()) { - const float sharpness = creases[i]; + const float crease = std::clamp(creases[i], 0.0f, 1.0f); - if (sharpness != 0.0f) { + if (crease != 0.0f) { indices.push_back(i); - sharpnesses.push_back(sharpness); + sharpnesses.push_back(bke::subdiv::crease_to_sharpness(crease)); } } } diff --git a/source/blender/io/alembic/intern/abc_reader_archive.cc b/source/blender/io/alembic/intern/abc_reader_archive.cc index 521f87d47a44..16206c9aeb47 100644 --- a/source/blender/io/alembic/intern/abc_reader_archive.cc +++ b/source/blender/io/alembic/intern/abc_reader_archive.cc @@ -8,6 +8,8 @@ #include "abc_reader_archive.h" +#include "Alembic/Abc/ArchiveInfo.h" +#include "Alembic/AbcCoreAbstract/MetaData.h" #include "Alembic/AbcCoreLayer/Read.h" #include "Alembic/AbcCoreOgawa/ReadWrite.h" @@ -27,6 +29,7 @@ using Alembic::Abc::ErrorHandler; using Alembic::Abc::Exception; using Alembic::Abc::IArchive; using Alembic::Abc::kWrapExisting; +using Alembic::Abc::MetaData; namespace blender::io::alembic { @@ -142,4 +145,16 @@ Alembic::Abc::IObject ArchiveReader::getTop() return m_archive.getTop(); } +bool ArchiveReader::is_blender_archive_version_prior_44() +{ + const MetaData &abc_metadata = m_archive.getPtr()->getMetaData(); + + /* Was the incoming Archive written by Blender? If so, make the version check. */ + if (abc_metadata.get(Alembic::Abc::kApplicationNameKey) == "Blender") { + return abc_metadata.get("blender_version") < "v4.4"; + } + + return false; +} + } // namespace blender::io::alembic diff --git a/source/blender/io/alembic/intern/abc_reader_archive.h b/source/blender/io/alembic/intern/abc_reader_archive.h index 077654f2fca2..760e55e6ddda 100644 --- a/source/blender/io/alembic/intern/abc_reader_archive.h +++ b/source/blender/io/alembic/intern/abc_reader_archive.h @@ -41,6 +41,9 @@ class ArchiveReader { bool valid() const; Alembic::Abc::IObject getTop(); + + /* Detect if the Archive was written by Blender prior to 4.4. */ + bool is_blender_archive_version_prior_44(); }; } // namespace blender::io::alembic diff --git a/source/blender/io/alembic/intern/abc_reader_mesh.cc b/source/blender/io/alembic/intern/abc_reader_mesh.cc index 311cbbbd6bc0..238383ba7592 100644 --- a/source/blender/io/alembic/intern/abc_reader_mesh.cc +++ b/source/blender/io/alembic/intern/abc_reader_mesh.cc @@ -32,6 +32,7 @@ #include "BKE_material.hh" #include "BKE_mesh.hh" #include "BKE_object.hh" +#include "BKE_subdiv.hh" using Alembic::Abc::FloatArraySamplePtr; using Alembic::Abc::Int32ArraySamplePtr; @@ -913,7 +914,8 @@ static void read_subd_sample(const std::string &iobject_full_name, static void read_vertex_creases(Mesh *mesh, const Int32ArraySamplePtr &indices, - const FloatArraySamplePtr &sharpnesses) + const FloatArraySamplePtr &sharpnesses, + const ImportSettings *settings) { if (!(indices && sharpnesses && indices->size() == sharpnesses->size() && indices->size() != 0)) { @@ -931,13 +933,17 @@ static void read_vertex_creases(Mesh *mesh, continue; } - vertex_crease_data[idx] = (*sharpnesses)[i]; + const float crease = settings->blender_archive_version_prior_44 ? + (*sharpnesses)[i] : + bke::subdiv::sharpness_to_crease((*sharpnesses)[i]); + vertex_crease_data[idx] = std::clamp(crease, 0.0f, 1.0f); } } static void read_edge_creases(Mesh *mesh, const Int32ArraySamplePtr &indices, - const FloatArraySamplePtr &sharpnesses) + const FloatArraySamplePtr &sharpnesses, + const ImportSettings *settings) { if (!(indices && sharpnesses)) { return; @@ -962,8 +968,13 @@ static void read_edge_creases(Mesh *mesh, continue; } - creases.span[*index] = std::clamp((*sharpnesses)[s], 0.0f, 1.0f); + const float crease = settings->blender_archive_version_prior_44 ? + (*sharpnesses)[s] : + bke::subdiv::sharpness_to_crease((*sharpnesses)[s]); + creases.span[*index] = std::clamp(crease, 0.0f, 1.0f); } + + creases.finish(); } /* ************************************************************************** */ @@ -1029,9 +1040,9 @@ void AbcSubDReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelec return; } - read_edge_creases(mesh, sample.getCreaseIndices(), sample.getCreaseSharpnesses()); + read_edge_creases(mesh, sample.getCreaseIndices(), sample.getCreaseSharpnesses(), m_settings); - read_vertex_creases(mesh, sample.getCornerIndices(), sample.getCornerSharpnesses()); + read_vertex_creases(mesh, sample.getCornerIndices(), sample.getCornerSharpnesses(), m_settings); if (m_settings->validate_meshes) { BKE_mesh_validate(mesh, false, false); diff --git a/source/blender/io/alembic/intern/abc_reader_object.h b/source/blender/io/alembic/intern/abc_reader_object.h index cfa7cda48de2..9ba0f0f87adf 100644 --- a/source/blender/io/alembic/intern/abc_reader_object.h +++ b/source/blender/io/alembic/intern/abc_reader_object.h @@ -30,6 +30,8 @@ using Alembic::AbcCoreAbstract::chrono_t; namespace blender::io::alembic { struct ImportSettings { + bool blender_archive_version_prior_44 = false; + bool do_convert_mat = false; float conversion_mat[4][4]; diff --git a/source/blender/io/alembic/intern/alembic_capi.cc b/source/blender/io/alembic/intern/alembic_capi.cc index 8551d3029bf2..7b04915ff83d 100644 --- a/source/blender/io/alembic/intern/alembic_capi.cc +++ b/source/blender/io/alembic/intern/alembic_capi.cc @@ -494,6 +494,7 @@ static void import_file(ImportJobData *data, const char *filepath, float progres data->archives.append(archive); data->settings.cache_file = cache_file; + data->settings.blender_archive_version_prior_44 = archive->is_blender_archive_version_prior_44(); *data->do_update = true; *data->progress += 0.05f * progress_factor; @@ -901,6 +902,7 @@ CacheReader *CacheReader_open_alembic_object(CacheArchiveHandle *handle, ImportSettings settings; settings.is_sequence = is_sequence; + settings.blender_archive_version_prior_44 = archive->is_blender_archive_version_prior_44(); AbcObjectReader *abc_reader = create_reader(iobject, settings); if (abc_reader == nullptr) { /* This object is not supported */ diff --git a/source/blender/io/alembic/tests/abc_export_test.cc b/source/blender/io/alembic/tests/abc_export_test.cc index 9f062b1ce578..09a85eafd457 100644 --- a/source/blender/io/alembic/tests/abc_export_test.cc +++ b/source/blender/io/alembic/tests/abc_export_test.cc @@ -4,7 +4,7 @@ #include "testing/testing.h" -/* Keep first since utildefines defines AT which conflicts with STL */ +/* Keep first since `BLI_utildefines.h` defines `AT` which conflicts with STL. */ #include "exporter/abc_archive.h" #include "BKE_main.hh" diff --git a/source/blender/io/alembic/tests/abc_matrix_test.cc b/source/blender/io/alembic/tests/abc_matrix_test.cc index 6dcbf715f4b2..9ce552d20d07 100644 --- a/source/blender/io/alembic/tests/abc_matrix_test.cc +++ b/source/blender/io/alembic/tests/abc_matrix_test.cc @@ -4,7 +4,7 @@ #include "testing/testing.h" -/* Keep first since utildefines defines AT which conflicts with STL. */ +/* Keep first since `BLI_utildefines.h` defines `AT` which conflicts with STL. */ #include "intern/abc_axis_conversion.h" #include "BLI_math_base.h" diff --git a/source/blender/io/usd/intern/usd_hook.cc b/source/blender/io/usd/intern/usd_hook.cc index 1e1f01af6f42..eb3c8896f937 100644 --- a/source/blender/io/usd/intern/usd_hook.cc +++ b/source/blender/io/usd/intern/usd_hook.cc @@ -6,6 +6,7 @@ #include "usd.hh" #include "usd_asset_utils.hh" +#include "usd_hash_types.hh" #include "usd_reader_prim.hh" #include "usd_reader_stage.hh" #include "usd_writer_material.hh" @@ -26,6 +27,7 @@ #include #include +#include #if PXR_VERSION >= 2411 # include @@ -57,7 +59,7 @@ using namespace boost; namespace blender::io::usd { using USDHookList = std::list>; -using ImportedPrimMap = Map>; +using ImportedPrimMap = Map>; /* USD hook type declarations */ static USDHookList &hook_list() @@ -157,12 +159,12 @@ struct USDSceneImportContext { if (!prim_map_dict) { prim_map_dict = new PYTHON_NS::dict; - prim_map.foreach_item([&](const std::string &path, const Vector &ids) { + prim_map.foreach_item([&](pxr::SdfPath path, const Vector &ids) { if (!prim_map_dict->has_key(path)) { (*prim_map_dict)[path] = PYTHON_NS::list(); } - PYTHON_NS::list list = PYTHON_NS::extract((*prim_map_dict)[path]); + PYTHON_NS::list list = PYTHON_NS::extract((*prim_map_dict)[path]); for (const auto &ptr_rna : ids) { list.append(ptr_rna); } @@ -632,7 +634,7 @@ void call_import_hooks(USDStageReader *archive, ReportList *reports) } } - settings.usd_path_to_mat.foreach_item([&prim_map](const std::string &path, Material *mat) { + settings.usd_path_to_mat.foreach_item([&prim_map](pxr::SdfPath path, Material *mat) { prim_map.lookup_or_add_default(path).append(RNA_id_pointer_create(&mat->id)); }); diff --git a/source/blender/io/usd/intern/usd_reader_material.cc b/source/blender/io/usd/intern/usd_reader_material.cc index cd2667b2a827..15faa964ece7 100644 --- a/source/blender/io/usd/intern/usd_reader_material.cc +++ b/source/blender/io/usd/intern/usd_reader_material.cc @@ -4,6 +4,7 @@ #include "usd_reader_material.hh" #include "usd_asset_utils.hh" +#include "usd_hash_types.hh" #include "usd_reader_utils.hh" #include "usd_utils.hh" @@ -1482,24 +1483,24 @@ void USDMaterialReader::convert_usd_primvar_reader_float2(const pxr::UsdShadeSha link_nodes(ntree, uv_map, "UV", dest_node, dest_socket_name); } -void build_material_map(const Main *bmain, blender::Map *r_mat_map) +void build_material_map(const Main *bmain, blender::Map &r_mat_map) { - BLI_assert_msg(r_mat_map, "..."); + BLI_assert_msg(r_mat_map.is_empty(), "The incoming material map should be empty"); LISTBASE_FOREACH (Material *, material, &bmain->materials) { std::string usd_name = make_safe_name(material->id.name + 2, true); - r_mat_map->lookup_or_add_default(usd_name) = material; + r_mat_map.add_new(usd_name, material); } } Material *find_existing_material(const pxr::SdfPath &usd_mat_path, const USDImportParams ¶ms, const blender::Map &mat_map, - const blender::Map &usd_path_to_mat) + const blender::Map &usd_path_to_mat) { if (params.mtl_name_collision_mode == USD_MTL_NAME_COLLISION_MAKE_UNIQUE) { /* Check if we've already created the Blender material with a modified name. */ - return usd_path_to_mat.lookup_default(usd_mat_path.GetAsString(), nullptr); + return usd_path_to_mat.lookup_default(usd_mat_path, nullptr); } return mat_map.lookup_default(usd_mat_path.GetName(), nullptr); diff --git a/source/blender/io/usd/intern/usd_reader_material.hh b/source/blender/io/usd/intern/usd_reader_material.hh index 67435486f588..133658b6bdd1 100644 --- a/source/blender/io/usd/intern/usd_reader_material.hh +++ b/source/blender/io/usd/intern/usd_reader_material.hh @@ -187,7 +187,7 @@ class USDMaterialReader { * might be modified to be a valid USD identifier, to match material * names in the imported USD. */ -void build_material_map(const Main *bmain, blender::Map *r_mat_map); +void build_material_map(const Main *bmain, blender::Map &r_mat_map); /** * Returns an existing Blender material that corresponds to the USD material with the given path. @@ -205,6 +205,6 @@ void build_material_map(const Main *bmain, blender::Map Material *find_existing_material(const pxr::SdfPath &usd_mat_path, const USDImportParams ¶ms, const blender::Map &mat_map, - const blender::Map &usd_path_to_mat); + const blender::Map &usd_path_to_mat); } // namespace blender::io::usd diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc index bfbc5a2b1d25..ccbadd681bc2 100644 --- a/source/blender/io/usd/intern/usd_reader_mesh.cc +++ b/source/blender/io/usd/intern/usd_reader_mesh.cc @@ -22,6 +22,7 @@ #include "BKE_mesh.hh" #include "BKE_object.hh" #include "BKE_report.hh" +#include "BKE_subdiv.hh" #include "BLI_array.hh" #include "BLI_map.hh" @@ -123,8 +124,7 @@ static void assign_materials(Main *bmain, continue; } - const bool have_import_hook = settings.mat_import_hook_sources.contains( - item.key.GetAsString()); + const bool have_import_hook = settings.mat_import_hook_sources.contains(item.key); /* Add the Blender material. If we have an import hook which can handle this material * we don't import USD Preview Surface shaders. */ @@ -138,18 +138,17 @@ static void assign_materials(Main *bmain, } const std::string mat_name = make_safe_name(assigned_mat->id.name + 2, true); - settings.mat_name_to_mat.lookup_or_add_default(mat_name) = assigned_mat; + settings.mat_name_to_mat.add_new(mat_name, assigned_mat); if (params.mtl_name_collision_mode == USD_MTL_NAME_COLLISION_MAKE_UNIQUE) { /* Record the Blender material we created for the USD material with the given path. */ - settings.usd_path_to_mat.lookup_or_add_default(item.key.GetAsString()) = assigned_mat; + settings.usd_path_to_mat.add_new(item.key, assigned_mat); } if (have_import_hook) { /* Defer invoking the hook to convert the material till we can do so from * the main thread. */ - settings.usd_path_to_mat_for_hook.lookup_or_add_default( - item.key.GetAsString()) = assigned_mat; + settings.usd_path_to_mat_for_hook.add_new(item.key, assigned_mat); } } @@ -415,12 +414,14 @@ void USDMeshReader::read_vertex_creases(Mesh *mesh, const double motionSampleTim /* It is fine to have fewer indices than vertices, but never the other way other. */ if (corner_indices.size() > mesh->verts_num) { - CLOG_WARN(&LOG, "Too many vertex creases for mesh %s", prim_path_.c_str()); + CLOG_WARN(&LOG, "Too many vertex creases for mesh %s", prim_path_.GetAsString().c_str()); return; } if (corner_indices.size() != corner_sharpnesses.size()) { - CLOG_WARN(&LOG, "Vertex crease and sharpness count mismatch for mesh %s", prim_path_.c_str()); + CLOG_WARN(&LOG, + "Vertex crease and sharpness count mismatch for mesh %s", + prim_path_.GetAsString().c_str()); return; } @@ -430,7 +431,10 @@ void USDMeshReader::read_vertex_creases(Mesh *mesh, const double motionSampleTim creases.span.fill(0.0f); for (size_t i = 0; i < corner_indices.size(); i++) { - creases.span[corner_indices[i]] = std::clamp(corner_sharpnesses[i], 0.0f, 1.0f); + const float crease = settings_->blender_stage_version_prior_44 ? + corner_sharpnesses[i] : + bke::subdiv::sharpness_to_crease(corner_sharpnesses[i]); + creases.span[corner_indices[i]] = std::clamp(crease, 0.0f, 1.0f); } creases.finish(); } @@ -451,7 +455,9 @@ void USDMeshReader::read_edge_creases(Mesh *mesh, const double motionSampleTime) /* There should be as many sharpness values as lengths. */ if (crease_lengths.size() != crease_sharpness.size()) { - CLOG_WARN(&LOG, "Edge crease and sharpness count mismatch for mesh %s", prim_path_.c_str()); + CLOG_WARN(&LOG, + "Edge crease and sharpness count mismatch for mesh %s", + prim_path_.GetAsString().c_str()); return; } @@ -481,16 +487,24 @@ void USDMeshReader::read_edge_creases(Mesh *mesh, const double motionSampleTime) if (length < 2) { /* Since each crease must be at least one edge long, each element of this array must be at * least two. If this is not the case it would not be safe to continue. */ - CLOG_WARN(&LOG, "Edge crease length %d is invalid for mesh %s", length, prim_path_.c_str()); + CLOG_WARN(&LOG, + "Edge crease length %d is invalid for mesh %s", + length, + prim_path_.GetAsString().c_str()); break; } if (index_start + length > crease_indices.size()) { - CLOG_WARN(&LOG, "Edge crease lengths are out of bounds for mesh %s", prim_path_.c_str()); + CLOG_WARN(&LOG, + "Edge crease lengths are out of bounds for mesh %s", + prim_path_.GetAsString().c_str()); break; } - const float sharpness = std::clamp(crease_sharpness[i], 0.0f, 1.0f); + float crease = settings_->blender_stage_version_prior_44 ? + crease_sharpness[i] : + bke::subdiv::sharpness_to_crease(crease_sharpness[i]); + crease = std::clamp(crease, 0.0f, 1.0f); for (size_t j = 0; j < length - 1; j++) { const int v1 = crease_indices[index_start + j]; const int v2 = crease_indices[index_start + j + 1]; @@ -499,7 +513,7 @@ void USDMeshReader::read_edge_creases(Mesh *mesh, const double motionSampleTime) continue; } - creases.span[edge_i] = sharpness; + creases.span[edge_i] = crease; } index_start += length; @@ -531,7 +545,9 @@ void USDMeshReader::process_normals_vertex_varying(Mesh *mesh) } if (normals_.size() != mesh->verts_num) { - CLOG_WARN(&LOG, "Vertex varying normals count mismatch for mesh '%s'", prim_path_.c_str()); + CLOG_WARN(&LOG, + "Vertex varying normals count mismatch for mesh '%s'", + prim_path_.GetAsString().c_str()); return; } @@ -548,7 +564,7 @@ void USDMeshReader::process_normals_face_varying(Mesh *mesh) const /* Check for normals count mismatches to prevent crashes. */ if (normals_.size() != mesh->corners_num) { - CLOG_WARN(&LOG, "Loop normal count mismatch for mesh '%s'", prim_path_.c_str()); + CLOG_WARN(&LOG, "Loop normal count mismatch for mesh '%s'", prim_path_.GetAsString().c_str()); return; } @@ -583,7 +599,8 @@ void USDMeshReader::process_normals_uniform(Mesh *mesh) const /* Check for normals count mismatches to prevent crashes. */ if (normals_.size() != mesh->faces_num) { - CLOG_WARN(&LOG, "Uniform normal count mismatch for mesh '%s'", prim_path_.c_str()); + CLOG_WARN( + &LOG, "Uniform normal count mismatch for mesh '%s'", prim_path_.GetAsString().c_str()); return; } @@ -846,7 +863,7 @@ void USDMeshReader::readFaceSetsSample(Main *bmain, Mesh *mesh, const double mot material_indices.finish(); /* Build material name map if it's not built yet. */ if (this->settings_->mat_name_to_mat.is_empty()) { - build_material_map(bmain, &this->settings_->mat_name_to_mat); + build_material_map(bmain, this->settings_->mat_name_to_mat); } utils::assign_materials( bmain, object_, mat_map, this->import_params_, this->prim_.GetStage(), *this->settings_); @@ -915,22 +932,22 @@ void USDMeshReader::read_geometry(bke::GeometrySet &geometry_set, } } -std::string USDMeshReader::get_skeleton_path() const +pxr::SdfPath USDMeshReader::get_skeleton_path() const { /* Make sure we can apply UsdSkelBindingAPI to the prim. * Attempting to apply the API to instance proxies generates * a USD error. */ if (!prim_ || prim_.IsInstanceProxy()) { - return ""; + return {}; } pxr::UsdSkelBindingAPI skel_api(prim_); if (pxr::UsdSkelSkeleton skel = skel_api.GetInheritedSkeleton()) { - return skel.GetPath().GetAsString(); + return skel.GetPath(); } - return ""; + return {}; } std::optional USDMeshReader::get_local_usd_xform(const float time) const diff --git a/source/blender/io/usd/intern/usd_reader_mesh.hh b/source/blender/io/usd/intern/usd_reader_mesh.hh index 7367ed869997..2bed32e053b6 100644 --- a/source/blender/io/usd/intern/usd_reader_mesh.hh +++ b/source/blender/io/usd/intern/usd_reader_mesh.hh @@ -69,7 +69,7 @@ class USDMeshReader : public USDGeomReader { * The returned path is currently used to match armature modifiers with armature * objects during import. */ - std::string get_skeleton_path() const; + pxr::SdfPath get_skeleton_path() const; private: void process_normals_vertex_varying(Mesh *mesh); diff --git a/source/blender/io/usd/intern/usd_reader_prim.cc b/source/blender/io/usd/intern/usd_reader_prim.cc index d33a95295b75..95ba6ea11fbe 100644 --- a/source/blender/io/usd/intern/usd_reader_prim.cc +++ b/source/blender/io/usd/intern/usd_reader_prim.cc @@ -56,7 +56,7 @@ USDPrimReader::USDPrimReader(const pxr::UsdPrim &prim, const USDImportParams &import_params, const ImportSettings &settings) : name_(prim.GetName().GetString()), - prim_path_(prim.GetPrimPath().GetString()), + prim_path_(prim.GetPrimPath()), object_(nullptr), prim_(prim), import_params_(import_params), diff --git a/source/blender/io/usd/intern/usd_reader_prim.hh b/source/blender/io/usd/intern/usd_reader_prim.hh index a18cf5d96e07..d9a062a67e91 100644 --- a/source/blender/io/usd/intern/usd_reader_prim.hh +++ b/source/blender/io/usd/intern/usd_reader_prim.hh @@ -8,6 +8,7 @@ #pragma once #include "usd.hh" +#include "usd_hash_types.hh" #include "BLI_map.hh" #include "BLI_set.hh" @@ -28,6 +29,7 @@ struct ReportList; namespace blender::io::usd { struct ImportSettings { + bool blender_stage_version_prior_44 = false; bool do_convert_mat = false; float conversion_mat[4][4] = {}; @@ -44,18 +46,18 @@ struct ImportSettings { /* Map a USD material prim path to a Blender material. * This map is updated by readers during stage traversal. */ - mutable blender::Map usd_path_to_mat{}; + mutable blender::Map usd_path_to_mat{}; /* Map a material name to Blender material. * This map is updated by readers during stage traversal. */ mutable blender::Map mat_name_to_mat{}; /* Map a USD material prim path to a Blender material to be * converted by invoking the 'on_material_import' USD hook. * This map is updated by readers during stage traversal. */ - mutable blender::Map usd_path_to_mat_for_hook{}; + mutable blender::Map usd_path_to_mat_for_hook{}; /* Set of paths to USD material primitives that can be converted by the * 'on_material_import' USD hook. For efficiency this set should * be populated prior to stage traversal. */ - mutable blender::Set mat_import_hook_sources{}; + mutable blender::Set mat_import_hook_sources{}; /* We use the stage metersPerUnit to convert camera properties from USD scene units to the * correct millimeter scale that Blender uses for camera parameters. */ @@ -73,7 +75,7 @@ class USDPrimReader { protected: std::string name_; - std::string prim_path_; + pxr::SdfPath prim_path_; Object *object_; pxr::UsdPrim prim_; const USDImportParams &import_params_; @@ -130,17 +132,17 @@ class USDPrimReader { { return name_; } - const std::string &prim_path() const + pxr::SdfPath prim_path() const { return prim_path_; } - virtual std::string object_prim_path() const + virtual pxr::SdfPath object_prim_path() const { return prim_path(); } - virtual std::string data_prim_path() const + virtual pxr::SdfPath data_prim_path() const { return prim_path(); } diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc index 8c93ef1bb56e..6dd7371721b5 100644 --- a/source/blender/io/usd/intern/usd_reader_stage.cc +++ b/source/blender/io/usd/intern/usd_reader_stage.cc @@ -108,8 +108,9 @@ static void set_instance_collection( instance_reader->set_instance_collection(collection); } else { - CLOG_WARN( - &LOG, "Couldn't find prototype collection for %s", instance_reader->prim_path().c_str()); + CLOG_WARN(&LOG, + "Couldn't find prototype collection for %s", + instance_reader->prim_path().GetAsString().c_str()); } } @@ -177,11 +178,26 @@ static void find_prefix_to_skip(pxr::UsdStageRefPtr stage, ImportSettings &setti settings.skip_prefix = path; } +/** + * Set compatibility flags if the Stage was written by Blender. + */ +static void determine_blender_compat(pxr::UsdStageRefPtr stage, ImportSettings &settings) +{ + const std::string doc = stage->GetRootLayer()->GetDocumentation(); + + /* Was the incoming Stage written by Blender? If so, set some broad compatibility flags. */ + if (doc.find("Blender v", 0) == 0) { + /* Set flag if the Blender Stage was from before version 4.4. */ + settings.blender_stage_version_prior_44 = doc < "Blender v4.4"; + } +} + USDStageReader::USDStageReader(pxr::UsdStageRefPtr stage, const USDImportParams ¶ms, const std::function &get_cache_file_fn) : stage_(stage), params_(params) { + determine_blender_compat(stage_, settings_); convert_to_z_up(stage_, settings_); find_prefix_to_skip(stage_, settings_); settings_.get_cache_file = get_cache_file_fn; @@ -476,7 +492,7 @@ USDPrimReader *USDStageReader::collect_readers(const pxr::UsdPrim &prim, if (prim.IsA()) { /* Record material path for later processing, if needed, * e.g., when importing all materials. */ - material_paths_.append(prim.GetPath().GetAsString()); + material_paths_.append(prim.GetPath()); /* We don't create readers for materials, so return early. */ return nullptr; @@ -549,7 +565,7 @@ void USDStageReader::process_armature_modifiers() const /* Iterate over the skeleton readers to create the * armature object map, which maps a USD skeleton prim * path to the corresponding armature object. */ - blender::Map usd_path_to_armature; + blender::Map usd_path_to_armature; for (const USDPrimReader *reader : readers_) { if (dynamic_cast(reader) && reader->object()) { usd_path_to_armature.add(reader->prim_path(), reader->object()); @@ -574,14 +590,14 @@ void USDStageReader::process_armature_modifiers() const ArmatureModifierData *amd = reinterpret_cast(md); /* Assign the armature based on the bound USD skeleton path of the skinned mesh. */ - std::string skel_path = mesh_reader->get_skeleton_path(); + pxr::SdfPath skel_path = mesh_reader->get_skeleton_path(); Object *object = usd_path_to_armature.lookup_default(skel_path, nullptr); if (object == nullptr) { BKE_reportf(reports(), RPT_WARNING, "%s: Couldn't find armature object corresponding to USD skeleton %s", __func__, - skel_path.c_str()); + skel_path.GetAsString().c_str()); } amd->object = object; } @@ -593,13 +609,13 @@ void USDStageReader::import_all_materials(Main *bmain) /* Build the material name map if it's not built yet. */ if (settings_.mat_name_to_mat.is_empty()) { - build_material_map(bmain, &settings_.mat_name_to_mat); + build_material_map(bmain, settings_.mat_name_to_mat); } USDMaterialReader mtl_reader(params_, bmain); - for (const std::string &mtl_path : material_paths_) { - pxr::UsdPrim prim = stage_->GetPrimAtPath(pxr::SdfPath(mtl_path)); + for (const pxr::SdfPath mtl_path : material_paths_) { + pxr::UsdPrim prim = stage_->GetPrimAtPath(mtl_path); pxr::UsdShadeMaterial usd_mtl(prim); if (!usd_mtl) { @@ -622,19 +638,19 @@ void USDStageReader::import_all_materials(Main *bmain) BLI_assert_msg(new_mtl, "Failed to create material"); const std::string mtl_name = make_safe_name(new_mtl->id.name + 2, true); - settings_.mat_name_to_mat.lookup_or_add_default(mtl_name) = new_mtl; + settings_.mat_name_to_mat.add_new(mtl_name, new_mtl); if (params_.mtl_name_collision_mode == USD_MTL_NAME_COLLISION_MAKE_UNIQUE) { /* Record the Blender material we created for the USD material with the given path. * This is to prevent importing the material again when assigning materials to objects * elsewhere in the code. */ - settings_.usd_path_to_mat.lookup_or_add_default(prim.GetPath().GetAsString()) = new_mtl; + settings_.usd_path_to_mat.add_new(mtl_path, new_mtl); } if (have_import_hook) { /* Defer invoking the hook to convert the material till we can do so from * the main thread. */ - settings_.usd_path_to_mat_for_hook.lookup_or_add_default(mtl_path) = new_mtl; + settings_.usd_path_to_mat_for_hook.add_new(mtl_path, new_mtl); } } } @@ -657,7 +673,7 @@ void USDStageReader::find_material_import_hook_sources() if (prim.IsA()) { pxr::UsdShadeMaterial usd_mat(prim); if (have_material_import_hook(stage_, usd_mat, params_, reports())) { - settings_.mat_import_hook_sources.add(prim.GetPath().GetAsString()); + settings_.mat_import_hook_sources.add(prim.GetPath()); } } } @@ -671,7 +687,7 @@ void USDStageReader::call_material_import_hooks(Main *bmain) const } for (const auto item : settings_.usd_path_to_mat_for_hook.items()) { - pxr::UsdPrim prim = stage_->GetPrimAtPath(pxr::SdfPath(item.key)); + pxr::UsdPrim prim = stage_->GetPrimAtPath(item.key); pxr::UsdShadeMaterial usd_mtl(prim); if (!usd_mtl) { diff --git a/source/blender/io/usd/intern/usd_reader_stage.hh b/source/blender/io/usd/intern/usd_reader_stage.hh index e16baa50e4ea..c0cb287398e8 100644 --- a/source/blender/io/usd/intern/usd_reader_stage.hh +++ b/source/blender/io/usd/intern/usd_reader_stage.hh @@ -48,7 +48,7 @@ class USDStageReader { /* USD material prim paths encountered during stage * traversal, for importing unused materials. */ - blender::Vector material_paths_; + blender::Vector material_paths_; /* Readers for scene-graph instance prototypes. */ ProtoReaderMap proto_readers_; diff --git a/source/blender/io/usd/intern/usd_reader_xform.cc b/source/blender/io/usd/intern/usd_reader_xform.cc index 3e03bcaaf6ae..bb981a01a98e 100644 --- a/source/blender/io/usd/intern/usd_reader_xform.cc +++ b/source/blender/io/usd/intern/usd_reader_xform.cc @@ -44,10 +44,9 @@ void USDXformReader::read_object_data(Main * /*bmain*/, const double motionSampl object_, nullptr, CONSTRAINT_TYPE_TRANSFORM_CACHE); bTransformCacheConstraint *data = static_cast(con->data); - std::string prim_path = use_parent_xform_ ? prim_.GetParent().GetPath().GetAsString() : - prim_path_; + pxr::SdfPath prim_path = use_parent_xform_ ? prim_.GetParent().GetPath() : prim_path_; - STRNCPY(data->object_path, prim_path.c_str()); + STRNCPY(data->object_path, prim_path.GetAsString().c_str()); data->cache_file = settings_->get_cache_file(); id_us_plus(&data->cache_file->id); @@ -59,9 +58,9 @@ void USDXformReader::read_object_data(Main * /*bmain*/, const double motionSampl set_props(use_parent_xform(), motionSampleTime); } -std::string USDXformReader::object_prim_path() const +pxr::SdfPath USDXformReader::object_prim_path() const { - return get_xformable().GetPrim().GetPath().GetAsString(); + return get_xformable().GetPrim().GetPath(); } void USDXformReader::read_matrix(float r_mat[4][4] /* local matrix */, diff --git a/source/blender/io/usd/intern/usd_reader_xform.hh b/source/blender/io/usd/intern/usd_reader_xform.hh index 582d9dd2a656..b4c13dd9a77e 100644 --- a/source/blender/io/usd/intern/usd_reader_xform.hh +++ b/source/blender/io/usd/intern/usd_reader_xform.hh @@ -40,7 +40,7 @@ class USDXformReader : public USDPrimReader { void create_object(Main *bmain, double motionSampleTime) override; void read_object_data(Main *bmain, double motionSampleTime) override; - std::string object_prim_path() const override; + pxr::SdfPath object_prim_path() const override; void read_matrix(float r_mat[4][4], float time, float scale, bool *r_is_constant) const; diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc b/source/blender/io/usd/intern/usd_writer_mesh.cc index 0cfa4b058f38..d4c94704f779 100644 --- a/source/blender/io/usd/intern/usd_writer_mesh.cc +++ b/source/blender/io/usd/intern/usd_writer_mesh.cc @@ -28,6 +28,7 @@ #include "BKE_mesh_wrapper.hh" #include "BKE_object.hh" #include "BKE_report.hh" +#include "BKE_subdiv.hh" #include "bmesh.hh" #include "bmesh_tools.hh" @@ -529,17 +530,14 @@ static void get_edge_creases(const Mesh *mesh, USDMeshData &usd_mesh_data) const VArraySpan creases(*attribute); const Span edges = mesh->edges(); for (const int i : edges.index_range()) { - const float crease = creases[i]; - if (crease == 0.0f) { - continue; - } + const float crease = std::clamp(creases[i], 0.0f, 1.0f); - const float sharpness = crease >= 1.0f ? pxr::UsdGeomMesh::SHARPNESS_INFINITE : crease; - - usd_mesh_data.crease_vertex_indices.push_back(edges[i][0]); - usd_mesh_data.crease_vertex_indices.push_back(edges[i][1]); - usd_mesh_data.crease_lengths.push_back(2); - usd_mesh_data.crease_sharpnesses.push_back(sharpness); + if (crease != 0.0f) { + usd_mesh_data.crease_vertex_indices.push_back(edges[i][0]); + usd_mesh_data.crease_vertex_indices.push_back(edges[i][1]); + usd_mesh_data.crease_lengths.push_back(2); + usd_mesh_data.crease_sharpnesses.push_back(bke::subdiv::crease_to_sharpness(crease)); + } } } @@ -553,12 +551,11 @@ static void get_vert_creases(const Mesh *mesh, USDMeshData &usd_mesh_data) } const VArraySpan creases(*attribute); for (const int i : creases.index_range()) { - const float crease = creases[i]; + const float crease = std::clamp(creases[i], 0.0f, 1.0f); - if (crease > 0.0f) { - const float sharpness = crease >= 1.0f ? pxr::UsdGeomMesh::SHARPNESS_INFINITE : crease; + if (crease != 0.0f) { usd_mesh_data.corner_indices.push_back(i); - usd_mesh_data.corner_sharpnesses.push_back(sharpness); + usd_mesh_data.corner_sharpnesses.push_back(bke::subdiv::crease_to_sharpness(crease)); } } } diff --git a/source/blender/makesdna/DNA_grease_pencil_types.h b/source/blender/makesdna/DNA_grease_pencil_types.h index 0614288b0ca2..7ec85b8d4972 100644 --- a/source/blender/makesdna/DNA_grease_pencil_types.h +++ b/source/blender/makesdna/DNA_grease_pencil_types.h @@ -551,10 +551,10 @@ typedef struct GreasePencil { blender::bke::greasepencil::LayerGroup &parent_group, blender::StringRef name, bool check_name_is_unique = true); - /** Duplicates the given layer to the top of the root group. */ + /** Duplicates a layer from the same object to the top of the root group. */ blender::bke::greasepencil::Layer &duplicate_layer( const blender::bke::greasepencil::Layer &duplicate_layer); - /** Duplicates the given layer to the top of the given group. */ + /** Duplicates a layer from the same object to the top of the given group. */ blender::bke::greasepencil::Layer &duplicate_layer( blender::bke::greasepencil::LayerGroup &parent_group, const blender::bke::greasepencil::Layer &duplicate_layer); @@ -632,6 +632,10 @@ typedef struct GreasePencil { */ bool remove_frames(blender::bke::greasepencil::Layer &layer, blender::Span frame_numbers); + void copy_frames_from_layer(blender::bke::greasepencil::Layer &dst_layer, + const GreasePencil &src_grease_pencil, + const blender::bke::greasepencil::Layer &src_layer, + const std::optional frame_select = std::nullopt); /** * Adds multiple layers each with its own empty drawing. This can be more efficient than adding * every layer and drawing one by one. diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 09ef207598c5..7c2cb620fd08 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -436,6 +436,12 @@ enum { /** #RegionView3D.viewlock */ enum { + /** + * Used to lock axis views when quad-view is enabled. + * + * \note this implies locking the perspective as these views + * should use an orthographic projection. + */ RV3D_LOCK_ROTATION = (1 << 0), RV3D_BOXVIEW = (1 << 1), RV3D_BOXCLIP = (1 << 2), diff --git a/source/blender/makesrna/intern/rna_ID.cc b/source/blender/makesrna/intern/rna_ID.cc index 3c60d41591a5..31018afde5f8 100644 --- a/source/blender/makesrna/intern/rna_ID.cc +++ b/source/blender/makesrna/intern/rna_ID.cc @@ -654,8 +654,10 @@ IDProperty **rna_PropertyGroup_idprops(PointerRNA *ptr) bool rna_PropertyGroup_unregister(Main * /*bmain*/, StructRNA *type) { +# ifdef WITH_PYTHON /* Ensure that a potential py object representing this RNA type is properly dereferenced. */ BPY_free_srna_pytype(type); +# endif RNA_struct_free(&BLENDER_RNA, type); return true; diff --git a/source/blender/makesrna/intern/rna_action.cc b/source/blender/makesrna/intern/rna_action.cc index 854aedcf9bae..fea15678a7aa 100644 --- a/source/blender/makesrna/intern/rna_action.cc +++ b/source/blender/makesrna/intern/rna_action.cc @@ -326,9 +326,7 @@ static void rna_ActionSlot_name_display_set(PointerRNA *ptr, const char *name) return; } - /* Construct the new internal name, from the slot's type and the given name. */ - const std::string internal_name = slot.identifier_prefix_for_idtype() + name_ref; - action.slot_identifier_define(slot, internal_name); + action.slot_display_name_define(slot, name); } static void rna_ActionSlot_identifier_set(PointerRNA *ptr, const char *identifier) @@ -721,18 +719,19 @@ static void rna_Channelbag_group_remove(ActionChannelbag *dna_channelbag, WM_main_add_notifier(NC_ANIMATION | ND_KEYFRAME | NA_EDITED, nullptr); } -static ActionChannelbag *rna_ActionStrip_channels(ID *dna_action_id, - ActionStrip *self, - const animrig::slot_handle_t slot_handle, - const bool ensure) +static ActionChannelbag *rna_ActionStrip_channelbag(ID *dna_action_id, + ActionStrip *self, + const ActionSlot *dna_slot, + const bool ensure) { animrig::Action &action = reinterpret_cast(dna_action_id)->wrap(); animrig::StripKeyframeData &strip_data = self->wrap().data(action); + const animrig::Slot &slot = dna_slot->wrap(); if (ensure) { - return &strip_data.channelbag_for_slot_ensure(slot_handle); + return &strip_data.channelbag_for_slot_ensure(slot); } - return strip_data.channelbag_for_slot(slot_handle); + return strip_data.channelbag_for_slot(slot); } /** @@ -1554,6 +1553,24 @@ static const EnumPropertyItem *rna_ActionSlot_target_id_type_itemf(bContext * /* return items; } +static void rna_ActionSlot_target_id_type_set(PointerRNA *ptr, int value) +{ + animrig::Action &action = reinterpret_cast(ptr->owner_id)->wrap(); + animrig::Slot &slot = reinterpret_cast(ptr->data)->wrap(); + + if (slot.idtype != 0) { + /* Ignore the assignment. */ + printf( + "WARNING: ignoring assignment to target_id_type of Slot '%s' in Action '%s'. A Slot's " + "target_id_type can only be changed when currently 'UNSPECIFIED'.\n", + slot.identifier, + action.id.name); + return; + } + + action.slot_idtype_define(slot, ID_Type(value)); +} + #else static void rna_def_dopesheet(BlenderRNA *brna) @@ -2007,11 +2024,14 @@ static void rna_def_action_slot(BlenderRNA *brna) prop = RNA_def_property(srna, "target_id_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, nullptr, "idtype"); RNA_def_property_enum_items(prop, default_ActionSlot_target_id_type_items); - RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_ActionSlot_target_id_type_itemf"); + RNA_def_property_enum_funcs( + prop, nullptr, "rna_ActionSlot_target_id_type_set", "rna_ActionSlot_target_id_type_itemf"); + RNA_def_property_update(prop, NC_ANIMATION | ND_ANIMCHAN, "rna_ActionSlot_identifier_update"); RNA_def_property_flag(prop, PROP_ENUM_NO_CONTEXT); - RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text( - prop, "Target ID Type", "Type of data-block that this slot is intended to animate"); + RNA_def_property_ui_text(prop, + "Target ID Type", + "Type of data-block that this slot is intended to animate; can be set " + "when 'UNSPECIFIED' but is otherwise read-only"); RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID); prop = RNA_def_property(srna, "target_id_type_icon", PROP_INT, PROP_NONE); @@ -2226,25 +2246,18 @@ static void rna_def_action_keyframe_strip(BlenderRNA *brna) FunctionRNA *func; PropertyRNA *parm; - /* Strip.channels(...). */ - func = RNA_def_function(srna, "channels", "rna_ActionStrip_channels"); + /* Strip.channelbag(...). */ + func = RNA_def_function(srna, "channelbag", "rna_ActionStrip_channelbag"); RNA_def_function_flag(func, FUNC_USE_SELF_ID); RNA_def_function_ui_description(func, "Find the ActionChannelbag for a specific Slot"); - parm = RNA_def_int(func, - "slot_handle", - 0, - 0, - INT_MAX, - "Slot Handle", - "Number that identifies a specific action slot", - 0, - INT_MAX); + parm = RNA_def_pointer( + func, "slot", "ActionSlot", "Slot", "The slot for which to find the channelbag"); RNA_def_parameter_flags(parm, PropertyFlag(0), PARM_REQUIRED); RNA_def_boolean(func, "ensure", false, "Create if necessary", - "Ensure the channelbag exists for this slot handle, creating it if necessary"); + "Ensure the channelbag exists for this slot, creating it if necessary"); parm = RNA_def_pointer(func, "channels", "ActionChannelbag", "Channels", ""); RNA_def_function_return(func, parm); diff --git a/source/blender/makesrna/intern/rna_asset.cc b/source/blender/makesrna/intern/rna_asset.cc index 356c8d42b940..c3a51cb2d0bf 100644 --- a/source/blender/makesrna/intern/rna_asset.cc +++ b/source/blender/makesrna/intern/rna_asset.cc @@ -465,7 +465,10 @@ const EnumPropertyItem *rna_asset_library_reference_itemf(bContext * /*C*/, PropertyRNA * /*prop*/, bool *r_free) { - const EnumPropertyItem *items = blender::ed::asset::library_reference_to_rna_enum_itemf(true); + const EnumPropertyItem *items = blender::ed::asset::library_reference_to_rna_enum_itemf( + /* Include all valid libraries for the user to choose from. */ + /*include_readonly=*/true, + /*include_current_file=*/true); if (!items) { *r_free = false; return rna_enum_dummy_NULL_items; diff --git a/source/blender/modifiers/intern/MOD_multires.cc b/source/blender/modifiers/intern/MOD_multires.cc index 4e5a624648af..8c4bcb37e91e 100644 --- a/source/blender/modifiers/intern/MOD_multires.cc +++ b/source/blender/modifiers/intern/MOD_multires.cc @@ -301,7 +301,7 @@ static void panel_draw(const bContext *C, Panel *panel) uiLayoutSetPropSep(layout, true); col = uiLayoutColumn(layout, true); - uiItemR(col, ptr, "levels", UI_ITEM_NONE, IFACE_("Level Viewport"), ICON_NONE); + uiItemR(col, ptr, "levels", UI_ITEM_NONE, IFACE_("Levels Viewport"), ICON_NONE); uiItemR(col, ptr, "sculpt_levels", UI_ITEM_NONE, IFACE_("Sculpt"), ICON_NONE); uiItemR(col, ptr, "render_levels", UI_ITEM_NONE, IFACE_("Render"), ICON_NONE); diff --git a/source/blender/nodes/composite/nodes/node_composite_denoise.cc b/source/blender/nodes/composite/nodes/node_composite_denoise.cc index e97259c1754d..3ce1675234a4 100644 --- a/source/blender/nodes/composite/nodes/node_composite_denoise.cc +++ b/source/blender/nodes/composite/nodes/node_composite_denoise.cc @@ -21,6 +21,7 @@ #include "DNA_node_types.h" #include "COM_denoised_auxiliary_pass.hh" +#include "COM_derived_resources.hh" #include "COM_node_operation.hh" #include "COM_utilities.hh" diff --git a/source/blender/nodes/intern/geometry_nodes_dependencies.cc b/source/blender/nodes/intern/geometry_nodes_dependencies.cc index d66c30c6d9a0..cc9076f8ebbe 100644 --- a/source/blender/nodes/intern/geometry_nodes_dependencies.cc +++ b/source/blender/nodes/intern/geometry_nodes_dependencies.cc @@ -108,30 +108,61 @@ static void add_eval_dependencies_from_socket(const bNodeSocket &socket, } } -static bool node_needs_own_transform(const bNode &node) +static void add_eval_dependencies_from_node_data(const bNodeTree &tree, + GeometryNodesEvalDependencies &deps) { - if (node.is_muted()) { - return false; - } - switch (node.type_legacy) { - case GEO_NODE_COLLECTION_INFO: { - const NodeGeometryCollectionInfo &storage = *static_cast( - node.storage); - return storage.transform_space == GEO_NODE_TRANSFORM_SPACE_RELATIVE; + for (const bNode *node : tree.nodes_by_type("GeometryNodeInputObject")) { + if (node->is_muted()) { + continue; } - case GEO_NODE_OBJECT_INFO: { - const NodeGeometryObjectInfo &storage = *static_cast( - node.storage); - return storage.transform_space == GEO_NODE_TRANSFORM_SPACE_RELATIVE; + deps.add_object(reinterpret_cast(node->id)); + } + for (const bNode *node : tree.nodes_by_type("GeometryNodeInputCollection")) { + if (node->is_muted()) { + continue; } - case GEO_NODE_DEFORM_CURVES_ON_SURFACE: - case GEO_NODE_SELF_OBJECT: { + deps.add_generic_id(node->id); + } +} + +static bool has_enabled_nodes_of_type(const bNodeTree &tree, + const blender::StringRefNull type_idname) +{ + for (const bNode *node : tree.nodes_by_type(type_idname)) { + if (!node->is_muted()) { return true; } - default: { - return false; + } + return false; +} + +static void add_own_transform_dependencies(const bNodeTree &tree, + GeometryNodesEvalDependencies &deps) +{ + bool needs_own_transform = false; + + needs_own_transform |= has_enabled_nodes_of_type(tree, "GeometryNodeSelfObject"); + needs_own_transform |= has_enabled_nodes_of_type(tree, "GeometryNodeDeformCurvesOnSurface"); + + for (const bNode *node : tree.nodes_by_type("GeometryNodeCollectionInfo")) { + if (node->is_muted()) { + continue; + } + const NodeGeometryCollectionInfo &storage = *static_cast( + node->storage); + needs_own_transform |= storage.transform_space == GEO_NODE_TRANSFORM_SPACE_RELATIVE; + } + + for (const bNode *node : tree.nodes_by_type("GeometryNodeObjectInfo")) { + if (node->is_muted()) { + continue; } + const NodeGeometryObjectInfo &storage = *static_cast( + node->storage); + needs_own_transform |= storage.transform_space == GEO_NODE_TRANSFORM_SPACE_RELATIVE; } + + deps.needs_own_transform |= needs_own_transform; } static void gather_geometry_nodes_eval_dependencies( @@ -143,9 +174,13 @@ static void gather_geometry_nodes_eval_dependencies( for (const bNodeSocket *socket : ntree.all_sockets()) { add_eval_dependencies_from_socket(*socket, deps); } - deps.needs_active_camera |= !ntree.nodes_by_type("GeometryNodeInputActiveCamera").is_empty(); - deps.time_dependent |= !ntree.nodes_by_type("GeometryNodeSimulationInput").is_empty() || - !ntree.nodes_by_type("GeometryNodeInputSceneTime").is_empty(); + deps.needs_active_camera |= has_enabled_nodes_of_type(ntree, "GeometryNodeInputActiveCamera"); + deps.time_dependent |= has_enabled_nodes_of_type(ntree, "GeometryNodeSimulationInput") || + has_enabled_nodes_of_type(ntree, "GeometryNodeInputSceneTime"); + + add_eval_dependencies_from_node_data(ntree, deps); + add_own_transform_dependencies(ntree, deps); + for (const bNode *node : ntree.group_nodes()) { if (!node->id) { continue; @@ -155,9 +190,6 @@ static void gather_geometry_nodes_eval_dependencies( deps.merge(*group_deps); } } - for (const bNode *node : ntree.all_nodes()) { - deps.needs_own_transform |= node_needs_own_transform(*node); - } } GeometryNodesEvalDependencies gather_geometry_nodes_eval_dependencies_with_cache( diff --git a/source/blender/nodes/intern/socket_usage_inference.cc b/source/blender/nodes/intern/socket_usage_inference.cc index bc5d5a0ed550..f6c633cb6258 100644 --- a/source/blender/nodes/intern/socket_usage_inference.cc +++ b/source/blender/nodes/intern/socket_usage_inference.cc @@ -158,6 +158,12 @@ struct SocketUsageInferencer { void usage_task__input(const SocketInContext &socket) { const NodeInContext node = socket.owner_node(); + + if (node->is_muted()) { + this->usage_task__input__muted_node(socket); + return; + } + switch (node->type_legacy) { case NODE_GROUP: case NODE_CUSTOM_GROUP: { @@ -422,6 +428,19 @@ struct SocketUsageInferencer { this->usage_task__with_dependent_sockets(socket, dependent_sockets, socket.context); } + void usage_task__input__muted_node(const SocketInContext &socket) + { + const NodeInContext node = socket.owner_node(); + Vector dependent_sockets; + for (const bNodeLink &internal_link : node->internal_links()) { + if (internal_link.fromsock != socket.socket) { + continue; + } + dependent_sockets.append(internal_link.tosock); + } + this->usage_task__with_dependent_sockets(socket, dependent_sockets, socket.context); + } + /** * Utility that handles simple cases where a socket is used if any of its dependent sockets is * used. @@ -930,8 +949,14 @@ struct SocketUsageInferencer { if (!animated_inputs_by_node_name.is_empty()) { for (const bNode *node : tree.all_nodes()) { const Span animated_inputs = animated_inputs_by_node_name.lookup(node->name); + const Span input_sockets = node->input_sockets(); for (const int socket_index : animated_inputs) { - const bNodeSocket &socket = node->input_socket(socket_index); + if (socket_index < 0 || socket_index >= input_sockets.size()) { + /* This can happen when the animation data is not immediately updated after a socket is + * removed. */ + continue; + } + const bNodeSocket &socket = *input_sockets[socket_index]; animated_sockets_.add(&socket); } } diff --git a/source/blender/python/intern/bpy_app_translations.cc b/source/blender/python/intern/bpy_app_translations.cc index e7a4389251b4..8de3813e6a59 100644 --- a/source/blender/python/intern/bpy_app_translations.cc +++ b/source/blender/python/intern/bpy_app_translations.cc @@ -139,7 +139,7 @@ static void _build_translations_cache(PyObject *py_messages, const char *locale) BLT_lang_locale_explode( locale, &language, nullptr, nullptr, &language_country, &language_variant); - /* Clear the cached ghash if needed, and create a new one. */ + /* Clear the cached #blender::Map if needed, and create a new one. */ _clear_translations_cache(); get_translations_cache() = std::make_unique>(); @@ -185,7 +185,7 @@ static void _build_translations_cache(PyObject *py_messages, const char *locale) continue; } - /* Iterate over all translations of the found language dict, and populate our ghash cache. */ + /* Iterate over all translations of the found language dict and populate our cache. */ while (PyDict_Next(lang_dict, &ppos, &pykey, &trans)) { const char *msgctxt = nullptr, *msgid = nullptr; bool invalid_key = false; @@ -389,7 +389,7 @@ static PyObject *app_translations_py_messages_unregister(BlenderAppTranslations if (PyDict_Contains(self->py_messages, module_name)) { PyDict_DelItem(self->py_messages, module_name); - /* Clear cached messages ghash! */ + /* Clear cached messages map. */ _clear_translations_cache(); } #else diff --git a/source/blender/render/hydra/render_task_delegate.cc b/source/blender/render/hydra/render_task_delegate.cc index 8062ef606973..ca65d0394f4f 100644 --- a/source/blender/render/hydra/render_task_delegate.cc +++ b/source/blender/render/hydra/render_task_delegate.cc @@ -30,6 +30,10 @@ RenderTaskDelegate::RenderTaskDelegate(pxr::HdRenderIndex *parent_index, task_params_.enableLighting = true; task_params_.alphaThreshold = 0.1f; + /* Disable this so Metal and OpenGL match in Storm render tests, only + * the former seems to use multisample. */ + task_params_.useAovMultiSample = false; + CLOG_INFO(LOG_HYDRA_RENDER, 1, "%s", task_id_.GetText()); } diff --git a/source/blender/windowmanager/WM_types.hh b/source/blender/windowmanager/WM_types.hh index dd0853f098e1..3ef6c9dccb26 100644 --- a/source/blender/windowmanager/WM_types.hh +++ b/source/blender/windowmanager/WM_types.hh @@ -156,7 +156,17 @@ struct wmGenericCallback { /** #wmOperatorType.flag */ enum { - /** Register operators in stack after finishing (needed for redo). */ + /** + * Register operators in stack after finishing (needed for redo). + * + * \note Typically this flag should be enabled along with #OPTYPE_UNDO. + * There is an exception to this, some operators can perform an undo push indirectly. + * (`UI_OT_reset_default_button` for example). + * + * In this case, register needs to be enabled so as not to clear the "Redo" panel, see #133761. + * Unless otherwise stated, any operators that register without the undo flag + * can be assumed to be creating undo steps indirectly (potentially at least). + */ OPTYPE_REGISTER = (1 << 0), /** Do an undo push after the operator runs. */ OPTYPE_UNDO = (1 << 1), diff --git a/source/blender/windowmanager/intern/wm_platform.cc b/source/blender/windowmanager/intern/wm_platform.cc index 94034464ee64..189032f15a83 100644 --- a/source/blender/windowmanager/intern/wm_platform.cc +++ b/source/blender/windowmanager/intern/wm_platform.cc @@ -15,11 +15,13 @@ #elif defined(__APPLE__) /* Pass. */ #else -# include "BLI_string.h" +# ifdef WITH_PYTHON +# include "BLI_string.h" -# include "BKE_context.hh" +# include "BKE_context.hh" -# include "BPY_extern_run.hh" +# include "BPY_extern_run.hh" +# endif #endif /* -------------------------------------------------------------------- */ @@ -54,6 +56,7 @@ bool WM_platform_associate_set(bool do_register, bool all_users, char **r_error_ UNUSED_VARS(do_register, all_users); #else { +# ifdef WITH_PYTHON BPy_RunErrInfo err_info = {}; err_info.use_single_line_error = true; err_info.r_string = r_error_msg; @@ -77,6 +80,10 @@ bool WM_platform_associate_set(bool do_register, bool all_users, char **r_error_ } /* Else `r_error_msg` will be set to a single line exception. */ CTX_free(C_temp); +# else + /* Pass. */ + UNUSED_VARS(do_register, all_users); +# endif } #endif return result; diff --git a/source/creator/creator_args.cc b/source/creator/creator_args.cc index d810dba994a7..df6131ff7018 100644 --- a/source/creator/creator_args.cc +++ b/source/creator/creator_args.cc @@ -2414,11 +2414,11 @@ static const char arg_handle_python_file_run_doc[] = "\tRun the given Python script file."; static int arg_handle_python_file_run(int argc, const char **argv, void *data) { -# ifdef WITH_PYTHON bContext *C = static_cast(data); /* Workaround for scripts not getting a `bpy.context.scene`, causes internal errors elsewhere. */ if (argc > 1) { +# ifdef WITH_PYTHON /* Make the path absolute because its needed for relative linked blends to be found. */ char filepath[FILE_MAX]; STRNCPY(filepath, argv[1]); @@ -2430,16 +2430,15 @@ static int arg_handle_python_file_run(int argc, const char **argv, void *data) fprintf(stderr, "\nError: script failed, file: '%s', exiting.\n", argv[1]); WM_exit(C, app_state.exit_code_on_error.python); } +# else + UNUSED_VARS(C); + fprintf(stderr, "This Blender was built without Python support\n"); +# endif /* WITH_PYTHON */ + return 1; } fprintf(stderr, "\nError: you must specify a filepath after '%s'.\n", argv[0]); return 0; - -# else - UNUSED_VARS(argc, argv, data); - fprintf(stderr, "This Blender was built without Python support\n"); - return 0; -# endif /* WITH_PYTHON */ } static const char arg_handle_python_text_run_doc[] = @@ -2447,11 +2446,11 @@ static const char arg_handle_python_text_run_doc[] = "\tRun the given Python script text block."; static int arg_handle_python_text_run(int argc, const char **argv, void *data) { -# ifdef WITH_PYTHON bContext *C = static_cast(data); /* Workaround for scripts not getting a `bpy.context.scene`, causes internal errors elsewhere. */ if (argc > 1) { +# ifdef WITH_PYTHON Main *bmain = CTX_data_main(C); /* Make the path absolute because its needed for relative linked blends to be found. */ Text *text = (Text *)BKE_libblock_find_name(bmain, ID_TXT, argv[1]); @@ -2469,17 +2468,16 @@ static int arg_handle_python_text_run(int argc, const char **argv, void *data) fprintf(stderr, "\nError: script failed, text: '%s', exiting.\n", argv[1]); WM_exit(C, app_state.exit_code_on_error.python); } +# else + UNUSED_VARS(C); + fprintf(stderr, "This Blender was built without Python support\n"); +# endif /* WITH_PYTHON */ return 1; } - fprintf(stderr, "\nError: you must specify a text block after '%s'.\n", argv[0]); - return 0; -# else - UNUSED_VARS(argc, argv, data); - fprintf(stderr, "This Blender was built without Python support\n"); + fprintf(stderr, "\nError: you must specify a text block after '%s'.\n", argv[0]); return 0; -# endif /* WITH_PYTHON */ } static const char arg_handle_python_expr_run_doc[] = @@ -2487,27 +2485,26 @@ static const char arg_handle_python_expr_run_doc[] = "\tRun the given expression as a Python script."; static int arg_handle_python_expr_run(int argc, const char **argv, void *data) { -# ifdef WITH_PYTHON bContext *C = static_cast(data); /* Workaround for scripts not getting a `bpy.context.scene`, causes internal errors elsewhere. */ if (argc > 1) { +# ifdef WITH_PYTHON bool ok; BPY_CTX_SETUP(ok = BPY_run_string_exec(C, nullptr, argv[1])); if (!ok && app_state.exit_code_on_error.python) { fprintf(stderr, "\nError: script failed, expr: '%s', exiting.\n", argv[1]); WM_exit(C, app_state.exit_code_on_error.python); } +# else + UNUSED_VARS(C); + fprintf(stderr, "This Blender was built without Python support\n"); +# endif /* WITH_PYTHON */ + return 1; } fprintf(stderr, "\nError: you must specify a Python expression after '%s'.\n", argv[0]); return 0; - -# else - UNUSED_VARS(argc, argv, data); - fprintf(stderr, "This Blender was built without Python support\n"); - return 0; -# endif /* WITH_PYTHON */ } static const char arg_handle_python_console_run_doc[] = @@ -2515,18 +2512,16 @@ static const char arg_handle_python_console_run_doc[] = "Run Blender with an interactive console."; static int arg_handle_python_console_run(int /*argc*/, const char ** /*argv*/, void *data) { -# ifdef WITH_PYTHON bContext *C = static_cast(data); - +# ifdef WITH_PYTHON const char *imports[] = {"code", nullptr}; BPY_CTX_SETUP(BPY_run_string_eval(C, imports, "code.interact()")); - - return 0; # else - UNUSED_VARS(data); + UNUSED_VARS(C); fprintf(stderr, "This Blender was built without python support\n"); - return 0; # endif /* WITH_PYTHON */ + + return 0; } static const char arg_handle_python_exit_code_set_doc[] = diff --git a/tests/data b/tests/data index c9a50d5336e8..9213abe4a052 160000 --- a/tests/data +++ b/tests/data @@ -1 +1 @@ -Subproject commit c9a50d5336e81c240e93d1a8371af789122d97e3 +Subproject commit 9213abe4a0524569c3144d8125b9a6039c03222c diff --git a/tests/python/bl_animation_action.py b/tests/python/bl_animation_action.py index fefa9fc1b8d7..086a260bbbb7 100644 --- a/tests/python/bl_animation_action.py +++ b/tests/python/bl_animation_action.py @@ -191,6 +191,60 @@ def test_untyped_slot_assignment_linked(self): "After assignment, the ID type should remain UNSPECIFIED when the Action is linked.") self.assertEqual("XXLegacy Slot", slot.identifier) + def test_untyped_slot_target_id_writing(self): + """Test writing to the target id type of an untyped slot.""" + + action = self._load_legacy_action(link=False) + + slot = action.slots[0] + self.assertEqual('UNSPECIFIED', slot.target_id_type) + self.assertEqual("XXLegacy Slot", slot.identifier) + + slot.target_id_type = 'OBJECT' + + self.assertEqual( + 'OBJECT', + slot.target_id_type, + "Should be able to write to target_id_type of a slot when not yet specified.") + self.assertEqual("OBLegacy Slot", slot.identifier) + + slot.target_id_type = 'MATERIAL' + + self.assertEqual( + 'OBJECT', + slot.target_id_type, + "Should NOT be able to write to target_id_type of a slot when already specified.") + self.assertEqual("OBLegacy Slot", slot.identifier) + + def test_untyped_slot_target_id_writing_with_duplicate_identifier(self): + """Test that writing to the target id type a slot appropriately renames + it when that would otherwise cause its identifier to collide with an + already existing slot.""" + + action = self._load_legacy_action(link=False) + + slot = action.slots[0] + + # Create soon-to-collide slot. + other_slot = action.slots.new('OBJECT', "Legacy Slot") + + # Ensure the setup is correct. + self.assertEqual('UNSPECIFIED', slot.target_id_type) + self.assertEqual("XXLegacy Slot", slot.identifier) + self.assertEqual('OBJECT', other_slot.target_id_type) + self.assertEqual("OBLegacy Slot", other_slot.identifier) + + # Assign the colliding target id type. + slot.target_id_type = 'OBJECT' + + self.assertEqual('OBJECT', slot.target_id_type) + self.assertEqual( + "OBLegacy Slot.001", + slot.identifier, + "Should get renamed to not conflict with existing slots.") + self.assertEqual('OBJECT', other_slot.target_id_type) + self.assertEqual("OBLegacy Slot", other_slot.identifier) + @staticmethod def _load_legacy_action(*, link: bool) -> bpy.types.Action: # At the moment of writing, the only way to create an untyped slot is to @@ -334,6 +388,9 @@ def test_fcurves_new_on_empty_action(self) -> None: slot = self.action.slots[0] layer = self.action.layers[0] + self.assertEqual("Legacy Slot", slot.name_display) + self.assertEqual("Legacy Layer", layer.name) + self.assertEqual(1, len(layer.strips)) strip = layer.strips[0] self.assertEqual('KEYFRAME', strip.type) @@ -371,6 +428,28 @@ def test_groups(self) -> None: self.assertNotIn(group, self.action.groups[:], "A group should be removable via the legacy API") self.assertNotIn(group, channelbag.groups[:], "A group should be removable via the legacy API") + def test_groups_new_on_empty_action(self) -> None: + # Create new group via legacy API, this should create a layer+strip+Channelbag. + group = self.action.groups.new("foo") + + self.assertEqual(1, len(self.action.slots)) + self.assertEqual(1, len(self.action.layers)) + + slot = self.action.slots[0] + layer = self.action.layers[0] + + self.assertEqual("Legacy Slot", slot.name_display) + self.assertEqual("Legacy Layer", layer.name) + + self.assertEqual(1, len(layer.strips)) + strip = layer.strips[0] + self.assertEqual('KEYFRAME', strip.type) + self.assertEqual(1, len(strip.channelbags)) + channelbag = strip.channelbags[0] + self.assertEqual(channelbag.slot_handle, slot.handle) + + self.assertEqual([group], channelbag.groups[:]) + class ChannelbagsTest(unittest.TestCase): def setUp(self): @@ -396,7 +475,11 @@ def test_create_remove_channelbag(self): self.assertEqual([], list(self.strip.channelbags)) def test_ensure_channelbag(self): - channelbag = self.strip.channels(self.slot.handle, ensure=True) + channelbag = self.strip.channelbag(self.slot, ensure=False) + self.assertIsNone(channelbag) + self.assertEqual([], list(self.strip.channelbags)) + + channelbag = self.strip.channelbag(self.slot, ensure=True) self.assertEqual([channelbag], list(self.strip.channelbags)) def test_create_remove_fcurves(self): diff --git a/tests/python/bl_usd_export_test.py b/tests/python/bl_usd_export_test.py index c34145648bd5..db1c28b960c3 100644 --- a/tests/python/bl_usd_export_test.py +++ b/tests/python/bl_usd_export_test.py @@ -784,7 +784,7 @@ def test_export_mesh_subd(self): self.assertEqual(len(usd_vert_sharpness), 7) # A 1.0 crease is INFINITE (10) in USD self.assertAlmostEqual(min(usd_vert_sharpness), 0.1, 5) - self.assertEqual(len([sharp for sharp in usd_vert_sharpness if sharp < 1]), 6) + self.assertEqual(len([sharp for sharp in usd_vert_sharpness if sharp < 10]), 6) self.assertEqual(len([sharp for sharp in usd_vert_sharpness if sharp == 10]), 1) mesh = UsdGeom.Mesh(stage.GetPrimAtPath("/root/crease_edge/crease_edge")) @@ -799,7 +799,7 @@ def test_export_mesh_subd(self): self.assertEqual(len(usd_crease_sharpness), 10) # A 1.0 crease is INFINITE (10) in USD self.assertAlmostEqual(min(usd_crease_sharpness), 0.1, 5) - self.assertEqual(len([sharp for sharp in usd_crease_sharpness if sharp < 1]), 9) + self.assertEqual(len([sharp for sharp in usd_crease_sharpness if sharp < 10]), 9) self.assertEqual(len([sharp for sharp in usd_crease_sharpness if sharp == 10]), 1) def test_export_mesh_triangulate(self): diff --git a/tests/python/bl_usd_import_test.py b/tests/python/bl_usd_import_test.py index 0bd4b2419ca1..265724133025 100644 --- a/tests/python/bl_usd_import_test.py +++ b/tests/python/bl_usd_import_test.py @@ -1698,13 +1698,13 @@ def test_get_prim_map_parent_xform_not_merged(self): bpy.utils.unregister_class(GetPrimMapUsdImportHook) expected_prim_map = { - "/Cube": [bpy.data.objects["Cube.002"], bpy.data.meshes["Cube.002"]], - "/XformThenCube": [bpy.data.objects["XformThenCube"]], - "/XformThenCube/Cube": [bpy.data.objects["Cube"], bpy.data.meshes["Cube"]], - "/XformThenXformCube": [bpy.data.objects["XformThenXformCube"]], - "/XformThenXformCube/XformIntermediate": [bpy.data.objects["XformIntermediate"]], - "/XformThenXformCube/XformIntermediate/Cube": [bpy.data.objects["Cube.001"], bpy.data.meshes["Cube.001"]], - "/Material": [bpy.data.materials["Material"]], + Sdf.Path('/Cube'): [bpy.data.objects["Cube.002"], bpy.data.meshes["Cube.002"]], + Sdf.Path('/XformThenCube'): [bpy.data.objects["XformThenCube"]], + Sdf.Path('/XformThenCube/Cube'): [bpy.data.objects["Cube"], bpy.data.meshes["Cube"]], + Sdf.Path('/XformThenXformCube'): [bpy.data.objects["XformThenXformCube"]], + Sdf.Path('/XformThenXformCube/XformIntermediate'): [bpy.data.objects["XformIntermediate"]], + Sdf.Path('/XformThenXformCube/XformIntermediate/Cube'): [bpy.data.objects["Cube.001"], bpy.data.meshes["Cube.001"]], + Sdf.Path('/Material'): [bpy.data.materials["Material"]], } self.assertDictEqual(prim_map, expected_prim_map) @@ -1716,13 +1716,13 @@ def test_get_prim_map_parent_xform_merged(self): bpy.utils.unregister_class(GetPrimMapUsdImportHook) expected_prim_map = { - "/Cube": [bpy.data.objects["Cube.002"], bpy.data.meshes["Cube.002"]], - "/XformThenCube": [bpy.data.objects["Cube"]], - "/XformThenCube/Cube": [bpy.data.meshes["Cube"]], - "/XformThenXformCube": [bpy.data.objects["XformThenXformCube"]], - "/XformThenXformCube/XformIntermediate": [bpy.data.objects["Cube.001"]], - "/XformThenXformCube/XformIntermediate/Cube": [bpy.data.meshes["Cube.001"]], - "/Material": [bpy.data.materials["Material"]], + Sdf.Path('/Cube'): [bpy.data.objects["Cube.002"], bpy.data.meshes["Cube.002"]], + Sdf.Path('/XformThenCube'): [bpy.data.objects["Cube"]], + Sdf.Path('/XformThenCube/Cube'): [bpy.data.meshes["Cube"]], + Sdf.Path('/XformThenXformCube'): [bpy.data.objects["XformThenXformCube"]], + Sdf.Path('/XformThenXformCube/XformIntermediate'): [bpy.data.objects["Cube.001"]], + Sdf.Path('/XformThenXformCube/XformIntermediate/Cube'): [bpy.data.meshes["Cube.001"]], + Sdf.Path('/Material'): [bpy.data.materials["Material"]], } self.assertDictEqual(prim_map, expected_prim_map) diff --git a/tests/python/cycles_render_tests.py b/tests/python/cycles_render_tests.py index 24e06e2e29d1..fc46178ec495 100644 --- a/tests/python/cycles_render_tests.py +++ b/tests/python/cycles_render_tests.py @@ -63,8 +63,8 @@ BLOCKLIST_OPTIX = [ # Ray intersection precision issues - 'T50164.blend', - 'T43865.blend', + 'big_triangles_50164.blend', + 'big_plane_43865.blend', ] BLOCKLIST_OPTIX_OSL = [ @@ -109,8 +109,8 @@ BLOCKLIST_GPU = [ # Uninvestigated differences with GPU. 'image_log.blend', - 'T40964.blend', - 'T45609.blend', + 'glass_mix_40964.blend', + 'filter_glossy_refraction_45609.blend', 'smoke_color.blend', 'bevel_mblur.blend', # Inconsistency between Embree and Hair primitive on GPU. @@ -124,7 +124,7 @@ 'transparent_shadow_hair.*.blend', "microfacet_hair_orientation.blend", # Inconsistent handling of overlapping objects. - "T41143.blend", + "sobol_uniform_41143.blend", "visibility_particles.blend", # No path guiding on GPU. "guiding*.blend", @@ -137,16 +137,15 @@ def __init__(self, title, output_dir, oiiotool, device=None, blocklist=[], osl=F # tokens, setting the RT suffix to an empty string if its not specified. self.device, suffix = (device.split("-") + [""])[:2] self.use_hwrt = (suffix == "RT") - - super().__init__(title, output_dir, oiiotool, self.device, blocklist) - - if self.use_hwrt: - self.title = self.title + " RT" - self.output_dir = self.output_dir + "_rt" - self.osl = osl + + variation = self.device + if suffix: + variation += ' ' + suffix if self.osl: - self.title += " OSL" + variation += ' OSL' + + super().__init__(title, output_dir, oiiotool, variation, blocklist) def _get_render_arguments(self, arguments_cb, filepath, base_output_filepath): return arguments_cb(filepath, base_output_filepath, self.use_hwrt, self.osl) diff --git a/tests/python/modules/render_report.py b/tests/python/modules/render_report.py index 1117a7dcfa26..86fe76b4bc36 100644 --- a/tests/python/modules/render_report.py +++ b/tests/python/modules/render_report.py @@ -96,8 +96,12 @@ class Report: def __init__(self, title, output_dir, oiiotool, variation=None, blocklist=[]): self.title = title - self.output_dir = output_dir - self.global_dir = os.path.dirname(output_dir) + + # Normalize the path to avoid output_dir and global_dir being the same when a directory + # ends with a trailing slash. + self.output_dir = os.path.normpath(output_dir) + self.global_dir = os.path.dirname(self.output_dir) + self.reference_dir = 'reference_renders' self.reference_override_dir = None self.oiiotool = oiiotool @@ -184,6 +188,7 @@ def _engine_title(self, engine, variation): def _engine_path(self, path, variation): if variation: + variation = variation.replace(' ', '_') return os.path.join(path, variation.lower()) else: return path diff --git a/tests/python/storm_render_tests.py b/tests/python/storm_render_tests.py index 3700986f9da2..3a7add6c7aad 100644 --- a/tests/python/storm_render_tests.py +++ b/tests/python/storm_render_tests.py @@ -10,23 +10,51 @@ # Unsupported or broken scenarios for the Storm render engine BLOCKLIST_HYDRA = [ - # Corrupted output - "image_half.*.blend", - "image_packed_float.*.blend", - "image_packed_half.*.blend", + # Corrupted output around borders + "image.*_half.*.blend", + "image.*_float.*.blend", # Differences between devices/drivers causing this to fail "image.blend", ] BLOCKLIST_USD = [ - # Corrupted output - "image_half.*.blend", - "image_packed_float.*.blend", - "image_packed_half.*.blend", + # Corrupted output around borders + "image.*_half.*.blend", + "image.*_float.*.blend", # Nondeterministic exporting of lights in the scene "light_tree_node_subtended_angle.blend", ] +# Metal support in Storm is no as good as OpenGL, though this needs to be +# retested with newer OpenUSD versions as there are improvements. +BLOCKLIST_METAL = [ + # Thinfilm + "metallic.*physical.blend", + "metallic.*f82.blend", + "principled.*thinfilm.*.blend", + # Transparency + "ray_portal.blend", + "transparent.blend", + "transparent_shadow.blend", + "shadow_all_max_bounces.blend", + "underwater_caustics.blend", + "shadow_link_transparency.blend", + "principled_bsdf_transmission.blend", + # Volume + "light_link_surface_in_volume.blend", + "openvdb.*.blend", + "principled_bsdf_interior", + # Other + "bump.*.blend", + "bevel.*.blend", + "principled_bsdf_coat.blend", + "principled_bsdf_emission.blend", + "white_noise.*.blend", + "musgrave_multifractal.*.blend", + "autosmooth_custom_normals.blend", + "diffuse_normal_map.blend", +] + def setup(): import bpy @@ -89,12 +117,14 @@ def main(): from modules import render_report + blocklist = BLOCKLIST_METAL if sys.platform == "darwin" else [] + if args.export_method == 'HYDRA': - report = render_report.Report("Storm Hydra", args.outdir, args.oiiotool, blocklist=BLOCKLIST_HYDRA) + report = render_report.Report("Storm Hydra", args.outdir, args.oiiotool, blocklist=blocklist + BLOCKLIST_HYDRA) report.set_reference_dir("storm_hydra_renders") report.set_compare_engine('cycles', 'CPU') else: - report = render_report.Report("Storm USD", args.outdir, args.oiiotool, blocklist=BLOCKLIST_USD) + report = render_report.Report("Storm USD", args.outdir, args.oiiotool, blocklist=blocklist + BLOCKLIST_USD) report.set_reference_dir("storm_usd_renders") report.set_compare_engine('storm_hydra') diff --git a/tools/utils_maintenance/trailing_space_clean.py b/tools/utils_maintenance/trailing_space_clean.py index 549f4469ec05..aee63881c713 100755 --- a/tools/utils_maintenance/trailing_space_clean.py +++ b/tools/utils_maintenance/trailing_space_clean.py @@ -21,10 +21,15 @@ ".glsl", # Python ".py", + # TOML. + ".toml", # Text (also CMake) ".txt", ".cmake", ".rst", # MS-Windows Scripts. ".bat", ".cmd", + # HTML, XML. + ".html", + ".xml", )